From 99da1d5a209b25264762a34f1985f7dae9174f6f Mon Sep 17 00:00:00 2001
From: Omid Khosravi <123903048+omid-khosravi@users.noreply.github.com>
Date: Sun, 26 Mar 2023 18:47:19 +0330
Subject: [PATCH 01/27] Create toteblender folder
---
tutorials/sphereGranFlow/toteblender/toteblender | 1 +
1 file changed, 1 insertion(+)
create mode 100644 tutorials/sphereGranFlow/toteblender/toteblender
diff --git a/tutorials/sphereGranFlow/toteblender/toteblender b/tutorials/sphereGranFlow/toteblender/toteblender
new file mode 100644
index 00000000..e8689b24
--- /dev/null
+++ b/tutorials/sphereGranFlow/toteblender/toteblender
@@ -0,0 +1 @@
+hh
From 46385b695315db53133ff2ec81f88bf17931ac1c Mon Sep 17 00:00:00 2001
From: Omid Khosravi <123903048+omid-khosravi@users.noreply.github.com>
Date: Sun, 26 Mar 2023 18:53:46 +0330
Subject: [PATCH 02/27] Add tote blender files via Upload
---
.../sphereGranFlow/toteblender/cleanThisCase | 7 +++++++
.../sphereGranFlow/toteblender/runThisCase | 21 +++++++++++++++++++
2 files changed, 28 insertions(+)
create mode 100644 tutorials/sphereGranFlow/toteblender/cleanThisCase
create mode 100644 tutorials/sphereGranFlow/toteblender/runThisCase
diff --git a/tutorials/sphereGranFlow/toteblender/cleanThisCase b/tutorials/sphereGranFlow/toteblender/cleanThisCase
new file mode 100644
index 00000000..8a0ab919
--- /dev/null
+++ b/tutorials/sphereGranFlow/toteblender/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/toteblender/runThisCase b/tutorials/sphereGranFlow/toteblender/runThisCase
new file mode 100644
index 00000000..c48d71fe
--- /dev/null
+++ b/tutorials/sphereGranFlow/toteblender/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
+
+
+
+
+#------------------------------------------------------------------------------
From 8666e87f83ef00fb86acbca990dc05a528b78bb9 Mon Sep 17 00:00:00 2001
From: Omid Khosravi <123903048+omid-khosravi@users.noreply.github.com>
Date: Sun, 26 Mar 2023 18:54:33 +0330
Subject: [PATCH 03/27] Delete test file
---
tutorials/sphereGranFlow/toteblender/toteblender | 1 -
1 file changed, 1 deletion(-)
delete mode 100644 tutorials/sphereGranFlow/toteblender/toteblender
diff --git a/tutorials/sphereGranFlow/toteblender/toteblender b/tutorials/sphereGranFlow/toteblender/toteblender
deleted file mode 100644
index e8689b24..00000000
--- a/tutorials/sphereGranFlow/toteblender/toteblender
+++ /dev/null
@@ -1 +0,0 @@
-hh
From bc3409d1540d75386833a31880d189ad14520052 Mon Sep 17 00:00:00 2001
From: Omid Khosravi <123903048+omid-khosravi@users.noreply.github.com>
Date: Sun, 26 Mar 2023 18:55:33 +0330
Subject: [PATCH 04/27] create test
---
tutorials/sphereGranFlow/toteblender/caseSetup/test | 1 +
1 file changed, 1 insertion(+)
create mode 100644 tutorials/sphereGranFlow/toteblender/caseSetup/test
diff --git a/tutorials/sphereGranFlow/toteblender/caseSetup/test b/tutorials/sphereGranFlow/toteblender/caseSetup/test
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/tutorials/sphereGranFlow/toteblender/caseSetup/test
@@ -0,0 +1 @@
+
From 1b0667576bde9bb0bc2e5042c0f997bb4e011a26 Mon Sep 17 00:00:00 2001
From: Omid Khosravi <123903048+omid-khosravi@users.noreply.github.com>
Date: Sun, 26 Mar 2023 18:56:03 +0330
Subject: [PATCH 05/27] Add caseSetup files via Upload
---
.../toteblender/caseSetup/interaction | 61 +++++++++++++++++++
.../toteblender/caseSetup/particleInsertion | 13 ++++
.../toteblender/caseSetup/sphereShape | 13 ++++
3 files changed, 87 insertions(+)
create mode 100644 tutorials/sphereGranFlow/toteblender/caseSetup/interaction
create mode 100644 tutorials/sphereGranFlow/toteblender/caseSetup/particleInsertion
create mode 100644 tutorials/sphereGranFlow/toteblender/caseSetup/sphereShape
diff --git a/tutorials/sphereGranFlow/toteblender/caseSetup/interaction b/tutorials/sphereGranFlow/toteblender/caseSetup/interaction
new file mode 100644
index 00000000..f97d2f4f
--- /dev/null
+++ b/tutorials/sphereGranFlow/toteblender/caseSetup/interaction
@@ -0,0 +1,61 @@
+/* -------------------------------*- C++ -*--------------------------------- *\
+| phasicFlow File |
+| copyright: www.cemf.ir |
+\* ------------------------------------------------------------------------- */
+objectName interaction;
+objectType dicrionary;
+/* ------------------------------------------------------------------------- */
+// a list of materials names
+materials (prop1);
+// density of materials [kg/m3]
+densities (1000.0);
+
+contactListType sortedContactList;
+
+model
+{
+ contactForceModel nonLinearNonLimited;
+ rollingFrictionModel normal;
+ /*
+ Property (prop1-prop1);
+ */
+// Young modulus [Pa]
+ Yeff (1.0e6);
+// Shear modulus [Pa]
+ Geff (0.8e6);
+// Poisson's ratio [-]
+ nu (0.25);
+// coefficient of normal restitution
+ en (0.7);
+// coefficient of tangential restitution
+ et (1.0);
+// dynamic friction
+ mu (0.3);
+// rolling friction
+ mur (0.1);
+
+}
+contactSearch
+{
+// method for broad search particle-particle
+ method NBS;
+// method for broad search particle-wall
+ wallMapping cellMapping;
+
+ NBSInfo
+ {
+ // each 20 timesteps, update neighbor list
+ updateFrequency 20;
+ // bounding box size to particle diameter (max)
+ sizeRatio 1.1;
+ }
+
+ cellMappingInfo
+ {
+ // each 20 timesteps, update neighbor list
+ updateFrequency 20;
+ // bounding box for particle-wall search (> 0.5)
+ cellExtent 0.7;
+ }
+
+}
\ No newline at end of file
diff --git a/tutorials/sphereGranFlow/toteblender/caseSetup/particleInsertion b/tutorials/sphereGranFlow/toteblender/caseSetup/particleInsertion
new file mode 100644
index 00000000..d8f022c6
--- /dev/null
+++ b/tutorials/sphereGranFlow/toteblender/caseSetup/particleInsertion
@@ -0,0 +1,13 @@
+/* -------------------------------*- C++ -*--------------------------------- *\
+| phasicFlow File |
+| copyright: www.cemf.ir |
+\* ------------------------------------------------------------------------- */
+objectName particleInsertion;
+objectType dicrionary;
+/* ------------------------------------------------------------------------- */
+// is insertion active?
+active no;
+// not implemented for yes
+collisionCheck No;
+
+
diff --git a/tutorials/sphereGranFlow/toteblender/caseSetup/sphereShape b/tutorials/sphereGranFlow/toteblender/caseSetup/sphereShape
new file mode 100644
index 00000000..ff2df8d1
--- /dev/null
+++ b/tutorials/sphereGranFlow/toteblender/caseSetup/sphereShape
@@ -0,0 +1,13 @@
+/* -------------------------------*- C++ -*--------------------------------- *\
+| phasicFlow File |
+| copyright: www.cemf.ir |
+\* ------------------------------------------------------------------------- */
+objectName sphereDict;
+objectType sphereShape;
+/* ------------------------------------------------------------------------- */
+// names of shapes
+names (sphere1);
+// diameter of shapes (m)
+diameters (0.004);
+// material names for shapes
+materials (prop1);
\ No newline at end of file
From 4ecc667a10ad36fd72dd44ad15cd493c54bb53af Mon Sep 17 00:00:00 2001
From: Omid Khosravi <123903048+omid-khosravi@users.noreply.github.com>
Date: Sun, 26 Mar 2023 18:56:41 +0330
Subject: [PATCH 06/27] Delete test
---
tutorials/sphereGranFlow/toteblender/caseSetup/test | 1 -
1 file changed, 1 deletion(-)
delete mode 100644 tutorials/sphereGranFlow/toteblender/caseSetup/test
diff --git a/tutorials/sphereGranFlow/toteblender/caseSetup/test b/tutorials/sphereGranFlow/toteblender/caseSetup/test
deleted file mode 100644
index 8b137891..00000000
--- a/tutorials/sphereGranFlow/toteblender/caseSetup/test
+++ /dev/null
@@ -1 +0,0 @@
-
From 05328a395171d805e57c20194d8caf2e1cc5e406 Mon Sep 17 00:00:00 2001
From: Omid Khosravi <123903048+omid-khosravi@users.noreply.github.com>
Date: Sun, 26 Mar 2023 18:57:13 +0330
Subject: [PATCH 07/27] Create test
---
tutorials/sphereGranFlow/toteblender/settings/test | 1 +
1 file changed, 1 insertion(+)
create mode 100644 tutorials/sphereGranFlow/toteblender/settings/test
diff --git a/tutorials/sphereGranFlow/toteblender/settings/test b/tutorials/sphereGranFlow/toteblender/settings/test
new file mode 100644
index 00000000..6a69f920
--- /dev/null
+++ b/tutorials/sphereGranFlow/toteblender/settings/test
@@ -0,0 +1 @@
+f
From 0dcff307a6181f3b64f0f6834a2c9aca4443c95a Mon Sep 17 00:00:00 2001
From: Omid Khosravi <123903048+omid-khosravi@users.noreply.github.com>
Date: Sun, 26 Mar 2023 18:57:44 +0330
Subject: [PATCH 08/27] Add settings files via Upload
---
.../toteblender/settings/geometryDict | 151 ++++++++++++++++++
.../toteblender/settings/particlesDict | 59 +++++++
.../toteblender/settings/settingsDict | 34 ++++
3 files changed, 244 insertions(+)
create mode 100644 tutorials/sphereGranFlow/toteblender/settings/geometryDict
create mode 100644 tutorials/sphereGranFlow/toteblender/settings/particlesDict
create mode 100644 tutorials/sphereGranFlow/toteblender/settings/settingsDict
diff --git a/tutorials/sphereGranFlow/toteblender/settings/geometryDict b/tutorials/sphereGranFlow/toteblender/settings/geometryDict
new file mode 100644
index 00000000..49d486bd
--- /dev/null
+++ b/tutorials/sphereGranFlow/toteblender/settings/geometryDict
@@ -0,0 +1,151 @@
+/* -------------------------------*- C++ -*--------------------------------- *\
+| phasicFlow File |
+| copyright: www.cemf.ir |
+\* ------------------------------------------------------------------------- */
+objectName geometryDict;
+objectType dictionary;
+/* ------------------------------------------------------------------------- */
+// motion model: rotating object around an axis
+motionModel rotatingAxisMotion;
+
+surfaces
+{
+ enterGate
+ {
+ // type of wall
+ type planeWall;
+ // coords of wall
+ p1 (-0.05 -0.05 0.3);
+ p2 (-0.05 0.05 0.3);
+ p3 ( 0.05 0.05 0.3);
+ p4 (0.05 -0.05 0.3);
+ // material of wall
+ material prop1;
+ // motion component name
+ motion rotAxis;
+ }
+
+ cylinderinlet
+ {
+ // type of the wall
+ type cylinderWall;
+ // begin point of cylinder axis
+ p1 (0.0 0.0 0.28);
+ // end point of cylinder axis
+ p2 (0.0 0.0 0.3);
+ // radius at p1
+ radius1 0.03;
+ // radius at p2
+ radius2 0.03;
+ // number of divisions
+ resolution 36;
+ // material name of this wall
+ material prop1;
+ // motion component name
+ motion rotAxis;
+ }
+
+ coneShelltop
+ {
+ // type of the wall
+ type cylinderWall;
+ // begin point of cylinder axis
+ p1 (0.0 0.0 0.2);
+ // end point of cylinder axis
+ p2 (0.0 0.0 0.28);
+ // radius at p1
+ radius1 0.1;
+ // radius at p2
+ radius2 0.03;
+ // number of divisions
+ resolution 36;
+ // material name of this wall
+ material prop1;
+ // motion component name
+ motion rotAxis;
+ }
+
+ cylinderShell
+ {
+ // type of the wall
+ type cylinderWall;
+ // begin point of cylinder axis
+ p1 (0.0 0.0 0.1);
+ // end point of cylinder axis
+ p2 (0.0 0.0 0.2);
+ // radius at p1
+ radius1 0.1;
+ // radius at p2
+ radius2 0.1;
+ // number of divisions
+ resolution 36;
+ // material name of this wall
+ material prop1;
+ // motion component name
+ motion rotAxis;
+ }
+
+ coneShelldown
+ {
+ // type of the wall
+ type cylinderWall;
+ // begin point of cylinder axis
+ p1 (0.0 0.0 0.02);
+ // end point of cylinder axis
+ p2 (0.0 0.0 0.1);
+ // radius at p1
+ radius1 0.03;
+ // radius at p2
+ radius2 0.1;
+ // number of divisions
+ resolution 36;
+ // material name of this wall
+ material prop1;
+ // motion component name
+ motion rotAxis;
+ }
+ /*
+ This is a plane wall at the exit of silo
+ */
+
+ cylinderoutlet
+ {
+ // type of the wall
+ type cylinderWall;
+ // begin point of cylinder axis
+ p1 (0.0 0.0 0.0);
+ // end point of cylinder axis
+ p2 (0.0 0.0 0.02);
+ // radius at p1
+ radius1 0.03;
+ // radius at p2
+ radius2 0.03;
+ // number of divisions
+ resolution 36;
+ // material name of this wall
+ material prop1;
+ // motion component name
+ motion rotAxis;
+ }
+ exitGate
+ {
+ type planeWall;
+ p1 (-0.05 -0.05 0);
+ p2 (-0.05 0.05 0);
+ p3 ( 0.05 0.05 0);
+ p4 (0.05 -0.05 0);
+ material prop1;
+ motion rotAxis;
+ }
+
+}
+// information for rotatingAxisMotion motion model
+rotatingAxisMotionInfo
+{
+ rotAxis
+ {
+ p1 (-0.1 0.0 0.15); // first point for the axis of rotation
+ p2 (0.1 0.0 0.15); // second point for the axis of rotation
+ omega 3; // rotation speed (rad/s)
+ }
+}
diff --git a/tutorials/sphereGranFlow/toteblender/settings/particlesDict b/tutorials/sphereGranFlow/toteblender/settings/particlesDict
new file mode 100644
index 00000000..49a26e76
--- /dev/null
+++ b/tutorials/sphereGranFlow/toteblender/settings/particlesDict
@@ -0,0 +1,59 @@
+/* -------------------------------*- C++ -*--------------------------------- *\
+| phasicFlow File |
+| copyright: www.cemf.ir |
+\* ------------------------------------------------------------------------- */
+objectName particlesDict;
+objectType dictionary;
+/* ------------------------------------------------------------------------- */
+setFields
+{
+ /*
+ Default value for fields defined for particles
+ These fields should always be defined for simulations with
+ spherical particles.
+ */
+
+ defaultValue
+ {
+// linear velocity (m/s)
+ velocity realx3 (0 0 0);
+// linear acceleration (m/s2)
+ acceleration realx3 (0 0 0);
+// rotational velocity (rad/s)
+ rotVelocity realx3 (0 0 0);
+// name of the particle shape
+ shapeName word sphere1;
+ }
+
+ selectors
+ {}
+}
+
+// positions particles
+positionParticles
+{
+// ordered positioning
+ method positionOrdered;
+// maximum number of particles in the simulation
+ maxNumberOfParticles 40000;
+// perform initial sorting based on morton code?
+ mortonSorting Yes;
+// box for positioning particles
+ box
+ {
+// lower corner point of the box
+ min (-0.06 -0.06 0.08);
+// upper corner point of the box
+ max (0.06 0.06 0.18);
+ }
+
+ positionOrderedInfo
+ {
+// minimum space between centers of particles
+ diameter 0.004;
+// number of particles in the simulation
+ numPoints 20000;
+// axis order for filling the space with particles
+ axisOrder (z y x);
+ }
+}
diff --git a/tutorials/sphereGranFlow/toteblender/settings/settingsDict b/tutorials/sphereGranFlow/toteblender/settings/settingsDict
new file mode 100644
index 00000000..28b9a552
--- /dev/null
+++ b/tutorials/sphereGranFlow/toteblender/settings/settingsDict
@@ -0,0 +1,34 @@
+/* -------------------------------*- C++ -*--------------------------------- *\
+| phasicFlow File |
+| copyright: www.cemf.ir |
+\* ------------------------------------------------------------------------- */
+objectName settingsDict;
+objectType dictionary;;
+/*---------------------------------------------------------------------------*/
+run toteBlender;
+// time step for integration (s)
+dt 0.00001;
+// start time for simulation
+startTime 0;
+// end time for simulation
+endTime 10;
+// time interval for saving the simulation
+saveInterval 0.1;
+// maximum number of digits for time folder
+timePrecision 6;
+// gravity vector (m/s2)
+g (0 0 -9.8);
+
+/* Simulation domain */
+/* every particles that goes outside this domain is deleted. */
+domain
+{
+ min (-0.5 -0.5 -0.5);
+ max (0.5 0.5 0.5);
+}
+// integration method
+integrationMethod AdamsBashforth2;
+// report timers?
+timersReport Yes;
+// time interval for reporting timers
+timersReportInterval 0.01;
From d4dc0d7e80663a3a3d7de210ce800ffdc1da1710 Mon Sep 17 00:00:00 2001
From: Omid Khosravi <123903048+omid-khosravi@users.noreply.github.com>
Date: Sun, 26 Mar 2023 18:58:15 +0330
Subject: [PATCH 09/27] Delete test
---
tutorials/sphereGranFlow/toteblender/settings/test | 1 -
1 file changed, 1 deletion(-)
delete mode 100644 tutorials/sphereGranFlow/toteblender/settings/test
diff --git a/tutorials/sphereGranFlow/toteblender/settings/test b/tutorials/sphereGranFlow/toteblender/settings/test
deleted file mode 100644
index 6a69f920..00000000
--- a/tutorials/sphereGranFlow/toteblender/settings/test
+++ /dev/null
@@ -1 +0,0 @@
-f
From 04d7ecfe9e91155945c541ec28ef6fae0bb746f9 Mon Sep 17 00:00:00 2001
From: Omid Khosravi <123903048+omid-khosravi@users.noreply.github.com>
Date: Sun, 26 Mar 2023 18:58:42 +0330
Subject: [PATCH 10/27] Add ReadMe file via Upload
---
.../sphereGranFlow/toteblender/ReadMe.md | 244 ++++++++++++++++++
1 file changed, 244 insertions(+)
create mode 100644 tutorials/sphereGranFlow/toteblender/ReadMe.md
diff --git a/tutorials/sphereGranFlow/toteblender/ReadMe.md b/tutorials/sphereGranFlow/toteblender/ReadMe.md
new file mode 100644
index 00000000..4a9ff9bf
--- /dev/null
+++ b/tutorials/sphereGranFlow/toteblender/ReadMe.md
@@ -0,0 +1,244 @@
+# Problem Definition
+The problem is to simulate a double pedestal tote blender with the diameter **0.03 m** and **0.1 m** respectively, the length **0.3 m**, rotating at **28 rpm**. This blender is filled with **20000** Particles. The timestep for integration is **0.00001 s**. There is one type of Particle in this blender that are being inserted during simulation to fill the drum.
+* **20000** particles with **4 mm** diameter, at the rate of 20000 particles/s for 1 sec.
+
+
+
+
+ a view of the tote-blender while rotating
+
+
+

