diff --git a/tutorials/sphereGranFlow/rapidFilling/caseSetup/interaction b/tutorials/sphereGranFlow/rapidFilling/caseSetup/interaction new file mode 100755 index 00000000..3ea53adf --- /dev/null +++ b/tutorials/sphereGranFlow/rapidFilling/caseSetup/interaction @@ -0,0 +1,71 @@ +/* -------------------------------*- C++ -*--------------------------------- *\ +| phasicFlow File | +| copyright: www.cemf.ir | +\* ------------------------------------------------------------------------- */ +objectName interaction; +objectType dicrionary; +fileFormat ASCII; +/*---------------------------------------------------------------------------*/ +materials (lightMat heavyMat wallMat); // a list of materials names + +densities (1000 1500.0 2500); // density of materials [kg/m3] + +contactListType sortedContactList; + +contactSearch +{ + method NBS; // method for broad search particle-particle + + updateInterval 10; + + sizeRatio 1.1; + + cellExtent 0.55; + + adjustableBox No; +} + +model +{ + contactForceModel nonLinearLimited; + + rollingFrictionModel normal; + + /* + + Property (lightMat-lightMat lightMat-heavyMat lightMat-wallMat + heavyMat-heavyMat heavyMat-wallMat + wallMat-wallMat ); + */ + + Yeff (1.0e6 1.0e6 1.0e6 // Young modulus [Pa] + 1.0e6 1.0e6 + 1.0e6); + + Geff (0.8e6 0.8e6 0.8e6 // Shear modulus [Pa] + 0.8e6 0.8e6 + 0.8e6); + + nu (0.25 0.25 0.25 // Poisson's ratio [-] + 0.25 0.25 + 0.25); + + en (0.97 0.97 0.85 // coefficient of normal restitution + 0.97 0.85 + 1.00); + + et (1.0 1.0 1.0 // coefficient of tangential restitution + 1.0 1.0 + 1.0); + + mu (0.65 0.65 0.35 // dynamic friction + 0.65 0.35 + 0.35); + + mur (0.1 0.1 0.1 // rolling friction + 0.1 0.1 + 0.1); +} + + + diff --git a/tutorials/sphereGranFlow/rapidFilling/caseSetup/particleInsertion b/tutorials/sphereGranFlow/rapidFilling/caseSetup/particleInsertion new file mode 100755 index 00000000..1c70abba --- /dev/null +++ b/tutorials/sphereGranFlow/rapidFilling/caseSetup/particleInsertion @@ -0,0 +1,54 @@ +/* -------------------------------*- C++ -*--------------------------------- *\ +| phasicFlow File | +| copyright: www.cemf.ir | +\* ------------------------------------------------------------------------- */ +objectName particleInsertion; +objectType dicrionary; +fileFormat ASCII; +/*---------------------------------------------------------------------------*/ +active No; // is insertion active -> yes or no + +checkForCollision No; // is checked -> yes or no + +/* + one layers of particles are packed +*/ + +layer0 +{ + timeControl simulationTime; + + //regionType cylinder; // type of insertion region + + rate 15000; // insertion rate (particles/s) + + startTime 0; // (s) + + endTime 0.5; // (s) + + insertionInterval 0.025; // s + + //cylinderInfo + //{ + // radius 0.09; // radius of cylinder (m) + + // p1 ( 0.0 0.0 0.1 ); // (m,m,m) + + // p2 ( 0.0 0.0 0.11); // (m,m,m) + //} + + setFields + { + velocity realx3 (0.0 0.0 -0.6); // initial velocity of inserted particles + } + + mixture + { + lightSphere 1; // mixture composition of inserted particles + } +} + + + + + diff --git a/tutorials/sphereGranFlow/rapidFilling/caseSetup/shapes b/tutorials/sphereGranFlow/rapidFilling/caseSetup/shapes new file mode 100755 index 00000000..603c28cb --- /dev/null +++ b/tutorials/sphereGranFlow/rapidFilling/caseSetup/shapes @@ -0,0 +1,15 @@ +/* -------------------------------*- C++ -*--------------------------------- *\ +| phasicFlow File | +| copyright: www.cemf.ir | +\* ------------------------------------------------------------------------- */ +objectName sphereDict; +objectType sphereShape; +fileFormat ASCII; +/*---------------------------------------------------------------------------*/ +names (lightSphere heavySphere); // names of shapes + +diameters (0.007 0.007); // diameter of shapes + +materials (lightMat heavyMat); // material names for shapes + + diff --git a/tutorials/sphereGranFlow/rapidFilling/cleanThisCase b/tutorials/sphereGranFlow/rapidFilling/cleanThisCase new file mode 100755 index 00000000..8a0ab919 --- /dev/null +++ b/tutorials/sphereGranFlow/rapidFilling/cleanThisCase @@ -0,0 +1,7 @@ +#!/bin/sh +cd ${0%/*} || exit 1 # Run from this directory + +ls | grep -P "^(([0-9]+\.?[0-9]*)|(\.[0-9]+))$" | xargs -d"\n" rm -rf +rm -rf VTK + +#------------------------------------------------------------------------------ diff --git a/tutorials/sphereGranFlow/rapidFilling/dataFile b/tutorials/sphereGranFlow/rapidFilling/dataFile new file mode 100644 index 00000000..452a3c0a --- /dev/null +++ b/tutorials/sphereGranFlow/rapidFilling/dataFile @@ -0,0 +1,3 @@ +2 +0.049302 0.00425012 -0.0068537 +0.0456989 -0.0209381 -0.00786771 diff --git a/tutorials/sphereGranFlow/rapidFilling/runThisCase b/tutorials/sphereGranFlow/rapidFilling/runThisCase new file mode 100755 index 00000000..c48d71fe --- /dev/null +++ b/tutorials/sphereGranFlow/rapidFilling/runThisCase @@ -0,0 +1,21 @@ +#!/bin/sh +cd ${0%/*} || exit 1 # Run from this directory +echo "\n<--------------------------------------------------------------------->" +echo "1) Creating particles" +echo "<--------------------------------------------------------------------->\n" +particlesPhasicFlow + +echo "\n<--------------------------------------------------------------------->" +echo "2) Creating geometry" +echo "<--------------------------------------------------------------------->\n" +geometryPhasicFlow + +echo "\n<--------------------------------------------------------------------->" +echo "3) Running the case" +echo "<--------------------------------------------------------------------->\n" +sphereGranFlow + + + + +#------------------------------------------------------------------------------ diff --git a/tutorials/sphereGranFlow/rapidFilling/settings/domainDict b/tutorials/sphereGranFlow/rapidFilling/settings/domainDict new file mode 100755 index 00000000..159c33e5 --- /dev/null +++ b/tutorials/sphereGranFlow/rapidFilling/settings/domainDict @@ -0,0 +1,65 @@ +/* -------------------------------*- C++ -*--------------------------------- *\ +| phasicFlow File | +| copyright: www.cemf.ir | +\* ------------------------------------------------------------------------- */ +objectName domainDict; +objectType dictionary; +fileFormat ASCII; +/*---------------------------------------------------------------------------*/ +globalBox // Simulation domain: every particles that goes outside this domain will be deleted +{ + min (-0.11 -0.11 -0.41); + + max ( 0.33 0.11 0.41); +} + +boundaries +{ + // Determines how often (how many iterations) do you want to + + // rebuild the list of particles in the neighbor list + + // of all boundaries in the simulation domain + + neighborListUpdateInterval 30; + + // Determines how often do you want to update the new changes in the boundary + + updateInterval 10; + + // The distance from the boundary plane within which particles are marked to be in the boundary list + + neighborLength 0.004; + + left + { + type exit; // other options: periodict, reflective + } + + right + { + type exit; // other options: periodict, reflective + } + + bottom + { + type exit; // other options: periodict, reflective + } + + top + { + type exit; // other options: periodict, reflective + } + + rear + { + type exit; // other options: periodict, reflective + } + + front + { + type exit; // other options: periodict, reflective + } +} + + diff --git a/tutorials/sphereGranFlow/rapidFilling/settings/geometryDict b/tutorials/sphereGranFlow/rapidFilling/settings/geometryDict new file mode 100755 index 00000000..69873d0e --- /dev/null +++ b/tutorials/sphereGranFlow/rapidFilling/settings/geometryDict @@ -0,0 +1,75 @@ +/* -------------------------------*- C++ -*--------------------------------- *\ +| phasicFlow File | +| copyright: www.cemf.ir | +\* ------------------------------------------------------------------------- */ +objectName geometryDict; +objectType dictionary; +fileFormat ASCII; +/*---------------------------------------------------------------------------*/ +motionModel conveyorBelt; // motion model can be rotatingAxis or stationary or vibrating + +conveyorBeltInfo +{ + conveyorBelt1 + { + tangentVelocity (0.5 0 0); + } +} + +surfaces +{ + cylinderShell + { + type cylinderWall; // other options: cuboidWall and planeWall + + p1 (0.0 0.0 0.0); // begin point of cylinder axis + + p2 (0.0 0.0 0.4); // end point of cylinder axis + + radius1 0.1; // radius at p1 + + radius2 0.1; // radius at p2 + + resolution 36; // number of divisions + + material wallMat; // material name of this wall + } + + coneShell + { + type cylinderWall; // other options: cuboidWall and planeWall + + p1 (0.0 0.0 -0.1); // begin point of cylinder axis + + p2 (0.0 0.0 0.0); // end point of cylinder axis + + radius1 0.02; // radius at p1 + + radius2 0.1; // radius at p2 + + resolution 36; // number of divisions + + material wallMat; // material name of this wall + } + + belt + { + type stlWall; // type of the wall + file belt.stl; // file name in stl folder + material wallMat; // material name of this wall + motion conveyorBelt1; // motion component name + } + + box + { + type stlWall; // type of the wall + file box.stl; // file name in stl folder + material wallMat; // material name of this wall + } +} + + + + + + diff --git a/tutorials/sphereGranFlow/rapidFilling/settings/particlesDict b/tutorials/sphereGranFlow/rapidFilling/settings/particlesDict new file mode 100755 index 00000000..fc7e32b5 --- /dev/null +++ b/tutorials/sphereGranFlow/rapidFilling/settings/particlesDict @@ -0,0 +1,58 @@ +/* -------------------------------*- C++ -*--------------------------------- *\ +| phasicFlow File | +| copyright: www.cemf.ir | +\* ------------------------------------------------------------------------- */ +objectName particlesDict; +objectType dictionary; +fileFormat ASCII; +/*---------------------------------------------------------------------------*/ +setFields +{ + /* + Default value for fields defined for particles + + These fields should always be defined for simulations with + + spherical particles. + */ + + defaultValue + { + velocity realx3 (0 0 0); // linear velocity (m/s) + + acceleration realx3 (0 0 0); // linear acceleration (m/s2) + + rVelocity realx3 (0 0 0); // rotational velocity (rad/s) + + shapeName word lightSphere; // name of the particle shape + } + + selectors + {} +} + +positionParticles // positions particles +{ + method file; // other options: empty, ordered and random + + fileInfo + { + name dataFile; // the name of the file that contains position and particle data, the data format is ASCII. The file is located at the root case folder + + numPoints 10000; + + fields ( (velocity realx3) (shapeName word) ); // (optional, it could be an empty list or omitted) list of other fields/data that should be read from the file + + commaSeparated No; // optional (default is No). if Yes, then fields are separated by a comma + } + + regionType box; // other options: cylinder and sphere + + boxInfo // box region for positioning particles + { + min (-0.08 -0.08 0.015); // lower corner point of the box + + max ( 0.08 0.08 0.098); // upper corner point of the box + } +} + diff --git a/tutorials/sphereGranFlow/rapidFilling/settings/settingsDict b/tutorials/sphereGranFlow/rapidFilling/settings/settingsDict new file mode 100755 index 00000000..c5b6650d --- /dev/null +++ b/tutorials/sphereGranFlow/rapidFilling/settings/settingsDict @@ -0,0 +1,42 @@ +/* -------------------------------*- C++ -*--------------------------------- *\ +| phasicFlow File | +| copyright: www.cemf.ir | +\* ------------------------------------------------------------------------- */ +objectName settingsDict; +objectType dictionary; +fileFormat ASCII; +/*---------------------------------------------------------------------------*/ +run layerdSiloFilling; + +dt 0.00005; // time step for integration (s) + +startTime 0.0; // start time for simulation + +endTime 5.0; // end time for simulation + +saveInterval 0.05; // time interval for saving the simulation + +timePrecision 6; // maximum number of digits for time folder + +g (0 0 -9.8); // gravity vector (m/s2) + +// save data objects that are not automatically saved on disk. + +// overrides the default behavior + +includeObjects (diameter); + +// exclude unnecessary data from saving on disk + +excludeObjects (rVelocity.dy1 pStructPosition.dy1 pStructVelocity.dy1); + +integrationMethod AdamsBashforth2; // integration method + +writeFormat ascii; // data writting format (ascii or binary) + +timersReport Yes; // report timers + +timersReportInterval 0.01; // time interval for reporting timers + + + diff --git a/tutorials/sphereGranFlow/rapidFilling/stl/belt.stl b/tutorials/sphereGranFlow/rapidFilling/stl/belt.stl new file mode 100644 index 00000000..6ab0e13b --- /dev/null +++ b/tutorials/sphereGranFlow/rapidFilling/stl/belt.stl @@ -0,0 +1,198 @@ +solid + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -0.1 0.045 -0.145 + vertex -0.1 0.05 -0.12 + vertex -0.1 0.05 -0.15 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -0.1 0.045 -0.145 + vertex -0.1 0.045 -0.12 + vertex -0.1 0.05 -0.12 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -0.1 0.05 -0.15 + vertex -0.1 -0.05 -0.15 + vertex -0.1 0.045 -0.145 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -0.1 -0.05 -0.15 + vertex -0.1 -0.045 -0.145 + vertex -0.1 0.045 -0.145 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -0.1 -0.045 -0.145 + vertex -0.1 -0.05 -0.12 + vertex -0.1 -0.045 -0.12 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -0.1 -0.05 -0.15 + vertex -0.1 -0.05 -0.12 + vertex -0.1 -0.045 -0.145 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -0.1 -0.05 -0.15 + vertex -0.1 0.05 -0.15 + vertex 0.2 0.05 -0.15 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -0.1 -0.05 -0.15 + vertex 0.2 0.05 -0.15 + vertex 0.2 -0.05 -0.15 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 0.2 0.05 -0.12 + vertex 0.2 0.045 -0.145 + vertex 0.2 0.05 -0.15 + endloop + endfacet + facet normal 1.000000 -0.000000 0.000000 + outer loop + vertex 0.2 0.045 -0.12 + vertex 0.2 0.045 -0.145 + vertex 0.2 0.05 -0.12 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 0.2 -0.05 -0.15 + vertex 0.2 0.05 -0.15 + vertex 0.2 0.045 -0.145 + endloop + endfacet + facet normal 1.000000 -0.000000 0.000000 + outer loop + vertex 0.2 -0.045 -0.145 + vertex 0.2 -0.05 -0.15 + vertex 0.2 0.045 -0.145 + endloop + endfacet + facet normal 1.000000 -0.000000 0.000000 + outer loop + vertex 0.2 -0.05 -0.12 + vertex 0.2 -0.045 -0.145 + vertex 0.2 -0.045 -0.12 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 0.2 -0.05 -0.12 + vertex 0.2 -0.05 -0.15 + vertex 0.2 -0.045 -0.145 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -0.1 -0.05 -0.15 + vertex 0.2 -0.05 -0.15 + vertex 0.2 -0.05 -0.12 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -0.1 -0.05 -0.15 + vertex 0.2 -0.05 -0.12 + vertex -0.1 -0.05 -0.12 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 0.2 0.05 -0.12 + vertex -0.1 0.05 -0.15 + vertex -0.1 0.05 -0.12 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 0.2 0.05 -0.15 + vertex -0.1 0.05 -0.15 + vertex 0.2 0.05 -0.12 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -0.1 -0.05 -0.12 + vertex 0.2 -0.05 -0.12 + vertex 0.2 -0.045 -0.12 + endloop + endfacet + facet normal -0.000000 0.000000 1.000000 + outer loop + vertex -0.1 -0.045 -0.12 + vertex -0.1 -0.05 -0.12 + vertex 0.2 -0.045 -0.12 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -0.1 0.045 -0.12 + vertex 0.2 0.045 -0.12 + vertex 0.2 0.05 -0.12 + endloop + endfacet + facet normal -0.000000 0.000000 1.000000 + outer loop + vertex -0.1 0.05 -0.12 + vertex -0.1 0.045 -0.12 + vertex 0.2 0.05 -0.12 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -0.1 0.045 -0.145 + vertex 0.2 0.045 -0.145 + vertex 0.2 0.045 -0.12 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -0.1 0.045 -0.145 + vertex 0.2 0.045 -0.12 + vertex -0.1 0.045 -0.12 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -0.1 -0.045 -0.145 + vertex 0.2 -0.045 -0.145 + vertex 0.2 0.045 -0.145 + endloop + endfacet + facet normal -0.000000 0.000000 1.000000 + outer loop + vertex -0.1 0.045 -0.145 + vertex -0.1 -0.045 -0.145 + vertex 0.2 0.045 -0.145 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 0.2 -0.045 -0.145 + vertex -0.1 -0.045 -0.12 + vertex 0.2 -0.045 -0.12 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 0.2 -0.045 -0.145 + vertex -0.1 -0.045 -0.145 + vertex -0.1 -0.045 -0.12 + endloop + endfacet +endsolid diff --git a/tutorials/sphereGranFlow/rapidFilling/stl/box.stl b/tutorials/sphereGranFlow/rapidFilling/stl/box.stl new file mode 100644 index 00000000..3b0bb013 --- /dev/null +++ b/tutorials/sphereGranFlow/rapidFilling/stl/box.stl @@ -0,0 +1,198 @@ +solid + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.182 -0.073 -0.18 + vertex 0.182 0.069 -0.18 + vertex 0.182 0.069 -0.28 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.182 -0.073 -0.18 + vertex 0.182 0.069 -0.28 + vertex 0.182 -0.073 -0.28 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex 0.323 -0.073 -0.18 + vertex 0.182 -0.073 -0.18 + vertex 0.182 -0.073 -0.28 + endloop + endfacet + facet normal 0.000000 -1.000000 -0.000000 + outer loop + vertex 0.323 -0.073 -0.18 + vertex 0.182 -0.073 -0.28 + vertex 0.323 -0.073 -0.28 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 0.323 0.069 -0.18 + vertex 0.323 -0.073 -0.18 + vertex 0.323 -0.073 -0.28 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 0.323 0.069 -0.18 + vertex 0.323 -0.073 -0.28 + vertex 0.323 0.069 -0.28 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 0.182 0.069 -0.28 + vertex 0.323 0.069 -0.18 + vertex 0.323 0.069 -0.28 + endloop + endfacet + facet normal -0.000000 1.000000 0.000000 + outer loop + vertex 0.182 0.069 -0.18 + vertex 0.323 0.069 -0.18 + vertex 0.182 0.069 -0.28 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 0.182 0.069 -0.28 + vertex 0.323 0.069 -0.28 + vertex 0.182 -0.073 -0.28 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 0.182 -0.073 -0.28 + vertex 0.323 0.069 -0.28 + vertex 0.323 -0.073 -0.28 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 0.323 -0.073 -0.18 + vertex 0.318 -0.068 -0.18 + vertex 0.187 -0.068 -0.18 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 0.323 -0.073 -0.18 + vertex 0.187 -0.068 -0.18 + vertex 0.182 -0.073 -0.18 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 0.187 0.064 -0.18 + vertex 0.182 0.069 -0.18 + vertex 0.182 -0.073 -0.18 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 0.187 0.064 -0.18 + vertex 0.182 -0.073 -0.18 + vertex 0.187 -0.068 -0.18 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 0.318 0.064 -0.18 + vertex 0.318 -0.068 -0.18 + vertex 0.323 -0.073 -0.18 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 0.323 0.069 -0.18 + vertex 0.318 0.064 -0.18 + vertex 0.323 -0.073 -0.18 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 0.323 0.069 -0.18 + vertex 0.182 0.069 -0.18 + vertex 0.187 0.064 -0.18 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 0.323 0.069 -0.18 + vertex 0.187 0.064 -0.18 + vertex 0.318 0.064 -0.18 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 0.187 0.064 -0.18 + vertex 0.187 -0.068 -0.18 + vertex 0.187 0.064 -0.275 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 0.187 0.064 -0.275 + vertex 0.187 -0.068 -0.18 + vertex 0.187 -0.068 -0.275 + endloop + endfacet + facet normal -0.000000 1.000000 0.000000 + outer loop + vertex 0.187 -0.068 -0.18 + vertex 0.318 -0.068 -0.18 + vertex 0.187 -0.068 -0.275 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 0.187 -0.068 -0.275 + vertex 0.318 -0.068 -0.18 + vertex 0.318 -0.068 -0.275 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.318 -0.068 -0.18 + vertex 0.318 0.064 -0.18 + vertex 0.318 -0.068 -0.275 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.318 -0.068 -0.275 + vertex 0.318 0.064 -0.18 + vertex 0.318 0.064 -0.275 + endloop + endfacet + facet normal -0.000000 -1.000000 -0.000000 + outer loop + vertex 0.318 0.064 -0.18 + vertex 0.187 0.064 -0.18 + vertex 0.318 0.064 -0.275 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 0.318 0.064 -0.275 + vertex 0.187 0.064 -0.18 + vertex 0.187 0.064 -0.275 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 0.318 0.064 -0.275 + vertex 0.187 0.064 -0.275 + vertex 0.187 -0.068 -0.275 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 0.318 0.064 -0.275 + vertex 0.187 -0.068 -0.275 + vertex 0.318 -0.068 -0.275 + endloop + endfacet +endsolid