diff --git a/tutorials/mesh/cvMesh/carWheel/Allclean b/tutorials/mesh/cvMesh/carWheel/Allclean new file mode 100755 index 0000000000..d935d1d402 --- /dev/null +++ b/tutorials/mesh/cvMesh/carWheel/Allclean @@ -0,0 +1,24 @@ +#!/bin/sh +cd ${0%/*} || exit 1 # run from this directory + +# Source tutorial run functions +. $WM_PROJECT_DIR/bin/tools/CleanFunctions + +rm -r \ + constant/extendedFeatureEdgeMesh \ + constant/internalDelaunayVertices \ + constant/ccx constant/ccy constant/ccz \ + constant/targetCellSize \ + constant/tetDualMesh \ + constant/polyMesh/boundary \ + constant/triSurface/m_car01_wheel_merge.obj \ + constant/triSurface/m_car01_wheel_merge_orient.eMesh \ + constant/triSurface/m_car01_wheel_merge_orient.obj \ + constant/triSurface/small_orient.eMesh \ + constant/triSurface/small_orient.stl \ + > /dev/null 2>&1 +rm constant/triSurface/*.eMesh > /dev/null 2>&1 + +cleanCase + +# ----------------------------------------------------------------- end-of-file diff --git a/tutorials/mesh/cvMesh/carWheel/Allrun b/tutorials/mesh/cvMesh/carWheel/Allrun new file mode 100755 index 0000000000..85df7d1374 --- /dev/null +++ b/tutorials/mesh/cvMesh/carWheel/Allrun @@ -0,0 +1,48 @@ +#!/bin/sh +cd ${0%/*} || exit 1 # run from this directory + +# Source tutorial run functions +. $WM_PROJECT_DIR/bin/tools/RunFunctions + +surfacePointMerge constant/triSurface/m_car01_wheel.obj \ + 1e-2 constant/triSurface/m_car01_wheel_merge.obj \ + > log.surfacePointMerge 2>&1 + +# Orient so point to be meshed is inside surface +surfaceOrient \ + constant/triSurface/m_car01_wheel_merge.obj \ + -inside -usePierceTest '(-100 0 170)' \ + constant/triSurface/m_car01_wheel_merge_orient.obj \ + > log.surfaceOrient.m_car01 2>&1 + +# Same for outside +surfaceOrient \ + constant/triSurface/small.stl \ + -inside -usePierceTest '(-100 0 170)' \ + constant/triSurface/small_orient.stl \ + > log.surfaceOrient.small 2>&1 + +# Extract feature edges and points +runApplication surfaceFeatureExtract \ + constant/triSurface/m_car01_wheel_merge_orient.obj \ + m_car01 -includedAngle 165 -writeObj +mv log.surfaceFeatureExtract log.surfaceFeatureExtract.m_car01 + +unset FOAM_SIGFPE +runApplication surfaceFeatureExtract \ + constant/triSurface/small_orient.stl \ + small -includedAngle 125 -writeObj +mv log.surfaceFeatureExtract log.surfaceFeatureExtract.small + +# Generate aligned points (in constant/internalDelaunayVertices) and a +# mesh from that. +runApplication cvMesh + +# Generate some sets for a bit of mesh inspection +runApplication topoSet -constant -time 0:100 + +# And a field for thresholding +writeCellCentres -constant + + +# ----------------------------------------------------------------- end-of-file diff --git a/tutorials/mesh/cvMesh/carWheel/constant/triSurface/m_car01_wheel.obj b/tutorials/mesh/cvMesh/carWheel/constant/triSurface/m_car01_wheel.obj new file mode 100644 index 0000000000..539c92c71a --- /dev/null +++ b/tutorials/mesh/cvMesh/carWheel/constant/triSurface/m_car01_wheel.obj @@ -0,0 +1,2502 @@ +# Wavefront OBJ file +# Exported by Misfit Model 3D 1.3.7 +# Fri Jun 24 18:15:04 2011 + +# 321 Vertices +v -83.162033 87.548454 34.264919 +v -83.162041 87.751884 35.810173 +v -83.162041 88.348335 37.250122 +v -83.162041 89.297142 38.486633 +v -83.162041 90.533638 39.435444 +v -83.162041 91.973595 40.031887 +v -83.162041 93.518852 40.235325 +v -83.162041 95.06411 40.031887 +v -83.162041 96.504051 39.435444 +v -83.162041 97.740562 38.486633 +v -83.162041 98.689369 37.250122 +v -83.162041 99.28582 35.810173 +v -83.162041 99.489265 34.264919 +v -83.162041 99.28582 32.719666 +v -83.162041 98.689369 31.279718 +v -83.162041 97.740562 30.043205 +v -83.162041 96.504051 29.094397 +v -83.162041 95.06411 28.497952 +v -83.162041 93.518852 28.294514 +v -83.162041 91.973595 28.497952 +v -83.162041 90.533653 29.094397 +v -83.162041 89.297142 30.043205 +v -83.162041 88.348335 31.279716 +v -83.162041 87.751884 32.719666 +v -84.033554 87.548454 34.264919 +v -84.033554 87.751884 35.810173 +v -84.033554 88.348335 37.250122 +v -84.033554 89.297142 38.486633 +v -84.033562 90.533638 39.435444 +v -84.033554 91.973595 40.031887 +v -84.033554 93.518852 40.235325 +v -84.033562 95.06411 40.031887 +v -84.033562 96.504051 39.435444 +v -84.033562 97.740562 38.486633 +v -84.033562 98.689369 37.250122 +v -84.033562 99.28582 35.810173 +v -84.033562 99.489265 34.264919 +v -84.033562 99.28582 32.719666 +v -84.033562 98.689369 31.279718 +v -84.033562 97.740562 30.043205 +v -84.033554 96.504051 29.094397 +v -84.033562 95.06411 28.497952 +v -84.033562 93.518852 28.294514 +v -84.033554 91.973595 28.497952 +v -84.033554 90.533653 29.094397 +v -84.033554 89.297142 30.043205 +v -84.033554 88.348335 31.279716 +v -84.033554 87.751884 32.719666 +v -83.162003 74.273323 34.264915 +v -83.162003 74.9291 39.246021 +v -83.162003 76.851738 43.887676 +v -83.162003 79.91021 47.87355 +v -83.162003 83.89608 50.932026 +v -83.162003 88.537743 52.85466 +v -83.161995 93.518852 53.510441 +v -83.161995 98.499962 52.854668 +v -83.161995 103.141609 50.932026 +v -83.161995 107.127495 47.873562 +v -83.161995 110.185966 43.88768 +v -83.161995 112.108604 39.246029 +v -83.161995 112.764381 34.264923 +v -83.161995 112.108604 29.283815 +v -83.161995 110.185966 24.642164 +v -83.161995 107.127495 20.656282 +v -83.161995 103.141609 17.597811 +v -83.161995 98.499962 15.675178 +v -83.161995 93.518852 15.019401 +v -83.161995 88.537743 15.675175 +v -83.161995 83.896095 17.597807 +v -83.161995 79.91021 20.656279 +v -83.162003 76.851738 24.642157 +v -83.161995 74.9291 29.283812 +v -83.162003 87.751884 35.810173 +v -83.162003 87.548454 34.264915 +v -83.162003 88.348335 37.250122 +v -83.162003 89.297142 38.486629 +v -83.162003 90.533638 39.43544 +v -83.162003 91.973595 40.031887 +v -83.162003 93.518852 40.235325 +v -83.162003 95.06411 40.031887 +v -83.162003 96.504051 39.435444 +v -83.162003 97.740562 38.486633 +v -83.162003 98.689369 37.250122 +v -83.162003 99.28582 35.810173 +v -83.162003 99.489265 34.264919 +v -83.162003 99.28582 32.719666 +v -83.162003 98.689369 31.279718 +v -83.162003 97.740562 30.043203 +v -83.162003 96.504051 29.094397 +v -83.162003 95.06411 28.497952 +v -83.162003 93.518852 28.294514 +v -83.162003 91.973595 28.497952 +v -83.162003 90.533638 29.094397 +v -83.162003 89.297142 30.043205 +v -83.162003 88.348335 31.279716 +v -83.162003 87.751884 32.719666 +v -85.549683 93.518852 34.264919 +v -85.549683 97.496178 36.56123 +v -85.549683 97.954979 35.453579 +v -85.549683 90.27137 31.017447 +v -85.549683 89.541527 31.968609 +v -85.549683 89.08271 33.076263 +v -85.549683 88.926231 34.264919 +v -85.549683 89.08271 35.453575 +v -85.549683 89.541527 36.56123 +v -85.549683 90.27137 37.51239 +v -85.549683 91.222542 38.242245 +v -85.549683 92.330193 38.70105 +v -85.549683 93.518852 38.85754 +v -85.549683 94.707497 38.70105 +v -85.549683 95.815163 38.242245 +v -85.549683 96.766319 37.512394 +v -85.549683 98.111473 34.264919 +v -85.549683 97.954979 33.076263 +v -85.549683 97.496178 31.968611 +v -85.549683 96.766319 31.017448 +v -85.549683 95.815163 30.287594 +v -85.549683 94.707512 29.828791 +v -85.549683 93.518852 29.6723 +v -85.549683 92.330193 29.828791 +v -85.549683 91.222542 30.287594 +v -78.082001 78.155418 38.381535 +v -78.082001 87.751884 35.810173 +v -78.082001 77.613457 34.264915 +v -78.082001 90.533638 39.43544 +v -78.082001 85.566154 48.039391 +v -78.082001 89.402229 49.628345 +v -78.082001 91.973595 40.031887 +v -78.082001 93.518852 50.170311 +v -78.082001 93.518852 40.235325 +v -78.082001 97.63546 49.628345 +v -78.082001 95.06411 40.031887 +v -78.082001 98.689369 37.250122 +v -78.082001 107.293312 42.217617 +v -78.082001 108.882271 38.381538 +v -78.082001 99.28582 35.810173 +v -78.082001 109.424232 34.264923 +v -78.082001 99.489265 34.264919 +v -78.082001 108.882286 30.148306 +v -78.082001 99.28582 32.719666 +v -78.082001 96.504051 29.094397 +v -78.082001 101.47155 20.49045 +v -78.082001 97.635475 18.901495 +v -78.082001 95.06411 28.497952 +v -78.082001 93.518852 18.359531 +v -78.082001 93.518852 28.294514 +v -78.082001 89.402229 18.901491 +v -78.082001 91.973595 28.497952 +v -78.082001 88.348335 31.279716 +v -78.082001 79.744377 26.312225 +v -78.082001 78.155418 30.1483 +v -78.082001 87.751884 32.719666 +v -78.082001 87.548454 34.264915 +v -62.720341 72.01548 34.264912 +v -62.720341 72.748177 39.830395 +v -62.720341 74.89637 45.016598 +v -62.720341 78.313667 49.470097 +v -62.720341 82.767151 52.887379 +v -62.720341 87.953354 55.035576 +v -62.720341 93.518845 55.768288 +v -62.720345 99.084328 55.035576 +v -62.720345 104.270546 52.887379 +v -62.720345 108.724022 49.470093 +v -62.720345 112.141319 45.016598 +v -62.720348 114.289513 39.830391 +v -62.720348 115.022224 34.264908 +v -62.720348 114.289513 28.699427 +v -62.720348 112.141319 23.513222 +v -62.720348 108.724022 19.059727 +v -62.720348 104.270546 15.642443 +v -62.720348 99.084343 13.494248 +v -62.720345 93.518845 12.761539 +v -62.720345 87.953354 13.494246 +v -62.720345 82.767151 15.642445 +v -62.720345 78.31366 19.059732 +v -62.720341 74.896378 23.513229 +v -62.720341 72.748177 28.69943 +v -62.720345 61.263786 34.264912 +v -62.720341 62.362846 42.613136 +v -62.720341 65.585136 50.392445 +v -62.720337 70.711082 57.072685 +v -62.720341 77.391319 62.198616 +v -62.720341 85.170616 65.420906 +v -62.720341 93.518845 66.519974 +v -62.720341 101.867088 65.420914 +v -62.720345 109.64637 62.198612 +v -62.720345 116.326622 57.072681 +v -62.720348 121.452553 50.392441 +v -62.720348 124.674858 42.613132 +v -62.720348 125.773918 34.264908 +v -62.720348 124.674858 25.916685 +v -62.720348 121.452553 18.137381 +v -62.720348 116.326622 11.457137 +v -62.720348 109.646385 6.331209 +v -62.720348 101.867088 3.108914 +v -62.720348 93.518845 2.009853 +v -62.720345 85.170624 3.108915 +v -62.720352 77.391312 6.331211 +v -62.720341 70.711082 11.457143 +v -62.720345 65.585136 18.137386 +v -62.720352 62.362846 25.916693 +v -64.222366 59.328484 34.264915 +v -64.222366 60.493477 43.114029 +v -64.222366 63.909111 51.360096 +v -64.222366 69.342598 58.441151 +v -64.222359 76.423668 63.874641 +v -64.222359 84.669731 67.290268 +v -64.222359 93.518845 68.455276 +v -64.222351 102.367958 67.290276 +v -64.222351 110.614021 63.874634 +v -64.222359 117.695091 58.441151 +v -64.222366 123.128578 51.360092 +v -64.222366 126.544212 43.114025 +v -64.222366 127.709221 34.264912 +v -64.222374 126.544212 25.415791 +v -64.222374 123.128578 17.169729 +v -64.222374 117.695091 10.08867 +v -64.222374 110.614021 4.655186 +v -64.222374 102.367958 1.239552 +v -64.222374 93.518845 0.074547 +v -64.222382 84.669724 1.239556 +v -64.222374 76.42366 4.65519 +v -64.222374 69.34259 10.088677 +v -64.222374 63.909107 17.169735 +v -64.222366 60.493473 25.4158 +v -84.326317 59.328476 34.264915 +v -84.326317 60.493473 43.114029 +v -84.326309 63.909107 51.3601 +v -84.326309 69.34259 58.441151 +v -84.326317 76.42366 63.874638 +v -84.326309 84.669724 67.290268 +v -84.326309 93.518845 68.455276 +v -84.326309 102.367958 67.290268 +v -84.326309 110.614021 63.874638 +v -84.326309 117.695091 58.441151 +v -84.326317 123.128578 51.360092 +v -84.326317 126.544212 43.114025 +v -84.326317 127.709213 34.264912 +v -84.326324 126.544205 25.415792 +v -84.326324 123.128571 17.169727 +v -84.326324 117.695084 10.088671 +v -84.326324 110.614014 4.655188 +v -84.326332 102.36795 1.239554 +v -84.326332 93.518845 0.07455 +v -84.326324 84.669724 1.239558 +v -84.326324 76.42366 4.655192 +v -84.326324 69.34259 10.088676 +v -84.326317 63.909107 17.169735 +v -84.326317 60.493473 25.415802 +v -85.828339 61.263779 34.264915 +v -85.828339 62.362843 42.61314 +v -85.828331 65.585129 50.392448 +v -85.828331 70.711075 57.072689 +v -85.828339 77.391312 62.198616 +v -85.828339 85.170609 65.420914 +v -85.828339 93.518845 66.519974 +v -85.828339 101.867088 65.420914 +v -85.828339 109.64637 62.198616 +v -85.828339 116.326622 57.072685 +v -85.828346 121.452553 50.392445 +v -85.828346 124.67485 42.613136 +v -85.828346 125.773911 34.264912 +v -85.828346 124.67485 25.916687 +v -85.828346 121.452545 18.137381 +v -85.828346 116.326614 11.457138 +v -85.828346 109.646378 6.33121 +v -85.828346 101.867081 3.108916 +v -85.828346 93.518845 2.009852 +v -85.828339 85.170624 3.108918 +v -85.828339 77.391312 6.331213 +v -85.828339 70.711075 11.457146 +v -85.828339 65.585144 18.137388 +v -85.828339 62.362839 25.916695 +v -85.828339 72.015472 34.264915 +v -85.828339 72.748169 39.830399 +v -85.828339 74.896362 45.016598 +v -85.828339 78.31366 49.470097 +v -85.828339 82.767151 52.887383 +v -85.828339 87.953354 55.03558 +v -85.828339 93.518845 55.768291 +v -85.828339 99.084328 55.03558 +v -85.828339 104.270546 52.887383 +v -85.828339 108.724022 49.470093 +v -85.828339 112.141312 45.016598 +v -85.828339 114.289513 39.830395 +v -85.828346 115.022224 34.264912 +v -85.828346 114.289505 28.699429 +v -85.828346 112.141312 23.513224 +v -85.828346 108.724045 19.059731 +v -85.828346 104.270546 15.642446 +v -85.828339 99.084343 13.49425 +v -85.828339 93.518845 12.761539 +v -85.828339 87.953354 13.49425 +v -85.828339 82.767151 15.642447 +v -85.828339 78.31366 19.059734 +v -85.828339 74.896378 23.513229 +v -85.828339 72.748169 28.699434 +v -83.162033 74.273315 34.264915 +v -83.162033 74.929092 39.246021 +v -83.162033 76.85173 43.887676 +v -83.162033 79.910202 47.87355 +v -83.162033 83.896072 50.932022 +v -83.162025 88.537735 52.85466 +v -83.162025 93.518845 53.510437 +v -83.162025 98.499962 52.85466 +v -83.162025 103.141609 50.932018 +v -83.162025 107.127495 47.87355 +v -83.162025 110.185966 43.887672 +v -83.162033 112.108604 39.246017 +v -83.162033 112.764381 34.264915 +v -83.162033 112.108597 29.283808 +v -83.162033 110.185966 24.642155 +v -83.162033 107.127495 20.656277 +v -83.162033 103.141609 17.597805 +v -83.162025 98.499962 15.675174 +v -83.162025 93.518845 15.019399 +v -83.162025 88.537735 15.675176 +v -83.162025 83.896072 17.597809 +v -83.162025 79.910202 20.656281 +v -83.162025 76.85173 24.642159 +v -83.162025 74.929092 29.283813 + +# 1626 Texture Coordinates +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 0.0 1.0 +vt 0.0 0.0 +vt 1.0 0.0 +vt 1.0 0.0 +vt 0.0 0.0 +vt 0.0 1.0 +vt 1.0 0.0 +vt 0.0 0.0 +vt 0.0 1.0 +vt 1.0 0.0 +vt 0.0 0.0 +vt 0.0 1.0 +vt 1.0 0.0 +vt 0.0 0.0 +vt 0.0 1.0 +vt 1.0 0.0 +vt 0.0 0.0 +vt 0.0 1.0 +vt 1.0 0.0 +vt 0.0 0.0 +vt 0.0 1.0 +vt 1.0 0.0 +vt 0.0 0.0 +vt 0.0 1.0 +vt 1.0 0.0 +vt 0.0 0.0 +vt 0.0 1.0 +vt 1.0 0.0 +vt 0.0 0.0 +vt 0.0 1.0 +vt 1.0 0.0 +vt 0.0 0.0 +vt 0.0 1.0 +vt 1.0 0.0 +vt 0.0 0.0 +vt 0.0 1.0 +vt 1.0 0.0 +vt 0.0 0.0 +vt 0.0 1.0 +vt 1.0 0.0 +vt 0.0 0.0 +vt 0.0 1.0 +vt 1.0 0.0 +vt 0.0 0.0 +vt 0.0 1.0 +vt 1.0 0.0 +vt 0.0 0.0 +vt 0.0 1.0 +vt 1.0 0.0 +vt 0.0 0.0 +vt 0.0 1.0 +vt 1.0 0.0 +vt 0.0 0.0 +vt 0.0 1.0 +vt 1.0 0.0 +vt 0.0 0.0 +vt 0.0 1.0 +vt 1.0 0.0 +vt 0.0 0.0 +vt 0.0 1.0 +vt 1.0 0.0 +vt 0.0 0.0 +vt 0.0 1.0 +vt 1.0 0.0 +vt 0.0 0.0 +vt 0.0 1.0 +vt 1.0 0.0 +vt 0.0 0.0 +vt 0.0 1.0 + +# ungrouped, 542 grouped triangles + +o ungrouped +g ungrouped + +f 1/1 2/2 26/3 +f 2/4 3/5 27/6 +f 3/7 4/8 28/9 +f 4/10 5/11 29/12 +f 5/13 6/14 30/15 +f 6/16 7/17 31/18 +f 7/19 8/20 32/21 +f 8/22 9/23 33/24 +f 9/25 10/26 34/27 +f 10/28 11/29 35/30 +f 11/31 12/32 36/33 +f 12/34 13/35 37/36 +f 13/37 14/38 38/39 +f 14/40 15/41 39/42 +f 15/43 16/44 40/45 +f 16/46 17/47 41/48 +f 17/49 18/50 42/51 +f 18/52 19/53 43/54 +f 19/55 20/56 44/57 +f 20/58 21/59 45/60 +f 21/61 22/62 46/63 +f 22/64 23/65 47/66 +f 23/67 24/68 48/69 +f 24/70 1/71 25/72 +f 97/73 98/74 99/75 +f 97/76 100/77 101/78 +f 97/79 101/80 102/81 +f 122/82 123/83 124/84 +f 73/85 51/86 75/87 +f 75/88 52/89 76/90 +f 76/91 53/92 77/93 +f 125/94 127/95 128/96 +f 128/97 129/98 130/99 +f 130/100 131/101 132/102 +f 80/103 57/104 81/105 +f 81/106 58/107 82/108 +f 82/109 59/110 83/111 +f 133/112 135/113 136/114 +f 136/115 137/116 138/117 +f 138/118 139/119 140/120 +f 86/121 63/122 87/123 +f 87/124 64/125 88/126 +f 88/127 65/128 89/129 +f 141/130 143/131 144/132 +f 144/133 145/134 146/135 +f 146/136 147/137 148/138 +f 92/139 69/140 93/141 +f 93/142 70/143 94/144 +f 94/145 71/146 95/147 +f 149/148 151/149 152/150 +f 151/151 124/152 153/153 +f 73/154 50/155 51/156 +f 75/157 51/158 52/159 +f 76/160 52/161 53/162 +f 125/163 126/164 127/165 +f 128/166 127/167 129/168 +f 130/169 129/170 131/171 +f 80/172 56/173 57/174 +f 81/175 57/176 58/177 +f 82/178 58/179 59/180 +f 133/181 134/182 135/183 +f 136/184 135/185 137/186 +f 138/187 137/188 139/189 +f 86/190 62/191 63/192 +f 87/193 63/194 64/195 +f 88/196 64/197 65/198 +f 141/199 142/200 143/201 +f 144/202 143/203 145/204 +f 146/205 145/206 147/207 +f 92/208 68/209 69/210 +f 93/211 69/212 70/213 +f 94/214 70/215 71/216 +f 149/217 150/218 151/219 +f 152/220 151/221 153/222 +f 1/223 26/224 25/225 +f 2/226 27/227 26/228 +f 3/229 28/230 27/231 +f 4/232 29/233 28/234 +f 5/235 30/236 29/237 +f 6/238 31/239 30/240 +f 7/241 32/242 31/243 +f 8/244 33/245 32/246 +f 9/247 34/248 33/249 +f 10/250 35/251 34/252 +f 11/253 36/254 35/255 +f 12/256 37/257 36/258 +f 13/259 38/260 37/261 +f 14/262 39/263 38/264 +f 15/265 40/266 39/267 +f 16/268 41/269 40/270 +f 17/271 42/272 41/273 +f 18/274 43/275 42/276 +f 19/277 44/278 43/279 +f 20/280 45/281 44/282 +f 21/283 46/284 45/285 +f 22/286 47/287 46/288 +f 23/289 48/290 47/291 +f 24/292 25/293 48/294 +f 97/295 103/296 104/297 +f 97/298 102/299 103/300 +f 97/301 104/302 105/303 +f 97/304 105/305 106/306 +f 97/307 106/308 107/309 +f 97/310 107/311 108/312 +f 97/313 108/314 109/315 +f 97/316 109/317 110/318 +f 97/319 110/320 111/321 +f 97/322 111/323 112/324 +f 97/325 112/326 98/327 +f 97/328 99/329 113/330 +f 97/331 113/332 114/333 +f 97/334 114/335 115/336 +f 97/337 115/338 116/339 +f 97/340 116/341 117/342 +f 97/343 117/344 118/345 +f 97/346 118/347 119/348 +f 97/349 119/350 120/351 +f 97/352 120/353 121/354 +f 97/355 121/356 100/357 +f 153/358 124/359 123/360 +f 35/361 36/362 99/363 +f 99/364 98/365 35/366 +f 46/367 47/368 101/369 +f 101/370 100/371 46/372 +f 47/373 48/374 102/375 +f 102/376 101/377 47/378 +f 25/379 26/380 104/381 +f 104/382 103/383 25/384 +f 26/385 27/386 105/387 +f 105/388 104/389 26/390 +f 27/391 28/392 106/393 +f 106/394 105/395 27/396 +f 28/397 29/398 107/399 +f 107/400 106/401 28/402 +f 29/403 30/404 108/405 +f 108/406 107/407 29/408 +f 30/409 31/410 109/411 +f 109/412 108/413 30/414 +f 31/415 32/416 110/417 +f 110/418 109/419 31/420 +f 32/421 33/422 111/423 +f 111/424 110/425 32/426 +f 33/427 34/428 112/429 +f 112/430 111/431 33/432 +f 34/433 35/434 98/435 +f 98/436 112/437 34/438 +f 36/439 37/440 113/441 +f 113/442 99/443 36/444 +f 37/445 38/446 114/447 +f 114/448 113/449 37/450 +f 38/451 39/452 115/453 +f 115/454 114/455 38/456 +f 39/457 40/458 116/459 +f 116/460 115/461 39/462 +f 40/463 41/464 117/465 +f 117/466 116/467 40/468 +f 41/469 42/470 118/471 +f 118/472 117/473 41/474 +f 42/475 43/476 119/477 +f 119/478 118/479 42/480 +f 43/481 44/482 120/483 +f 120/484 119/485 43/486 +f 44/487 45/488 121/489 +f 121/490 120/491 44/492 +f 45/493 46/494 100/495 +f 100/496 121/497 45/498 +f 48/499 25/500 103/501 +f 103/502 102/503 48/504 +f 50/505 73/506 123/507 +f 123/508 122/509 50/510 +f 49/511 50/512 122/513 +f 122/514 124/515 49/516 +f 77/517 53/518 126/519 +f 126/520 125/521 77/522 +f 78/523 77/524 125/525 +f 125/526 128/527 78/528 +f 79/529 78/530 128/531 +f 128/532 130/533 79/534 +f 56/535 80/536 132/537 +f 132/538 131/539 56/540 +f 80/541 79/542 130/543 +f 130/544 132/545 80/546 +f 83/547 59/548 134/549 +f 134/550 133/551 83/552 +f 84/553 83/554 133/555 +f 133/556 136/557 84/558 +f 85/559 84/560 136/561 +f 136/562 138/563 85/564 +f 62/565 86/566 140/567 +f 140/568 139/569 62/570 +f 86/571 85/572 138/573 +f 138/574 140/575 86/576 +f 89/577 65/578 142/579 +f 142/580 141/581 89/582 +f 90/583 89/584 141/585 +f 141/586 144/587 90/588 +f 91/589 90/590 144/591 +f 144/592 146/593 91/594 +f 68/595 92/596 148/597 +f 148/598 147/599 68/600 +f 92/601 91/602 146/603 +f 146/604 148/605 92/606 +f 95/607 71/608 150/609 +f 150/610 149/611 95/612 +f 96/613 95/614 149/615 +f 149/616 152/617 96/618 +f 72/619 49/620 124/621 +f 124/622 151/623 72/624 +f 53/625 54/626 127/627 +f 127/628 126/629 53/630 +f 54/631 55/632 129/633 +f 129/634 127/635 54/636 +f 55/637 56/638 131/639 +f 131/640 129/641 55/642 +f 59/643 60/644 135/645 +f 135/646 134/647 59/648 +f 60/649 61/650 137/651 +f 137/652 135/653 60/654 +f 61/655 62/656 139/657 +f 139/658 137/659 61/660 +f 65/661 66/662 143/663 +f 143/664 142/665 65/666 +f 66/667 67/668 145/669 +f 145/670 143/671 66/672 +f 67/673 68/674 147/675 +f 147/676 145/677 67/678 +f 71/679 72/680 151/681 +f 151/682 150/683 71/684 +f 74/685 96/686 152/687 +f 152/688 153/689 74/690 +f 73/691 74/692 153/693 +f 153/694 123/695 73/696 +f 154/697 179/698 178/699 +f 154/700 155/701 179/702 +f 155/703 180/704 179/705 +f 155/706 156/707 180/708 +f 156/709 181/710 180/711 +f 156/712 157/713 181/714 +f 157/715 182/716 181/717 +f 157/718 158/719 182/720 +f 158/721 183/722 182/723 +f 158/724 159/725 183/726 +f 159/727 184/728 183/729 +f 159/730 160/731 184/732 +f 160/733 185/734 184/735 +f 160/736 161/737 185/738 +f 161/739 186/740 185/741 +f 161/742 162/743 186/744 +f 162/745 187/746 186/747 +f 162/748 163/749 187/750 +f 163/751 188/752 187/753 +f 163/754 164/755 188/756 +f 164/757 189/758 188/759 +f 164/760 165/761 189/762 +f 165/763 190/764 189/765 +f 165/766 166/767 190/768 +f 166/769 191/770 190/771 +f 166/772 167/773 191/774 +f 167/775 192/776 191/777 +f 167/778 168/779 192/780 +f 168/781 193/782 192/783 +f 168/784 169/785 193/786 +f 169/787 194/788 193/789 +f 169/790 170/791 194/792 +f 170/793 195/794 194/795 +f 170/796 171/797 195/798 +f 171/799 196/800 195/801 +f 171/802 172/803 196/804 +f 172/805 197/806 196/807 +f 172/808 173/809 197/810 +f 173/811 198/812 197/813 +f 173/814 174/815 198/816 +f 174/817 199/818 198/819 +f 174/820 175/821 199/822 +f 175/823 200/824 199/825 +f 175/826 176/827 200/828 +f 176/829 201/830 200/831 +f 176/832 177/833 201/834 +f 177/835 178/836 201/837 +f 177/838 154/839 178/840 +f 178/841 203/842 202/843 +f 178/844 179/845 203/846 +f 179/847 204/848 203/849 +f 179/850 180/851 204/852 +f 180/853 205/854 204/855 +f 180/856 181/857 205/858 +f 181/859 206/860 205/861 +f 181/862 182/863 206/864 +f 182/865 207/866 206/867 +f 182/868 183/869 207/870 +f 183/871 208/872 207/873 +f 183/874 184/875 208/876 +f 184/877 209/878 208/879 +f 184/880 185/881 209/882 +f 185/883 210/884 209/885 +f 185/886 186/887 210/888 +f 186/889 211/890 210/891 +f 186/892 187/893 211/894 +f 187/895 212/896 211/897 +f 187/898 188/899 212/900 +f 188/901 213/902 212/903 +f 188/904 189/905 213/906 +f 189/907 214/908 213/909 +f 189/910 190/911 214/912 +f 190/913 215/914 214/915 +f 190/916 191/917 215/918 +f 191/919 216/920 215/921 +f 191/922 192/923 216/924 +f 192/925 217/926 216/927 +f 192/928 193/929 217/930 +f 193/931 218/932 217/933 +f 193/934 194/935 218/936 +f 194/937 219/938 218/939 +f 194/940 195/941 219/942 +f 195/943 220/944 219/945 +f 195/946 196/947 220/948 +f 196/949 221/950 220/951 +f 196/952 197/953 221/954 +f 197/955 222/956 221/957 +f 197/958 198/959 222/960 +f 198/961 223/962 222/963 +f 198/964 199/965 223/966 +f 199/967 224/968 223/969 +f 199/970 200/971 224/972 +f 200/973 225/974 224/975 +f 200/976 201/977 225/978 +f 201/979 202/980 225/981 +f 201/982 178/983 202/984 +f 202/985 227/986 226/987 +f 202/988 203/989 227/990 +f 203/991 228/992 227/993 +f 203/994 204/995 228/996 +f 204/997 229/998 228/999 +f 204/1000 205/1001 229/1002 +f 205/1003 230/1004 229/1005 +f 205/1006 206/1007 230/1008 +f 206/1009 231/1010 230/1011 +f 206/1012 207/1013 231/1014 +f 207/1015 232/1016 231/1017 +f 207/1018 208/1019 232/1020 +f 208/1021 233/1022 232/1023 +f 208/1024 209/1025 233/1026 +f 209/1027 234/1028 233/1029 +f 209/1030 210/1031 234/1032 +f 210/1033 235/1034 234/1035 +f 210/1036 211/1037 235/1038 +f 211/1039 236/1040 235/1041 +f 211/1042 212/1043 236/1044 +f 212/1045 237/1046 236/1047 +f 212/1048 213/1049 237/1050 +f 213/1051 238/1052 237/1053 +f 213/1054 214/1055 238/1056 +f 214/1057 239/1058 238/1059 +f 214/1060 215/1061 239/1062 +f 215/1063 240/1064 239/1065 +f 215/1066 216/1067 240/1068 +f 216/1069 241/1070 240/1071 +f 216/1072 217/1073 241/1074 +f 217/1075 242/1076 241/1077 +f 217/1078 218/1079 242/1080 +f 218/1081 243/1082 242/1083 +f 218/1084 219/1085 243/1086 +f 219/1087 244/1088 243/1089 +f 219/1090 220/1091 244/1092 +f 220/1093 245/1094 244/1095 +f 220/1096 221/1097 245/1098 +f 221/1099 246/1100 245/1101 +f 221/1102 222/1103 246/1104 +f 222/1105 247/1106 246/1107 +f 222/1108 223/1109 247/1110 +f 223/1111 248/1112 247/1113 +f 223/1114 224/1115 248/1116 +f 224/1117 249/1118 248/1119 +f 224/1120 225/1121 249/1122 +f 225/1123 226/1124 249/1125 +f 225/1126 202/1127 226/1128 +f 226/1129 251/1130 250/1131 +f 226/1132 227/1133 251/1134 +f 227/1135 252/1136 251/1137 +f 227/1138 228/1139 252/1140 +f 228/1141 253/1142 252/1143 +f 228/1144 229/1145 253/1146 +f 229/1147 254/1148 253/1149 +f 229/1150 230/1151 254/1152 +f 230/1153 255/1154 254/1155 +f 230/1156 231/1157 255/1158 +f 231/1159 256/1160 255/1161 +f 231/1162 232/1163 256/1164 +f 232/1165 257/1166 256/1167 +f 232/1168 233/1169 257/1170 +f 233/1171 258/1172 257/1173 +f 233/1174 234/1175 258/1176 +f 234/1177 259/1178 258/1179 +f 234/1180 235/1181 259/1182 +f 235/1183 260/1184 259/1185 +f 235/1186 236/1187 260/1188 +f 236/1189 261/1190 260/1191 +f 236/1192 237/1193 261/1194 +f 237/1195 262/1196 261/1197 +f 237/1198 238/1199 262/1200 +f 238/1201 263/1202 262/1203 +f 238/1204 239/1205 263/1206 +f 239/1207 264/1208 263/1209 +f 239/1210 240/1211 264/1212 +f 240/1213 265/1214 264/1215 +f 240/1216 241/1217 265/1218 +f 241/1219 266/1220 265/1221 +f 241/1222 242/1223 266/1224 +f 242/1225 267/1226 266/1227 +f 242/1228 243/1229 267/1230 +f 243/1231 268/1232 267/1233 +f 243/1234 244/1235 268/1236 +f 244/1237 269/1238 268/1239 +f 244/1240 245/1241 269/1242 +f 245/1243 270/1244 269/1245 +f 245/1246 246/1247 270/1248 +f 246/1249 271/1250 270/1251 +f 246/1252 247/1253 271/1254 +f 247/1255 272/1256 271/1257 +f 247/1258 248/1259 272/1260 +f 248/1261 273/1262 272/1263 +f 248/1264 249/1265 273/1266 +f 249/1267 250/1268 273/1269 +f 249/1270 226/1271 250/1272 +f 250/1273 275/1274 274/1275 +f 250/1276 251/1277 275/1278 +f 251/1279 276/1280 275/1281 +f 251/1282 252/1283 276/1284 +f 252/1285 277/1286 276/1287 +f 252/1288 253/1289 277/1290 +f 253/1291 278/1292 277/1293 +f 253/1294 254/1295 278/1296 +f 254/1297 279/1298 278/1299 +f 254/1300 255/1301 279/1302 +f 255/1303 280/1304 279/1305 +f 255/1306 256/1307 280/1308 +f 256/1309 281/1310 280/1311 +f 256/1312 257/1313 281/1314 +f 257/1315 282/1316 281/1317 +f 257/1318 258/1319 282/1320 +f 258/1321 283/1322 282/1323 +f 258/1324 259/1325 283/1326 +f 259/1327 284/1328 283/1329 +f 259/1330 260/1331 284/1332 +f 260/1333 285/1334 284/1335 +f 260/1336 261/1337 285/1338 +f 261/1339 286/1340 285/1341 +f 261/1342 262/1343 286/1344 +f 262/1345 287/1346 286/1347 +f 262/1348 263/1349 287/1350 +f 263/1351 288/1352 287/1353 +f 263/1354 264/1355 288/1356 +f 264/1357 289/1358 288/1359 +f 264/1360 265/1361 289/1362 +f 265/1363 290/1364 289/1365 +f 265/1366 266/1367 290/1368 +f 266/1369 291/1370 290/1371 +f 266/1372 267/1373 291/1374 +f 267/1375 292/1376 291/1377 +f 267/1378 268/1379 292/1380 +f 268/1381 293/1382 292/1383 +f 268/1384 269/1385 293/1386 +f 269/1387 294/1388 293/1389 +f 269/1390 270/1391 294/1392 +f 270/1393 295/1394 294/1395 +f 270/1396 271/1397 295/1398 +f 271/1399 296/1400 295/1401 +f 271/1402 272/1403 296/1404 +f 272/1405 297/1406 296/1407 +f 272/1408 273/1409 297/1410 +f 273/1411 274/1412 297/1413 +f 273/1414 250/1415 274/1416 +f 274/1417 299/1418 298/1419 +f 274/1420 275/1421 299/1422 +f 275/1423 300/1424 299/1425 +f 275/1426 276/1427 300/1428 +f 276/1429 301/1430 300/1431 +f 276/1432 277/1433 301/1434 +f 277/1435 302/1436 301/1437 +f 277/1438 278/1439 302/1440 +f 278/1441 303/1442 302/1443 +f 278/1444 279/1445 303/1446 +f 279/1447 304/1448 303/1449 +f 279/1450 280/1451 304/1452 +f 280/1453 305/1454 304/1455 +f 280/1456 281/1457 305/1458 +f 281/1459 306/1460 305/1461 +f 281/1462 282/1463 306/1464 +f 282/1465 307/1466 306/1467 +f 282/1468 283/1469 307/1470 +f 283/1471 308/1472 307/1473 +f 283/1474 284/1475 308/1476 +f 284/1477 309/1478 308/1479 +f 284/1480 285/1481 309/1482 +f 285/1483 310/1484 309/1485 +f 285/1486 286/1487 310/1488 +f 286/1489 311/1490 310/1491 +f 286/1492 287/1493 311/1494 +f 287/1495 312/1496 311/1497 +f 287/1498 288/1499 312/1500 +f 288/1501 313/1502 312/1503 +f 288/1504 289/1505 313/1506 +f 289/1507 314/1508 313/1509 +f 289/1510 290/1511 314/1512 +f 290/1513 315/1514 314/1515 +f 290/1516 291/1517 315/1518 +f 291/1519 316/1520 315/1521 +f 291/1522 292/1523 316/1524 +f 292/1525 317/1526 316/1527 +f 292/1528 293/1529 317/1530 +f 293/1531 318/1532 317/1533 +f 293/1534 294/1535 318/1536 +f 294/1537 319/1538 318/1539 +f 294/1540 295/1541 319/1542 +f 295/1543 320/1544 319/1545 +f 295/1546 296/1547 320/1548 +f 296/1549 321/1550 320/1551 +f 296/1552 297/1553 321/1554 +f 297/1555 298/1556 321/1557 +f 297/1558 274/1559 298/1560 +f 177/1561 155/1562 154/1563 +f 177/1564 156/1565 155/1566 +f 177/1567 157/1568 156/1569 +f 177/1570 158/1571 157/1572 +f 177/1573 159/1574 158/1575 +f 177/1576 160/1577 159/1578 +f 177/1579 161/1580 160/1581 +f 177/1582 162/1583 161/1584 +f 177/1585 163/1586 162/1587 +f 177/1588 164/1589 163/1590 +f 177/1591 165/1592 164/1593 +f 177/1594 166/1595 165/1596 +f 177/1597 167/1598 166/1599 +f 177/1600 168/1601 167/1602 +f 177/1603 169/1604 168/1605 +f 177/1606 170/1607 169/1608 +f 177/1609 171/1610 170/1611 +f 177/1612 172/1613 171/1614 +f 177/1615 173/1616 172/1617 +f 177/1618 174/1619 173/1620 +f 177/1621 175/1622 174/1623 +f 177/1624 176/1625 175/1626 diff --git a/tutorials/mesh/cvMesh/carWheel/constant/triSurface/small.stl b/tutorials/mesh/cvMesh/carWheel/constant/triSurface/small.stl new file mode 100644 index 0000000000..3f32c4df65 --- /dev/null +++ b/tutorials/mesh/cvMesh/carWheel/constant/triSurface/small.stl @@ -0,0 +1,86 @@ +solid ascii + facet normal -1 0 0 + outer loop + vertex -200 -50 0 + vertex -200 -50 200 + vertex -200 250 0 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -200 250 200 + vertex -200 250 0 + vertex -200 -50 200 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0 -50 0 + vertex 0 250 0 + vertex 0 -50 200 + endloop + endfacet + facet normal 1 -0 0 + outer loop + vertex 0 250 200 + vertex 0 -50 200 + vertex 0 250 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -200 -50 0 + vertex 0 -50 0 + vertex -200 -50 200 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0 -50 200 + vertex -200 -50 200 + vertex 0 -50 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -200 250 0 + vertex -200 250 200 + vertex 0 250 0 + endloop + endfacet + facet normal 0 1 -0 + outer loop + vertex 0 250 200 + vertex 0 250 0 + vertex -200 250 200 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -200 -50 0 + vertex -200 250 0 + vertex 0 -50 0 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0 250 0 + vertex 0 -50 0 + vertex -200 250 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -200 -50 200 + vertex 0 -50 200 + vertex -200 250 200 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0 250 200 + vertex -200 250 200 + vertex 0 -50 200 + endloop + endfacet +endsolid diff --git a/tutorials/mesh/cvMesh/carWheel/system/controlDict b/tutorials/mesh/cvMesh/carWheel/system/controlDict new file mode 100644 index 0000000000..e30977fd5b --- /dev/null +++ b/tutorials/mesh/cvMesh/carWheel/system/controlDict @@ -0,0 +1,54 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object controlDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +startFrom latestTime; + +startTime 0; + +stopAt endTime; + +endTime 0; //80; + +deltaT 1; + +writeControl timeStep; + +writeInterval 1000; //10 to see the meshing steps + +purgeWrite 0; + +writeFormat ascii; + +writePrecision 10; + +writeCompression uncompressed; + +timeFormat general; + +timePrecision 6; + +runTimeModifiable yes; + + +// ************************************************************************* // diff --git a/tutorials/mesh/cvMesh/carWheel/system/cvMeshDict b/tutorials/mesh/cvMesh/carWheel/system/cvMeshDict new file mode 100644 index 0000000000..db367a1a1c --- /dev/null +++ b/tutorials/mesh/cvMesh/carWheel/system/cvMeshDict @@ -0,0 +1,473 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object cvMeshDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + + +/* + +Control dictionary for cvMesh - polyhedral mesh generator. + +cvMesh phases: +1. fill volume with initial points (initialPoints subdictionary). An option + is to reread from previous set of points. + +2. internal point motion (motionControl subdictionary) + +3. every once in a while add point duplets/triplets to conform to + surfaces and features (surfaceConformation subdictionary) + +4. back to 2 + +5. construct polyMesh. + - filter (polyMeshFiltering subdictionary) + - check (meshQualityControls subdictionary) and undo filtering + + +See also cvControls.H in the conformalVoronoiMesh library + +*/ + + +// Important: +// ---------- +// Any scalar with a name Coeff specifies a value that will be implemented +// as a faction of the local target cell size +// Any scalar with a name Size specifies an absolute size. + + +// Geometry. Definition of all surfaces. All surfaces are of class +// searchableSurface. +// Surfaces need to be (almost) closed - use closedTriSurfaceMesh +// if they are not topologically closed. Surfaces need to be oriented so +// the space to be meshed is always on the inside of all surfaces. Use e.g. +// surfaceOrient. +geometry +{ + // Internal shape + m_car01_wheel_merge_orient.obj + { + name m_car01; + type closedTriSurfaceMesh; + } + + // Outside of domain + small_orient.stl + { + name small; + type triSurfaceMesh; + } + +} + + +// Controls for conforming to the surfaces. +surfaceConformation +{ + // A point inside surfaces that is inside mesh. + locationInMesh (-100 0 170); + + // How far apart are point-duplets generated. Balance this between + // - very low distance: little chance of interference from other + // surfaces + // - largish distance: less non-orthogonality in final cell + // (circumcentre far away from centroid) + pointPairDistanceCoeff 0.1; + + // Mixed feature edges - both inside and outside edges. Recreated + // by inserting triplets of points to recreate a single edge. Done for + // all edges emanating from point. triplets of points get inserted + // mixedFeaturePointPPDistanceCoeff distance away from feature point. + mixedFeaturePointPPDistanceCoeff 5.0; + + // Distance to a feature point within which surface and edge + // conformation points are excluded - fraction of the local target + // cell size + featurePointExclusionDistanceCoeff 0.4; + + // Distance to an existing feature edge conformation location + // within which other edge conformation location are excluded - + // fraction of the local target cell size + featureEdgeExclusionDistanceCoeff 0.2; + + // Optimisation: do not check for surface intersection (of dual edges) + // for points near to surface. + surfaceSearchDistanceCoeff 2.5; + + // Maximum allowable protrusion through the surface before + // conformation points are added - fraction of the local target + // cell size. These small protusions are (hopefully) done by mesh filtering + // instead. + maxSurfaceProtrusionCoeff 0.1; + + // If feature edge with large angle (so more than 125 degrees) introduce + // additional points to create two half angled cells (= mitering). + maxQuadAngle 125; + + // Frequency to redo surface conformation (expensive). + surfaceConformationRebuildFrequency 10; + + // Initial and intermediate controls + coarseConformationControls + { + // Initial conformation + initial + { + // We've got a point poking through the surface. Don't do any + // surface conformation if near feature edge (since feature edge + // conformation should have priority) + + // distance to search for near feature edges + edgeSearchDistCoeff 1.1; + + // Proximity to a feature edge where a surface hit is + // not created, only the edge conformation is created + // - fraction of the local target cell size. Coarse + // conformation, initial protrusion tests. + surfacePtReplaceDistCoeff 0.5; + } + + // Same for iterations + iteration + { + edgeSearchDistCoeff 1.25; + surfacePtReplaceDistCoeff 0.7; + } + + // Stop either at maxIterations or if the number of surface pokes + // is very small (iterationToInitialHitRatioLimit * initial number) + // Note: perhaps iterationToInitialHitRatioLimit should be absolute + // count? + maxIterations 15; + + iterationToInitialHitRatioLimit 0.001; + } + + // Final (at endTime) controls + fineConformationControls + { + initial + { + edgeSearchDistCoeff 1.1; + surfacePtReplaceDistCoeff 0.5; + } + + iteration + { + edgeSearchDistCoeff 1.25; + surfacePtReplaceDistCoeff 0.7; + } + + maxIterations 15; + + iterationToInitialHitRatioLimit 0.001; + } + + // Geometry to mesh to + geometryToConformTo + { + m_car01 + { + featureMethod extendedFeatureEdgeMesh; + extendedFeatureEdgeMesh "m_car01_wheel_merge_orient.extendedFeatureEdgeMesh"; + } + + small + { + featureMethod extendedFeatureEdgeMesh; + extendedFeatureEdgeMesh "small_orient.extendedFeatureEdgeMesh"; + } + } + + additionalFeatures {} +} + + +// Controls for seeding initial points and general control of the target +// cell size (used everywhere) +initialPoints +{ + // Do not place point closer than minimumSurfaceDistanceCoeff + // to the surface. Is fraction of local target cell size (see below) + minimumSurfaceDistanceCoeff 0.55; + + initialPointsMethod autoDensity; + // initialPointsMethod uniformGrid; + // initialPointsMethod bodyCentredCubic; + // initialPointsMethod pointFile; + + // Take boundbox of all geometry. Samples with this box. If too much + // samples (due to target cell size) in box split box. + autoDensityCoeffs + { + // Initial number of refinement levels. Needs to be enough to pick + // up features due to size ratio. If not enough it will take longer + // to determine point seeding. + minLevels 3; + // Split box if ratio of min to max cell size larger than maxSizeRatio + maxSizeRatio 5.0; + // Per box sample 3x3x3 internally + sampleResolution 3; + // Additionally per face of the box sample 3 + surfaceSampleResolution 3; + } + + uniformGridCoeffs + { + // Absolute cell size. + initialCellSize 0.0015; + randomiseInitialGrid yes; + randomPerturbationCoeff 0.02; + } + + bodyCentredCubicCoeffs + { + initialCellSize 0.0015; + randomiseInitialGrid no; + randomPerturbationCoeff 0.1; + } + + pointFileCoeffs + { + // Reads points from file. Still rejects points that are too + // close to the surface (minimumSurfaceDistanceCoeff) or on the + // wrong side of the surfaces. + pointFile "constant/internalDelaunayVertices"; + } +} + + +// Control size of voronoi cells i.e. distance between points. This +// determines the target cell size which is used everywhere. +// It determines the cell size given a location. It then uses all +// the rules +// - defaultCellSize +// - cellSizeControlGeometry +// to determine target cell size. Rule with highest priority wins. If same +// priority smallest cell size wins. +motionControl +{ + // Absolute cell size of back ground mesh. This is the maximum cell size. + defaultCellSize 10; + + // Assign a priority to all requests for cell sizes, the highest overrules. + defaultPriority 0; + + cellSizeControlGeometry + { + nearCar + { + // optional name of geometry + surface m_car01; + priority 1; + mode bothSides; + cellSizeFunction linearDistance; + + // cellSizeFunctions: + // uniform : uniform size + // uniformDistance : fixed size for all within distance + // linearSpatial : grading in specified direction only + // linearDistance : vary linearly as distance to surface + // surfaceOffsetLinearDistance : constant close to surface then + // fade like linearDistance + + // Vary from surfaceCellSize (close to the surface) to + // distanceCellSize (further than 'distance') + linearDistanceCoeffs + { + surfaceCellSize 1; // absolute size + distanceCellSize $defaultCellSize; + distance 10.0; + } + } + + } + + // Underrelaxation for point motion. Simulated annealing: starts off at 1 + // and lowers to 0 (at simulation endTime) to converge points. + // adaptiveLinear is preferred choice. + // Points move by e.g. 10% of tet size. + relaxationModel adaptiveLinear; //rampHoldFall + + adaptiveLinearCoeffs + { + relaxationStart 1.0; + relaxationEnd 0.0; + } + + // Output lots and lots of .obj files + objOutput no; + + // Timing and memory usage. + timeChecks yes; + + // Number of rays in plane parallel to nearest surface. Used to detect + // next closest surfaces. Used to work out alignment (three vectors) + // to surface. + // Note that only the initial points (from the seeding) calculate this + // information so if these are not fine enough the alignment will + // not be correct. (any points added during the running will lookup + // this information from the nearest initial point since it is + // expensive) + alignmentSearchSpokes 36; + + // For each delaunay edge (between two vertices, becomes + // the Voronoi face normal) snap to the alignment direction if within + // alignmentAcceptanceAngle. Slightly > 45 is a good choice - prevents + // flipping. + alignmentAcceptanceAngle 48; + + // How often to rebuild the alignment info (expensive) + sizeAndAlignmentRebuildFrequency 20; + + // When to insert points. Not advisable change to + // these settings. + pointInsertionCriteria + { + // If edge larger than 1.75 target cell size + // (so tets too large/stretched) insert point + cellCentreDistCoeff 1.75; + // Do not insert point if voronoi face (on edge) very small. + faceAreaRatioCoeff 0.0025; + // Insert point only if edge closely aligned to local alignment + // direction. + acceptanceAngle 21.5; + } + + // Opposite: remove point if mesh too compressed. Do not change these + // settings. + pointRemovalCriteria + { + cellCentreDistCoeff 0.65; + } + + // How to determine the point motion. All edges got some direction. + // Sum all edge contributions to determine point motion. Weigh by + // face area so motion is preferentially determined by large faces + // (or more importantly ignore contribution from small faces). + // Do not change these settings. + faceAreaWeightModel piecewiseLinearRamp; + + piecewiseLinearRampCoeffs + { + lowerAreaFraction 0.5; + upperAreaFraction 1.0; + } +} + + +// After simulation, when converting to polyMesh, filter out small faces/edges. +// Do not change. See cvControls.H +polyMeshFiltering +{ + // Write the underlying Delaunay tet mesh at output time + writeTetMesh true; + + // Upper limit on the size of faces to be filtered. + // fraction of the local target cell size + filterSizeCoeff 0.2; + + // Upper limit on how close two dual vertices can be before + // being merged, fraction of the local target cell size + mergeClosenessCoeff 1e-9; + + // To not filter: set maxNonOrtho to 1 (so check fails) and then + // set continueFilteringOnBadInitialPolyMesh to false. + continueFilteringOnBadInitialPolyMesh false; //true; + + // When a face is "bad", what fraction should the filterSizeCoeff be + // reduced by. Recursive, so for a filterCount value of fC, the + // filterSizeCoeff is reduced by pow(filterErrorReductionCoeff, fC) + filterErrorReductionCoeff 0.5; + + // Maximum number of filterCount applications before a face + // is not attempted to be filtered + filterCountSkipThreshold 4; + + // Maximum number of permissible iterations of the face collapse + // algorithm. The value to choose will be related the maximum number + // of points on a face that is to be collapsed and how many faces + // around it need to be collapsed. + maxCollapseIterations 25; + + // Maximum number of times an to allow an equal faceSet to be + // returned from the face quality assessment before stopping iterations + // to break an infinitie loop. + maxConsecutiveEqualFaceSets 5; + // Remove little steps (almost perp to surface) by collapsing face. + surfaceStepFaceAngle 80; + // Do not collapse face to edge if should become edges + edgeCollapseGuardFraction 0.3; + // Only collapse face to point if high aspect ratio + maxCollapseFaceToPointSideLengthCoeff 0.35; +} + + +// Generic mesh quality settings. At any undoable phase these determine +// where to undo. Same as in snappyHexMeshDict +meshQualityControls +{ + //- Maximum non-orthogonality allowed. Set to 180 to disable. + maxNonOrtho 1; + + //- Max skewness allowed. Set to <0 to disable. + maxBoundarySkewness 50; + maxInternalSkewness 10; + + //- Max concaveness allowed. Is angle (in degrees) below which concavity + // is allowed. 0 is straight face, <0 would be convex face. + // Set to 180 to disable. + maxConcave 80; + + //- Minimum pyramid volume. Is absolute volume of cell pyramid. + // Set to a sensible fraction of the smallest cell volume expected. + // Set to very negative number (e.g. -1E30) to disable. + minVol -1E30; + + //- Minimum quality of the tet formed by the + // variable base point minimum decomposition triangles and + // the cell centre (so not face-centre decomposition). + // This has to be a positive number for tracking + // to work. Set to very negative number (e.g. -1E30) to + // disable. + // <0 = inside out tet, + // 0 = flat tet + // 1 = regular tet + minTetQuality 1e-30; + + //- Minimum absolute face area. Set to <0 to disable. + minArea -1; + + //- Minimum face twist. Set to <-1 to disable. dot product of face normal + //- and face centre triangles normal + minTwist 0.001; + + //- minimum normalised cell determinant + //- 1 = hex, <= 0 = folded or flattened illegal cell + minDeterminant 0.001; + + //- minFaceWeight (0 -> 0.5) + minFaceWeight 0.02; + + //- minVolRatio (0 -> 1) + minVolRatio 0.01; + + //must be >0 for Fluent compatibility + minTriangleTwist -1; +} + + +// ************************************************************************* // diff --git a/tutorials/mesh/cvMesh/carWheel/system/fvSchemes b/tutorials/mesh/cvMesh/carWheel/system/fvSchemes new file mode 100644 index 0000000000..c9c1ceda9c --- /dev/null +++ b/tutorials/mesh/cvMesh/carWheel/system/fvSchemes @@ -0,0 +1,55 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSchemes; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +d2dt2Schemes +{ + default steadyState; +} + +gradSchemes +{ + default Gauss cubic; +} + +divSchemes +{ + default Gauss cubic; +} + +laplacianSchemes +{ + default Gauss linear uncorrected; +} + +interpolationSchemes +{ + default cubic; +} + +snGradSchemes +{ + default uncorrected; +} + +fluxRequired +{ + default no; + D ; +} + + +// ************************************************************************* // diff --git a/tutorials/mesh/cvMesh/carWheel/system/fvSolution b/tutorials/mesh/cvMesh/carWheel/system/fvSolution new file mode 100644 index 0000000000..94abb90461 --- /dev/null +++ b/tutorials/mesh/cvMesh/carWheel/system/fvSolution @@ -0,0 +1,41 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSolution; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solvers +{ + "(D|Dcorr)" + { + solver GAMG; + tolerance 1e-06; + relTol 0.99; + smoother GaussSeidel; + cacheAgglomeration true; + nCellsInCoarsestLevel 6; + agglomerator faceAreaPair; + mergeLevels 1; + } +} + +stressAnalysis +{ + nCorrectors 1; + D 1e-10; + accelerationFactor 2; +} + + +// ************************************************************************* // diff --git a/tutorials/mesh/cvMesh/carWheel/system/tetDualMesh/fvSchemes b/tutorials/mesh/cvMesh/carWheel/system/tetDualMesh/fvSchemes new file mode 120000 index 0000000000..288d536c8b --- /dev/null +++ b/tutorials/mesh/cvMesh/carWheel/system/tetDualMesh/fvSchemes @@ -0,0 +1 @@ +../fvSchemes \ No newline at end of file diff --git a/tutorials/mesh/cvMesh/carWheel/system/tetDualMesh/fvSolution b/tutorials/mesh/cvMesh/carWheel/system/tetDualMesh/fvSolution new file mode 120000 index 0000000000..4a4e96ba76 --- /dev/null +++ b/tutorials/mesh/cvMesh/carWheel/system/tetDualMesh/fvSolution @@ -0,0 +1 @@ +../fvSolution \ No newline at end of file diff --git a/tutorials/mesh/cvMesh/carWheel/system/topoSetDict b/tutorials/mesh/cvMesh/carWheel/system/topoSetDict new file mode 100644 index 0000000000..cc6c1572bd --- /dev/null +++ b/tutorials/mesh/cvMesh/carWheel/system/topoSetDict @@ -0,0 +1,148 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object topoSetDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +actions +( + { + name z; + type cellSet; + action new; + source boxToCell; + sourceInfo + { + box (-100000 -100000 50)(100000 100000 100000); + } + } + + { + name zf; + type faceSet; + action new; + source cellToFace; + sourceInfo + { + set z; + option all; + } + } + + { + name z; + type cellSet; + action invert; + } + + { + name zf; + type faceSet; + action subset; + source cellToFace; + sourceInfo + { + set z; + option all; + } + } + + // ~~~~~~~~~~~~~~~~ // + + { + name y; + type cellSet; + action new; + source boxToCell; + sourceInfo + { + box (-100000 0 -100000)(100000 100000 100000); + } + } + + { + name yf; + type faceSet; + action new; + source cellToFace; + sourceInfo + { + set y; + option all; + } + } + + { + name y; + type cellSet; + action invert; + } + + { + name yf; + type faceSet; + action subset; + source cellToFace; + sourceInfo + { + set y; + option all; + } + } + + // ~~~~~~~~~~~~~~~~ // + + { + name x; + type cellSet; + action new; + source boxToCell; + sourceInfo + { + box (0 -100000 -100000)(100000 100000 100000); + } + } + + { + name xf; + type faceSet; + action new; + source cellToFace; + sourceInfo + { + set x; + option all; + } + } + + { + name x; + type cellSet; + action invert; + } + + { + name xf; + type faceSet; + action subset; + source cellToFace; + sourceInfo + { + set x; + option all; + } + } +); + +// ************************************************************************* //