+
+
+
+
+# Setting up the Case
+As it has been explained in the previous cases, the simulation case setup is based on text-based scripts. Here, the simulation case setup are sotred in two folders: `caseSetup`, `setting`. (see the above folders). Unlike the previous cases, this case does not have the `stl` file. and the geometry is described in the `geometryDict` file.
+
+## Defining particles
+Then in the `caseSetup/sphereShape` the diameter and the material name of the particles are defined.
+```C++
+// names of shapes
+names (sphere1);
+// diameter of shapes (m)
+diameters (0.004);
+// material names for shapes
+materials (prop1);
+```
+## Particle Insertion
+In this case we have a region for ordering particles. These particles are placed in this blender. For example the script for the inserted particles is shown below.
+
+
+in caseSetup/particleInsertion file
+
+
+```C++
+// positions particles
+positionParticles
+{
+// ordered positioning
+ method positionOrdered;
+// maximum number of particles in the simulation
+ maxNumberOfParticles 40000;
+// perform initial sorting based on morton code?
+ mortonSorting Yes;
+// box for positioning particles
+ box
+ {
+// lower corner point of the box
+ min (-0.06 -0.06 0.08);
+// upper corner point of the box
+ max (0.06 0.06 0.18);
+ }
+```
+ ## Interaction between particles
+ In `caseSetup/interaction` file, material names and properties and interaction parameters are defined: interaction between the particles of rotating drum. Since we are defining 1 material for simulation, the interaction matrix is 1x1 (interactions are symetric).
+```C++
+ // a list of materials names
+materials (prop1);
+// density of materials [kg/m3]
+densities (1000.0);
+
+contactListType sortedContactList;
+
+model
+{
+ contactForceModel nonLinearNonLimited;
+ rollingFrictionModel normal;
+ /*
+ Property (prop1-prop1);
+ */
+// Young modulus [Pa]
+ Yeff (1.0e6);
+// Shear modulus [Pa]
+ Geff (0.8e6);
+// Poisson's ratio [-]
+ nu (0.25);
+// coefficient of normal restitution
+ en (0.7);
+// coefficient of tangential restitution
+ et (1.0);
+// dynamic friction
+ mu (0.3);
+// rolling friction
+ mur (0.1);
+
+}
+```
+## Settings
+### Geometry
+In the `settings/geometryDict` file, the geometry and axis of rotation is defined for the drum. The geometry is composed of a cylinder inlet and outlet, cone shell top and down, a cylinder shell and enter and exit Gate.
+```C++
+surfaces
+{
+ enterGate
+ {
+ // type of wall
+ type planeWall;
+ // coords of wall
+ p1 (-0.05 -0.05 0.3);
+ p2 (-0.05 0.05 0.3);
+ p3 ( 0.05 0.05 0.3);
+ p4 (0.05 -0.05 0.3);
+ // material of wall
+ material prop1;
+ // motion component name
+ motion rotAxis;
+ }
+
+ cylinderinlet
+ {
+ // type of the wall
+ type cylinderWall;
+ // begin point of cylinder axis
+ p1 (0.0 0.0 0.28);
+ // end point of cylinder axis
+ p2 (0.0 0.0 0.3);
+ // radius at p1
+ radius1 0.03;
+ // radius at p2
+ radius2 0.03;
+ // number of divisions
+ resolution 36;
+ // material name of this wall
+ material prop1;
+ // motion component name
+ motion rotAxis;
+ }
+
+ coneShelltop
+ {
+ // type of the wall
+ type cylinderWall;
+ // begin point of cylinder axis
+ p1 (0.0 0.0 0.2);
+ // end point of cylinder axis
+ p2 (0.0 0.0 0.28);
+ // radius at p1
+ radius1 0.1;
+ // radius at p2
+ radius2 0.03;
+ // number of divisions
+ resolution 36;
+ // material name of this wall
+ material prop1;
+ // motion component name
+ motion rotAxis;
+ }
+
+ cylinderShell
+ {
+ // type of the wall
+ type cylinderWall;
+ // begin point of cylinder axis
+ p1 (0.0 0.0 0.1);
+ // end point of cylinder axis
+ p2 (0.0 0.0 0.2);
+ // radius at p1
+ radius1 0.1;
+ // radius at p2
+ radius2 0.1;
+ // number of divisions
+ resolution 36;
+ // material name of this wall
+ material prop1;
+ // motion component name
+ motion rotAxis;
+ }
+
+ coneShelldown
+ {
+ // type of the wall
+ type cylinderWall;
+ // begin point of cylinder axis
+ p1 (0.0 0.0 0.02);
+ // end point of cylinder axis
+ p2 (0.0 0.0 0.1);
+ // radius at p1
+ radius1 0.03;
+ // radius at p2
+ radius2 0.1;
+ // number of divisions
+ resolution 36;
+ // material name of this wall
+ material prop1;
+ // motion component name
+ motion rotAxis;
+ }
+ /*
+ This is a plane wall at the exit of silo
+ */
+
+ cylinderoutlet
+ {
+ // type of the wall
+ type cylinderWall;
+ // begin point of cylinder axis
+ p1 (0.0 0.0 0.0);
+ // end point of cylinder axis
+ p2 (0.0 0.0 0.02);
+ // radius at p1
+ radius1 0.03;
+ // radius at p2
+ radius2 0.03;
+ // number of divisions
+ resolution 36;
+ // material name of this wall
+ material prop1;
+ // motion component name
+ motion rotAxis;
+ }
+ exitGate
+ {
+ type planeWall;
+ p1 (-0.05 -0.05 0);
+ p2 (-0.05 0.05 0);
+ p3 ( 0.05 0.05 0);
+ p4 (0.05 -0.05 0);
+ material prop1;
+ motion rotAxis;
+ }
+
+}
+```
+### Rotating Axis Info
+In this part of `geometryDict` the information of rotating axis and speed of rotation are defined. Unlike the previous cases, the rotation of this blender starts at time=**0 s**.
+```C++
+rotatingAxisMotionInfo
+{
+ rotAxis
+ {
+ p1 (-0.1 0.0 0.15); // first point for the axis of rotation
+ p2 (0.1 0.0 0.15); // second point for the axis of rotation
+ omega 3; // rotation speed (rad/s)
+ }
+}
+```
+## Performing Simulation
+To perform simulations, enter the following commands one after another in the terminal.
+
+Enter `$ particlesPhasicFlow` command to create the initial fields for particles.
+Enter `$ geometryPhasicFlow` command to create the Geometry.
+At last, enter `$ sphereGranFlow` command to start the simulation.
+After finishing the simulation, you can use `$ pFlowtoVTK` to convert the results into vtk format storred in ./VTK folder.
\ No newline at end of file
From 7dee94e29787b200083dd2291525ebd98e783c7c Mon Sep 17 00:00:00 2001
From: Omid Khosravi
Date: Sun, 26 Mar 2023 22:23:50 +0430
Subject: [PATCH 11/27] Update settingsDict
Efficient domain
---
tutorials/sphereGranFlow/toteblender/settings/settingsDict | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tutorials/sphereGranFlow/toteblender/settings/settingsDict b/tutorials/sphereGranFlow/toteblender/settings/settingsDict
index 28b9a552..d5a05a48 100644
--- a/tutorials/sphereGranFlow/toteblender/settings/settingsDict
+++ b/tutorials/sphereGranFlow/toteblender/settings/settingsDict
@@ -23,7 +23,7 @@ g (0 0 -9.8);
/* every particles that goes outside this domain is deleted. */
domain
{
- min (-0.5 -0.5 -0.5);
+ min (-0.3 -0.3 -0.3);
max (0.5 0.5 0.5);
}
// integration method
From 55f0b6c0c1c38dad4da80696160df94f3cc2c2e7 Mon Sep 17 00:00:00 2001
From: Omid Khosravi
Date: Sun, 26 Mar 2023 23:04:39 +0430
Subject: [PATCH 12/27] Update geometryDict
Rotation Speed
rotating axis instead of rot axis
move rotating axis info to motion model
---
.../toteblender/settings/geometryDict | 23 +++++++++----------
1 file changed, 11 insertions(+), 12 deletions(-)
diff --git a/tutorials/sphereGranFlow/toteblender/settings/geometryDict b/tutorials/sphereGranFlow/toteblender/settings/geometryDict
index 49d486bd..bb045806 100644
--- a/tutorials/sphereGranFlow/toteblender/settings/geometryDict
+++ b/tutorials/sphereGranFlow/toteblender/settings/geometryDict
@@ -7,7 +7,16 @@ objectType dictionary;
/* ------------------------------------------------------------------------- */
// motion model: rotating object around an axis
motionModel rotatingAxisMotion;
-
+// information for rotatingAxisMotion motion model
+rotatingAxisMotionInfo
+{
+ axisOfRotation
+ {
+ p1 (-0.1 0.0 0.15); // first point for the axis of rotation
+ p2 (0.1 0.0 0.15); // second point for the axis of rotation
+ omega 1.5708; // rotation speed ==> 15 rad/s
+ }
+}
surfaces
{
enterGate
@@ -22,7 +31,7 @@ surfaces
// material of wall
material prop1;
// motion component name
- motion rotAxis;
+ motion axisOfRotation;
}
cylinderinlet
@@ -139,13 +148,3 @@ surfaces
}
}
-// information for rotatingAxisMotion motion model
-rotatingAxisMotionInfo
-{
- rotAxis
- {
- p1 (-0.1 0.0 0.15); // first point for the axis of rotation
- p2 (0.1 0.0 0.15); // second point for the axis of rotation
- omega 3; // rotation speed (rad/s)
- }
-}
From 013764669bddd242e226b7c167cc9f840f1eadcf Mon Sep 17 00:00:00 2001
From: Omid Khosravi
Date: Sun, 26 Mar 2023 23:20:30 +0430
Subject: [PATCH 13/27] Update geometryDict
axisOfRotation instead of rotAxis
---
.../sphereGranFlow/toteblender/settings/geometryDict | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/tutorials/sphereGranFlow/toteblender/settings/geometryDict b/tutorials/sphereGranFlow/toteblender/settings/geometryDict
index bb045806..5ca048c8 100644
--- a/tutorials/sphereGranFlow/toteblender/settings/geometryDict
+++ b/tutorials/sphereGranFlow/toteblender/settings/geometryDict
@@ -51,7 +51,7 @@ surfaces
// material name of this wall
material prop1;
// motion component name
- motion rotAxis;
+ motion axisOfRotation;
}
coneShelltop
@@ -71,7 +71,7 @@ surfaces
// material name of this wall
material prop1;
// motion component name
- motion rotAxis;
+ motion axisOfRotation;
}
cylinderShell
@@ -91,7 +91,7 @@ surfaces
// material name of this wall
material prop1;
// motion component name
- motion rotAxis;
+ motion axisOfRotation;
}
coneShelldown
@@ -111,7 +111,7 @@ surfaces
// material name of this wall
material prop1;
// motion component name
- motion rotAxis;
+ motion axisOfRotation;
}
/*
This is a plane wall at the exit of silo
@@ -134,7 +134,7 @@ surfaces
// material name of this wall
material prop1;
// motion component name
- motion rotAxis;
+ motion axisOfRotation;
}
exitGate
{
@@ -144,7 +144,7 @@ surfaces
p3 ( 0.05 0.05 0);
p4 (0.05 -0.05 0);
material prop1;
- motion rotAxis;
+ motion axisOfRotation;
}
}
From e504606a05cf737d27c1e5da13987af7e88a44f7 Mon Sep 17 00:00:00 2001
From: Omid Khosravi
Date: Sun, 26 Mar 2023 23:26:17 +0430
Subject: [PATCH 14/27] Update particlesDict
Particles order changed from (z y x) to (x y z)
---
tutorials/sphereGranFlow/toteblender/settings/particlesDict | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tutorials/sphereGranFlow/toteblender/settings/particlesDict b/tutorials/sphereGranFlow/toteblender/settings/particlesDict
index 49a26e76..4b2ef43e 100644
--- a/tutorials/sphereGranFlow/toteblender/settings/particlesDict
+++ b/tutorials/sphereGranFlow/toteblender/settings/particlesDict
@@ -54,6 +54,6 @@ positionParticles
// number of particles in the simulation
numPoints 20000;
// axis order for filling the space with particles
- axisOrder (z y x);
+ axisOrder (x y z);
}
}
From 55085648e6d175a005c33c4cdca35099ae3ee63d Mon Sep 17 00:00:00 2001
From: Omid Khosravi
Date: Sun, 26 Mar 2023 23:33:07 +0430
Subject: [PATCH 15/27] Update geometryDict
Added start and end time of rotation.
first phase settling of particles and then rotation
---
tutorials/sphereGranFlow/toteblender/settings/geometryDict | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/tutorials/sphereGranFlow/toteblender/settings/geometryDict b/tutorials/sphereGranFlow/toteblender/settings/geometryDict
index 5ca048c8..b30e9a0e 100644
--- a/tutorials/sphereGranFlow/toteblender/settings/geometryDict
+++ b/tutorials/sphereGranFlow/toteblender/settings/geometryDict
@@ -15,6 +15,10 @@ rotatingAxisMotionInfo
p1 (-0.1 0.0 0.15); // first point for the axis of rotation
p2 (0.1 0.0 0.15); // second point for the axis of rotation
omega 1.5708; // rotation speed ==> 15 rad/s
+ // Start time of Geometry Rotating (s)
+ startTime 1;
+ // End time of Geometry Rotating (s)
+ endTime 9.5;
}
}
surfaces
From 9580c4cdcd15d159c8123d0e5ebc74891d7b9921 Mon Sep 17 00:00:00 2001
From: Omid Khosravi
Date: Tue, 28 Mar 2023 02:06:40 +0430
Subject: [PATCH 16/27] Update particlesDict
change the insert region from box to cylinder
---
.../sphereGranFlow/toteblender/settings/particlesDict | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/tutorials/sphereGranFlow/toteblender/settings/particlesDict b/tutorials/sphereGranFlow/toteblender/settings/particlesDict
index 4b2ef43e..f78dc644 100644
--- a/tutorials/sphereGranFlow/toteblender/settings/particlesDict
+++ b/tutorials/sphereGranFlow/toteblender/settings/particlesDict
@@ -39,12 +39,13 @@ positionParticles
// perform initial sorting based on morton code?
mortonSorting Yes;
// box for positioning particles
- box
+ cylinder
{
-// lower corner point of the box
- min (-0.06 -0.06 0.08);
-// upper corner point of the box
- max (0.06 0.06 0.18);
+// Coordinates of cylinderRegion (m,m,m)x
+ p1 (0.03 0.06 0.08);
+ p2 (0.03 0.06 0.18);
+// radius of cylinder
+ radius 0.035;
}
positionOrderedInfo
From b9d8aab1afaaa1fc4d6d3d78e4b19745b4930a2b Mon Sep 17 00:00:00 2001
From: Omid Khosravi
Date: Tue, 28 Mar 2023 16:53:07 +0430
Subject: [PATCH 17/27] Update tote blender
Changed the particle insert region from box to cylinder
---
.../toteblender/settings/particlesDict | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/tutorials/sphereGranFlow/toteblender/settings/particlesDict b/tutorials/sphereGranFlow/toteblender/settings/particlesDict
index f78dc644..8cccaabf 100644
--- a/tutorials/sphereGranFlow/toteblender/settings/particlesDict
+++ b/tutorials/sphereGranFlow/toteblender/settings/particlesDict
@@ -38,23 +38,23 @@ positionParticles
maxNumberOfParticles 40000;
// perform initial sorting based on morton code?
mortonSorting Yes;
-// box for positioning particles
- cylinder
+// cylinder for positioning particles
+ cylinder
{
-// Coordinates of cylinderRegion (m,m,m)x
- p1 (0.03 0.06 0.08);
- p2 (0.03 0.06 0.18);
+// Coordinates of top cylinderRegion (m,m,m)
+ p1 (0.05 0.0 0.12);
+ p2 (0.05 0.0 0.22);
// radius of cylinder
- radius 0.035;
+ radius 0.066;
}
positionOrderedInfo
{
// minimum space between centers of particles
- diameter 0.004;
+ diameter 0.003;
// number of particles in the simulation
numPoints 20000;
// axis order for filling the space with particles
- axisOrder (x y z);
+ axisOrder (z y x);
}
}
From 1d61b87ad4ccd490e6efa890721f3bb0a7e644ea Mon Sep 17 00:00:00 2001
From: Omid Khosravi
Date: Tue, 28 Mar 2023 16:56:41 +0430
Subject: [PATCH 18/27] Update particlesDict
Changed the rotVelocity to rVelocity.
---
tutorials/sphereGranFlow/toteblender/settings/particlesDict | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tutorials/sphereGranFlow/toteblender/settings/particlesDict b/tutorials/sphereGranFlow/toteblender/settings/particlesDict
index 8cccaabf..f7e291c4 100644
--- a/tutorials/sphereGranFlow/toteblender/settings/particlesDict
+++ b/tutorials/sphereGranFlow/toteblender/settings/particlesDict
@@ -20,7 +20,7 @@ setFields
// linear acceleration (m/s2)
acceleration realx3 (0 0 0);
// rotational velocity (rad/s)
- rotVelocity realx3 (0 0 0);
+ rVelocity realx3 (0 0 0);
// name of the particle shape
shapeName word sphere1;
}
From fc37e7042deb9cf3cbc676666f14e2ce9d0f2a63 Mon Sep 17 00:00:00 2001
From: Omid Khosravi
Date: Tue, 28 Mar 2023 17:02:29 +0430
Subject: [PATCH 19/27] Update geometryDict
the names of some geometries were fixed
---
.../sphereGranFlow/toteblender/settings/geometryDict | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/tutorials/sphereGranFlow/toteblender/settings/geometryDict b/tutorials/sphereGranFlow/toteblender/settings/geometryDict
index b30e9a0e..246c7c30 100644
--- a/tutorials/sphereGranFlow/toteblender/settings/geometryDict
+++ b/tutorials/sphereGranFlow/toteblender/settings/geometryDict
@@ -23,7 +23,7 @@ rotatingAxisMotionInfo
}
surfaces
{
- enterGate
+ topGate
{
// type of wall
type planeWall;
@@ -38,7 +38,7 @@ surfaces
motion axisOfRotation;
}
- cylinderinlet
+ topCylinder
{
// type of the wall
type cylinderWall;
@@ -98,7 +98,7 @@ surfaces
motion axisOfRotation;
}
- coneShelldown
+ coneShellbottom
{
// type of the wall
type cylinderWall;
@@ -121,7 +121,7 @@ surfaces
This is a plane wall at the exit of silo
*/
- cylinderoutlet
+ bottomCylinder
{
// type of the wall
type cylinderWall;
@@ -140,7 +140,7 @@ surfaces
// motion component name
motion axisOfRotation;
}
- exitGate
+ bottomGate
{
type planeWall;
p1 (-0.05 -0.05 0);
From 8f2749d599ae12ebe5a1bb62765d18b6dfa5383d Mon Sep 17 00:00:00 2001
From: Omid Khosravi
Date: Tue, 28 Mar 2023 17:50:59 +0430
Subject: [PATCH 20/27] Update tote blender ReadMe
fixed some misspellings and code blocks.
---
.../sphereGranFlow/toteblender/ReadMe.md | 61 ++++++++++++-------
1 file changed, 39 insertions(+), 22 deletions(-)
diff --git a/tutorials/sphereGranFlow/toteblender/ReadMe.md b/tutorials/sphereGranFlow/toteblender/ReadMe.md
index 4a9ff9bf..6a423f66 100644
--- a/tutorials/sphereGranFlow/toteblender/ReadMe.md
+++ b/tutorials/sphereGranFlow/toteblender/ReadMe.md
@@ -1,6 +1,6 @@
# Problem Definition
-The problem is to simulate a double pedestal tote blender with the diameter **0.03 m** and **0.1 m** respectively, the length **0.3 m**, rotating at **28 rpm**. This blender is filled with **20000** Particles. The timestep for integration is **0.00001 s**. There is one type of Particle in this blender that are being inserted during simulation to fill the drum.
-* **20000** particles with **4 mm** diameter, at the rate of 20000 particles/s for 1 sec.
+The problem is to simulate a double pedestal tote blender with the diameter **0.03 m** and **0.1 m** respectively, the length **0.3 m**, rotating at **28 rpm**. This blender is filled with **20000** Particles. The timestep for integration is **0.00001 s**. There is one type of Particle in this blender that are being inserted during simulation to fill the blender.
+* **20000** particles with **4 mm** diameter, at the rate of 20000 particles/s for 1 sec. ŮŽAfter settling particles, this blender starts to rotate at t=**1s**.
@@ -43,14 +43,26 @@ positionParticles
maxNumberOfParticles 40000;
// perform initial sorting based on morton code?
mortonSorting Yes;
-// box for positioning particles
- box
+// cylinder for positioning particles
+ cylinder
{
-// lower corner point of the box
- min (-0.06 -0.06 0.08);
-// upper corner point of the box
- max (0.06 0.06 0.18);
+// Coordinates of top cylinderRegion (m,m,m)
+ p1 (0.05 0.0 0.12);
+ p2 (0.05 0.0 0.22);
+// radius of cylinder
+ radius 0.066;
}
+
+ positionOrderedInfo
+ {
+// minimum space between centers of particles
+ diameter 0.003;
+// number of particles in the simulation
+ numPoints 20000;
+// axis order for filling the space with particles
+ axisOrder (z y x);
+ }
+}
```
## Interaction between particles
In `caseSetup/interaction` file, material names and properties and interaction parameters are defined: interaction between the particles of rotating drum. Since we are defining 1 material for simulation, the interaction matrix is 1x1 (interactions are symetric).
@@ -92,7 +104,7 @@ In the `settings/geometryDict` file, the geometry and axis of rotation is define
```C++
surfaces
{
- enterGate
+ topGate
{
// type of wall
type planeWall;
@@ -104,10 +116,10 @@ surfaces
// material of wall
material prop1;
// motion component name
- motion rotAxis;
+ motion axisOfRotation;
}
- cylinderinlet
+ topCylinder
{
// type of the wall
type cylinderWall;
@@ -124,7 +136,7 @@ surfaces
// material name of this wall
material prop1;
// motion component name
- motion rotAxis;
+ motion axisOfRotation;
}
coneShelltop
@@ -144,7 +156,7 @@ surfaces
// material name of this wall
material prop1;
// motion component name
- motion rotAxis;
+ motion axisOfRotation;
}
cylinderShell
@@ -164,10 +176,10 @@ surfaces
// material name of this wall
material prop1;
// motion component name
- motion rotAxis;
+ motion axisOfRotation;
}
- coneShelldown
+ coneShellbottom
{
// type of the wall
type cylinderWall;
@@ -184,13 +196,13 @@ surfaces
// material name of this wall
material prop1;
// motion component name
- motion rotAxis;
+ motion axisOfRotation;
}
/*
This is a plane wall at the exit of silo
*/
- cylinderoutlet
+ bottomCylinder
{
// type of the wall
type cylinderWall;
@@ -207,9 +219,9 @@ surfaces
// material name of this wall
material prop1;
// motion component name
- motion rotAxis;
+ motion axisOfRotation;
}
- exitGate
+ bottomGate
{
type planeWall;
p1 (-0.05 -0.05 0);
@@ -217,7 +229,7 @@ surfaces
p3 ( 0.05 0.05 0);
p4 (0.05 -0.05 0);
material prop1;
- motion rotAxis;
+ motion axisOfRotation;
}
}
@@ -225,13 +237,18 @@ surfaces
### Rotating Axis Info
In this part of `geometryDict` the information of rotating axis and speed of rotation are defined. Unlike the previous cases, the rotation of this blender starts at time=**0 s**.
```C++
+// information for rotatingAxisMotion motion model
rotatingAxisMotionInfo
{
- rotAxis
+ axisOfRotation
{
p1 (-0.1 0.0 0.15); // first point for the axis of rotation
p2 (0.1 0.0 0.15); // second point for the axis of rotation
- omega 3; // rotation speed (rad/s)
+ omega 1.5708; // rotation speed ==> 15 rad/s
+ // Start time of Geometry Rotating (s)
+ startTime 1;
+ // End time of Geometry Rotating (s)
+ endTime 9.5;
}
}
```
From 7e216f4cac34ffeec9f62cffac99c98a5c6ac920 Mon Sep 17 00:00:00 2001
From: Omid Khosravi
Date: Tue, 28 Mar 2023 18:11:30 +0430
Subject: [PATCH 21/27] solidProperty instead of prop1
---
.../toteblender/caseSetup/interaction | 4 ++--
.../toteblender/caseSetup/sphereShape | 2 +-
.../toteblender/settings/geometryDict | 14 +++++++-------
3 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/tutorials/sphereGranFlow/toteblender/caseSetup/interaction b/tutorials/sphereGranFlow/toteblender/caseSetup/interaction
index f97d2f4f..6dfdc46d 100644
--- a/tutorials/sphereGranFlow/toteblender/caseSetup/interaction
+++ b/tutorials/sphereGranFlow/toteblender/caseSetup/interaction
@@ -6,7 +6,7 @@ objectName interaction;
objectType dicrionary;
/* ------------------------------------------------------------------------- */
// a list of materials names
-materials (prop1);
+materials (solidProperty);
// density of materials [kg/m3]
densities (1000.0);
@@ -17,7 +17,7 @@ model
contactForceModel nonLinearNonLimited;
rollingFrictionModel normal;
/*
- Property (prop1-prop1);
+ Property (solidProperty-solidProperty);
*/
// Young modulus [Pa]
Yeff (1.0e6);
diff --git a/tutorials/sphereGranFlow/toteblender/caseSetup/sphereShape b/tutorials/sphereGranFlow/toteblender/caseSetup/sphereShape
index ff2df8d1..566fb339 100644
--- a/tutorials/sphereGranFlow/toteblender/caseSetup/sphereShape
+++ b/tutorials/sphereGranFlow/toteblender/caseSetup/sphereShape
@@ -10,4 +10,4 @@ names (sphere1);
// diameter of shapes (m)
diameters (0.004);
// material names for shapes
-materials (prop1);
\ No newline at end of file
+materials (solidProperty);
\ No newline at end of file
diff --git a/tutorials/sphereGranFlow/toteblender/settings/geometryDict b/tutorials/sphereGranFlow/toteblender/settings/geometryDict
index 246c7c30..da479bac 100644
--- a/tutorials/sphereGranFlow/toteblender/settings/geometryDict
+++ b/tutorials/sphereGranFlow/toteblender/settings/geometryDict
@@ -33,7 +33,7 @@ surfaces
p3 ( 0.05 0.05 0.3);
p4 (0.05 -0.05 0.3);
// material of wall
- material prop1;
+ material solidProperty;
// motion component name
motion axisOfRotation;
}
@@ -53,7 +53,7 @@ surfaces
// number of divisions
resolution 36;
// material name of this wall
- material prop1;
+ material solidProperty;
// motion component name
motion axisOfRotation;
}
@@ -73,7 +73,7 @@ surfaces
// number of divisions
resolution 36;
// material name of this wall
- material prop1;
+ material solidProperty;
// motion component name
motion axisOfRotation;
}
@@ -93,7 +93,7 @@ surfaces
// number of divisions
resolution 36;
// material name of this wall
- material prop1;
+ material solidProperty;
// motion component name
motion axisOfRotation;
}
@@ -113,7 +113,7 @@ surfaces
// number of divisions
resolution 36;
// material name of this wall
- material prop1;
+ material solidProperty;
// motion component name
motion axisOfRotation;
}
@@ -136,7 +136,7 @@ surfaces
// number of divisions
resolution 36;
// material name of this wall
- material prop1;
+ material solidProperty;
// motion component name
motion axisOfRotation;
}
@@ -147,7 +147,7 @@ surfaces
p2 (-0.05 0.05 0);
p3 ( 0.05 0.05 0);
p4 (0.05 -0.05 0);
- material prop1;
+ material solidProperty;
motion axisOfRotation;
}
From 861a7a7b5d959c12d02abe5c7731ae37b36b882e Mon Sep 17 00:00:00 2001
From: Omid Khosravi
Date: Thu, 30 Mar 2023 22:11:30 +0430
Subject: [PATCH 22/27] Update geometryDict
Top gate was replaced from wall to cylinder.
**There is an error for bottom Gate that i couldn't solve it.**
---
.../toteblender/settings/geometryDict | 34 +++++++++++--------
1 file changed, 19 insertions(+), 15 deletions(-)
diff --git a/tutorials/sphereGranFlow/toteblender/settings/geometryDict b/tutorials/sphereGranFlow/toteblender/settings/geometryDict
index da479bac..d5d1df99 100644
--- a/tutorials/sphereGranFlow/toteblender/settings/geometryDict
+++ b/tutorials/sphereGranFlow/toteblender/settings/geometryDict
@@ -23,21 +23,25 @@ rotatingAxisMotionInfo
}
surfaces
{
+ topGate
topGate
{
// type of wall
- type planeWall;
- // coords of wall
- p1 (-0.05 -0.05 0.3);
- p2 (-0.05 0.05 0.3);
- p3 ( 0.05 0.05 0.3);
- p4 (0.05 -0.05 0.3);
+ type cylinderWall;
+ // begin point of cylinder axis
+ p1 (0.0 0.0 0.299);
+ // end point of cylinder axis
+ p2 (0.0 0.0 0.3);
+ // radius at p1
+ radius1 0.03;
+ // radius at p2
+ radius2 0.0001;
// material of wall
material solidProperty;
// motion component name
motion axisOfRotation;
}
-
+
topCylinder
{
// type of the wall
@@ -53,7 +57,7 @@ surfaces
// number of divisions
resolution 36;
// material name of this wall
- material solidProperty;
+ material prop1;
// motion component name
motion axisOfRotation;
}
@@ -73,7 +77,7 @@ surfaces
// number of divisions
resolution 36;
// material name of this wall
- material solidProperty;
+ material prop1;
// motion component name
motion axisOfRotation;
}
@@ -93,12 +97,12 @@ surfaces
// number of divisions
resolution 36;
// material name of this wall
- material solidProperty;
+ material prop1;
// motion component name
motion axisOfRotation;
}
- coneShellbottom
+ coneShelldown
{
// type of the wall
type cylinderWall;
@@ -113,7 +117,7 @@ surfaces
// number of divisions
resolution 36;
// material name of this wall
- material solidProperty;
+ material prop1;
// motion component name
motion axisOfRotation;
}
@@ -136,18 +140,18 @@ surfaces
// number of divisions
resolution 36;
// material name of this wall
- material solidProperty;
+ material prop1;
// motion component name
motion axisOfRotation;
}
- bottomGate
+ exitGate
{
type planeWall;
p1 (-0.05 -0.05 0);
p2 (-0.05 0.05 0);
p3 ( 0.05 0.05 0);
p4 (0.05 -0.05 0);
- material solidProperty;
+ material prop1;
motion axisOfRotation;
}
From 519ae70905d5864729656ec74bb3be50b74fbd9f Mon Sep 17 00:00:00 2001
From: Omid Khosravi
Date: Thu, 30 Mar 2023 22:14:48 +0430
Subject: [PATCH 23/27] Update ReadMe toteBlender
geometry code block was fixed.
---
.../sphereGranFlow/toteblender/ReadMe.md | 24 +++++++++++--------
1 file changed, 14 insertions(+), 10 deletions(-)
diff --git a/tutorials/sphereGranFlow/toteblender/ReadMe.md b/tutorials/sphereGranFlow/toteblender/ReadMe.md
index 6a423f66..5a6d13b5 100644
--- a/tutorials/sphereGranFlow/toteblender/ReadMe.md
+++ b/tutorials/sphereGranFlow/toteblender/ReadMe.md
@@ -104,21 +104,25 @@ In the `settings/geometryDict` file, the geometry and axis of rotation is define
```C++
surfaces
{
+ topGate
topGate
{
// type of wall
- type planeWall;
- // coords of wall
- p1 (-0.05 -0.05 0.3);
- p2 (-0.05 0.05 0.3);
- p3 ( 0.05 0.05 0.3);
- p4 (0.05 -0.05 0.3);
+ type cylinderWall;
+ // begin point of cylinder axis
+ p1 (0.0 0.0 0.299);
+ // end point of cylinder axis
+ p2 (0.0 0.0 0.3);
+ // radius at p1
+ radius1 0.03;
+ // radius at p2
+ radius2 0.0001;
// material of wall
- material prop1;
+ material solidProperty;
// motion component name
motion axisOfRotation;
}
-
+
topCylinder
{
// type of the wall
@@ -179,7 +183,7 @@ surfaces
motion axisOfRotation;
}
- coneShellbottom
+ coneShelldown
{
// type of the wall
type cylinderWall;
@@ -221,7 +225,7 @@ surfaces
// motion component name
motion axisOfRotation;
}
- bottomGate
+ exitGate
{
type planeWall;
p1 (-0.05 -0.05 0);
From f14e9169f8e6ccb6793030921d83db875096162c Mon Sep 17 00:00:00 2001
From: Omid Khosravi
Date: Thu, 30 Mar 2023 22:28:53 +0430
Subject: [PATCH 24/27] Update geometryDict
changed prop1 to solidProperty
---
.../sphereGranFlow/toteblender/settings/geometryDict | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/tutorials/sphereGranFlow/toteblender/settings/geometryDict b/tutorials/sphereGranFlow/toteblender/settings/geometryDict
index d5d1df99..da9b22e8 100644
--- a/tutorials/sphereGranFlow/toteblender/settings/geometryDict
+++ b/tutorials/sphereGranFlow/toteblender/settings/geometryDict
@@ -57,7 +57,7 @@ surfaces
// number of divisions
resolution 36;
// material name of this wall
- material prop1;
+ material solidProperty;
// motion component name
motion axisOfRotation;
}
@@ -77,7 +77,7 @@ surfaces
// number of divisions
resolution 36;
// material name of this wall
- material prop1;
+ material solidProperty;
// motion component name
motion axisOfRotation;
}
@@ -97,7 +97,7 @@ surfaces
// number of divisions
resolution 36;
// material name of this wall
- material prop1;
+ material solidProperty;
// motion component name
motion axisOfRotation;
}
@@ -117,7 +117,7 @@ surfaces
// number of divisions
resolution 36;
// material name of this wall
- material prop1;
+ material solidProperty;
// motion component name
motion axisOfRotation;
}
@@ -140,7 +140,7 @@ surfaces
// number of divisions
resolution 36;
// material name of this wall
- material prop1;
+ material solidProperty;
// motion component name
motion axisOfRotation;
}
@@ -151,7 +151,7 @@ surfaces
p2 (-0.05 0.05 0);
p3 ( 0.05 0.05 0);
p4 (0.05 -0.05 0);
- material prop1;
+ material solidProperty;
motion axisOfRotation;
}
From e8e093dbfc26e0df959163a0b478c6e628b02a6c Mon Sep 17 00:00:00 2001
From: Hamidreza Norouzi
Date: Thu, 30 Mar 2023 15:07:45 -0700
Subject: [PATCH 25/27] CLI::Timer renamed to remove compiler errors
---
doc/Doxyfile | 5 +++--
doc/mdDocs/howToBuild.md | 8 +++++---
doc/mdDocs/howToUsePhasicFlow.md | 5 +++++
.../commandLine/CLI/{Timer.hpp => cliTimer.hpp} | 12 ++++++------
tutorials/sphereGranFlow/rotatingDrumSmall/README.md | 1 +
5 files changed, 20 insertions(+), 11 deletions(-)
create mode 100644 doc/mdDocs/howToUsePhasicFlow.md
rename src/phasicFlow/commandLine/CLI/{Timer.hpp => cliTimer.hpp} (91%)
diff --git a/doc/Doxyfile b/doc/Doxyfile
index e9ba8098..92592451 100644
--- a/doc/Doxyfile
+++ b/doc/Doxyfile
@@ -822,7 +822,8 @@ WARN_LOGFILE =
INPUT = $(pFlow_PROJECT_DIR)/src \
$(pFlow_PROJECT_DIR)/utilities \
$(pFlow_PROJECT_DIR)/solvers \
- mdDocs
+ mdDocs \
+ $(pFlow_PROJECT_DIR)/tutorials
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
@@ -866,7 +867,7 @@ RECURSIVE = YES
# Note that relative paths are relative to the directory from which doxygen is
# run.
-EXCLUDE = $(pFlow_PROJECT_DIR)/src/phasicFlow/commandLine
+EXCLUDE = $(pFlow_PROJECT_DIR)/src/phasicFlow/commandLine/CLI
# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
# directories that are symbolic links (a Unix file system feature) are excluded
diff --git a/doc/mdDocs/howToBuild.md b/doc/mdDocs/howToBuild.md
index 7fbd8162..ce979692 100644
--- a/doc/mdDocs/howToBuild.md
+++ b/doc/mdDocs/howToBuild.md
@@ -123,17 +123,19 @@ After building, `bin`, `include`, and `lib` folders will be created in `~/Phasic
**note 1**: When compiling the code in parallel, you need to have enough RAM on your computer. As a rule, you need 1 GB free RAM per each processor in your computer for compiling in parallel.
You may want to use fewer number of cores on your computer by using the following command:
+
`$ make install -j 3`
-the above command uses only 3 cores for compiling.
+
+the above command only uses 3 cores for compiling.
**note 2**: By default PhasicFlow is compiled with **double** as floating point variable. You can compile it with **float**. Just in the command line of camke added `-DpFlow_Build_Double=Off` flag to compile it with float. For example if you are building for cuda, you can enter the following command:
-`$ cmake ../ -DpFlow_Build_Cuda=On --DpFlow_Build_Double=Off`
+`$ cmake ../ -DpFlow_Build_Cuda=On -DpFlow_Build_Double=Off`
### Step 6: Testing
In the current terminal or a new terminal enter the following command:
-`$ ~checkPhasicFlow`
+`$ checkPhasicFlow`
This command shows the host and device environments and software version. If PhasicFlow was build correctly, you would get the following output:
```
diff --git a/doc/mdDocs/howToUsePhasicFlow.md b/doc/mdDocs/howToUsePhasicFlow.md
new file mode 100644
index 00000000..ca8e69db
--- /dev/null
+++ b/doc/mdDocs/howToUsePhasicFlow.md
@@ -0,0 +1,5 @@
+# How to use PhasicFlow {#howToUsePhasicFlow}
+Here you will learn how to use PhasicFlow to setup a granular flow simulation. The inputs for simulation are supplied through some text-based files, called file dictionary, located in two folders: `settings` and `caseSetup`. These folders are located under the root case directory.
+All the commands are performed through terminal in which the current working directory is root case directory (you see `settings` and `caseSetup` folders when `ls` command is entered). The states of geometry and particles are stored in time folders with names that represent the time. When simulation is finished, one case use post-processing tool pFlowToVTK to convert the stored results in the time folder into VTK file format. The VTK file format can be read by Paraview.
+A set of tutorials with detailed descriptions are provided to show you how to use PhasicFlow for various granular flow problems. Here is a list of them.
+* [Small rotating drum] (@ref rotatingDrumSmall)
diff --git a/src/phasicFlow/commandLine/CLI/Timer.hpp b/src/phasicFlow/commandLine/CLI/cliTimer.hpp
similarity index 91%
rename from src/phasicFlow/commandLine/CLI/Timer.hpp
rename to src/phasicFlow/commandLine/CLI/cliTimer.hpp
index 429ca026..d345b4bf 100644
--- a/src/phasicFlow/commandLine/CLI/Timer.hpp
+++ b/src/phasicFlow/commandLine/CLI/cliTimer.hpp
@@ -22,7 +22,7 @@
namespace CLI {
/// This is a simple timer with pretty printing. Creating the timer starts counting.
-class Timer {
+class cliTimer {
protected:
/// This is a typedef to make clocks easier to use
using clock = std::chrono::steady_clock;
@@ -57,7 +57,7 @@ class Timer {
public:
/// Standard constructor, can set title and print function
- explicit Timer(std::string title = "Timer", time_print_t time_print = Simple)
+ explicit cliTimer(std::string title = "cliTimer", time_print_t time_print = Simple)
: title_(std::move(title)), time_print_(std::move(time_print)), start_(clock::now()) {}
/// Time a function by running it multiple times. Target time is the len to target.
@@ -111,17 +111,17 @@ class Timer {
std::string to_string() const { return time_print_(title_, make_time_str()); }
/// Division sets the number of cycles to divide by (no graphical change)
- Timer &operator/(std::size_t val) {
+ cliTimer &operator/(std::size_t val) {
cycles = val;
return *this;
}
};
/// This class prints out the time upon destruction
-class AutoTimer : public Timer {
+class AutoTimer : public cliTimer {
public:
/// Reimplementing the constructor is required in GCC 4.7
- explicit AutoTimer(std::string title = "Timer", time_print_t time_print = Simple) : Timer(title, time_print) {}
+ explicit AutoTimer(std::string title = "cliTimer", time_print_t time_print = Simple) : cliTimer(title, time_print) {}
// GCC 4.7 does not support using inheriting constructors.
/// This destructor prints the string
@@ -131,4 +131,4 @@ class AutoTimer : public Timer {
} // namespace CLI
/// This prints out the time if shifted into a std::cout like stream.
-inline std::ostream &operator<<(std::ostream &in, const CLI::Timer &timer) { return in << timer.to_string(); }
+inline std::ostream &operator<<(std::ostream &in, const CLI::cliTimer &timer) { return in << timer.to_string(); }
diff --git a/tutorials/sphereGranFlow/rotatingDrumSmall/README.md b/tutorials/sphereGranFlow/rotatingDrumSmall/README.md
index 300b61d8..60d0ad55 100644
--- a/tutorials/sphereGranFlow/rotatingDrumSmall/README.md
+++ b/tutorials/sphereGranFlow/rotatingDrumSmall/README.md
@@ -1,3 +1,4 @@
+# Simulating a small rotating drum {#rotatingDrumSmall}
## Problem definition
The problem is to simulate a rotating drum with the diameter 0.24 m and the length 0.1 m rotating at 11.6 rpm. It is filled with 30,000 4-mm spherical particles. The timestep for integration is 0.00001 s.
From c3a729e2d35c0e8a0e4b3400303868d1a21efd57 Mon Sep 17 00:00:00 2001
From: Hamidreza Norouzi
Date: Fri, 31 Mar 2023 08:21:24 -0700
Subject: [PATCH 26/27] tote blender corrected
---
.../toteblender/caseSetup/interaction | 49 +++--
.../toteblender/caseSetup/particleInsertion | 4 +-
.../toteblender/caseSetup/sphereShape | 9 +-
.../toteblender/settings/geometryDict | 195 ++++++++++++------
.../toteblender/settings/particlesDict | 57 ++---
.../toteblender/settings/settingsDict | 19 +-
6 files changed, 217 insertions(+), 116 deletions(-)
diff --git a/tutorials/sphereGranFlow/toteblender/caseSetup/interaction b/tutorials/sphereGranFlow/toteblender/caseSetup/interaction
index 6dfdc46d..6b4847dc 100644
--- a/tutorials/sphereGranFlow/toteblender/caseSetup/interaction
+++ b/tutorials/sphereGranFlow/toteblender/caseSetup/interaction
@@ -5,8 +5,10 @@
objectName interaction;
objectType dicrionary;
/* ------------------------------------------------------------------------- */
+
// a list of materials names
materials (solidProperty);
+
// density of materials [kg/m3]
densities (1000.0);
@@ -14,47 +16,60 @@ contactListType sortedContactList;
model
{
- contactForceModel nonLinearNonLimited;
- rollingFrictionModel normal;
+ contactForceModel nonLinearNonLimited;
+
+ rollingFrictionModel normal;
+
/*
Property (solidProperty-solidProperty);
*/
-// Young modulus [Pa]
+
+ // Young modulus [Pa]
Yeff (1.0e6);
-// Shear modulus [Pa]
+
+ // Shear modulus [Pa]
Geff (0.8e6);
-// Poisson's ratio [-]
+
+ // Poisson's ratio [-]
nu (0.25);
-// coefficient of normal restitution
+
+ // coefficient of normal restitution
en (0.7);
-// coefficient of tangential restitution
+
+ // coefficient of tangential restitution
et (1.0);
-// dynamic friction
+
+ // dynamic friction
mu (0.3);
-// rolling friction
- mur (0.1);
-
+
+ // rolling friction
+ mur (0.1);
}
+
contactSearch
{
-// method for broad search particle-particle
+
+ // method for broad search particle-particle
method NBS;
-// method for broad search particle-wall
+
+ // method for broad search particle-wall
wallMapping cellMapping;
NBSInfo
{
- // each 20 timesteps, update neighbor list
+ // each 20 timesteps, update neighbor list
updateFrequency 20;
- // bounding box size to particle diameter (max)
+
+ // bounding box size to particle diameter (max)
sizeRatio 1.1;
}
cellMappingInfo
{
- // each 20 timesteps, update neighbor list
+ // each 20 timesteps, update neighbor list
updateFrequency 20;
- // bounding box for particle-wall search (> 0.5)
+
+ // bounding box for particle-wall search (> 0.5)
cellExtent 0.7;
}
diff --git a/tutorials/sphereGranFlow/toteblender/caseSetup/particleInsertion b/tutorials/sphereGranFlow/toteblender/caseSetup/particleInsertion
index d8f022c6..45ca817c 100644
--- a/tutorials/sphereGranFlow/toteblender/caseSetup/particleInsertion
+++ b/tutorials/sphereGranFlow/toteblender/caseSetup/particleInsertion
@@ -5,8 +5,10 @@
objectName particleInsertion;
objectType dicrionary;
/* ------------------------------------------------------------------------- */
+
// is insertion active?
-active no;
+active no;
+
// not implemented for yes
collisionCheck No;
diff --git a/tutorials/sphereGranFlow/toteblender/caseSetup/sphereShape b/tutorials/sphereGranFlow/toteblender/caseSetup/sphereShape
index 566fb339..b579d7c6 100644
--- a/tutorials/sphereGranFlow/toteblender/caseSetup/sphereShape
+++ b/tutorials/sphereGranFlow/toteblender/caseSetup/sphereShape
@@ -5,9 +5,12 @@
objectName sphereDict;
objectType sphereShape;
/* ------------------------------------------------------------------------- */
-// names of shapes
+
+// name of shapes
names (sphere1);
+
// diameter of shapes (m)
-diameters (0.004);
-// material names for shapes
+diameters (0.005);
+
+// material name for shapes
materials (solidProperty);
\ No newline at end of file
diff --git a/tutorials/sphereGranFlow/toteblender/settings/geometryDict b/tutorials/sphereGranFlow/toteblender/settings/geometryDict
index da9b22e8..b65854eb 100644
--- a/tutorials/sphereGranFlow/toteblender/settings/geometryDict
+++ b/tutorials/sphereGranFlow/toteblender/settings/geometryDict
@@ -5,154 +5,217 @@
objectName geometryDict;
objectType dictionary;
/* ------------------------------------------------------------------------- */
+
// motion model: rotating object around an axis
motionModel rotatingAxisMotion;
+
// information for rotatingAxisMotion motion model
rotatingAxisMotionInfo
{
axisOfRotation
{
p1 (-0.1 0.0 0.15); // first point for the axis of rotation
- p2 (0.1 0.0 0.15); // second point for the axis of rotation
+ p2 ( 0.1 0.0 0.15); // second point for the axis of rotation
+
omega 1.5708; // rotation speed ==> 15 rad/s
- // Start time of Geometry Rotating (s)
- startTime 1;
- // End time of Geometry Rotating (s)
+
+ // Start time of Geometry Rotating (s)
+ startTime 0.5;
+
+ // End time of Geometry Rotating (s)
endTime 9.5;
}
}
+
surfaces
{
- topGate
+
topGate
{
- // type of wall
+ // type of wall
type cylinderWall;
- // begin point of cylinder axis
- p1 (0.0 0.0 0.299);
- // end point of cylinder axis
- p2 (0.0 0.0 0.3);
- // radius at p1
+
+ // begin point of cylinder axis
+ p1 (0.0 0.0 0.3);
+
+ // end point of cylinder axis
+ p2 (0.0 0.0 0.301);
+
+ // radius at p1
radius1 0.03;
- // radius at p2
+
+ // radius at p2
radius2 0.0001;
- // material of wall
+
+ // material of wall
material solidProperty;
- // motion component name
+
+ // motion component name
motion axisOfRotation;
}
topCylinder
{
- // type of the wall
+ // type of the wall
type cylinderWall;
- // begin point of cylinder axis
+
+ // begin point of cylinder axis
p1 (0.0 0.0 0.28);
- // end point of cylinder axis
+
+ // end point of cylinder axis
p2 (0.0 0.0 0.3);
- // radius at p1
+
+ // radius at p1
radius1 0.03;
- // radius at p2
+
+ // radius at p2
radius2 0.03;
- // number of divisions
+
+ // number of divisions
resolution 36;
- // material name of this wall
+
+ // material name of this wall
material solidProperty;
- // motion component name
+
+ // motion component name
motion axisOfRotation;
}
coneShelltop
- {
- // type of the wall
+ {
+ // type of the wall
type cylinderWall;
- // begin point of cylinder axis
+
+ // begin point of cylinder axis
p1 (0.0 0.0 0.2);
- // end point of cylinder axis
+
+ // end point of cylinder axis
p2 (0.0 0.0 0.28);
- // radius at p1
+
+ // radius at p1
radius1 0.1;
- // radius at p2
+
+ // radius at p2
radius2 0.03;
- // number of divisions
+
+ // number of divisions
resolution 36;
- // material name of this wall
+
+ // material name of this wall
material solidProperty;
- // motion component name
+
+ // motion component name
motion axisOfRotation;
}
cylinderShell
{
- // type of the wall
+ // type of the wall
type cylinderWall;
- // begin point of cylinder axis
+
+ // begin point of cylinder axis
p1 (0.0 0.0 0.1);
- // end point of cylinder axis
+
+ // end point of cylinder axis
p2 (0.0 0.0 0.2);
- // radius at p1
+
+ // radius at p1
radius1 0.1;
- // radius at p2
+
+ // radius at p2
radius2 0.1;
- // number of divisions
+
+ // number of divisions
resolution 36;
- // material name of this wall
+
+ // material name of this wall
material solidProperty;
- // motion component name
+
+ // motion component name
motion axisOfRotation;
}
coneShelldown
{
- // type of the wall
+
+ // type of the wall
type cylinderWall;
- // begin point of cylinder axis
+
+ // begin point of cylinder axis
p1 (0.0 0.0 0.02);
- // end point of cylinder axis
+
+ // end point of cylinder axis
p2 (0.0 0.0 0.1);
- // radius at p1
+
+ // radius at p1
radius1 0.03;
- // radius at p2
+
+ // radius at p2
radius2 0.1;
- // number of divisions
+
+ // number of divisions
resolution 36;
- // material name of this wall
+
+ // material name of this wall
material solidProperty;
- // motion component name
+
+ // motion component name
motion axisOfRotation;
}
- /*
- This is a plane wall at the exit of silo
- */
- bottomCylinder
+ bottomCylinder
{
- // type of the wall
+ // type of the wall
type cylinderWall;
- // begin point of cylinder axis
+
+ // begin point of cylinder axis
p1 (0.0 0.0 0.0);
- // end point of cylinder axis
+
+ // end point of cylinder axis
p2 (0.0 0.0 0.02);
- // radius at p1
+
+ // radius at p1
radius1 0.03;
- // radius at p2
+
+ // radius at p2
radius2 0.03;
- // number of divisions
+
+ // number of divisions
resolution 36;
- // material name of this wall
+
+ // material name of this wall
material solidProperty;
- // motion component name
+
+ // motion component name
motion axisOfRotation;
}
+
exitGate
{
- type planeWall;
- p1 (-0.05 -0.05 0);
- p2 (-0.05 0.05 0);
- p3 ( 0.05 0.05 0);
- p4 (0.05 -0.05 0);
- material solidProperty;
- motion axisOfRotation;
+
+ // type of the wall
+ type cylinderWall;
+
+ // begin point of cylinder axis
+ p1 (0.0 0.0 -0.001);
+
+ // end point of cylinder axis
+ p2 (0.0 0.0 0.0);
+
+ // radius at p1
+ radius1 0.03;
+
+ // radius at p2
+ radius2 0.0001;
+
+ // number of divisions
+ resolution 36;
+
+ // material name of this wall
+ material solidProperty;
+
+ // motion component name
+ motion axisOfRotation;
}
}
diff --git a/tutorials/sphereGranFlow/toteblender/settings/particlesDict b/tutorials/sphereGranFlow/toteblender/settings/particlesDict
index f7e291c4..20f56227 100644
--- a/tutorials/sphereGranFlow/toteblender/settings/particlesDict
+++ b/tutorials/sphereGranFlow/toteblender/settings/particlesDict
@@ -12,16 +12,18 @@ setFields
These fields should always be defined for simulations with
spherical particles.
*/
-
defaultValue
{
-// linear velocity (m/s)
+ // linear velocity (m/s)
velocity realx3 (0 0 0);
-// linear acceleration (m/s2)
+
+ // linear acceleration (m/s2)
acceleration realx3 (0 0 0);
-// rotational velocity (rad/s)
- rVelocity realx3 (0 0 0);
-// name of the particle shape
+
+ // rotational velocity (rad/s)
+ rVelocity realx3 (0 0 0);
+
+ // name of the particle shape
shapeName word sphere1;
}
@@ -32,29 +34,36 @@ setFields
// positions particles
positionParticles
{
-// ordered positioning
- method positionOrdered;
-// maximum number of particles in the simulation
- maxNumberOfParticles 40000;
-// perform initial sorting based on morton code?
- mortonSorting Yes;
-// cylinder for positioning particles
+ // ordered positioning
+ method positionOrdered;
+
+ // maximum number of particles in the simulation
+ maxNumberOfParticles 25001;
+
+ // perform initial sorting based on morton code?
+ mortonSorting Yes;
+
+ // cylinder for positioning particles
cylinder
{
-// Coordinates of top cylinderRegion (m,m,m)
- p1 (0.05 0.0 0.12);
- p2 (0.05 0.0 0.22);
-// radius of cylinder
- radius 0.066;
+ // Coordinates of top cylinderRegion (m,m,m)
+ p1 (0.0 0.0 0.09);
+
+ p2 (0.0 0.0 0.21);
+
+ // radius of cylinder
+ radius 0.09;
}
positionOrderedInfo
{
-// minimum space between centers of particles
- diameter 0.003;
-// number of particles in the simulation
- numPoints 20000;
-// axis order for filling the space with particles
- axisOrder (z y x);
+ // minimum space between centers of particles
+ diameter 0.005;
+
+ // number of particles in the simulation
+ numPoints 24000;
+
+ // axis order for filling the space with particles
+ axisOrder (x y z);
}
}
diff --git a/tutorials/sphereGranFlow/toteblender/settings/settingsDict b/tutorials/sphereGranFlow/toteblender/settings/settingsDict
index d5a05a48..34c287bb 100644
--- a/tutorials/sphereGranFlow/toteblender/settings/settingsDict
+++ b/tutorials/sphereGranFlow/toteblender/settings/settingsDict
@@ -6,16 +6,22 @@ objectName settingsDict;
objectType dictionary;;
/*---------------------------------------------------------------------------*/
run toteBlender;
+
// time step for integration (s)
-dt 0.00001;
+dt 0.00004;
+
// start time for simulation
startTime 0;
+
// end time for simulation
endTime 10;
+
// time interval for saving the simulation
-saveInterval 0.1;
+saveInterval 0.05;
+
// maximum number of digits for time folder
-timePrecision 6;
+timePrecision 3;
+
// gravity vector (m/s2)
g (0 0 -9.8);
@@ -26,9 +32,12 @@ domain
min (-0.3 -0.3 -0.3);
max (0.5 0.5 0.5);
}
+
// integration method
-integrationMethod AdamsBashforth2;
+integrationMethod AdamsMoulton4;
+
// report timers?
timersReport Yes;
+
// time interval for reporting timers
-timersReportInterval 0.01;
+timersReportInterval 0.02;
\ No newline at end of file
From 8faa1a5e531257240e6b98e11726d03c3ec9758d Mon Sep 17 00:00:00 2001
From: Hamidreza Norouzi
Date: Fri, 31 Mar 2023 10:48:23 -0700
Subject: [PATCH 27/27] documentation for rotatingAxis
---
.../entities/rotatingAxis/rotatingAxis.hpp | 47 ++++++++++++++++++-
1 file changed, 45 insertions(+), 2 deletions(-)
diff --git a/src/MotionModel/entities/rotatingAxis/rotatingAxis.hpp b/src/MotionModel/entities/rotatingAxis/rotatingAxis.hpp
index 07e8de5d..0fa38bc7 100644
--- a/src/MotionModel/entities/rotatingAxis/rotatingAxis.hpp
+++ b/src/MotionModel/entities/rotatingAxis/rotatingAxis.hpp
@@ -32,6 +32,33 @@ class rotatingAxis;
#include "rotatingAxisFwd.hpp"
+/**
+ * An axis which rotates around itself at specified speed
+ *
+ * This defines an axis with two end points that rotates around
+ * itself at specified speed (rad/s).
+ *
+ *
+ \verbatim
+ // This creates an axis of rotation around x-axis, rotation starts at t = 1 s
+ // and ends at t = 5 s.
+ {
+ p1 (0 0 0);
+ p2 (1 0 0);
+ omega 1.57;
+ startTime 1;
+ endTime 5;
+ } \endverbatim
+ *
+ * | parameter | value type | discription | optional (default) |
+ * |----| ---- | ---- | ---- |
+ * | p1 | realx3 | begin point of axis | No |
+ * | p2 | realx3 | end point of axis | No |
+ * | omega | real | rotation speed (rad/s) | No |
+ * | startTime | real | start time of rotation (s) | Yes (0) |
+ * | endTime | real | end time of rotation (s) | Yes (infinity) |
+ *
+ */
class rotatingAxis
:
public timeInterval,
@@ -39,56 +66,72 @@ class rotatingAxis
{
protected:
- // rotation speed
+ /// rotation speed
real omega_ = 0;
+ /// is rotating
bool rotating_ = false;
public:
+ // - Constructor
+
+ /// Empty constructor
FUNCTION_HD
rotatingAxis(){}
+ /// Construct from dictionary
FUNCTION_H
rotatingAxis(const dictionary& dict);
+ /// Construct from components
FUNCTION_HD
rotatingAxis(const realx3& p1, const realx3& p2, real omega = 0.0);
+ /// Copy constructor
FUNCTION_HD
rotatingAxis(const rotatingAxis&) = default;
+ /// Copy asssignment
rotatingAxis& operator=(const rotatingAxis&) = default;
+ /// Set omega
FUNCTION_HD
real setOmega(real omega);
-
+ /// Return omega
INLINE_FUNCTION_HD
real omega()const
{
return omega_;
}
+ /// Is rotating
INLINE_FUNCTION_HD
bool isRotating()const
{
return rotating_;
}
+ /// Linear tangential velocity at point p
INLINE_FUNCTION_HD
realx3 linTangentialVelocityPoint(const realx3 &p)const;
// - IO operation
+
+ /// Read from dictionary
FUNCTION_H
bool read(const dictionary& dict);
+ /// Write to dictionary
FUNCTION_H
bool write(dictionary& dict) const;
+ /// Read from input stream is
FUNCTION_H
bool read(iIstream& is);
+ /// Write to output stream os
FUNCTION_H
bool write(iOstream& os)const;