Académique Documents
Professionnel Documents
Culture Documents
Page 1
Page 2
Contents
SETTING UP YOUR RHINO/KUBRIX WORK ENVIRONMENT ...................................... 9 Installing Kubrix and Rhino ....................................................................................................... 9 Displaying the most useful Rhino Toolbars and the Kubrix-specific buttons ............................ 9 The Rhino command area ........................................................................................................... 9 Icon/button names ..................................................................................................................... 10 Rotating and panning views ...................................................................................................... 10 Colorizing all objects in the model ........................................................................................... 10 Useful shortcuts ........................................................................................................................ 10 The following shortcuts may be added to Rhino help in speeding up the mesh cleanup process: ................................................................................................................................. 10 AlignMeshVertices: ............................................................................................................... 10 Tolerances ................................................................................................................................. 11 Avoiding accidental object drag ............................................................................................... 11 Object snap options ................................................................................................................... 11 READING CAD DATA ............................................................................................................... 13 General Guidelines ................................................................................................................... 13 Solids & Surfaces...................................................................................................................... 13 Wireframes................................................................................................................................ 13 Points ........................................................................................................................................ 13 Facetized surfaces: polygonal surfaces ..................................................................................... 14 Facetized surfaces: triangular surfaces ..................................................................................... 14 SPACERANGER.......................................................................................................................... 15 Modeling problems addressed by SpaceRanger ....................................................................... 15 How SpaceRanger Helps .......................................................................................................... 15 New in 8.2 ................................................................................................................................. 15 How does SpaceRanger work? ................................................................................................. 15 Examples ................................................................................................................................... 16 Sorting 3DEC zone material IDs ............................................................................................. 16 Sorting 3DEC block material IDs........................................................................................... 17 Other examples: ........................................................................................................................ 18 SpaceRanger version 8 options: ................................................................................................ 18 TUTORIAL 1- INTERNAL WALLS AND MULTIPLE MATERIALS .................................... 19
Kubrix/Rhino Users Manual Page 3
Creating a single-material model ............................................................................................. 19 END OF TUTORIAL 1 ............................................................................................................ 21 TUTORIAL 2 VERTICAL SHAFT IN A STRATIFIED SOIL ............................................... 22 Startup and excavation of the shaft ........................................................................................... 22 Creating a triangular surface mesh of the model ...................................................................... 24 Creating an all-hexahedral mesh for FLAC3D using Kubrix ................................................... 25 Creating a model of both the inside and outside of the excavated shaft ................................... 28 Creating an all-hexahedral mesh of the capped model, with stratified soil .............................. 31 Creating 3DEC blocking of the capped model, with stratified soil .......................................... 36 Creating Octree mesh of the capped model, with stratified soil ............................................... 37 END OF TUTORIAL 2 ............................................................................................................ 39 TUTORIAL 3 20 BIFURCATING CIRCULAR TUNNELS ................................................ 40 Startup and creation of a horizontal tunnel of diameter 10 and length 200 .............................. 40 Creating the bifurcation and the box surrounding it ................................................................. 41 Creating a Triangular Surface Mesh of the Model ................................................................... 43 Creating a convex blocking for 3DEC ...................................................................................... 45 Creating an all-hexahedral grid for FLAC3D Using KUBRIX ................................................ 45 Creating a tetrahedral grid for FLAC3D Using KUBRIX ........................................................ 48 Creating octree grids for FLAC3D or blocks for 3DEC ........................................................... 49 Creating a FLAC3D or a 3DEC model for sequential excavation ........................................... 51 END OF TUTORIAL 3 ............................................................................................................ 55 TUTORIAL 4: GEOMETRY CLEANUP GIVEN AN EXISTING TRIANGULATED SURFACE..................................................................................................................................... 56 Startup and reading, joining and centering the model around the origin .................................. 56 Automatic sewing of neighboring free edges ........................................................................... 57 Removal of degenerate, duplicate, non-manifold and isolated triangles .................................. 59 Automatic closure of all nearly planar open holes ................................................................... 59 Removal of artifacts due to triangulation noise: defeaturing. ............................................... 60 Saving the closed triangular surface as a formatted (ASCII) STL file ..................................... 66 Using the Kubrix surface diagnostics to identify and repair mesh self- intersections. ............. 66 Creating a box representing the computational volume ........................................................... 67 Reading the STL file into KUBRIX and automatic hexahedral meshing................................. 67 END OF TUTORIAL 4 ............................................................................................................ 70
Kubrix/Rhino Users Manual Page 4
TUTORIAL 5 OPEN PIT: CREATING A MODEL FROM CONTOUR LINES .................. 71 Startup and approximation of contour lines .............................................................................. 71 Creating the benches ................................................................................................................. 75 Creating the bench faces ........................................................................................................... 79 An alternative method of creating the benches and the bench faces ........................................ 80 Creating an outer box ................................................................................................................ 81 Creating a surface mesh ............................................................................................................ 83 Creating a 3DEC model ............................................................................................................ 84 Creating a FLAC3D model ....................................................................................................... 85 Creating an Octree model ......................................................................................................... 85 A better Octree model ............................................................................................................... 86 END OF TUTORIAL 5 ............................................................................................................ 88 TUTORIAL 6: BUILDING 3DEC MODELS IN RHINO WITHOUT USING KUBRIX.......... 89 Fundamentals ............................................................................................................................ 89 Only certain Rhino operations result in solids .......................................................................... 89 Exporting solids as VRML 2.0 files ......................................................................................... 89 Exporting meshes (instead of solid) as VRML 2.0 files ........................................................... 89 Translating VRML 2.0 files into 3DEC POLY file .................................................................. 90 Example 1: Dynamic analysis of a Flemish bond brick wall ................................................... 90 Export the support ................................................................................................................ 91 Export the wall ...................................................................................................................... 91 Running 3DEC ........................................................................................................................ 91 Example 2: borehole in a block ................................................................................................ 93 END OF TUTORIAL 6 ............................................................................................................ 96 TUTORIAL 7: WORKING WITH MESHES: ADDING AN INTERNAL WALL TO AN EXISTING MESH. ....................................................................................................................... 97 Partitioning a mesh of faces into a few manageable pieces ...................................................... 97 Defining a Polyline that cuts the tunnel along its length .......................................................... 99 Partitioning meshes ................................................................................................................. 101 Building an internal wall......................................................................................................... 102 Putting it all together............................................................................................................... 105 Editing remaining naked edges ............................................................................................... 106 END OF TUTORIAL 7 .......................................................................................................... 108
Kubrix/Rhino Users Manual Page 5
TUTORIAL 8: IMPORTING INTERMITTENT FAULTS IN FLAC3D & 3DEC WITH KUBRX....................................................................................................................................... 109 Importing meshes and extending the pit beyond its boundary ............................................... 109 Extension of the pit ............................................................................................................. 110 Specifying the computational domain .................................................................................... 114 Computing intersections ......................................................................................................... 120 Calculating intersection 1 ................................................................................................... 121 Extending Fault2 for a clean intersection with Fault1 ........................................................ 122 Back to intersection 1 (now with a clean intersection curve) ............................................. 126 Calculating intersection 2 ................................................................................................... 128 Calculating intersection 2 ................................................................................................... 128 Calculating intersection 3 ................................................................................................... 129 Calculating intersection 3 ................................................................................................... 130 Calculating intersection 4 ................................................................................................... 131 Surface quality check .............................................................................................................. 132 Quality check with Rhino ................................................................................................... 133 Quality check & grid generation with Kubrix .................................................................... 134 How does KUBRIX keep track of interfaces for FLAC3D? .................................................. 140 Running the model with FLAC3D.......................................................................................... 141 END OF TUTORIAL 8 .......................................................................................................... 142 TUTORIAL 9: IMPORTING INTERFACES INTO LEGACY MODELS ............................... 143 Initial Rhino tolerance setup and model import...................................................................... 143 Simplifying the internal surface .............................................................................................. 143 Translating the FLAC3D mode into a .WRL file using SpaceRanger ................................... 144 Retrieving the shape of the dam from the flac3d model ......................................................... 145 Trimming the draped surface with the dam ............................................................................ 147 Identifying the zones that intersect the trimmed surface ........................................................ 148 Preparing the surfaces for Kubrix ........................................................................................... 149 How does KUBRIX keep track of interfaces for FLAC3D? .................................................. 150 Combining hex and tet grids into a final hybrid grid .............................................................. 152 Using SpaceRanger to create separate groups below and above the surface.......................... 154 Running a FLAC3D grid containing face collections ............................................................ 155 Running the model with FLAC3D.......................................................................................... 155
Kubrix/Rhino Users Manual Page 6
END OF TUTORIAL 9 .......................................................................................................... 156 EXERCISE 1 SALT CAVERN: USING RHINOS LOFT TO CREATE A MODEL FROM CONTOUR LINES ..................................................................................................................... 157 Creating a solid model & meshing ......................................................................................... 157 EXERCISE 2 OPEN PIT: USING RHINOS MESH FROM POINTS FOR FAST MODEL CREATION ................................................................................................................................ 158 Creating a solid model & meshing ......................................................................................... 158 EXERCISE 3-MODELS DEFINED BY HORIZONS & TOPOGRAPHY: BOOLEAN OPERATIONS ON SURFACES AND MESHES ..................................................................... 160 IMPORTING CAD DATA INTO PFC3D ................................................................................. 163 Summary ................................................................................................................................. 163 Introduction ............................................................................................................................. 163 Brief overview of Computer-Aided Design (CAD) ............................................................... 163 Preparing a model for import into PFC3D.............................................................................. 165 Model simplification ........................................................................................................... 165 Model triangulation ............................................................................................................. 166 Checking normal orientation............................................................................................... 167 Example applications .............................................................................................................. 168 Stirred Tank Reactor ........................................................................................................... 168 Additional Examples............................................................................................................... 170 Ball Mill .............................................................................................................................. 170 Blade Mill ........................................................................................................................... 170 Bulldozer ............................................................................................................................. 171 USING CAD TO AUTOMATICALLY GENERATE OF CLUMPS FOR PFC3D: BUBBLEPACK .......................................................................................................................... 172 Summary ................................................................................................................................. 172 Medial axis/Mid-surface and bubble packing ......................................................................... 172 Using BubblePack................................................................................................................... 173 Examples ............................................................................................................................. 173 Input Surface ....................................................................................................................... 173 Meshing Parameters ............................................................................................................ 173 TROUBLESHOOTING .............................................................................................................. 175 Where are my files? In Rhino, I clicked on the Kubrix icon and ran it but the resulting files are not in the folder they are supposed to be. ............................................................................... 175
Kubrix/Rhino Users Manual Page 7
Why the Polygon Meshing Option? I have created a model in Rhino. I have meshed its surface and I want to save it, but Rhino displays the Polygon Meshing Options. I thought I did that already when I triangulated the surface! .......................................................................... 175 Naked/free edges in the input. I run Kubrix and it says that there are free edges. I read the STL file into Rhino and use CheckMesh. Rhino reports that there are indeed naked edges. Why? ....................................................................................................................................... 175 Kubrix reports surface self intersection .................................................................................. 176 Tetra blocking fails! I launch Kubrix|Convex Blocking or Tetra meshing. I use all default values for parameters. Kubrix reads the STL file and the surface is remeshed but Kubrix reports intersecting triangles after remeshing or hangs and fails with the message: Tetra blocking failed....................................................................................................................... 176 Blocking not progressive enough. I use Kubrix|Convex Blocking to create a 3DEC model. I use a small Offset, small Cut angle and a Mesh Gradation close to 1 but I find that blocks fan out too abruptly. I would like to see a more progressive increase in block size around details. ................................................................................................................................................ 177 License error. I obtained a Kubrix license but I get an error message saying that the license is not valid .................................................................................................................................. 177 INDEX ........................................................................................................................................ 179
Page 8
Displaying the most useful Rhino Toolbars and the Kubrix-specific buttons
3. Start Rhino and right-click in the Toolbar area located around the edges of the graphic window. When the list of toolbars opens, make sure that all toolbars are checked off. 4. Open the C:\Program Files\Simulation Works\Kubrix\Rhino Stuff folder. Select all files in that folder and drag them over the Rhino window. These files contain the scripts and toolbars related to Kubrix that are most frequently used in Rhino. You can later on modify these tools if you so desire.
Figure 1: The Rhino window after the kubrix toolbar and scripts have been added.
2 3
Rhinoceros is a Registered Trademark of Robert McNeel and Associates, Seattle, USA. KUBRIX is a Registered Trademark of Simulation Works, Inc., Saint Paul, USA.
Page 9
Icon/button names
Throughout this tutorial we refer to the name of icons. The name of an icon is displayed when you place the mouse over it. Often, an icon has two related functions depending on whether you click the left or right mouse button. After you click an icon, the corresponding Rhino command-line appears in the command line area.
Useful shortcuts
The following shortcuts are pre-programmed into Rhino: F3 F8 F9 Properties Ortho Snap
The following shortcuts may be added to Rhino help in speeding up the mesh cleanup process: AlignMeshVertices: Left-clicking on the Icon marked Align mesh vertices to tolerance launches the AlignMeshVertices command which is one of the most useful Rhino tools for cleaning up meshes. The most common use of this tool involves the following preliminary actions: left-clicking on the command setting the the DistanceToAdjust Parameter clicking on SelectVertices clicking on the first vertex that will host all the subsequent vertices Clicking on the vertices that will collapse on the host vertex Page 10
hitting <RETURN>
You can set a shortcut, F4, that does all this. Let-click on the icon marked Options, on the left pane, under Rhino Options select Keyboard. If the slot in front of F4 is available, type in _AlignMeshVertices SelectVertices CheckMesh: Similarly, using Option|Rhino Options|Keyboard you can set F5 to _CheckMesh SplitMeshEdge: Similarly, set F6 to _SplitMeshEdge
Tolerances
Tolerances can be the cause of problems especially when dealing with intersection and boolean operations on meshes, geometric entities. This is particularly critical when the model center is far from the origin or when the model is very large. When starting a new project, use the initial Rhino template to specify whether the model will be a "Large" object in "meters", "small" object in "feet", etc.., then import DXF, STL or even existing 3dm files into the new project. Please note that by default, Option|Document Properties|Units should say an absolute tolerance of 0.01, a relative tolerance of 1.0. and an angle tolerance of 1. If the center of the model is far from the 0,0,0 coordinates, you may want to use a smaller tolerance such as 0.0001 absolute, 0.01 relative and 0.01 in angles.
Page 11
Page 12
General Guidelines
CAD data is generally either a surface/solid/line (geometrical) model or facetized (discretized polygons). Solid/Surface/line models are mathematically exact definitions of the geometries they describe whereas facetized data represent solid/surface models that have been discretized into a collection of points and polygons. Surfaces/Solids must be imported as IGES or STEP files into Rhino, triangulated, cleaned-up and exported as ASCII STL files for processing with KUBRIX. Facetized (triangulated) data may be imported in the STL, VRML, DXF or 3DS formats into Rhino for further processing. In Rhino, facetized data will be represented as a mesh. The mesh must be first cleaned-up, that is checked for quality (no free edges, degenerate or duplicated faces) and defeatured (see Removal of artifacts due to triangulation noise: defeaturing. Section 0 in Tutorial 3) before being exported as an ASCII STL file for processing with KUBRIX
Wireframes
Wireframes may be imported as IGES, STEP, VRML 2.0, DXF or DWG files into Rhino. In Rhino, the data will appear as lines. Lines should be used as a guide to create closed polysurfaces. It is a good practice not to curves directly but to retrace them by creating Polylines (using points on the curves). Often, curves produced by AutoCAD contains many degenerate line segments which, if used directly in the construction of a surface, may result in invalid surfaces. Use the retraced Polylines or curves to create surfaces. The resulting closed polysurfaces should be triangulated and cleaned-up before being exported as an STL file for processing with KUBRIX
Points
In Rhino, the points should be used as a guide to create lines and closed polysurfaces. The closed polysurfaces should be triangulated, cleaned-up and exported as an STL file for processing with KUBRIX
Page 13
Page 14
SpaceRanger
SpaceRanger is a generalized range function that uses complex surfaces to identify & modify groups of zones, blocks & balls in FLAC3D, 3DEC or PFC3D models.
New in 8.2
A single spaceranger.dat containing the names of the files replaces input0, input1,... When N surfaces are present, SpaceRanger takes the order of surfaces in spaceranger.dat as a hint and produces a no more than N+1 groups
Page 15
SpaceRanger creates a FLAC3D (if processing a FLAC3D gird file) or a file called CalculatedCentersAndProperties.dat(if processing a file containing centers an properties) and a VRML file. Read the VRML file into Rhino to have a quick view of the result. Load the grid into FLAC3D to see the new groups.
Figure 4: Material property ID (or color) resulting from interiority bit assignment
Examples
SpaceRanger may be directly used with FLAC3D Just run SpaceRanger.exe, choose an option, type 1 to indicate that you want to use a FLAC3D grid file. SpaceRanger will create a new grid file called output.flac3d which you can import into your model with the USEGIVENIDS option, if you want to replace an existing model.
3. Run SpaceRanger.exe (after launch, enter 1, then 0, then ZoneCentersAndProperties.dat) The program SpaceRanger.exe reads the ZoneCentersAndProperties.dat file and produces a file called CalculatedCentersAndProperties.dat in which block property IDs have been updated based on the ray shooting logic described earlier. The file CalculatedCentersAndProperties.dat can readily be read into an existing model using the FISH function ReadZoneCentersAndMaterialIds. This will give the model its new zone prop IDs. 4. In the FISH file ReadZoneCentersAndMaterialIds.dat, replace the name ModelYouWantToModify.sav with the name of the save file representing the model you want to modify. 5. Start 3DEC and run ReadZoneCentersAndMaterialIds.dat
Page 17
Other examples:
Figure 5: Examples of SpaceRanger use: left, pit excavation sequence in 3DEC. Right: geology in FLAC3D
Page 18
You have created a cylindrical solid. A solid is essentially a closed surface. It has a clear interior and exterior. You are now going to create a triangular mesh representing the surface of the cylinder. Creating a triangular surface mesh is a necessary step on the way to creating a volume mesh of the cylinder. 3. Select the File|Save As menu item and save your model as cyl.3dm. 4. Select the cylinder and select the menu item Mesh|From NURBS objects. The Polygon mesh detailed options dialog box opens. If you see a button in the lower-right corner of the box marked Simple control, click it to see a simplified version of this dialog box.
Page 19
5. In the simplified dialog box, slide the horizontal cursor all the way to the right towards More Polygons and click on Preview to see a preview of the resulting surface mesh. Click on OK to create a surface mesh (Figure 7).
Figure 7: Original highlighted cylindrical surface and the newly-created surface mesh superimposed on it.
6. While the original cylindrical surface is still highlighted (seen in light yellow in Figure 7), select it and hit <DELETE> to keep only the surface mesh. 7. Select the mesh, select the menu item File|Export Selected and when the Export dialog box opens, enter cyl for the File name and select stereolythography (*.stl) for the Save as type. 8. When the STL Export Options dialog box opens, make sure that ASCII File type and Export open objects are both checked. Click OK to complete the Save operation. A triangular surface mesh saved as a formatted STL file serves as input to the Kubrix automatic mesh generator. Kubrix can be run from Rhino by clicking on the Kubrix icon (Figure 8).
Page 20
9. Run the Kubrix program by clicking on the Kubrix icon and select the Hexahedral meshing tab. Click on Default to set all parameters to their default values then click on the Input File button and select cyl.stl. Kubrix will use the file cyl.stl as input to generate a hexahedral mesh of the interior. 10. Set the Max allowable element edge length to 0.5 and click on Compute. 11. Kubrix generates two files: kubrix_out.flac3d and kubrix_out.wrl. You can inspect the resulting model by launching a new instance of Rhino and importing kubrix_out.wrl to visualize it. 12. You can also run FLAC3D and use File|Grid|Import to read kubrix_out.flac3d and display it (Figure 9).
END OF TUTORIAL 1
Page 21
Figure 10: A FLAC3D model (left) and a 3DEC model (right) of a vertical shaft in a stratified soil
3. Double-click the Perspective viewport title to maximize the Perspective viewport (Figure 12).
Page 22
4. Double-click the Perspective viewport title to return to a 4-view window and click on the title of the Top viewport to activate it. 5. Select Solid|Cylinder. Enter 0,0 followed by <ENTER> to specify the coordinates of the center of the cylinder base (in the x, y coordinate system). Enter 20 followed by <ENTER> for the radius. Enter 200 followed by <ENTER> to specify the center of the top of the cylinder. Please note that Rhino accepts both 0,0,200 and 200 as the 3rd parameter of the Cylinder Command. Since we are in a Top view, Rhino rightly assumes that 200 means 0,0,200. 6. Left-click on the button marked Shaded Viewport to see the box and cylinder (Figure 13).
7. To move the cylinder down by 40 feet, select the cylinder and select the menu item Transform|Move. Enter 0,0,0 followed by <ENTER>. Enter 0,0,-40 followed by <ENTER> (Figure 14).
Page 23
8. To excavate the well, we must subtract (in the Boolean algebra sense) the cylinder from the box. To do so, select the menu item Solid|Difference. First select the box followed by <ENTER>, then select the cylinder followed by <ENTER> (Figure 15).
Figure 15: The Boolean subtraction of the cylinder from the box represents the excavation
Page 24
2. Select the model and select the Mesh|From NURBS objects menu item. The Polygon mesh detailed options dialog box opens. If you see a button in the lower-right corner of the box marked Simple control, click it to see a simplified version of this dialog box. 3. In the simplified dialog box, slide the horizontal cursor to the middle and click on Preview to see what the resulting surface mesh will look like (Figure 16).
4. Click OK to accept the surface mesh. Note that the original solid is still highlighted (in yellow) while the mesh is drawn in black. 5. Hit <DELETE> to delete the (highlighted) solid. What is left is the surface mesh. 6. Select the mesh and left-click on the icon marked Check mesh objects for error located in the Geometry Fix toolbar. Rhino responds with the CheckMesh message box providing global information about the mesh indicating that, among other qualities, the mesh contains no naked edges. Naked or Free edges are edges attached to only one polygon. Their presence indicates that the mesh is not closed. 7. The mesh contains both triangular and quadrilateral polyhedra. As mentioned earlier, we need an all-triangular surface mesh to proceed. To triangulate the mesh, select the mesh and left-click on the icon marked Triangulate Mesh. 8. Select the model and select the File|Export selected menu item and when the Export dialog box opens, enter t1_0 for the File name and select stereolythography (*.stl) for the Save as type. 9. When the STL Export Options dialog box opens, make sure that Ascii File type and Export open objects are both checked. Click OK to complete the Save.
Page 25
2. Click on the Default button to resort to the default values of all parameters. Please note that the output file type is .flac3d which is an ASCII format that can be directly read into FLAC3D. Click Compute to launch the computation. The screen output is shown blow.
............................................................................ Welcome to KUBRIX version 10.4.2 Copyright (C) 1995-2008 Simulation Works, Inc. All rights reserved. ............................................................................ PLI001: The input surface file name is: C:\Users\Sina\Itasca\tutorials\Manuals\Tutorial1\t1_0.stl ... PLI007: REQUEST: STL input surface (-it stl) ... PLI002: The output mesh file name is: C:\Users\Sina\Itasca\tutorials\Manuals\Tutorial1\t1_0.flac3d ... PLI065: REQUEST: output type is FLAC3D (-ot flac3d) ... PLI003: The minimum mesh block resolution is 1 ... PLI033: REQUEST: 1000 surface smoothing iterations (-m) ... PLI031: The max. allowed element edge length is infinity ... PLI056: The blocking efficiency is 0.50 (-e) ... PLI042: A block-structured mesh is built (-str 2) ... PLI044: Correct all negative Jacobian elements ... ISI002: Finished reading 400 triangles and 202 nodes. MGI066: Feature refinement: final triangles count 1372 ... MGI068: Fuzzy-logic block decomposition ... MGI037: Done. 1/1 iters beta 0.000100, sp 11, st 7.09e+000 ... MGI001: Block decomposition completed (17) ... MGI013: Volume decomposed into 17 blocks and 1 material... MGI018: Final check ........ all Jacobians are positive. MGI082: Block reduction complete (9)... MGI012: Output mesh contains 9 hex elements ... MGI012: Output mesh contains 24 vertices ... MGI012: Output mesh contains 1 material ... MGI054: Max. edge offset ... 5.92e+000 u between nodes 7, 14
Page 26
MGI057: Max. non-dim offset 0.2101 between nodes 7, 14 MGI018: Final check ........ all Jacobians are positive. MGI021: Max. edge length ... 2.00e+002 u between nodes 1, 10 MGI052: Min. edge length ... 2.81e+001 u between nodes 7, 8 MGI020: Max. aspect ratio .. 7.11e+000 at element 1 ............................................................................ MGI031: Writing a VRML file ... MGI067: Writing a FLAC3D file ... ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ MGI999: Successful termination of KUBRIX in 0.5 seconds! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3. KUBRIX generates a file called kubrix_out.flac3d. Run FLAC3D and use File|Import grid to read kubrix_out.flac3d. 4. Select Plot|1 Base/0|Show to open the FLAC3D graphic window. Click somewhere in the background of this window to activate it, and select Plotitem|Add|Plot|Group to open the Block group dialog box. Click OK to display the grid in FLAC3D. 5. Hit <z> 3 times followed by <x>, 3 times to rotate the object the object 3 times around the z and x axes. Hit <SHIFT><M> twice to zoom out and properly see the grid in FLAC3D (Figure 18).
Figure 18: View of the grid in FLAC3D containing 9 zones and 24 vertices
By default, KUBRIX produces a coarse mesh. In the KUBRIX screen output, the maximum edge length in the mesh is reported as 200. To create a finer mesh, you need to specify a smaller maximum edge length. 6. Go back to the Kubrix application. In the Mesh parameters section of the dialog box, check the square marked Max. allowable element edge length, and enter 10 in the corresponding field. In the same section, choose a Resolution of 3 to make sure that all details are captured with at least 3 elements across. Click Compute to launch the hexahedral mesh generation. 7. In FLAC3D, click on the Command Window to activate it. Select File|New to remove the existing model, followed by File|Import Grid. Read t1_0.flac3d into FLAC3D and display it (Figure 19).
Page 27
Figure 19: A finer FLAC3D grid containing 9,888 zones and 11,450 vertices
8. To create a fully structured grid ( a structured grid is one where all elements can be addressed by three integers: I, J and K), go back to the Kubrix application, and in the Mesh parameters section, select 3 for the Structure of the mesh, and click Compute. In FLAC3D, delete the old model and read and display the newly-created t1_0.flac3d (Figure 20).
Figure 20: A structured FLAC3D grid containing 13,284 zones and 15,250 vertices
Creating a model of both the inside and outside of the excavated shaft
9. In your current folder, double-click the file t1_0.3dm you saved earlier. This file contains the solid model prior to surface meshing. Double-click the title of the Perspective view port to maximize it. 10. Select the menu item Surface|Planar Curves and click on the circle representing the rim of the shaft opening (Figure 21). Hit <ENTER> to complete the command and create a planar surface the cap of the shaft.
Page 28
Figure 21: Highlighted curve representing the shaft rim (top) and the capped shaft (bottom)
So far you have been dealing with solids. Solids are closed surfaces that have an unambiguously defined interior and exterior. The surfaces defining such solids are called manifold surfaces. In contrast, consider a solid cut in half. Consider the surface made up of the surface of the solid and the surface of wall separating the two walls. This surface is closed but doesnt have a clear interior. To be exact, it has two interiors. Such surfaces are called non-manifold surfaces. So far our model was a perfect solid. Its surface was a manifold surface. The addition of the cap to the shaft creates two separate interior regions: inside the well, and outside the well but inside the box. The set of surfaces representing this object constitute non-manifold surfaces. Joining surfaces into a non-manifold surface in Rhino requires a special command. This command joins several manifold or non-manifold surfaces into one non-manifold surface. You can join multiple surfaces into a single nonmanifold surface with the MergeBreps icon 1. Select all the surfaces you want to join and click on the MergeBreps icon. The resulting polysurface is a non manifold polysurface. This can be verified by highlighting the model and pressing <F3> to display the Properties of the selected surface and clicking on Details. 2. Prior to creating a surface mesh based on a solid model, you should save the Rhino model. Select File|Save As and when the Save dialog box opens, enter t1_1 for the File name and make sure that the Save as type is set to Rhino 4 3D Models (*.3dm). A file called t1_1.3dm is created in your current working folder. 3. Select the model and select the Mesh|From NURBS Objects menu item. If the Polygon Mesh Detailed Option dialog box opens, click on the Simple controls button to bring up the simpler Polygon Mesh Options dialog box. 4. Move the slider to the middle of the scale and click OK to create the surface mesh (Figure 22). Kubrix/Rhino Users Manual Page 29
Figure 22: Mesh of the capped model showing the highlighted solid model
5. While the solid model is still selected hit the <DELETE> button to just keep the mesh. 6. Check the mesh by left-clicking on the icon marked Check mesh objects for error located in the Geometry Fix toolbar. Rhino responds with the following message box:
This is a bad mesh. Here is what is wrong with this mesh: Mesh has 29 non manifold edges. Skipping face direction check because of positive non manifold edge count. General information about this mesh: Mesh does not have any degenerate faces. Mesh does not have any zero length edges. Mesh does not have any naked edges. Mesh does not have any duplicate faces. Mesh does not have any disjoint pieces. Mesh does not have any unused vertices.
Rhino qualifies this mesh as bad because it contains non-manifold triangles (edges shared by 3 or more triangles), but this was intended because the solid model itself was non-manifold so as to allow the representation of both the inside and outside volumes. 7. The mesh contains both triangular and quadrilateral polyhedra. As mentioned earlier, we need an all-triangular surface mesh to proceed. To triangulate the mesh, select the mesh and left-click on the icon marked Triangulate Mesh. 8. Select the model, select the File|Export selected menu item, and when the Export dialog box opens, enter t1_1 for the File name and select stereolythography (*.stl) for the Save as type. 9. When the STL Export Options dialog box opens, make sure that Ascii File type and Export open objects are both checked. Click OK to complete the Save operation 10. Run the Kubrix program by clicking on the Kubrix icon. Select the Hexahedral meshing tab and make sure that the input file is t1_1.stl.
Page 30
11. If you have not changed any meshing parameters they should have remained unchanged, but if you have changed them, click on Default. In the Mesh parameters section of the dialog box, check the square marked Max. allowable element edge length, and enter 10 in the corresponding field. In the same section, choose a Resolution of 3 to make sure that all details are captured with at least 3 elements across. Click Compute to launch the hexahedral grid generation. 12. The resulting grid is composed of two groups. All the zones located outside the shaft belong to Group 1. The rest belongs to Group2. 13. Run FLAC3D and visualize the mesh (Figure 23).
Figure 23: FLAC3D grid of the capped model containing 10,368 zones and 11,825 vertices. In this Figure, a first plot item representing the geometry is overlayed by a block group plot item representating the interior of he shaft.
Page 31
Figure 24: View of the model with horizontal line segment at z=50.
4. Select the menu item Edit|Split. Click on the box and hit <ENTER>. Click on the horizontal line and hit <ENTER>. Delete the horizontal line and note that the model is now split into 2 parts. Please note that the Split operation splits the surface of the solid into 2 surfaces (that are not closed). To split a solid into two solid you must use Wire cut. This function will be discussed in a later section. 5. Select the top part and left-click on the icon marked Hide Objects. Double-click the title of the viewport to return to a 4-viewport view and double-click the Perspective view port to maximize it (Figure 25).
Figure 25: Perspective view of the lower part of the split model
6. Select the Curve|Curve From Object|Duplicate Border menu item. Click on the box then on the cylindrical part of the model followed by <ENTER>. This operation extracted a square and a circular curve from the model. Hide the box and the cylinder to only see the two extracted curves shown in Figure 26.
Page 32
Figure 26: The highlighted square and circular curves represent the Naked Edges of the selected Polysurfaces.
You are now going to create 2 horizontal walls based on these curves: one inside the cylinder and the other outside. These walls will act as a partition between the top and bottom of the model. 7. Select the Surface|Planar Curves menu item and click on the square curve to fill its interior with a square surface. Double-click the Title of the Perspective Viewport to return to 4-viewport. Double-click the title of the Top view port to maximize it (Figure 27).
8. Select the menu item Edit|Split and click on the surface of square, then hit <ENTER>. Click on the curve representing the circle and press <ENTER> to split the square into two parts. Figure 28 shows the two surfaces with the outer surface highlighted.
Page 33
Figure 28: The two surfaces resulting from the split with the outer surface highlighted
9. While in the Top view, select the circular and square curves and delete them. 10. Right-click on the button marked Show Objects to unhide all the surfaces, select a Perspective view of the model and resize it by left-clicking the Zoom Extents button. 11. Select the Edit|Select Objects|All Object menu item and note that Rhino responds with the message 3 polysurfaces, 2 surfaces added to selection. on the command-line. You must now join all the surfaces and polysurfaces into one non-manifold surface. 12. Select all the surfaces and click on the MergeBreps icon to create one single non-manifold polysurface. 13. Prior to creating a surface mesh based on the solid model, you should save the Rhino model. Select File|Save As and when the Save dialog box opens, enter t1_2 for the File name and make sure that the Save as type is set to Rhino 4 3D Models (*.3dm). Note that a file named t1_2.3dm is created in your current folder. 14. Select the model and select the menu item Mesh|From NURBS Objects. If the Polygon Mesh Detailed Option dialog box comes up, click on the Detailed Controls button to bring up the simpler Polygon Mesh Options dialog box. 15. Move the slider to the middle of the scale and click OK to create the surface mesh. Delete the solid model which has remained highlighted (Figure 29).
Page 34
16. The mesh contains both triangular and quadrilateral polyhedra. As mentioned earlier, we need an all-triangular surface mesh to proceed. To triangulate the mesh, select the mesh and left-click on the icon marked Triangulate Mesh. 17. Select the model, select the File|Export Selected menu item and when the Export dialog box opens, enter t1_2 for the File name and select stereolythography (*.stl) for the Save as type. 18. When the STL Export Options dialog box opens, make sure that Ascii File type and Export open objects are both checked. Click OK to complete the Save operation 19. Run the Kubrix program by clicking on the Kubrix icon. Select the Hexahedral meshing tab. Make sure that the input file is t1_2.stl 20. If you have not changed any meshing parameter they should have remained unchanged, but if you have changed the parameters, click on Default. In the Mesh parameters section of the dialog box, check the square marked Max. allowable element edge length, and enter 10 in the corresponding field. In the same section, choose a Resolution of 3 to make sure that all details are captured with at least 3 elements across. Click Compute to launch the hexahedral grid generation. The resulting grid is composed of 4 groups. Group2 and Group4 represent the shaft interior; Group1 and Group3 represent the exterior of the shaft (Figure 30).
Page 35
Figure 30: FLAC3D model of the capped shaft in a stratified soil with Group3 masked
Figure 31: 3DEC model of the capped shaft in stratified soil (relative offset 1.)
The resulting 3DEC model is made up of a number of 1,166 tetrahedral blocks. The large number of bloc for such a relatively simple geometry is due to 2 factors: We are creating tetrahedral blocks. Manually, we would have created hexahedral blocks and as a result there would have been about 6 times fewer blocks.
Page 36
The shaft is discretized too finely. Indeed, a relative offset of 1 means that the absolute offset is 1/1000 times the longest dimension of the bounding box containing the model, which is 200 feet. As a result, the absolute offset is 0.2 feet for a shaft diameter of 40 feet.
To obtain a coarser model do as follows: 1. Run the Kubrix program by clicking on the Kubrix icon. Select the Convex Blocking tab. Make sure that the input file is t1_2.stl. 2. Click on Default , and enter 100 for the Relative Offset and click on Compute. The resulting file is t1_2.3dec. 3. Run 3DEC 4.0 call t1_2.3dec and in the Plot Item Menu select color by Region (Figure 32).
Figure 32: 3DEC model of the capped shaft in stratified soil (relative offset 100.)
Page 37
Figure 33: Octree blocking: left, mesh featuring 5 levels of refinement, right, a balanced octree where adjacent zones are at most one generation apart.
Figure 34: Octree meshing: left: boundaries are detected in dark blue, right; there are no boundary (joint) regions.
4. Run Kubrix by clicking on the Kubrix icon. Select the Octree Meshing tab (Figure 35).
5. You can use this approach for both 3DEC and FLAC3D model generation. Click on Default, select FLAC3D for the Output type, select 7 for the Octree level, and click on Compute to create the mesh. Kubrix/Rhino Users Manual Page 38
Figure 36: Octree model where a portion of the zones have been masked for the sake of clarity
END OF TUTORIAL 2
Page 39
Figure 37: A FLAC3D tetra model (left) and octree model (middle), and a 3DEC model (right) of the bifurcating tunnels
The commands associated with left or right-clicking on each icon can be seen by moving your mouse over the icon and leaving it there for a second.
Page 40
We need to split the smaller cylinder, using the larger one, into 3 sections and delete a portion of the smaller cylinder to complete the bifurcation.
Page 41
4. Hit the <ESC> button to unselect everything. Select the Solid|Boolean Split menu item. For the Polysurface to split, select the smaller cylinder, then type <ENTER>. Select the larger cylinder for the Cutting polysurface, followed by <ENTER>. This operation splits the smaller cylinder into 3 sections.
Figure 40: In the Top view, the highlighted section of the smaller cylinder must be deleted to create the branching
5. In the Top view, select the lower-left and the middle sections of the smaller cylinder (Figure 40) and delete them. This leaves only one section (upper right) of the smaller cylinder. Select the two remaining polysurfaces; that is the larger cylinder and the remaining upper-right section of the smaller cylinder, and select Solid|Union to complete the creation of one single closed solid representing the bifurcation. Click on the button marked Shaded Viewport to display a shaded view of the completed bifurcation (Figure 41).
Figure 41: Bifurcation resulting from the union of the larger and the remaining section of the smaller cylinder
To create a model of the soil surrounding the tunnels, you must create a cube representing the volume in which the tunnels are excavated, and subtract the tunnels from it.
Page 42
6. To create a parallelepiped, select the Solid|Box|Diagonal menu item. Enter -60,-60,-60 followed by <ENTER> to specify one end of the diagonal, and 60,60,60, followed by <ENTER> for the other end to create a cube of side 120 centered at the origin. 7. To subtract the tunnels from the cube, select the Solid|Difference menu item. For the First set of polysurfaces, select the box, then type <ENTER>. For the second set, select the bifurcation, then <ENTER> to complete the Boolean difference operation (Figure 42).
Page 43
4. While the original solid model is still selected, hit the <DELETE> button to delete it so the mesh is the only remaining object in the model (Figure 44).
5. Select the mesh and left-click on the icon marked Check mesh objects for error located in the Geometry Fix toolbar. The Check Mesh message box opens and provides global information about the mesh indicating that, among other qualities, the mesh contains no naked edges. Naked or Free edges are edges attached to only one polygon. The presence of naked edges indicates that the mesh is not closed. The present mesh is closed. It contains both triangular and quadrilateral polyhedra. As mentioned earlier, we need an all-triangular surface mesh to proceed. 6. To triangulate the non-triangular elements, select the mesh and left click on the icon marked Triangulate Mesh (located in the Mesh toolbar). 7. Select the model, select the File|Export Selected menu item and when the Export dialog box opens, enter t2_0 for the File name and select stereolythography (*.stl) for the Save as type. 8. When the STL Export Options dialog box opens, make sure that Ascii File type and Export open objects are both checked. Click OK to complete the Save operation Kubrix/Rhino Users Manual Page 44
2. Click on Compute to create the blocking. Kubrix generates two files: kubrix_out.3dec and kubrix_out.wrl. You can inspect the resulting model by launching a new instance of Rhino and importing kubrix_out.wrl to visualize it. 3. You can also run 3DEC 4.0 and use File|Call to read kubrix_out.3dec and display it (Figure 46).
Page 45
2. Click on the Default button to resort to the default values of all parameters. Please note that the output file type is .flac3d which is an ASCII format that can be directly read into FLAC3D. Click Compute to launch the computation. The screen output is shown below.
---------------------------------------------------------------------------............................................................................ Welcome to KUBRIX version 10.4.4 Copyright (C) 1995-2008 Simulation Works, Inc. All rights reserved. ............................................................................ PLI001: The input surface file name is: C:\Users\Sina\Itasca\tutorials\RhinoFlac3d3decPfc3dTutorials\Tutori l2\t2_0.stl ... PLI007: REQUEST: STL input surface (-it stl) ... PLI002: The output mesh file name is: C:\Users\Sina\Itasca\tutorials\RhinoFlac3d3decPfc3dTutorials\Tutori l2\t2_0.flac3d ... PLI065: REQUEST: output type is FLAC3D (-ot flac3d) ... PLI003: The minimum mesh block resolution is 1 ... PLI033: REQUEST: 1000 surface smoothing iterations (-m) ... PLI031: The max. allowed element edge length is infinity ... PLI056: The blocking efficiency is 0.50 (-e) ... PLI042: A block-structured mesh is built (-str 2) ... PLI044: Correct all negative Jacobian elements ... ISI002: Finished reading 6398 triangles and 3197 nodes. ISI014: Sharpest wedge 160 deg @ (4.786e+001,9.988e+000,-3.488e-001) MGI066: Feature refinement: final triangles count 6524 ... MGI068: Fuzzy-logic block decomposition ... MGI037: Done. 34/1 iters beta 0.000100, sp 15, st 2.16e+001 ... MGI001: Block decomposition completed (37) ... MGI013: Volume decomposed into 37 blocks and 1 material... MGI033: First check ........ 2 elems (5%) need Jacob. correction MGI018: Final check ........ all Jacobians are positive.
Page 46
MGI082: Block reduction complete (33)... MGI012: Output mesh contains 33 hex elements ... MGI012: Output mesh contains 84 vertices ... MGI012: Output mesh contains 1 material ... MGI054: Max. edge offset ... 7.16e+000 u between nodes 36, 47 MGI057: Max. non-dim offset 0.4995 between nodes 36, 47 MGI018: Final check ........ all Jacobians are positive. MGI021: Max. edge length ... 1.20e+002 u between nodes 1, 29 MGI052: Min. edge length ... 6.35e-001 u between nodes 35, 38 MGI020: Max. aspect ratio .. 1.32e+002 at element 11 ............................................................................ MGI031: Writing a VRML file ... MGI067: Writing a FLAC3D file ... ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ MGI999: Successful termination of KUBRIX in 2.6 seconds! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3. KUBRIX generates two files: kubrix_out.flac3d and kubrix_out.wrl. You have two options for inspecting the resulting mesh. You can open a new instance of Rhino and use File|Import to import kubrix_out.wrl. 4. For a more in-depth inspection of the grid launch FLAC3D and use File|Import grid to read kubrix_out.flac3d. Select Plot|1 Base/0|Show to open the FLAC3D graphic window. Click somewhere in the background of this window to activate it, and select Plot item|Add|Plot|Group to open the Block group dialog box. Click OK to display the grid in FLAC3D (Figure 48).
Figure 48: View of the grid in FLAC3D containing 33 zones and 84 vertices
By default, KUBRIX produces a coarse mesh. In the KUBRIX screen output, the maximum edge length in the mesh is reported as 120. To create a finer mesh, you must specify a smaller maximum edge length. 5. Launch Kubrix, and in the Mesh parameters section of the dialog box, check the square marked Max. allowable element edge length, and enter 20 in the corresponding field. In the same section, choose a Resolution of 5 to make sure that all details are captured with at least 5 elements across. Set Structure of the mesh to 3 to create a fully-structured mesh and click Compute to launch the hexahedral mesh generation. Kubrix/Rhino Users Manual Page 47
6. In the FLAC3D, click on the Command Window to activate it. Select File|New to remove the existing model, followed by File|Import Grid. Read t3.flac3d into FLAC3D and display it (Figure 49).
Figure 49: Flac3D grid containing 6875 zones and 8464 vertices
2. Click on the button marked Default, then on Compute to create a tetrahedral grid (Figure 51).
Page 48
Figure 52: Octree blocking: left, mesh featuring 5 levels of refinement, right, a balanced octree where a maximum of 1-to-2 refinement is enforced on adjacent cells
Page 49
Figure 53: Octree meshing: left: boundaries are detected in dark blue, right; various regions are identified and colorized
1. Start Rhino. Open t2_0.stl. Run the Kubrix program by clicking on the Kubrix icon. Select the Octree Meshing tab (Figure 35). 2. You can use octree meshing for both 3DEC and FLAC3D model generation. Click on Default, select 3DEC for the output type and click on Compute to create the blocking.
3. Kubrix generates a file called t3.3dec. Run 3DEC 4.0 and use File|Call to read t3.3dec and display it (Figure 55).
Page 50
Figure 55: Coarse octree blocking where blocks intersecting the boundary have been masked
4. To obtain a finer FLAC3D grid, run Kubrix , select the Octree Meshing tab, click on Default, select 7 for the Octree level, select FLAC3D as the output type and click on Compute to create a file called t3.flac3d 5. Run FLAC3D, import t3.flac3d and display it (Figure 56).
Figure 56: An octree FLAC3D mesh using an octree level of 7. Group 2 has been masked for clarity purposes
The most straight-forward way to add internal walls is to add them to the CAD definition before triangulation. A closed surface with internal walls is a non-manifold surface. It is also possible to add walls to a surface mesh after is has been triangulated. In all cases, the resulting STL file should not have any naked or free edges. Once used with Kubrix, the STL file will produce a number of additional groups which can then be individually turned on or off (nulled) in a data file to represent sequential excavation during a simulation. 1. Start Rhino and open t2_0.3dm which represents the CAD definition of the model so far. Doubleclick the label of the Top view to maximize this view. Right-click on the icon marked Wireframe Viewport to see a wireframe representation. 2. Select the model and left-click the icon marked Explode. This operation which is the reverse of the Join operation breaks up the model into 8 separate surfaces (Figure 57, left). Left-click on the icon marked ColoriseAllObjects to give each surface a different color. Select the main tunnel (the horizontal one in the figure), left-click the icon marked Hide Objects, hold the mouse button down and select Invert Selection and Hide Objects to see the main tunnel alone (Figure 57, right).
Figure 57: Top view of the branching tunnels (left) and main tunnel, alone, after the Explode and ColorizeAllObjects command (right)
3. Select Curve|Line|Single Line. Enter -30,30 followed by <ENTER> to define the first point of a vertical line. Enter -30,-30 followed by <ENTER> to complete the line. This line will be used to split the main tunnel. 4. Select Edit|Split, select the main tunnel for Objects to Split followed by <RETURN>. Select the vertical line for the Cutting Object, followed by <RETURN> to finish splitting the main tunnel with the vertical line. Click on the icon marked ColorizeAllObject to see the two parts of the tunnel (Figure 58, left). 5. Double-click the label of the Top view to return to a 4-view representation of the model. Doubleclick the label of the Perspective view to maximize that view. Select the left portion of the tunnel, left-click the icon marked Hide Objects, hold the mouse button down and select Invert Selection and Hide Objects to see the left portion of the tunnel alone (Figure 58, right). Note the line used to cut the main tunnel in two.
Page 52
Figure 58: Top view showing line along which the tunnel will be cut (left) and perspective view of the portion of the main tunnel after hiding the right portion (right)
6. Delete the line that was used to cut the tunnel. Select Curve|Curve From Objects|Duplicate Edge. Left-click on the newly cut edge of the tunnel to extract the circle representing that edge (Figure 59, Left). Select the edge and select Surface|Planar Curves to create the circular surface bounded by the circle (Figure 59, Center). This surface represents an excavation front dividing the tunnel into two regions. Right-click on the Icon marked Show Objects, then right-click on the icon marked Shade All Viewports. When Choose Shade Settings appears on the command line click on the word DisplayMode and select Ghosted to see a transparent view (Figure 59, Right).
Figure 59: Extracting the circular edge of the cut tunnel (Left), creating a planar wall representing an excavation front (Center) and the complete model with the internal wall (Right)
Before the addition of the internal wall, the model was composed of one closed volume, namely the volume comprised between the tunnels and the outer box. The addition of an internal wall did not add to the number of closed volumes. For Kubrix to treat the interior of the tunnels as groups, you must close the tunnels at their three openings. This will result in two groups in the tunnels and one group outside 1. In the Perspective view, right-click on the label of the Perspective view and select Set View|Perspective to set the current view to the default axonometric view. Select Curve|Curve from Object|Duplicate Edge and click on the two visible tunnel openings (Figure 60, Left).
Page 53
2. Hit the Right Arrow ( ) a few times to rotate the model around the z-axis and expose the tunnel opening located on the other side of the model, and select it (Figure 60, Center). Hit <ENTER> to indicate that you have finished extracting the three curves. 3. While the 3 curves are still selected select Surface|Planar Curves to create three circular surfaces spanning each selected curve (Figure 60, Right).
Figure 60: Extracting the curves representing tunnel openings (Left and Center) and creating the additional surfaces that cap the tunnels (Right).
4. Select Edit|Select Objects|All Objects to select all the surfaces constituting the model. Click on the icon marked MergeBreps to create a single closed and non-manifold polysurface. Please note that by selecting all objects you may have selected a number of curves. This doesnt matter since the MergeBreps command operates only on surfaces and polysurfaces. 5. Select the model and hit the <F3> button to open the Properties box. Click on the button marked Details to see a description of your model as:
Geometry: Valid polysurface. Closed nonmanifold polysurface with 13 surfaces. One or more surface normals are not oriented.
Please note that your model is now a non-manifold polysurface on account of the many edges where more than two surfaces meet. 6. Select the model and select Mesh|From NURBS Objects (If the Polygon Mesh Options dialog box comes up click on the button marked Detailed Controls). When the Polygon Mesh Detailed Options opens, use the same values as you did before, namely, set all parameter to 0 (inactive) except for the Maximum distance, edge to surface which should be 0.1 and Aspect ratio which should be 1. All buttons should be unchecked except for Refine mesh. Click OK to create the surface mesh. 7. The mesh you have created contains a number of quadrilateral elements. Select the mesh and click on the icon marked Triangulate Mesh to turn quadrilateral elements into triangles (Figure 61). Kubrix/Rhino Users Manual Page 54
8. Select the mesh. Select File|Export Selected and save the mesh as an ASCII STL file called t2_1.stl.
Figure 61: Mesh of the model featuring an internal wall in the main tunnel
9. Run Rhino. Read in t2_1.stl. Click on the Kubrix icons and select the Hexahedral Mesh Generation tab. In the Mesh parameters section of the dialog box, check the square marked Max. allowable element edge length, and enter 10 in the corresponding field. In the same section, choose a Resolution of 5 to make sure that all details are captured with at least 5 elements across. Set Structure of the mesh to 3 to create a fully-structured mesh and Nb. Of Surface Smoothing Iterations to 500. Click Compute to launch the hexahedral mesh generation. Make sure that the input file is t2_1.stl. 10. Run FLAC3D, click on the Command Window to activate it. Select File|New to remove the existing model, followed by File|Import Grid. Read t3.flac3d into FLAC3D and display it (Figure 49).
Figure 62: Flac3D grid containing 36504 zones. The model has now 3 groups. Group 3 has been masked to show that the tunnel is now zoned and features an internal wall
END OF TUTORIAL 3
Page 55
Startup and reading, joining and centering the model around the origin
1. Startup Rhino, read tutorial4.dxf, and double-click the label of the Top view to maximize it. 2. Moving the mouse around the screen and looking at the coordinates in lower-left corner of the screen (Figure 64) you may note that the model is far from the origin. This is problematic since it limits the number of significant digits available for all sorts of geometrical calculations. It is good practice to translate the model and center it on the origin of the coordinate system.
Page 56
3. Select the mesh and select Transform|Move in the menu bar. Enter 10400,90800,0 for the coordinates of the Point to move from, followed by <ENTER>. Enter 0 for the coordinates of the Point to move to. The mesh is now nearly centered on the origin. 4. Click on the Zoom Extents to find the model at its new location.
Page 57
description: Rhino Renderable Object UserData saved in file: no copy count: 2 Geometry: Valid mesh. Open polygon mesh: 6156 vertices, 2052 polygons with normals bounding box: (-445.88,234.523,219.694) to (-306.1,299.273,237.892)
Below are a few definitions to help interpret this message: Degenerate faces are faces made up of 0-length edges, resulting in a null-area face. Naked edges or free edges are edges attached to a single triangle. The presence of naked edges means that the volume defined by the surface mesh is not not watertight. Duplicate faces are just that: extra copies of the same face at exactly the same location. Automatic mesh generation with Kubrix requires the input surface to be free of duplicate faces. Non-manifold edges are edges attached to more than two triangles: in other words, more than 3 triangles attached to the same edge. Non-manifold edges may exist by design (for example, when a wall partitions a tunnel in two) but, in the present example, their presence indicates problems with the geometry. 2. Select the mesh and click on the icon marked Match mesh edges in the Mesh Tools toolbar. 3. The command MatchMeshEdges has 3 options. Type d or move your cursor over the word Distance to highlight it, and then click on it to activate the Distance to adjust option. Enter 0.1 and hit <RETURN>. Hit <RETURN> again to complete the merging of matching edges that are at most separated by 0.1 meters. This is a fairly large tolerance but it operates on edges that are fairly parallel to each other. High values of the merge distance tolerance may introduce distortions in the mesh. 4. To check the mesh again, click on Check mesh objects for errors icon located in the Geometry fix toolbar.
This is a good mesh. Importants thing to consider with this mesh: Mesh has 17 naked edges. Although this does not necessarily mean that the mesh is bad, naked edges can cause problems if the ultimate goal is STL output. General information about this mesh: Mesh does not have any degenerate faces. Mesh does not have any zero length edges. Mesh does not have any non manifold edges. Mesh does not have any duplicate faces. Mesh does not have any faces that could make it better if their directions were flipped. Mesh does not have any disjoint pieces. Mesh does not have any unused vertices.
Page 58
3. Select the mesh and click on the icon marked Unify mesh normals located in the Mesh toolbar. This function makes sure that adjacent triangles are oriented in a consistent manner. Rechecking for errors results in:
This is a good mesh. General information about this mesh: Mesh does not have any degenerate faces. Mesh does not have any zero length edges. Mesh does not have any non manifold edges. Mesh does not have any naked edges.
Page 59
Mesh does not have any duplicate faces. Mesh does not have any faces that could make it better if their directions were flipped. Mesh does not have any disjoint pieces. Mesh does not have any unused vertices
4. Double-click the label of the Top view to toggle back to 4-view. Click on the icon marked Zoom extents to get a full top view of the mesh (Figure 65).
4. Enter 170 for the angle and note that almost the totality of the mesh is highlighted (Figure 66).
Figure 66: Using Extract Connected Mesh Faces to "defeature" the mesh
5. Click OK, select the mesh and click on the icon marked Hide object. This hides all the triangles connected to each other with angles less than 170. Left-click on Zoom Extents to see the two small slivers remaining in the mesh (Figure 67). These triangles were connected to the rest of the mesh through angles greater than 170 and clearly represent pathological cases.
Figure 67: Slivers remaining on the screen after the main mesh is hidden
6. Zoom away then select all the bits and pieces and delete them. Right-click on the icon marked Hide objects to unhide everything. 7. Select the mesh and use the Check mesh objects for errors icon to diagnose the mesh:
Mesh has 6 naked edges. Although this does not necessarily mean that the mesh is bad, naked edges can cause problems if the ultimate goal is STL output.
Page 61
8. Removing the bad triangles has resulted in several naked edges. Note that using Fill holes is the reverse of triangle removal and will recreate the triangles you have just removed. Instead, Match mesh edges will treat all holes as gaps and will close them by joining neighboring edges without adding triangles. This is what we want. 9. Select the mesh and click on Match mesh edges. In the command line, make sure that DistanceToAdjust is still 0.1, if not click on the word DistanceToAdjust and set it. Hit <RETURN> to complete the edge matching. 10. Check mesh objects for errors and notice that there remain no naked edges. The preceding steps may be repeated with a smaller angle to remove less and less prominent features from the model 11. Again, click on the icon marked Extract mesh Toolbar, and then click on the icon marked Connected faces. Click on a triangle on the mesh and, this time; select an angle of 120. 12. Click on OK to select all the highlighted triangles and click on Hide object to hide them. What is left is shown in Figure 68.
13. Click on any triangle and note that everything is highlighted. This means that they are all part of a single mesh. Click on the icon marked Split disjoint mesh in the Mesh tools toolbar. This operation turns disconnected groups of triangles into independent mesh entities so you can select each group of triangles individually. Groups of connected triangles that represent actual features should not be deleted. Only unconnected isolated triangles need to be deleted. 14. While holding the Shift button click on groups of triangles (in the present case, we have only one big piece) to select and hide them by clicking on the icon marked Hide object. What are left are the isolated triangles shown in Figure 69. Delete the triangles that are left.
Page 62
Figure 69: Selecting large recognizable groups of triangles and living isolated triangles
15. Right-click on the button marked Hide object to unhide everything. Since the complete mesh is now a collection of several parts (recall that we used Split Disjoint Mesh to separate the mesh into many parts and hid the main part as well as several large groups of triangles) it is necessary to rejoin all the parts. Use <CTRL> < A> to select all parts and <CTRL> < J> to join all the meshes into one single mesh. Checking the mesh shows naturally that there are number of naked edges due to the removed triangles.
Mesh has 48 naked edges. Although this does not necessarily mean that the mesh is bad, naked edges can cause problems if the ultimate goal is STL output.
16. Again, as was done earlier, select the mesh and click on Match mesh edges. In the command line, make sure that DistanceToAdjust is 0.1, if not click on the word DistanceToAdjust and set it to 0.1. Hit <RETURN> to complete the edge matching. 17. Check mesh objects for errors and notice that there are some non-manifold and naked edges.
Mesh has 47 naked edges. Although this does not necessarily mean that the mesh is bad, naked edges can cause problems if the ultimate goal is STL output.
18. One more time, remove connected faces, this time using a threshold angle of 60, hiding large pieces of connected triangles. Continue selecting and hiding large connected pieces until what is left is a collection of isolated triangles (Figure 70). What is left represents islands of triangles connected to their neighbor by dihedral angles larger than 60, This does not mean that all these triangles represent noise. Simply, by removing them, we create holes which need to be examined closely to assess whether they were wanted features or triangulation noise.
Page 63
Figure 70: Triangles left after all groups of triangles connected through 60 or less have been removed
19. Delete the remaining isolated triangles. 20. Unhide everything and join all the connected pieces into a single mesh. Please note, this time, that using match mesh edges with a tolerance of 0.1 will not close any of the gaps because the triangles that have been removed are larger than the tolerance. Increasing the tolerance may cause distortions in the geometry. It is therefore advisable to close holes manually. 21. Checking mesh for errors shows:
Mesh has 54 naked edges. Although this does not necessarily mean that the mesh is bad, naked edges can cause problems if the ultimate goal is STL output.
22. Select the mesh and left-click on the icon marked Show edges. When the Edge analysis dialog box opens, make sure that Naked edges is checked. Click on Zoom to highlight every naked edge in your model (Figure 71).
Page 64
23. Click on Current in the command window to look at one particular naked edge. Zooming and rotating the view around will give you a good view of what this naked edge looks like (Figure 72).
24. Left-click on the icon marked Fill mesh hole to close the hole. Click on Zoom in the Edge analysis dialog box, and then click on Current in the command line to see the next available naked edge. Rotate around and zoom to get a better view (Figure 73, top, left). One could close this hole automatically but by removing and reconstructing the triangles around the hole, some of the noisy artifacts can be removed, resulting in a simpler mesh that is less likely to cause trouble during mesh generation with Kubrix. 25. Left-click on the icon marked Delete mesh faces and click on the 3 triangles adjacent to the hole (Figure 73, top, right). Hit <RETURN> to delete the selected triangles (Figure 73 bottom, left). 26. Left-click on the icon marked Single mesh face and click on the top 3 vertices, followed by <RETURN> to complete the creation of a single triangle. Create a second triangle, this time using the 3 remaining vertices (Figure 73, bottom, right).
Page 65
Figure 73: top, left, the next naked edge. Top, right, the highlighted triangles will be removed to reconstruct the area of the hole. Bottom, left, the triangles have been removed. Bottom, right, the triangle have been reconstructed.
After closing each hole, click on zoom (in the Edge analysis dialog box) and click on Current on the command-line. Continue this hole closure process until the last hole is closed.
Using the Kubrix surface diagnostics to identify and repair mesh self- intersections.
As the Kubrix tetrahedral mesh generator runs, it opens a command window on your screen showing the various stages of mesh generation. Kubrix conducts several diagnostics on the input surface, one of which is the detection of triangle-triangle intersections. Every such intersection is listed with the x, y, z coordinates of the point of intersection. If there are intersections, you can use these coordinates as a guide to locate them in the Rhino model. If Kubrix indicates any triangle-triangle intersection, use Rhino to locate the problem area as follows. 3. Start Rhino and open the tutorial4.stl. Run the Kubrix program by clicking on the Kubrix icon. Select the Tetrahedral meshing tab and click on the button marked Default then on Compute. 4. In Rhino, click on the label of the Top view and select the Curve|Polyline|Polyline menu item. Select and copy one of the x,y,z coordinates from the KUBRIX window and paste it on the Rhino command line, followed by <ENTER>. This specifies one end-point of a line segment. Left-click Kubrix/Rhino Users Manual Page 66
anywhere else outside the model to define a second point of the segment. Hit <ENTER> to complete the creation of the line segment. The line segments points to the trouble spot. 5. Examine the mesh near the end-point of the segment and repair any anomalies you see.
5. Save the entire Rhino model as tutorial4.3dm (for future reference) and export it as an ASCII STL file called tutorial4.stl.
Reading the STL file into KUBRIX and automatic hexahedral meshing
6. Run the Kubrix program by clicking on the Kubrix icon. Select the Hexahedral Meshing tab and make sure that the input file is set to tutorial4.stl. 7. To create a FLAC3D model, click on Default, set the Max allowable element edge length to 5, the Resolution to 2 and the Nb. Of surface smoothing iterations to 500 (Figure 75), and click on Compute by launch mesh generation.
Page 67
Welcome to KUBRIX version 11.3 Copyright (C) 1995-2008 Simulation Works, Inc. All rights reserved. ............................................................................ PLI001: The input surface file name is: C:/Users/Sina/Documents/Visual Studio 2005/Projects/kubrix/Manuals/t utorial4.stl ... PLI007: REQUEST: STL input surface (-it stl) ... PLI002: The output mesh file name is: kubrix_out ... PLI065: REQUEST: output type is FLAC3D (-ot flac3d) ... PLI023: REQUEST: block resolution is 2 (-n) ... PLI033: REQUEST: 500 surface smoothing iterations (-m) ... PLI030: REQUEST: max. element size is: 5.000000e+000 (-s) ... PLI056: The blocking efficiency is 0.50 (-e) ... PLI042: A block-structured mesh is built (-str 2) ... PLI044: Correct all negative Jacobian elements ... ISI002: Finished reading 1950 triangles and 979 nodes. MGI066: Feature refinement: final triangles count 5694 ... MGI068: Fuzzy-logic block decomposition ... MGI037: Done. 48/1 iters beta 0.000100, sp 45, st 1.75e+001 ... MGI001: Block decomposition completed (1050) ... MGI028: Volume decomposed into 1050 blocks and 2 materials... MGI043: Block resolution enforced (8400) ... MGI048: Global size enforced, round 0 (49647) ... MGI033: First check ........ 38 elems (0%) need Jacob. correction MGI018: Final check ........ all Jacobians are positive. MGI082: Block reduction complete (49647)... MGI012: Output mesh contains 49647 hex elements ... MGI012: Output mesh contains 54400 vertices ... MGI012: Output mesh contains 2 materials ... MGI054: Max. edge offset ... 1.96e+000 u between nodes 403, 5888 MGI057: Max. non-dim offset 0.6552 between nodes 88, 2002 MGI033: First check ........ 5 elems (0%) need Jacob. correction MGI018: Final check ........ all Jacobians are positive. MGI021: Max. edge length ... 5.99e+000 u between nodes 96, 23372 MGI052: Min. edge length ... 2.11e-001 u between nodes 2467, 2469
Page 68
MGI020: Max. aspect ratio .. 2.08e+001 at element 28275 ............................................................................ MGI031: Writing a VRML file ... MGI067: Writing a FLAC3D file ... ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ MGI999: Successful termination of KUBRIX in 122.3 seconds! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
The resulting kubrix_out.flac3d file represents a zoning of both the inside and outside of the mine. It contains 2 materials (inside and outside the tunnels) and 49,647 zones. It can be read into FLAC3D using the File|Grid|Import (Figure 75).
8. To create a 3DEC block model, launch Kubrix, select the Convex Blocking tab and click on Default. 9. Enter 3dec in the Output type field (Figure 77).
Page 69
The resulting tutorial4.3dec4 model is composed of 1,153 coarse tetrahedral blocks. It can be read into 3DEC version 4 as a data file.
END OF TUTORIAL 4
Page 70
Figure 79: Simplified model obtained by tracing over contour lines shown (top) and final 3DEC model (bottom)
Figure 80: The highlighted contour line represents the floor of the pit.
3. While the floor contour is selected, left click over Hide Objects and select Invert Selection and Hide Objects (Figure 81). This tool hides everything except for what was highlighted.
Page 71
Figure 81: Left-clicking and holding over Hide Objects and selecting Invert Selection and Hide Objects
4. Make sure that Object Snap is on by clicking over the word osnap at the bottom of the screen, and make sure that Near, Point, Mid and Cen are checked (Figure 82). This ensures that while tracing over contour lines, Polylines can snap to existing points.
Figure 82: Turning on osnap as well as End, Near, Point, Mid & Cen
5. Select Curve|Polyline|Polyline and click on a starting point located preferably at the North-East corner of the contour line in the Top view (Figure 83).
Figure 83: Building a Polyline starting from a North-East point on the floor contour.
6. Continue clicking on points, approximating the contour as you go, all the way around. For the last point, click exactly on the first point to ensure that the resulting Polyline is closed (Figure 84).
Page 72
Figure 84: Close-up showing the closure of the Polyline by clicking on the starting point (left), and overal view of the completed polyline representing the floor of the pit (right)
7. Delete the original contour line (that was in the dxf file), select the Polyline you just created and select Surface|Planar Curves to create a surface spanning across the Polyline. Delete the Polyline (Figure 85).
8. Right-click on Show Objects to show all objects (all contour lines), and select the next (next level up) contour line. While holding the <SHIFT> button down, select the surface representing the bottom of the pit (Figure 86).
Figure 86: Surface (representing the floor) and the next contour line selected.
Page 73
9. Left click on Hide Object, hold and select Invert Selection and Hide Object to hide everything except the surface and the next contour line (Figure 87).
Figure 87: After Invert Selection and Hide Object, the surface and the next contour line remain
10. Select Curve|Polyline|Polyline and start tracing the next contour line, again, starting from near the North-East corner, all around until closure (Figure 83).
11. Delete the original contour line, select the Polyline you just created and select Surface|Planar Curves to create a surface spanning across the Polyline. Delete the Polyline. 12. Right-click on Show Objects to show all objects (all contour lines), and select the next contour line. While holding the <SHIFT> button down, select the last surfaces you created. Left click on Hide Object, hold and select Invert Selection and Hide Object to hide everything except the surface and the next contour line (Figure 89).
Page 74
Figure 89: The 2 surfaces that have already been created and the next contour
13. After all the contours have been traced and turned into surfaces, right-click on Show All Objects and click on the button marked ColorizeAllObjects to show all the planar surfaces representing various benches of the pit (Figure 90). Save the model as Tutorial4.3dm. 3dm is the native Rhino file format.
Figure 90: Perspective view of all the planar surfaces representing the benches
Page 75
Figure 91: Top view of all the surfaces with all the border curves highlighted
2. To trim the highest bench, zoom in on the South-East corner of the Top view. Left-click on Shaded Viewport, hold and click on Ghosted Viewport (Figure 92). A ghosted view renders the surfaces semi transparent making the surfaces beneath visible.
Figure 92: Close-up of the South-East corner of the top view and selection of a Ghosted Viewport
3. Click on the edge of the surface immediately below (where the surface changes color) and select Curve to highlight the border of the lower surface. While the curve is selected, select Edit|Trim. To trim off the part of the top surface located inside the curve, click to the left of the highlighted curve just inside the curve (Figure 93). Kubrix/Rhino Users Manual Page 76
Figure 93: Selecting the boundary of the surface below the top surface (left and center) and trimming the top (purple) surface with it, revealing the pink lower surface (right)
4. Trimming the top surface results in the final form of the top bench shown in Figure 94. The top bench will have to be later on connected to a flat surface representing the ground.
Figure 94: Perspective view of the top bench (purple) obtained by trimming the top surface with the outer border of the surface immediately below it
5. Hide the newly-created top bench and the curve used to trim off the top surface, adopt a Top view and zoom in somewhere on the South-East corner (Figure 95, right).
Figure 95: Perspective (left), top (middle) and detail view of the South-East corner of the next surface (right) from which the next bench will be trimmed. The top surface is shown in pink.
6. If the curve (representing the outer border of the surface below) is not selected, select it (as highlighted in Figure 95, right), select Edit|Trim and click somewhere slightly to the left of the
Page 77
highlighted curve to trim off the part of the top surface that is inside the curve (Figure 96). Trimming reveals the surface below which is green.
Figure 96: Top view detail (left), full top view, showing lower surface now visible in green (center) and perspective view of the newly created bench obtained by trimming off the portion of the purple surface located inside the border of the lower surface (right)
7. Hide the newly-created bench and the curve used to trim off the surface, adopt a Top view and zoom in somewhere on the South-East corner (Figure 95, right).
Figure 97: Perspective (left), top (center) and detail view of the South-East corner of the next surface (right) from which the next bench will be trimmed. The top surface is shown in green
8. If the curve (representing the outer border of the surface below) is not selected, select it (as highlighted in Figure 97, right), select Edit|Trim and click somewhere slightly to the left of the highlighted curve to trim off the part of the top surface that is inside the curve (Figure 98). Trimming reveals the surface below which is brown.
Figure 98: Top view detail (left), full top view, showing lower surface now visible in brown (center) and perspective view of the newly created bench obtained by trimming off the portion of the green surface located inside the border of the lower surface (right)
Page 78
9. Hide the newly-created bench and the curve used to trim off the surface, adopt a Top view and zoom in somewhere on the South-East corner and trim the top surface with the curve representing the border of the surface below. 10. Continue this sequence of operations until you reach the floor of the pit, which is just a solid surface and doesnt need any trimming (Figure 99). Select File|Incremental Save to save the current model as Tutorial4 001.3dm. Each incremental save increments the last 3 digits concatenated to the root name, Tutorial4.
Figure 99: Top and perspective view of all the benches. The benches are obtained by trimming each surface with the border of the surface immediately below it, starting from the topmost surface representing the ground surface
Page 79
Figure 100: Creating a vertical line joining the outer boundary curve of a bench with the inner boundary curve of the bench immediately above it (left), and extruding all boundary curves along it (right)
14. In extruding all the curves, we may have inadvertently extruded the outer curve of the topmost bench. The topmost bench is at the same level as the ground surface and doesnt need to be extruded. Select the Polysurface resulting from the extrusion of the outer curve of the topmost bench and delete it (Figure 101).
Figure 101: Overall view of all the benches and bench faces
15. Select Edit|Select Objects|Surfaces to select all surfaces, press the <SHIFT> key, hold it down, and select Edit|SelectObjects|Polysurfaces to add all the polysurfaces to the selection. Select Edit|Join to join all the surface and polysurfaces into a single polysurface (Figure 102). Select File|Incremental Save to save the current model as Tutorial4 002.3dm.
Figure 102: Joining all surface and polysurfaces into a single polysurface
Page 80
the contours as you did in section 1, Startup and approximation of contour lines, page 71. Once all the contours are created 1. Type in the Rhino command line the command MeshPatch, followed by <RETURN>. Rhino responds by asking for all the curves and points through which you want the surface to pass. 2. Hide the original contours and select all Polylines resulting from retracing all the contours. Do not select the original contours, followed by <ENTER>. 3. To the request for a closed inner boundary curve respond by <ENTER>. 4. To the request for a closed outer boundary curve, select the topmost (outermost in a top view) curve. Rhino will compute an approximate surface passing through all the curves (Figure 103).
Figure 103: Approximate surface resulting from the use of the MeshPatch command
Please note that the resulting surface does not properly capture the critical features of pits which are the bench and bench faces.
Page 81
3. Right-click on Zoom Extents All Viewports to resize all the windows at once. Click on the label of the Front view to set it as the current view, select Transform|Align, select the box, then the pit and press <ENTER>. On the command-line, you will see several alignment options. Click on the Top option to align the top of the box with the top of the pit (Figure 105).
4. Select the box and select Edit|Explode to break the box up into 6 surfaces. Select the pit and the top surface of the box, click on Hide Objects, hold and click on Invert Selection and Hide Objects (Figure 106). Only the pit and the top surface of the box remain visible.
Figure 106: The pit and the surface representing the top of the box
5. Double-click the label of the Top view to maximize it. Click on the button marked ColorizeAllObjects to colorize the top patch and the pit in two different colors (Figure 107, left). Select the pit and select Curve|Curve from Objects|Duplicate Border to extract the curve representing the boundary of the pit. Hide the pit to just leave the top surface and the pit boundary (Figure 107, center). Select the curve and select Edit|Trim. Click inside the curve to trim off the interior of the curve (Figure 107, right). Kubrix/Rhino Users Manual Page 82
Figure 107: The pit and the top surface of the box (left), the pit boundary and the top of the box (center) and the result of trimming the top surface with the pit boundary (right)
6. Unhide everything by right-clicking on Show Objects, delete everything other than surfaces and polysurfaces, select all surfaces and polysurfaces and select Edit|Join to join everything into one single polysurface representing the pit, the ground, the walls and the bottom of the box (Figure 108). Select File|Incremental Save to save the current model as Tutorial4 003.3dm.
3. Select the mesh and select File|Export Selected to open the Export dialog box. Select Stereolythography (*.stl) for the Save as Type and enter Turorial4 in the File name field, then click OK. When the STL Export Options dialog box opens, check Ascii (this is the only STL file type Kubrix reads) and click on OK to save an STL file.
Figure 109: The Convex Blocking dialog box prior to block generation for 3DEC
2. Open another Rhino session, or in your current Rhino, hide your model and select File|Import to open the Import dialog box, select VRML (*.vrml, *.wrl) for Files of Type, and select the file kubrix_out.WRL which is a VRML 2.0 model of the outer surface of the 3DEC model and which was generated alongside a 3DEC POLY file called kubrix_out.3dec readily callable by 3DEC 4.0 and displayed in Figure 110.
Page 84
Figure 111: All-tetrahedral (top) and all-hexahedral (bottom) grid of the pit for FLAC3D
Page 85
5. Click Compute the launch the octree mesh generation. The Octree approach detects two separate groups in the mesh which are illustrated in Figure 113, top.
Figure 113: Octree mesh of the pit, with (top) and without the group representing the interior of the pit (bottom)
intermediate saved models called Tutorial4 002.3dm. This model represents the pit without the box or the ground surface. 2. Select the model and select Mesh|From NURBS Objects. If the Polygon Mesh Detailed Option dialog box opens, click on Simple Controls to open the Polygon Mesh Options dialog box. Slide the cursor all the way to the left and click OK to create a mesh. While the Polysurface is still selected, delete it (Figure 114).
Figure 114: The pit model (left) and the meshed model (right)
3. Select the mesh and select File|Export Selected to open the Export dialog box. Select Stereolythography (*.stl) for the Save as Type and enter Turorial4_1 in the File name field, then click OK. When the STL Export Options dialog box opens, check Ascii (this is the only type Kubrix reads) and click on OK to save an STL file. 4. Click on the button marked Kubrix, click on the Octree Meshing tab and click on Default. Click on Input File and when the Select an STL File dialog box opens, select Tutorial4_1.stl, and then click on Open. 5. The values you entered the last time you ran an octree mesh should still be current. If not, enter 6 for the Octree Level, uncheck Intersecting Elements, enter 13100 for Box Center x, -24100 for Box Center y, -120 for Box Center z, 2000 for Box Dimension x and Box Dimension y and 1000 for Box Dimension z . Click on Compute to create the octree mesh (Figure 115).
Page 87
Figure 115: Improved octree model, both groups shown (top), with the interior removed (bottom)
END OF TUTORIAL 5
Page 88
Fundamentals
3DEC POLY files contain a description of blocks and faces. In Rhino solids may be exported as VRML 2.0 files where the individuality of each solid is preserved as a separate VRML Shape constructs. In other words, a collection of convex solids in Rhino, can be exported as a VRML 2.0 file which can be translated into a usable 3DEC POLY file.
Figure 116: Left, this solid is not convex. Middle, during the VRML export process, the solid is facetized but the curve is discretized with multiple segments and the result is not convex. Right, the facetization is as coarse as possible, (large Minimum edge length) resulting in a convex VRML representation.
closed surface mesh is a solid. You can do that by using the Mesh|Mesh edit Tools|Weld function with a weld threshold angle of 180. Weld each closed triangular mesh, individually, then export the complete model as a VRML 2.0 file.
Figure 117: The VRML 2.0 to 3DEC POLY file translation icon. Make sure that the VRML 2.0 file is called a.wrl. The translator will translate it to a.3dec.
The 3DEC icon launches a script, called VTPT, which reads a VRML 2.0 file. Each Shape statement in the VRML 2.0 file is interpreted as the start of a new 3DEC bloc. For each Shape, neighboring coplanar triangles are assembled into polygonal faces. Faces and blocks are then written out to a POLY file called a.3dec. The criterion for assembling neighboring triangles into a single face is that the angle made by the normals of two neighboring triangles should be less than 1. If you wish to change this criterion and use a different triangle merge criterion, launch the VTPT translator on the Rhino command line. For instance, to use a merge threshold angle of 5, in the Rhino command window type: Run VTPT 5 If you prefer to launch VTPT outside of Rhino, open a Command prompt and type VTPT 5
3. Using Transform|Array, with an x-spacing of 0.3 and a z-spacing of 0.1 to create a complete wall. Use Solid|Box again to create a support for the wall (Figure 118) wide enough for the bricks to fall onto. Kubrix/Rhino Users Manual Page 90
Running 3DEC
Start 3DEC 4.0 and read both support.3dec and wall.3dec. Double-click the block plot item to show the model (Figure 120).
Page 91
Figure 120: brick wall and support read into 3DEC 4.0
Type New in the 3DEC command window and call the following 3DEC data file (Figure 121) to simulate the dynamics of the wall under the effect of earthquake. An x-y sinusoidal translation movement imposed on the support wall causes the wall to collapse (Figure 122).
Figure 121: 3DEC data file for simulating the effect of earthquake on a wall
Page 92
6. Click on the Cube and hit <RETURN> twice to split the cube into two solids. Notice that the circle is still highlighted. Hit <DELETE> to delete it. 7. Click on the button marked ColorizeAllObjects to assign different colors to the two solids. 8. Select the cylindrical core and hit <DELETE> to delete it. 9. In the Top view select Curve|Line|Single line. Enter -8,0,0 for the Start of the line, followed by <ENTER>. 10. Enter 8,0,0 for the End of line, followed by <ENTER> ,to complete the line. 11. Click on the label of the Top view to activate it. Select the line, and select Transform|Rotate (not Rotate 3D). Rhino responds with Center of rotation (Copy). 12. Click on the word Copy to tell Rhino that you want Rhino to rotate a Copy of your line. Rhino asks for the center of rotation. 13. Click on the origin of coordinates in the Top view. Rhino asks for the Angle of rotation 14. Enter 22.5 to complete the rotation. Hit <RETURN>, twice. 15. Select both segments (holding down the <SHIFT> button) and select Transform|Rotate. Rhino responds with Center of rotation (Copy). 16. Click on the word Copy to tell Rhino that you want Rhino to rotate a Copy of what you have selected. Rhino asks for the center of rotation. 17. Click on the origin of coordinates in the Top view. Rhino asks for the Angle of rotation 18. Enter 45 to complete the rotation. Hit <RETURN>, twice. You should now have 4 lines 19. Select all 4 segments, use Copy, Paste, and a Rotation of 45 to get a total of 8 line segments fanning out of the origin in the Top view (Figure 124).
Page 93
Figure 124: The cored block and 16 line segments used to cut the block into equal pieces
20. In the Top view, select the horizontal line segments (the first one you created). Select the icon marked Wire cut (Figure 123). Rhino asks for a Surface. 21. While still in the Top view, select the cube. Enter <RETURN> twice to complete the cutting operation. Left-click on the icon marked Shaded viewport, then click on the icon marked ColorizeAllObjects (Figure 125).
22. In the Top view, select another line segment (inclined at 22), select Wire cut, and select the top half of the box then hit <RETURN> twice. 23. While the same line segment is selected, select Wire cut, again, this time select the lower half of the box then hit <RETURN> twice to cut the lower half in two, as well (Figure 126).
Page 94
Figure 126: The model after cutting with the second line
24. Use Wire cut repeatedly with the remaining lines and solids, solid and continue splitting until you obtain 16 pieces (Figure 127).
Figure 127: The cored block has been cut into 16 equal sections using Wire cut
25. Select the 16 solids and use File|Export selected to export the solids as a VRML 2.0 file. In the VRML Export options window, select version 2.0, and when the Polygon mesh detailed options dialog box opens, uncheck everything except Simple planes, set all values to 0 except for the Minimum edge length which should be set to a large number, such as 1000, and click on OK. This will create a file called a.wrl in your working folder. 26. Click on the icon marked Build 3DEC model from VRML (Figure 117) to create a POLY file called a.3dec. Start 3DEC 4.0, call the file a.3dec and double-click the block menu item to see your model (Figure 128).
Page 95
END OF TUTORIAL 6
Page 96
2. Select Mesh|Mesh edit tools|Extract|Connected faces. Click on any face on any curved surface of the mesh. The face will be highlighted and the Extract Connected Mesh Faces dialog box will open (Figure 130). The field marked Angle between contains the value 0. This means that currently all triangles connected to the highlighted triangle through dihedral angles less or equal to 0 are highlighted. Since the surface is curved, none of triangles adjacent to the selected triangle is coplanar with it, so only the selected triangle is highlighted. 3. Left-click in the field marked Angle between and use the up arrow next to it or your mouse wheel to increase its value. You will notice that as you increase the angle, the patch of candidate triangles expands in size (Figure 130).
Page 97
Figure 130: Expanding patch of connected faces as "Angle between" in the "Extract connected faces" dialog box increases
4. Stop increasing the angle when the patch reaches its maximum size. Click OK, and the set of highlighted faces are extracted as a single mesh. Click on the icon marked ColorizeAllObjects to differentiate the two meshes (Figure 131).
Page 98
Please note that the reason the patch stopped expanding is that it is surrounded by sharp edges; in particular two lateral thin ridges running along the side of the tunnel (Figure 132).
Figure 132: Thin ridge causing a sharp edge whcih limits the expansion of the "connected faces" patch
5. Reuse the Mesh|Mesh edit tools|Extract|Connected faces on different areas of the mesh to extract other parts of the mesh, then use ColorizeAllObjects (Figure 133).
Figure 133: The mesh, after all connected faces have been extracted
Page 99
2. Select the Top view and zoom in near the top. Select Curves|Polyline|Polyline and start by picking along the grid line that best represents the centerline of the mesh (Figure 135).
3. Continue picking along the centerline grid points until you the Polyline completely subdivides the tunnel floor into two parts (Figure 135).
Page 100
Figure 136: The Polyline passes through all the grid points located along the midpoint of the mesh
Partitioning meshes
1. Left-click on the Shade viewport Icon and select Mesh|Mesh edit tools|Extract|Faces. Start by clicking on triangles that are on the same side of the Polyline. You can also use left-click and drag to select several triangles at a time. Near the Polyline, click on single faces to select them more accurately. If you want to unselect a face, hold <CTRL> down and select it. Figure 137 shows how all triangles to the right of the Polyline have been selected.
Figure 137: All the triangles to the right of the Polyline have been selected
2. Hit <Enter> when all the faces to the right of the Polyline have been selected. Click on the icon marked ColorizeAllObjects to get a view of the split floor (Figure 138).
Page 101
Figure 138: The floor of the tunnel has been further split into two meshes by manually extracting faces
Use Mesh|Mesh edit tools|Extract|Faces to further split any remaining meshes that straddles the Polyline, and delete the two end caps of the main tunnel as they will be rebuilt later (Figure 139).
Figure 139: The tunnel mesh has been partitioned into 16 separate meshes
Figure 140: Left: The lateral wall appears in two pieces: Use "Split disjoint Mesh" to separate them so you can hide the part you want to hide. Right: only half of the mesh is now visible
3. Join all visible meshes into a single mesh by selecting them and using <CTRL> J. Select Mesh|Mesh edit tools|Extract|Hole boundary to extract the Polyline representing the boundary edges of the mesh (appearing as a yellow line in Figure 141).
Figure 141: joined half tunnel with its boundary curve extracted
4. Hide the mesh and use Edit|Explode to break down the boundary curve into its constituent segments. Delete the curved segments that follow the two ends of the curves and keep only the segments that will border the internal wall you are planning to build (Figure 142).
Figure 142: Portion of the boundary curve that will border the future internal wall
Page 103
5. A closer look at the Polyline near the intersection of the two tunnels shows that the Polyline folds on itself (Figure 143).
6. Delete the individual segments responsible for the fold and reconnect the ends (Figure 144).
Figure 144: Removing the segments responsible for the fold and reconnection of the curves into a single closed curve
7. Add two line segments to both ends of the curves and join all the segments into one single closed Polyline (Figure 145).
8. Use Mesh|Mesh from closed Polyline to create the mesh spanning the curve (Figure 146).
Page 104
Figure 146: Creating a closed Polyline and the mesh that spans across it. This mesh represents the wall
2. Use Polyline|Polyline followed by Mesh|From closed Polyline to pick the nodes over one half of the tunnel opening, creating a Polyline and a mesh capping of the tunnel opening (Figure 148).
Page 105
The naked edges are the result of deleting folding edges while building the Polyline across which the inner wall is spanned. To eliminate them, we are going to collapse a number of edges. Figure 150 shows an annotated view of the 3 vertices involved. We are going to collapse vertex B onto vertex C. 3. Zoom in and select Mesh|Mesh repair tools|Align mesh vertices. Click on the word Distance to adjust, and enter 10,000. Click on the word Select vertices and click on vertex C followed by vertex B, and hit <RETURN>, twice. This will result in the collapse of the segment BC onto vertex C (Figure 150).
Page 106
Page 107
4. Use AlignMeshVertices, again to collapse two neighboring vertices. This will eliminate the last Naked edge. Select the tunnel and click on the icon marked Check mesh objects for errors. If there are any duplicate faces, select the mesh and use Mesh|Mesh edit tools|Extract|Duplicate to eliminate them. In the end, Check mesh objects for errors should only report a number of non-manifold edges which are due to 3 surfaces meeting along the lines where the inner wall meets the outer walls.
END OF TUTORIAL 7
Page 108
Page 109
Note that the model is composed of 3 layers, and that the pit geometry needs to be extended to cover the entire computational domain. 2. In the Layers window, right-click on the Pit layer and selet Select Objects from the dropdown menu. Note that Rhino responds with "6 meshes added to selection". Select the Edit|Join menu item to join the 6 parts of the pit into a single mesh. 3. Hide the layers representing the faults and close the Layers window by right-clicking the Close Layers icon in order to maximize the extent of the Perspective window. Left-click the icon marked Shaded Viewport (Figure 153).
The pit geometry does not cover the entire computational domain. Therefore it is necessary to create a surface that starts at the edge of the pit and fans away from it. To do so, you will use the curve representing the outer rim of the pit mesh and expand it away from the pit.
Page 110
Note that in addition to the boundary curve an isolated line segment located in the lower right corner of Figure 154 is also visible. This shows the existence of an internal free edge in the pit model. 2. Delete the stray curve representing the internal boundary. Select the boundary curve, left-click the icon marked Hide Objects and hold the left mouse button down. In the Visibility toolbox, left-click on the icon marked Invert Selections and Hide Objects so as to leave the outer boundary as the only visible item in the view (Figure 155).
To find a center point from which to expand the curve representing the outer boundary of the pit you have to first build this curve's bounding box. 3. Select the outer boundary curve, select the Analyze|Bounding Box menu item and hit <ENTER> to create the bounding box containing the curve.
Page 111
4. Select the bounding box and select the Analyze|Mass Properties|Volume Centroid menu item. Delete the bounding box while it is still highlighted. 5. Select the boundary curve and select the Transform|Scale|Scale 2D menu item. Rhino responds with Origin point (Copy). click on the word Copy (to specify that a copy of your curve is to be scaled up leaving the original curve unchanged) then click on the point representing the centroid of the bounding box. For the Scale Factor, enter 5, and hit <RETURN> twice (Figure 157).
6. Delete the the centroid. Select the inner curve and the outer curve by holding the <SHIFT> key down, and select the Surface|Loft menu item. Hit <RETURN> to open the Loft Options dialog box. 7. Select Straight sections from the dropdown menu in the Style section,and check the Do not simplify radio button in the Cross-section curve options section, then click OK to create the surface linking the boundary of the pit with its expanded copy (Figure 158).
Page 112
8. Delete the two curves while they are still highlighted. Select the surface and select the Mesh|From NURBS Object menu item. If the Polygon Mesh Detailed Options dialog box opens, click on the Simple Controls button in the lower right corner to bring up the Polygon Mesh Options dialog box. 9. In the Polygon Mesh Options dialog box, slide the cursor all the way to the right and click on OK. A triangular mesh appears superimposed on the surface which remains highlighted (Figure 159).
10. Hit <DELETE> to delete the surface. Right-click the icon marked show objects to bring the pit pack into view. Select both the pit and its extension and select Edit|Join to join them into a single mesh. 11. Select the resulting mesh and left-click on the icon marked Show Edges to open the Edge Analysis dialog box. Make sure that the Naked edges radio button is checked so that only naked edges are highlighted. Click on the Zoom button to highlight the naked edges of the mesh (Figure 160).
Figure 160: Edge Analysis highlighting naked edges at the junction of the pit and its extension
Page 113
Note the naked edges at the junction of the pit and its extension. Such gaps were expected since the extension was meshed separately. You will need to repair these edges. 12. If the Command window is expecting input hit <ESC> to terminate the current command. The Edge Analysis dialog box remains active; leave it on. 13. Select the mesh and left-click the icon marked Match mesh edges. The current value of the edge matching distance is represented by the parameter DistanceToAdjust which is currently 0.001. Click on it and change it to 10, then hit <RETURN> to let Rhino close all the gaps in the mesh. Clicking again on the Zoom button to note that the only remaining naked edges are at the periphery of the extension. 14. Select the mesh, left-click and hold the icon marked Layers and select the icon Change object layer to open the Layer for objects dialog box. Double-click the Pit layer to move the selected mesh into the Pit layer. Close the Edge Analysis dialog box.
2. Double-click the label of the Perspective view to return to four views. Double click the label of the Top view to - the Top view. Left-click on the Shaded Viewport Icon. 3. In the Top view, select the Curve|Rectangle|Corner to Corner menu item. Enter -3000,3000 followed by <ENTER> to specify the first corner of a rectangle. Enter 3000,-3000 to specify the second corner. This rectangle will delineate the computational box 4. Select the rectangle and select the Mesh|Mesh Edit Tools|Mesh Trim menu item. Next, click outside the rectangle to trim everything outside the rectangle. Note that he trimming tool continues to remain active so hit <ESC> to end the MeshTrim command (Figure 162).
Page 114
Figure 162: Before (Left) and after (Right) trimming the mesh
Note that to Trim or Split meshes you need to use special Trim and Split tools located in the Mesh Edit Tool menu item whereas trimming or splitting other geometrical entities require the Trim and Split tools that are in the Edit menu item. 5. Select the File|Save As menu item and Save the present model as t8.3dm making sure that you use Rhino 4 3D Models (*.3dm) for the Save as type. 6. Double-click the label of the Top view to return to four views. Double-click the label of the Perspective view to maximize that view on your screen, and left-click the icon marked Zoom extents. Please note the rectangle at z=0 which was used to trim the surface (Figure 163).
7. Delete the trimming rectangle and select the Curve|Curve from Objects|Duplicate Border menu item. Select the mesh representing the pit and hit <ENTER> to extract the boundary of the mesh (Figure 164).
8. Right-click on the label of the Perspective viewport and select Set View|Perspecctive from the dropdown menu to revert to the standard Perspective view. Double-click the label of the current Kubrix/Rhino Users Manual Page 115
view to return to four views. Right-click on the Zoom Extents All Viewports icon, and hit the <F8> key to activate the Ortho state. The Ortho state constrains the movement of the mouse to the x, y and z directions. When Ortho is on, the word Ortho appears in bold letters at the bottom of graphic window near the words Snap, Planar and Osnap. 9. Select the Curve|Line|Single Line menu item. Make sure that Ortho is on. In the Perspective viewport, left-click the rightmost point of the boundary of the pit (highlighted in Figure 164). This specifies the starting point of the line (Figure 165).
Figure 165: Four-view showing the creation of a vertical line starting at the Pit boundary curve
10. Move your cursor over to the Right view. Note that the end point of the line you are building follows the cursor. Move the cursor all the way down in the Right view. Note that a vertical line follows your mouse. Click somewhere far below the pit to specify the end point of your vertical line. 11. Select the curve representing the boundary of the pit, select the Surface|Extrude Curve|Along Curve menu item and click on the vertical line near the starting point (Figure 166). Please note that where you click on the vertical line matters because it specified the direction in which you wish to extrude the selected curve.
Page 116
Figure 166: Extruding the boundary curve along the vertical line segment
12. Delete both curves: the one representing the outer boundary of the pit and the vertical line along which you extruded the boundary curve. Select the surface resulting from the extrusion and select the Mesh|From NURBS Object menu item. If the Polygon Mesh Detailed Option dialog box opens, click on the Simple Controls button. In the Polygon Mesh Options dialog box, slide the cursor all the way to the right, click on OK and delete the extruded surface which has remained highlighted (Figure 167).
Figure 167: The model after the extruded surface has been meshed
13. Switch to a full Right view by first double-clicking the view label to go to four views and doubleclicking again on the Right view label. If you are not using a shaded view left-click on the icon marked Shaded viewport. Left-click again on the icon marked Shaded Viewport but hold the left button down until the Shade toolbox opens. Left-click on the icon marked Ghosted viewport to obtain a transparent shaded Right view. 14. While in the Right view, Select the Curve|Line|Single Line menu item. Enter -4000,-2100 for the Start of Line coordinates. Note that since you are in the Right view, this means that the Start of Line will be placed at y=-4000 and z=-2100. Enter 4000,-2100 for the End of Line coordinates and right-click on Zoom Extents All Viewports (Figure 168).
Page 117
Figure 168: Right ghost view of the model with a horizontal trimming line placed at z=2000
15. Select the horizontal line and select the Mesh|Mesh Edit Tools|Mesh Trim menu item. In the Right view, click on the mesh representing the vertical walls somewhere below the horizontal line to trim it. Hit <DELETE> to end the trimming operation, and Delete the trimming line. 16. Switch to a Perspective view and rotate the model slightly so you can look at it from below. Select the mesh representing the vertical walls and left-click the icon marked Show edges. When the Edge Analysis dialog box opens, make sure that the Naked Edges radio button is checked and click on the Zoom button to highlight all the naked edges of this mesh (Figure 169).
Figure 169: Perspective view from below of the mesh representing the vertical walls of the computational box
Note that there are naked edges both at the top and bottom of the vertical walls. The top naked edges will be addressed later but, for now, you must close the bottom of the model. 17. To close the bottom of the model, left-click on the icon marked Fill mesh hole and click on any of the lower naked edges of the mesh representing the vertical walls. Click again on the Zoom button in the Edge Analysis dialog box ( Figure 170). Note that the mesh representing the vertical walls and the bottom form a single mesh, distinct from the mesh representing the pit and its extension. This is the reason why there remains naked edges on top of the vertical walls at the junction with the pit.
Page 118
18. Close the Edge Analysis dialog box. Rotate the model so you can see it from above, and select the meshes representing the vertical walls (which includes the bottom of the model) and the pit (which includes the extended topography), and select the Edit|Join menu item. Select the joined mesh and left-click on the icon marked Show edges (Figure 171). Note the free edges at the connection of the vertical walls and the topography that remain to be closed.
19. Select the mesh and left-click the icon marked Match mesh edges. You will see the default values of the various parameters used by this command in the Rhino Command window. DistanceToAdjust is not set to 10, change it by clicking on it, then hit <RETURN> to complete the command. Note that clicking on the Zoom button again in the Edge analysis dialog box results in the message "Select objects with naked edges" message which means that the object on which you are checking for naked edges has no naked edges. 20. Close the Edge Analysis dialog box. Select the mesh representing the pit, its extension, its vertical wall and bottom. Left-click on the icon marked Edit layers and hold the left mouse button down to open the Layer toolbox. Left click the icon marked Change Object Layer to open
Page 119
the Layer for objects dialog box. Double-click the item marked Pit to change the layer of the selected mesh to the layer called Pit. 21. In the Layers window, select layers Fault1 and Fault2, and click on one of the selected light bulbs to turn off these two layers. Right-click on the icon marked Close layers to close the Layers window. Under certain circumstances, a number of triangles in your mesh may appear transparent (Figure 172, Left). This is most likely due to an incorrect orientation of triangle normals. Rhino's default appearance setting displays triangles differently depending on whether triangle normals are directed towards to observer or not. This is referred to as backface culling . Once a mesh has been closed (i.e. has no more naked edges) you may want to left-click on the icon marked Unify Mesh Normals to reorient normals (Figure 172, Right).
Figure 172: Final closed mesh: before unifying normals (Left), and after (Right)
22. Select the File|Incremental Save menu item. This command saves a model named t8 001.3dm in your working folder.
Computing intersections
1. Left-click on the icon marked Edit Layers to open the Layers window. Turn all the light bulbs on in that window to make all 3 layers visible. If you don't see the fault meshes, right-click on the icon marked Show Objects to unhide any object that may have been inadvertently hidden. 2. Select everything by selecting the Edit|Select Objects|All Objects -3000menu item. Rhino should respond with the message: " 3 meshes added to selection". Each of the 3 meshes belongs to a separate layer. If there are any other objects, delete them. 3. While all 3 meshes are selected, left-click the icon marked Mesh Intersect to create all the curves resulting from the intersections of the 3 meshes. Rhino reports that 4 intersection curves have been created (Figure 173).
Page 120
Figure 173: Curves (highlighted) representing the intersection of the 3 meshes of the model
Calculating intersection 1
We will call intersection 1 a group of two curves that seem to represent two pieces of one intersection (highlighted in Figure 174) 1. In the Layers window, turn the light bulbs off for all 3 layers. While the intersection curves are still highlighted, left-click on the icon marked Hide Objects and hold the mouse button down until the Visibility toolbox appears. While holding down the mouse button move your cursor over the icon marked Invert selection and hide objects and left-click it to show nothing but the curves. 2. Select the curves highlighted in Figure 174, Left, and once again left-click and hold Hide Objects, then left-click on Invert selection and hide objects icon to only show the selected curves (Figure 174, Right).
3. While the curve is selected, turn each layer on and off (using the light bulbs) to see which two meshes are at the origin of the selected intersection curve. Note that, in this case, it is the intersection of Fault1 with Fault2 that resulted in this curve (Figure 175).
Page 121
Figure 175: Intersection curve and the two meshes that cause it.
Note that the intersection curve partially overlaps with the border of Fault2, and here resides the problem. Fault2 stops very close to Fault1 so the computed intersection curve (in black in Figure 176 ) is incomplete. You will extend Fault2 so it will make a clean cut with Fault1. 2. Delete the intersection curve (in black in Figure 176). Select the border, and select Edit|Explode. Rhino explodes the border into 17 separate segments. 3. While the segments are highlighted, hold the <CTRL> key down and click on the two segments that are not going to be extended but which are adjacent to the segments that make up the curve you want to extend. Clicking on objects with the <CTRL> key down de-selects them (Figure 177).
Page 122
Figure 177: The exploded border segments after two segments have been de-selected
4. Select the Edit|Join to join all the highlighted segments. Since the highlighted segments are separated by two unselected ones, Join will result in 2 curves: one curve made up of the 3 edges you want to extend, and another curve that is no longer needed. Delete all the curves, except the one that you want to extend. (Figure 178).
Figure 178: Curve which will be extended and which was obtained by pruning the border curve
Please note that the technique used here to isolate a group of adjacent edges has many practical applications. The sequence of operations is as follows: Extract the border. While the border is selected explode it into many segments. While the segments are selected, with <CTRL> down, de-select two segments that bracket the curve of interest. Join everything that remains highlighted to create two separate curves: one, the curve of interest, and another which includes all the segments you don't need Delete the unwanted curve and the two segments you had de-selected earlier, and you are left with the curve you wanted.
5. Unhide everything by right-clicking on the icon marked Show Objects (Figure 179).
Page 123
6. Select the curve to be extended and Fault2, left-click and hold the Hide Objects icon down, then left-click on Invert Selection and Hide Object to just show the extension curve and Fault2 (Figure 180).
Figure 180: Fault2 and the curve representing its naked edges that must be extended
You are now going to extrude the curve over a certain line segment to create an extension of Fault2. To create the extrusion segment (over which the extension curve will be extruded) you are going to use one of Fault2's boundary edges. 7. Select Curve|Line|Single Line. Consider one of the naked edges of Fault2 adjacent to the extension curve. Click on one point not adjacent to the extrusion curve to set the first point of the line segment (Figure 181)...
Figure 181: Setting the first point of the extrusion guide segment
Page 124
8. For the second point, click on the other end of the edge; which is the end adjacent to the extrusion curve (Figure 182). Note that if the movement of the mouse seems constrained it may be because the Ortho state may be on. If so hit <F8> to deactivate the Ortho state.
Figure 182: Specifying the line segment (highlighted in yellow) along which the extension curve will be extruded
9. Select the extension curve, select the Surface|Extrude Curve|Along Curve, and click near the start point of the line segment representing the extrusion to complete the operation (Figure 183).
10. Delete both the extrusion segment and the extrusion curve. Select the extrusion Surface and select the Mesh|From NURBS Objects. In the Polygon Mesh Options dialog box, slide the cursor all the way to the left and click OK to create a mesh. Delete the surface (Figure 184).
Page 125
11. Select the extension, left-click the icon marked Edit Layers, hold the button down and in the Layer toolbox left-click on Change object Layer to open the Layer for object dialog box. Doubleclick Fault2 to make this mesh part of the Fault2 layer. Select Fault2 and its extension and Edit|Join them into one mesh (Figure 185).
Please note that the extension perfectly matches Fault2 and no naked edges are created at the junction. If the meshes did not perfectly match, you can use the Match Mesh Edges icon to get rid of unwanted naked edges
2. Select Fault1 and Fault2 and left-click on the icon marked Mesh Intersect to compute the intersection curve (Figure 187) (Note that this is a new curve that should go all the way through)
Page 126
3. Select Fault1 and, in the Rhino Command Window, type SplitMeshWithCurve, then click on the curve. In the Layers window, right-click on the Fault1 layer and select the Select Objects item from the dropdown menu to select the two pieces of Fault1 resulting from the split. Join them into one mesh using Edit|Join. 4. Select Fault2 and split it with the curve, then Delete the unwanted part (appearing behind fault1 in Figure 188). Remember that Fault2 is meant to stop right at Fault1 and any excesses should be discarded.
Figure 188: Fault1 and Fault2 split with the intersection curve
5. Delete the intersection curve. Comparing Figure 187 and Figure 188, you may note that new triangles have been added to both Fault1 and Fault2. This is what computing the intersection of the two faults is about: locally modifying Fault1 and Fault2 so that both meshes share common intersection edges. Note that SplitMeshWithCurve may produce incorrect results such as stray triangles or altogether no intersection at all. These are most likely caused by errors in the surfaces or round-off errors which are accentuated when the model center far from the origin, among other factors. Please refer to the Troubleshooting section of this manual for further details. SplitMeshWithCurve splits a mesh into two meshes that belong to the same layer the original mesh belonged to. When the splitting curve crosses a mesh all the way through, the two resulting meshes are trivially split but when the curve cuts only partially through two non-trivial parts are obtained.
Page 127
Following every splitting operation, make sure that, for each layer, you join the resulting meshes into a single mesh. This will prevent the proliferation of meshes in your model.
Calculating intersection 2
1. In the Layers window, turn off all the layer light bulbs and right-click on the icon marked Show Objects to make all the remaining intersection curves visible. Right-click the icon marked Zoom Extents All Viewports to bring back into view curves that were outside the viewport (Figure 189).
Calculating intersection 2
1. Select the smaller intersection curve in Figure 189, and use Invert Selection and Hide Objects to isolate it (Figure 190).
2. One-by-one, turn on or off various layers in the Layers window to find which Layers contributed to this intersection curve: there should be two meshes. Here, the intersection is the result of the Pit and Fault2 (Figure 191).
Page 128
3. Delete the existing intersection curve, select both meshes and left-click on the icon marked Mesh Intersect to compute a new intersection curve (Figure 192).
Select the Pit and enter SplitMeshWithCurve in the Command window to intersect the pit with the curve. In the Layers window, right-click on Pit and select Select Objects from the dropdown menu. Note that Rhino responds with "2 meshes added to selection", which confirms that Pit was split into 2 meshes as a result of the split operation. Join the two meshes of the Pit. 5. Similarly, select Fault2 and SplitMeshWithCurve it with the curve. Delete the intersection curve. Fault2 is split cleanly into 2 parts. Delete the part that falls outside the computation domain and delete the intersection curve (Figure 193). Note the trace of Fault2 on the pit.
4.
Figure 193: Split Pit and Fault2 (the remaining portion of Fault2 is highlighted for clarity)
Please note that due to round-off errors and tolerance mismatches SplitMeshWithCurve may produce a mesh that is split in two parts but incorrectly, in such a way that when attempting to select the part of Fault2 that falls inside the pit, the entire Fault2 may be selected. Please refer to the troubleshooting chapter in this manual for further detail on how to circumvent problems with SplitMeshWithCurve.
Calculating intersection 3
1. In the Layers window, turn off all the layer light bulbs and right-click on the icon marked Show Objects to make all the remaining intersection curves visible (Figure 194). Select the curve on the right as intersection 1. 2. Select intersection1 and use the Hide objects|Invert Selection and Hide Objects icon to isolate it.
Page 129
Calculating intersection 3
3. One-by-one, turn on or off various layers in the Layers window to find which Layers contributed to this intersection curve. Again, please note that there should only be two meshes, no more, no less, to produce an intersection. Here, the intersection is the result of the Pit and Fault1 (Figure 195Figure 191).
4. Delete the intersection curve and recompute it by selecting Pit and Fault1 and using the Mesh Intersect icon. SplitMeshWithCurve the Pit and repeat this operation with Fault1. Join the two parts of the Pit and delete the portion of Fault1 that falls outside the computational domain. Delete the intersection curve (Figure 196).
Page 130
Figure 196: Split Pit and Fault1 (the remaining portion of Fault1 is highlighted for clarity)
Calculating intersection 4
1. In the Layers window, turn off all the layer light bulbs and right-click on the icon marked Show Objects to make all the remaining intersection curves visible (Figure 194). Select the remaining intersection curve (Figure 197).
2. One-by-one, turn on or off various layers in the Layers window to find which Layers contributed to this intersection curve. Here, the intersection is the result of the Pit and Fault1 (Figure 198)
3. Delete the intersection curve and recompute it by selecting Pit and Fault1 and using the Mesh Intersect icon. Note that the Pit and Fault1 intersect along two curves, one of which Kubrix/Rhino Users Manual Page 131
(intersection 3) was already dealt with (we are interested in the bottom-left intersection curve in Figure 199).
Figure 199: Calculated new intersections. The one at the bottom-left is what we call intersection 4
4. SplitMeshWithCurve the Pit and Join the two parts of the Pit. SplitMeshWithCurve Fault1 and delete the portion of Fault1 that falls outside the computational domain (this mesh is extremely thin and hard to distinguish from the intersection curve itself). Delete the intersection curve (Figure 200).
o o o
Self-intersections after surface remeshing (often due to the cut angle being too large) Additional self-intersection occurring during tetrahedral meshing (often due to highly distorted surface or small inter-surface clearnces) A list of worst tetrahedra in terms of their collapse ratio with the x, y, z location of their centroids.
Feedbacks direct you to modify the input surface. In general a change in the input surface necessitates redoing Rhino quality checks followed by Kubrix checks, in that order. Kubrix points you to the x,y,z coordinates of "problem" locations in the model. In general, these locations are near triangles. Individual coordinates of "problem" areas outputted by Kubrix may be copied from the Kubrix console window or from kubrix.log, and pasted into a Rhino Curve|Line|Single Line command to specify the starting point of a guide line pointing to the "problem" location. The end point of the line could be an arbitrary point clicked somewhere in the background away from the model. When Kubrix outputs multiple x,y,z coordinates, you can copy several lines of coordinates at once from kurix.log and paste it in a Rhino Curve|Polyline|Polyline command to create a Polyline connecting all the "problem" areas. In this fashion, you can easily direct your attention to those locations. Again, for the last point of the Polyline, you can click somewhere in the background, away from the model.
2. Left-click the icon marked Cull degenerate mesh faces to delete degenerate (null area) faces. A new click on Check mesh objects for errors will reveal a substantially greater number of naked Kubrix/Rhino Users Manual Page 133
edges due to the fact that a number of triangles have been removed. You will deal with naked edges later on. 3. Make sure the mesh is not selected and enter the command ExtractNonManifoldMeshEdges in the Command window. Click on the parameter ExtractHangingFaceOnly to turn it from No to Yes, then select the mesh. Rhino responds with the message "Extracted 1 face". The command ExtractNonManifoldMeshEdges, by default, extracts every triangle attached to any nonmanifold edge. By setting ExtractHangingFaceOnly to Yes, you extract only those that have free edges. Setting ExtractHangingFaceOnly to Yes makes the extraction more discriminating, thus avoiding the removal of perfectly good triangles. 4. Select the mesh and left-click on the icon marked Show Edges to open the Edge Analysis dialog box (Figure 201).
Figure 201: Edge analysis after the removal of degenerate and non-manifold triangles
5. Select the mesh and left-click on the icon marked Match mesh edges. Click on the DistanceToAdjust parameter and set it to 10, and hit <RETURN>. Clicking again on the Zoom button of the Edge Analysis dialog box indicates that there are no more naked edges in the mesh of the pit. A check with the Check mesh objects for Errors confirms that the pit mesh is good. 6. Turn Fault1 and Fault2 on in the Layer window and check their quality using Check mesh objects for errors. Look for duplicate or degenerate faces. Both Fault1 and Fault2 should have naked edges because they are not supposed to be closed. 7. Select the File|Incremental Save menu item. This command saves a model named t8 002.3dm in your working folder.
the -fault keyword indicates to Kubrix the file t8_faults.stl should be read as an internal surface of discontinuity into Kubrix. Kubrix will not check for free edges in the file t8_faults.stl. It will generate a mesh that fits both STL files, t8_outer and t8_faults, and will mark all FLAC3D zone faces or all 3DEC block faces adjacent to t8_faults as INTERFACES for FLAC3D and joints in the case of 3DEC. Kubrix stops after indicating that the input surface intersects. Open the kubrix.log file in you working directory and copy all the lines containing the coordinates of self-intersection points reported by Kubrix. ISI032: Checking for surface self-intersection ... -2.240e+002,1.903e+002,-5.192e+002 -2.240e+002,1.903e+002,-5.192e+002 -2.240e+002,1.903e+002,-5.192e+002 -2.240e+002,1.903e+002,-5.192e+002 -2.240e+002,1.903e+002,-5.192e+002 -2.240e+002,1.903e+002,-5.192e+002 -2.240e+002,1.903e+002,-5.192e+002 -2.240e+002,1.903e+002,-5.192e+002 ---------------------------------------------------------------------------WA-ISW010: Input surface self-intersects ... ---------------------------------------------------------------------------3. Please note that all the coordinates are identical and point to the same location. Go back to the Rhino model, select the Curve|Polyline|Polyline menu item an paste the copied lines into the Rhino Command window to create a Polyline passing through all these points (Figure 202). For the last point of the Polyline, click somewhere in the background away from the model.
Figure 202: Polyline passing through all the "problem" points. The last point of the Polyline is an arbitrary point somewhere away from the model
4. Left-click on the icon marked Zoom Window and draw a small window around the end of the line segment. Right-click on the Show Objects to unhide every the mesh (Figure 203).
Page 135
Figure 203: Zooming in: the tip of the guide segment alone (Left) and after unhiding the meshes (Right)
Zooming in on the tip of the line segment without the rest of the mesh visible ensures that the zoom and rotation centers will be near the tip of the segment and that subsequent rotations of the model will keep the tip of the segment in the viewport. With the mesh present, Rhino places the center of rotation at some depth inside the model and as a result in subsequent rotations the tip of the segment, which is the location of interest, may no longer be in the viewport. 5. This is a case of multiple vertices that are not properly merged. This is most likely caused by round-off errors in the mesh splitting process. To merge all the vertices, left-click on the icon marked Align mesh vertices to tolerance. Click on the parameter DistanceToAdjust and set is to a large value such as 100. Click on the parameter SelectVertices and click on the vertex indicated by the guide segment. This vertex will be the vertex over which all other picked vertices will collapse. 6. Left-click, hold and drag your mouse across a small rectangle enclosing all possible vertices that are in the immediate vicinity of the first vertex you chose to select them.
To avoid selecting vertices that appear to be at the same location but far behind the target collapse vertex, rotate the model slightly, making sure that the picked vertices do no move with it. To unselect vertices selected inadvertently, left-click on them while holding the <CTRL> key down. 7. Hit <RETURN> to complete the collapse. Rhino responds by indicating that a number of vertices were adjusted. Check the Pit and the faults individually with Check mesh objects for errors to make sure that the collapse has not introduced new errors.
Page 136
8. Select the pit, select the File|Export Selected and export the pit as an ASCII STL file called t8_outer.stl. Select both Fault1 and Fault2 and export them as a single ASCII STL file called t8_faults.stl. 9. Click on Kubrix and click on Compute since all the parameters must have remained unchanged since the last use of Kubrix. 10. Kubrix stops after indicating that the improved surface intersects. Open the kubrix.log file in you working directory and copy all the lines containing the coordinates of self-intersection points reported by Kubrix. MGI087: Remeshing surface... MGI088: Surface remeshing completed... MGI096: Remeshed surface contains 36034 triangles ... MGI096: Remeshed surface contains 17867 nodes ... ISI032: Checking for surface self-intersection ... -2.672e+003,2.814e+002,1.580e+002 -2.449e+003,2.600e+002,1.766e+002 -2.404e+003,2.557e+002,1.804e+002 -2.165e+002,1.594e+003,8.164e+001 -2.303e+003,2.450e+002,1.829e+002 -2.157e+002,1.594e+003,8.114e+001 -2.173e+002,1.594e+003,8.208e+001 -2.336e+003,2.496e+002,1.866e+002 -2.335e+003,2.505e+002,1.900e+002 -2.340e+003,2.498e+002,1.863e+002 ---------------------------------------------------------------------------WA-ISW011: The improved surface self-intersects ... ---------------------------------------------------------------------------11. Go back to the Rhino model, select the Curve|Polyline|Polyline menu item an paste the copied lines into the Rhino Command window to create a Polyline passing through all these points (Figure 205). For the last point of the Polyline, click somewhere in the background away from the model.
Figure 205: Polyline pointing to "problem" locations (Left), details of one of these locations (Center) and close-up (Right)
Zooming in on the detail depicted in Figure 205, Right, you can note that there is no real surface imperfection. The problem is caused by the cut parameter in Kubrix which, by default is set to 45; meaning that any surface detail less sharp than 45 is smoothed over. This causes the remeshed surface to become mangled at this location. Kubrix/Rhino Users Manual Page 137
12. Click on the Kubrix Icon, in the Tetrahedral Meshing tab, enter 30 for the Cut angle and click on Compute. 13. Kubrix successfully terminates with the following message: MGI090: Grid generation completed... MGI012: Output mesh contains 168352 tetra elements ... MGI012: Output mesh contains 41360 vertices ... MGI012: Output mesh contains 1 material ... The 10 worst tet collapse ratios range from: -3.932e-006 to 5.353e-006 They occur at the following coordinates: -1.751e+003,1.608e+002,1.221e+002 -1.789e+003,1.829e+002,9.912e+001 -2.967e+003,3.000e+003,-1.777e+003 -2.961e+003,3.000e+003,-1.768e+003 -1.038e+003,-2.456e+002,-1.684e+003 -1.038e+003,-2.456e+002,-1.684e+003 -2.954e+003,3.000e+003,-1.760e+003 -9.869e+002,-2.610e+002,-1.729e+003 -9.869e+002,-2.610e+002,-1.729e+003 -9.960e+002,-2.626e+002,-1.715e+003 MGI012: Output mesh contains 2 interfaces ... MGI031: Writing a VRML file ... MGI067: Writing a FLAC3D file ... ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ MGI999: Successful termination of KUBRIX in 42.1 seconds! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 14. Rename the kubrix_out.flac3d file produced KUBRIX tutorial8.flac3d. Following a successful mesh generation Kubrix lists the FLAC3D zones or 3DEC blocks that have marginal quality in terms of their tet collapse ratio. This is a non-dimensional number that measure how close each pair of opposing edges are. In a tetrahedron (Figure 206), for each pair of opposing edges (there are 3 such pairs) we compute e, the ratio of the distance h between the edges and the length of the longest of the two edge lengths E1 and E2 as follows: = h max(E1 , E2 )
The tet collapse ratio of a tetrahedron is defined as the smallest of the 3 values of e calculated for each pair of edges. = min()
Page 138
An e of 0 signifies that there is a pair of edges that intersect each other causing, among other things, a null volume. Kubrix would not generate such a tetrahedron unless the boundary of the computational domain imposes it. This happens when two input surface, including fault come so close to eachother that no room is left for a good quality tetrahedron. The knowledge of the spread of tet collapse values among the 10 worst tetras indicates that there are less than 10 "marginal" tetras. You can copy the 10 lines of the kubrix.log output corresponding to the 10 coordinates and paste it into the Rhino Curve|Polyline|Polyline command to see where the 10 worse tetrahedra are located (Figure 207).
Figure 207: Location of the centroids of the 10 worst FLAC3D zones or 3DEC blocks
Page 139
Page 140
*FACES F T3 1, 182, 14440, 14192 F T3 2, 982, 14047, 14214 .................................................................. F T3 2107, 33956, 34065, 33957 F T3 2108, 954, 33960, 34072 *Face collections FCOL INTERFACE_MAST_1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 .................................................................. 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 FCOL INTERFACE_MAST_2 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 .................................................................. 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 FCOL INTERFACE_SLAV_1 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 .................................................................. 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 FCOL INTERFACE_SLAV_2 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 .................................................................. 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108
Page 141
;define interfaces def _interface_props root = 'INTERFACE_MAST_' loop _h(1,2) FaceCollectionName = root + string ( _h ) command interface _h face range collection FaceCollectionName interface _h prop kn 1e10 ks 1e10 cohesion 1.e1 tension 0.0 friction 30 endcommand endloop end _interface_props ;property assignments.... model elastic prop bulk 37e9 shear 22e9 dens 2700. ;e.g., granite ;load assignments.... SET grav (0,0,-9.81) fix x range x -3000 tol fix x range x 3000 tol fix y range y -3000 tol fix y range y 3000 tol fix z range z -2100 tol hist unbal SOLVE ratio 1e-5 SAVE tutorial8_elas.sav RET
END OF TUTORIAL 8
Page 142
Page 143
18. Maximize the Top view and select the Surface|Drape menu item. Among the parameters of the Drape a window over the area to drape, leave the parameter spacing equal to 5, and draw a rectangle as large as possible but contained within the boundary of the surface. Don't get too close to the border as the draping may result in surface artifacts due to missing triangles (Figure 209, Left). 19. Delete the initial mesh, select the surface you have just created and select Mesh|From NURBS Control Polygon to extract a mesh from the surface. Delete the surface so the only remaining object is the mesh (Figure 209, Right).
Figure 209: Drawing a draping rectangle in the top view (Left) and the mesh extracted from the draped surface
20. Select the mesh you have just created and using File|Export selected export it as surface9Draped.stl. Since you will work an existing FLAC3D model, to view the model in Rhino you must translate the FLAC3D grid file into a .WRL file. SpaceRanger can do that for you. Rhino does not understand the concept of volume mesh. Spaceranger will translate the outer surface of the FLAC3D model into a collection of quadrilaterals and triangles in the VRML 2.0 format (.WRL) which is readable in Rhino.
Page 144
Figure 210: The draped surface and the outer surface of the FLAC3D model
Please note that the draped surface and the upper surface of the FLAC3D model overlap everywhere over the topography except in places where the surface is inside the FLAC3D model (the dam). You want to indentify the zones of the FLAC3D model that interfere with the surface. The draped surface, in its present form, interacts with every zone on the surface of the FLAC3D model. You must trim the draped surface and keep only the part that is inside the dam.
Figure 211: Two lines along the upstream face of the dam (Left) & 2 additional lines added along the downstream face (Right)
Page 145
25. Select Edit|Select Objects|Curves to select all the lines and hide everything but the lines. Select the 2 lines on the upstream face and select the Surface|Loft menu item to open the Loft Options dialog box. In the Style section select Straight sections from the dropdown menu. In the Crosssection curve options check Do not simplify and click on OK. Repeat this operation on the downstream face of the dam (Figure 212).
Figure 212: Recovered upstream and downstream and downstream surfaces of the dam
26. Select the upstream face and select the Transform|Scale|Scale3D menu item. For the Origin, click on the middle of the higher of the two line segments used to create the upstream face (Figure 213, Left). Enter 5 for the Scale factor and hit <RETURN>.
Figure 213: The middle of the higher of the two upstream lines is used as the origin of the scaling (Left) and the resulting surface (Right)
27. Similarly, select the downstream face and use Scale3D and the middle of the higher of the two downstream lines to scale up the downstream face. 28. Select the two surfaces you have just created and select the Mesh|From NURBS Control Polygon menu item to turn them into simple meshes. While the meshes are highlighted, hide them and delete both surfaces and all 4 lines segments. 29. Unhide everything by right-clicking the icon marked Show objects and hide the FLAC3D model to only show 3 meshes: the upstream and downstream surfaces (meshes) and the draped surface mesh (Figure 214).
Page 146
Figure 214: The draped surface and the recovered upstream and downstream faces
Figure 215: Intersections of the draped surface with the recovered upstream and downstream faces of the dam: perspective view (Left) and top view (Middle).
31. While in the top view, Select Curve|Line|Single line to draw a line from 6600,65000 to 6600,62000. Draw another line from 5000,64600 to 7000,64600, and an additional line from 5000,62500 to 7000,62500 (Figure 216, Left). 32. Hide the draped surface and trim the intersection curve with the 3 trimming lines leaving only the curves and the trimming lines (Figure 216, Middle). Delete the trimming lines and use Curve|Line|Single Line to close the remaining intersection curves into a single closed curve. If you experience difficulties obtaining a single closed curve, Explode everything, unselect everything, and use Edit|Select Objects|Duplicate Objects to detect and delete all duplicate line segments, then join everything into a closed curve. Kubrix/Rhino Users Manual Page 147
33. Unhide the Draped surface and trim it with the closed curve (Figure 216, Right).
Figure 216: Intersection curves, draped surface & trimming lines (Left), trimmed intersection curves & trimming lines (Middle) and trimmed draped surface (Right)
34. Select the trimmed draped surface and select and export it as an ASCII STL file called surface9DrapedTrimmed.stl. You are now going to use SpaceRanger to identify the zones in model9.flac3d that come to within 1 m of surface9DrapedTrimmed.
Page 148
Figure 217, Left shows the zones of model9.flac3d that intersect with or come close to
surface9DrapedTrimmed. You are now going to compute the intersection of these zones with the surface9DrapedTrimmed surface. 40. Delete the mesh representing the non-intersecting zones (shown in purple) leaving the mesh representing the intersecting zones (shown in yellow in Figure 217, Right). Select this mesh and use File|Export Selected to save it as an ASCII STL file called core.stl. Exit Rhino.
Figure 217: model9SurfaceIntersection1.wrl depicted in Rhino. The complete model (Left) and the affected zones only (Right)
42. Select the two meshes and left-click on the icon marked Mesh Intersect. Rhino responds by indicating that there are no intersections. Kubrix/Rhino Users Manual Page 149
This makes sense since with SpaceRanger you chose all the zones that intersect or are closer than 2m from the surface. 43. Select the mesh representing the core and export is as an ASCII STL file called outer.stl. Similarly Export the mesh representing surface9DrapedTrimmed as inner.stl. 44. left-click on the icon marked Kubrix (Kubrix version 12 or higher) to open the KubrixGui dialog box. Select the Tetrahedral Meshing tab and click on the Default button. In the Input Surface section, click on the Input File button and select the outer.stl file. In the Options section, in the New keywords field enter -fault inner.stl. Click on Compute to launch the calculations (Figure 219).
45. Kubrix creates 3 files kubrix.log, kubrix_out.flac3d and kubrix_out.wrl. Rename kubrix_out.flac3d, core.flac3d.
Page 150
*GRIDPOINTS G 1, 5.956671e+003, 6.325790e+004, 7.051194e+002 G 2, 5.956671e+003, 6.325790e+004, 7.201010e+002 G 3, 5.936544e+003, 6.325790e+004, 7.169359e+002 .................................................................. G 26140, 6.251273e+003, 6.299968e+004, 8.208032e+002 G 26141, 6.584813e+003, 6.351720e+004, 9.099938e+002 G 26142, 6.268453e+003, 6.298961e+004, 8.240765e+002 *ZONES Z T4 1, 21401, 21402, 17174, 21403 Z T4 2, 17174, 21401, 6885, 21402 Z T4 3, 17174, 21403, 19978, 21401 .................................................................. Z T4 85783, 12828, 2796, 8126, 8128 Z T4 85784, 12183, 5203, 12181, 12178 Z T4 85785, 7641, 6749, 7187, 7189 *GROUPS ZGROUP group1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 ....... 85755 85756 85757 85758 85759 85760 85761 85762 85763 85764 85765 85766 85767 85768 85769 85770 85771 85772 85773 85774 85775 85776 85777 85778 85779 85780 85781 85782 85783 85784 85785 *FACES F T3 1, 8354, 8384, 8410 F T3 2, 7903, 8167, 7960 F T3 3, 8561, 8631, 8604 ...... F T3 7452, 24476, 24590, 25642 F T3 7453, 7416, 24859, 25116 F T3 7454, 7725, 7727, 25578 *Face collections FCOL INTERFACE_MAST_1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 .................................................................. 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 FCOL INTERFACE_SLAV_1 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 .................................................................. 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 7451 7452 7453 7454
Page 151
46. Figure 220, Left). X is the group of all the zones that intersect or are within 2m of the surface9DrapedTrimmed surface. 47. In the FLAC3D command window enter DEL RANGE GROUP X to delete of all the zones in group X. Use File|Grid|Export to export what remains (Figure 220, Right) as model9Hex.flac3d. Quit FLAC3D.
Figure 220: FLAC3D view of model9SurfaceIntersection2.flac3d before (Left) and after the removal of group X (Right).
Page 152
48. Start FLAC3D. Use File|Grid|Import to import core.flac3d into FLAC3D (Figure 221, Left). Now, use File|Grid|Import again to import model9Hex.flac3d (Figure 221, Right).
Figure 221: Tetrahedral mesh of the core alone (Left) and after the addition of nolde9Hex.flac3d (Right)
49. In FLAC3D, use EXPGRID hybrid.flac3d to export the content of the model as hybrid.flac3d. Please note that by reading core.flac3d first you ensure that the faces mentioned in the face collections, which use the grid point ID's invoked earlier in the core.flac3d file remain unchanged. The figure below (Figure 222) shows the various components of this hybrid model. Please note that you need FLAC3D version 4.1 or higher to utilize face collections. Also, when you export hybrid.flac3d, you version of FLAC3D may not include the FACE and FACE COLLECTION information in the grid file. If this is the case, please use a text editor to open core.flac3d, copy the FACE and FACE COLLECTION portions of the model and paste it to the end of hybrid.flac3d file to obtain a valid grid file.
Page 153
Figure 222: Perspective view of the hybrid model featuring a vertical cut plane through the model and highlighting the three main components of this mesh: the outer hex mesh, the inner tetra mesh and the triangular face collections destined to become an interface
Using SpaceRanger to create separate groups below and above the surface
50. Open the spaceranger.dat file created earlier and insert surface9.stl on the first line. surface9.stl is a translation of the original surface9.dxf into an ASCII STL ile. Run SpaceRanger, select option 0, enter 1 to read a FLAC3D grid file, enter hybrid.flac3d as the name of the grid file you want process. SpaceRanger will produce, among other files a file called output.flac3d. 51. Rename output.flac3d, hybridRanged.flac3d. Launch FLAC3D an use File|Grid|Import to import hybridRanged.flac3d (Figure 223).
Page 154
Please note that SpaceRanger does not yet transfer FACE and FACE COLLECTION information. Please make sure to manually cut and past the FACE and FACE COLLECTION section of core.flac3d to the end of hybridRanged.flac3d prior to use in FLAC3D.
Page 155
fix z range z
END OF TUTORIAL 9
Page 156
EXERCISE 1 Salt Cavern: Using Rhinos Loft to create a model from contour lines
In this exercise, you will learn to construct a volume based on a number of stacked closed curves obtained from the sonar survey of an underground cavern formed by the dissolution of a salt dome (Figure 224).
Figure 224: A solid model (left) and a 3DEC model (right) of a salt cavern
Page 157
EXERCISE 2 Open Pit: Using Rhinos Mesh from Points for fast model creation
In this exercise, you will learn to construct a model of an open pit starting from a set of topographic contour lines (Figure 225).
Figure 225: Clockwise from top left: Contour lines, boundary-fitted all-hex model, Octree model model, and 3DEC model
13. Use edge matching to connect the two meshes together and obtain one watertight mesh. 14. Save your model, then export is as an STL file 15. Run Kubrix to create grids.
Page 159
EXERCISE 3-Models defined by Horizons & Topography: Boolean Operations on Surfaces and Meshes
In this exercise, you will learn to construct a solid sandwiched between two arbitrary surfaces or meshes and split in two by an arbitrary surface or mesh. 1. Read in Sandwich.3dm. This model is composed of 3 surfaces and a rectangle representing the X-Y extent of the model (Figure 226).
2. Select the rectangle, then Surface|Extrude Curve|Straight with the option Both sides, on, to extrude the rectangle into a vertical open surface (Figure 227). We want to represent the volume sandwiched between the lower and upper surfaces.
3. Select Solid|Boolean two Objects. Select the extruded surface (Figure 228)
Page 160
4. Click the left mouse button to select the configuration you want to keep. Click once more to select the configuration shown in Figure 230. Hit <ENTER> to accept it. We now have an open surface bound by the lower surface and the vertical walls bounding the computational domain.
5. Repeat the previous procedure by selecting Solid|Boolean two objects once more. Select, first, the surface you just created, then the upper surface. Click twice on the left mouse button to bring up the desired configuration. Hit <ENTER> to keep it. We now have a Solid bound by the topographies and the vertical walls (Figure 231).
Page 161
6. To split the solid with the third surface, select Solid|Boolean split. Select the Solid first, then the fault, followed by <ENTER> (Figure 232).
Page 162
Summary
This document describes how a complex geometry defined by Computer-Aided Design (CAD) may be imported into PFC3D as wall elements. It also includes a detailed example of a stirred-tank reactor used in process engineering, as well as data files and geometry definitions for several additional industrial applications.
Introduction
PFC3D is valued for its ability to model complex physics. However, most engineering applications also feature complex geometries in the form of complex containers, screws, baffles, hoppers, etc. While PFC3D offers many options for defining all types of walls, creating complex walls within PFC3D may become tedious at times. This document describes how a complex geometry defined by Computer-Aided Design (CAD) may be imported into PFC3D as wall elements. It also includes a detailed example of a stirred-tank reactor used in process engineering, as well as data files and geometry definitions for several additional industrial applications. All the corresponding files are located in the folder ImportCAD that lives with this report and its subfolders. Some familiarity with PFC3D and FISH is necessary to take full advantage of this document. Some basic understanding of Computer-Aided Design concepts and tools, such as Rhino, AutoCAD or Pro-E is also helpful.
Page 163
In a free-form approach, points are created and linked together with curves. Curves are extruded along other curves to create surfaces. Surfaces may also be defined by closed curves. A collection of surfaces may be sewn together to form a shell or poly-surface, which can be either open or closed. Shells may be extruded along curves, or rotated around axes to create closed shells. Closed shells can also be obtained by sewing several shells together. Closed shells are sometimes called solid. In a solid-based approach, ready-made closed shells called primitives (such as parallelepipeds, cylinders, spheres, cone sections, etc.) are used as a starting point. Union and intersection operations (also referred to as Boolean operations) are then used to subtract, combine or intersect primitives in order to create more complex solids. A CAD model is a mathematical description of the objects it contains. For instance, a disc is described as plane passing through a specific point, having a specific normal and trimmed by a circle described by a specific radius and centered on a given point. A triangulation consists of a number of computing points on the surfaces connected together as triangles creating a tiling the surface. Such a tiling is also referred to as a surface mesh. Triangulation, or facetization in general, amounts to discretizing the equation of a surface and replacing it with a table of x-, y- and z-values; some loss of information results from this. CAD models exist in a variety of formats depending on whether they are facetized (Table 1). CAD files Most common formats Non-facetized (solid/surface models) IGES, STEP, PARASOLID, ACIS Facetized (surface meshes) DXF, STL, VRML, 3DS
The STL (STereo-Lithography) file format is used in rapid prototyping and Computer-Aided Manufacturing. Because of its relative simplicity, is has become a de-facto standard for representing triangular surfaces. In the following, we will focus on importing CAD data in STL format (formatted ASCII files), using a FISH function. This approach can easily be extended to any other ASCII files readable using FISH. The file hopper.stl, located in the folder ImportCAD, is provided as an example of such a STL ACSII file. It can be edited with your favorite text editor. The entire content of the STL file are bracketed between the keywords solid stl_ascii and endsolid stl_acsii. Within this bracket, each triangle is bracketed by a facet normal/endfacet pair containing the normal vector to each triangle and the coordinates of the triangles vertices. This file represents the triangulated geometry shown in Error! Reference source not found.; the initial CAD geometry prior to triangulation is shown in Figure 235 Both figures were produced using Rhino.
Page 164
The two last items of this listing are illustrated in the following. The best way to examine a geometry so is to use a CAD software and check for missing or duplicate parts, weed out irrelevant details or parts that are not likely to come into contact with particles and check the orientation of the normals prior to saving the model as a formatted STL file. Recall here that particles may only interact with walls whose normals are pointing at them; if not, they will pass right through the walls.
Model simplification
An imported model may be large and complex. Using it directly may require prohibitively large computational resources because of the sheer number of triangles involved. It is recommended that the model be simplified to remove details irrelevant to the PFC3D simulation. For instance, Figure 234, left shows the model of a stirred tank reactor in which the tank wall has a certain thickness. In simulating the mixing of particles, the outer wall is irrelevant since it never interacts with particles. Figure 234, right shows the same model where only the inner wall of the tank has been kept.
Page 165
Figure 234: Original model with thick walls (left) and simplified model (right)
Model triangulation
A solid model represents a mathematical description of the entities it contains. Surfaces must be triangulated before they can be read as wall elements into PFC3D. Most CAD systems allow you to choose how finely a surface is to be triangulated. The most common measure of how finely a surface is triangulated is called chord error or offset. Figure 235 shows the CAD definition of a hopper prior to triangulation. Figure 236 is the result of triangulating the CAD definition with a chord error of 0.1. The resulting surface mesh contains 64 triangles. Figure 237 represents the same object triangulated with a chord error of 0.001. The total number of triangles is now 4,680. Clearly, a slight degradation in geometrical accuracy can cause a substantial (almost 100-fold) decrease in the number of wall elements, and result in a significant speed-up of the simulation.
Page 166
Figure 237: Triangulation with a chord error of 0.001 results in 4680 triangles
The exact same geometrical accuracy may sometimes be obtained with fewer triangles, as illustrated in Figure 238. The triangulation on the right contains fewer triangles than the triangulation on the left, with no loss of geometrical information is lost in this simplification.
Figure 239: Normal orientations as displayed in the 3DShop solid modeler. Triangle normals are incorrectly oriented (left). All normals point towards the particles (right)
Example applications
As mentioned above, we focus here on the importation of CAD data in the STL format, and illustrate this functionality with several example applications. Each example application uses specific STL files and FISH data files located in a corresponding subfolder of the folder ImportCAD, however, the FISH function readStlFile that implements the STL format import functionality, as well as other shared FISH functions, are implemented in the file CAD_ support.fis located directly in the folder ImportCAD. The readStlFile FISH function parses and reads formatted STL files. Each call to this function, in turn, calls _iniWallColor, which assigns a different color to the part that is read so that, later on, color can be used as a range criterion to assign distinct attributes or kinematics to each wall, or simply to represent various parts with different levels of transparency or color. In Section 4.1, we will illustrate and detail the use of the functions implemented in CAD_support.fis for the case of a stirred tank reactor application. The structures of the files used for the additional examples being the same, these examples wont be discussed in detail. Note that for illustration purpose, the number of balls generated in these examples is kept low. These data files should be modified according to the requirements of each problem.
STRstator.stl is read first, followed by STRrotor.stl. As each component is read into PFC3D, a unique color is assigned to it so that it can be identified using a color range later on. The kinematics of the rotor is prescribed through a call to _iniWallVel.
The simulation is initialized by a call to the FISH function simini, defined in CAD_support.fis. All the situations shown here being fully dynamic, the local damping is set to zero, and viscous damping is used instead. An estimate of the maximum number of balls is specified to help optimize the PFC3D contactdetection algorithm, and gen_error is turned off to prevent any error to be thrown and stop the simulation if the number of balls generated does not exactly match the users input. Balls are created with a call to makeAssembly. This procedure is specific to each situation shown here, thus is defined directly in STR.dat. Finally, ball and wall properties are set and a rotation speed equal to turn per second is imposed around the vertical axis. The actual computation is done in simloop, defined in CAD_support.fis. Calculations are done in chunks of dt_sav seconds, followed by the output of a save file. the resulting save files will be post-processed with Iv. The parameter ratio 1.e-8 is issued to the SOLVE command to make sure that the computation does not stop prematurely.
Figure 241: Two baffle designs represented by STRrotor.stl (left) and STRrotor2.stl (right)
Page 169
Additional Examples
The following examples are not detailed in this note. The data files used to run the simulations have the same structure than STR.dat describe above. The makeAssembly FISH function is specific to each case and thus defined in a specific data file. All examples make use of simini and simloop defined in the file CAD_support.fis.
Ball Mill
A ball mill is used to grind particles. The following files are used in this application: BallMill.dat, BallMillBody.stl and BallMillCap.stl, located in the folder ImportCAD/BallMill. BallMillBody.stl defines the geometry of the mill (see Figure 242, left). BallMillCap.stl is an end cap holding the particles inside the mill. The cap is rendered transparent to make the interior visible. BallMill.dat contains a function that colorizes balls according to the magnitude of velocity (Figure 242, right).
Figure 242: Ball mill: the geometry (left) in operation, with balls colorized according to the magnitude of their velocity (right).
Blade Mill
A blade mill is also used to grind particles. The following files, located in ImportCAD/BladeMill, are used in this application: BladeMill.dat, BladeMillstator.stl and BladeMillrotor.stl. Particles are created in two different colors in order to illustrate the mixing process. a snapshot of the system is shown in Figure 243
Page 170
Bulldozer
The following files are used in this application (Figure 244): bulldozer.dat, bulldozer.stl, and floor.stl.
Page 171
Figure 245: A 2D planar curve and its medial axis representation shown with thin lines. The medial axis or skeleton is the locus of the centers all the internal circles (in blue) tangent to at least two points of the curve
By extension, the mid-surface of a three-dimensional surface S is the locus of the centers of spheres that are tangent to the surface S in three or more points, where all such spheres are contained in S. Figure 247 illustrates a 3D example in which the mid surface is shown in pink.
Page 172
Figure 247: 3D object outlined in black. The its mid surface is represented in purple, and a few of the included are shown
Clearly, the definition of mid-surface and the problem of finding clumps approximating a surface are germane. A mid-surface and the radius of all the spheres it hosts define an infinite collection of balls perfectly matching a surface. In practice, we are limited to a small number of balls
Input Surface
Input file Name of the ASCII STL file defining a closed surface in which the clump will be created. Please make sure the STL grid size is uniform and at most 1/10 of the size of the smallest ball
Meshing Parameters
Min/Max Ball Size Ratio The size ratio of the smallest to the largest ball. This parameters determines how small details are resolved
Page 173
Ball intersection angle The largest angle at which balls are allowed to intersect. The greater this value the smoother is the surface of the clump. In this fashion you can control the roughness of the clump surface. This parameters limits the number of balls by limiting ball overlap.
Figure 248: Clump representing a Hershey kiss with 8 balls. The two parameters determining the clump are Min/Max Ball size ration = RMIN/ RMAX = 0.4 and Amax, the maximum ball-to-ball intersection angle A < 90
Options/New Keywords This field is reserved for additional command-line keywords Compute Launches the mesh generation computation Reset Restores the initial set of parameters when KUBRIX was first started. These parameters are read from the kubrix.log file located in the working folder. Default Restores the default KUBRIX parameters for the type of meshing requested. Cancel Closes the KUBRIX dialog box Help Opens this document
Page 174
Troubleshooting
Where are my files? In Rhino, I clicked on the Kubrix icon and ran it but the resulting files are not in the folder they are supposed to be.
Some time Rhino's working folder defers from the folder containing the input STL file. Reading a file from this folder often suffices to let Rhino know where the working directory is. You can explicitly set the working folder with the Rhino SetWorkingDirectory command. To avoid this problem, first run Rhino, then read the STL file you want to make a mesh from into Rhino. This tells Rhino where the working directory is. Run Kubrix from inside Rhino by clicking on the Kubrix icon. Make sure that you have selected the right STL file in the Input File field of the dialog box.
Why the Polygon Meshing Option? I have created a model in Rhino. I have meshed its surface and I want to save it, but Rhino displays the Polygon Meshing Options. I thought I did that already when I triangulated the surface!
You are probably saving both your mesh and the original Rhino model. Select the mesh and use Export or delete the model, then use save to create the STL file.
Naked/free edges in the input. I run Kubrix and it says that there are free edges. I read the STL file into Rhino and use CheckMesh. Rhino reports that there are indeed naked edges. Why?
Kubrix does not accept naked edges. It is good practice to check the surface mesh created by Rhino using CheckMesh before saving it as an STL file. There could be a number of reasons causing this problem: 1. You forgot to use Edit|Join (for a manifold solid) or MergeBreps (for a non-manifold solid) prior to creating the surface mesh. As a result, each surface is independently meshed with no guaranty that naked edges on adjacent surfaces match. Make sure that you use Join (for manifold surfaces) or MergeBreps (for non-manifold surfaces) before surface meshing. In the non-manifold polysurfaces resulting from the MergeBreps operation, due to tolerance issues, after surface meshing, a few naked edges may survive. Highlight naked edges using Analyze|Edge Tools|Show Edges and manually delete and rebuild the triangles around them to create proper non-manifold edges. 2. Using MatchMeshEdge takes care of manifold edges but cannot resolve naked edges that should be non-manifold edges (more than two surfaces meeting at an edge). To remove any remaining naked edges, get close to a naked edge and use the command AlignMeshVertices|Select vertices to merge vertices that are close. The first vertex you click on will be the vertex on which the second vertex you click will collapse.
Page 175
Tetra blocking fails! I launch Kubrix|Convex Blocking or Tetra meshing. I use all default values for parameters. Kubrix reads the STL file and the surface is remeshed but Kubrix reports intersecting triangles after remeshing or hangs and fails with the message: Tetra blocking failed
The default offset value you are using is probably too large and the resulting blocks are possibly too coarse. This happens if your model is small with large features. Reduce the offset by a factor 10, and rerun. You may also have to reduce the cut angle. If two highly curved and noisy triangular surfaces come very close to each other, after remeshing, self-intersecting triangles may be produced. To avoid this reduce the cut angle to 20 or even 10 or less. This will ensure that Kubrix will remesh the surfaces while respecting slight dihedral angles on the surfaces thereby preventing selfintersection in the resulting triangulated surface used for volume meshing.
Page 176
Blocking not progressive enough. I use Kubrix|Convex Blocking to create a 3DEC model. I use a small Offset, small Cut angle and a Mesh Gradation close to 1 but I find that blocks fan out too abruptly. I would like to see a more progressive increase in block size around details.
The STL file you use as input to Kubrix is too coarse. To be on the safe side create an STL file that is fine enough.
SplitMeshWithCurve problems in Rhino License error. I obtained a Kubrix license but I get an error message saying that the license is not valid
Please go through the following license troubleshooting checklist and send the result to support@siw.com: In all that follows, replace Program Files with Program File (x86) if you have installed Kubrix on a 64 bit operating system) 1. Make sure that you are running kubrix on the machine it was licensed to. Kubrix is nodelocked to the machine for which it is licensed. 2. Verify that the file kubrix.exe is located in C:\Program Files\Simulation Works\Kubrix 3. Verify that the file kubrix_lock (or kubrix_lock.txt, the kubrix license character string key can be in a file with either name) is located in: C:\Program Files\Simulation Works\Kubrix 4. Make sure that kubrix_lock (or kubrix_lock.txt) contains the encrypted Kubrix license key which was sent to you by email. The encrypted key should look something like: 5D8IK1K-5L7O9IA-8ZT1J5T-78Z sometimes terminated by a -. This character string is the only thing that should be in the kubrix_lock file, and it should appear on the first line; not the entire content of the license Email. 5. Open a Command Prompt. 6. To go to the C:\Program Files\Simulation Works\Kubrix folder, in the Command Prompt, and enter:
Page 177
cd C:\Program Files\Simulation Works\Kubrix. 7. To run kubrix, type .\kubrix followed by <RETURN> 8. If you receive the error message ER-ISE028 saying that a Nastran file was not found, it means that the installation is fine and it is simply looking for a default input file called kubrix_in.nas. 9. If you receive a different error message proceed as follows: 10. While still in the command window and in the C:\Program Files\Simulation Works\Kubrix folder, type the following command: .\kubrix license 11. Cut and paste the screen output in an email and send it back to us. 12. In the same command window, please type the command: ipconfig /all 13. Cut and paste the screen output in an email and send it back to support@siw.com.
Page 178
index
3DEC, 15, 16, 17, 18, 19, 22, 24, 36, 37, 38, 40, 43, 45, 49, 50, 51, 56, 69, 70, 71, 84, 89, 90, 91, 92, 95, 96, 109, 135, 138, 139, 143, 157, 158, 177 3DEC POLY file, 90 a manifold surface, 29 Align mesh vertices, 10, 106, 136 AlignMeshVertices, 10, 11, 107, 108, 175 Angle between, 60, 61, 97, 98 Aspect Ratio, 132 backface, 120 Ball Mill, 170 Blade Mill, 170 Boolean, 24, 42, 43, 89, 97, 99, 160, 161, 162, 164 Boolean Split, 42 Bounding Box, 111 Bulldozer, 171 CAD, 163 CAD model, 164 cavern, 157 centroid, 15, 112 Check mesh objects for error, 25, 30, 44 CheckMesh, 11, 25, 175 chord error, 166 cleanup, 10, 56, 109, 143 clumps, 172 collapse ratio, 133, 138 COLLECTION, 153, 155 ColoriseAllObjects, 52 ColorizeAllObjects, 10, 52, 75, 82, 93, 94, 98, 99, 101 Connected, 60, 61, 62, 97, 99 contour, 71, 72, 73, 74, 75, 81, 157, 158 Convex Blocking, 36, 37, 45, 69, 84, 176, 177 Cull degenerate mesh faces, 59, 133 Curve|Circle|Center, Radius, 40 Curve|Curve From Object|Duplicate Border, 32 Curve|Curve From Objects|Duplicate Edge, 53 Curve|Line|Line segment, 31 Curve|Line|Single Line, 52, 116, 117, 124, 133, 147, 176 Curve|Polyline|Polyline, 66, 72, 74, 133, 135, 137, 139 Curves|Curves from Objects|Duplicate border, 75 Kubrix/Rhino Users Manual defeaturing, 13, 60 Defeaturing, 60 degenerate faces, 30, 57, 58, 59, 133, 134 Degenerate faces, 58 Delete mesh faces, 65 diagnostics, 66 drag, 9, 11, 81, 101, 136 Drape, 144 Duplicate faces, 58, 59 Edge analysis, 64, 65, 66, 106, 107, 119, 134 Edit|Select Objects|Surfaces, 79, 80 Edit|SelectObjects|Polysurfaces, 80 Edit|Split, 32, 33, 52, 89 Explode, 52, 82, 103, 122, 147 Extending, 109, 122 Extract Connected Mesh Faces, 97 Extract mesh, 59, 62 ExtractHangingFacesOnly, 59 Extraction of connected mesh faces, 60 ExtractNonManifoldMeshEdges, 59, 134 Extrude Curve, 40, 79, 116, 125, 160 Facetized surfaces, 14 faults, 15, 109, 110, 114, 122, 127, 134, 135, 136, 137, 140, 143 Fill all holes, 59 Fill mesh hole, 65, 118 free edges, 175 free-form, 164 gaps, 37, 49, 62, 64, 114 Geometry Fix, 25, 30, 44 Ghosted, 53, 76, 117, 131 Hexahedral meshing, 21, 25, 30, 35, 45 Hexahedral meshing tab, 25 Hole boundary, 103 Incremental Save, 79, 80, 83, 120, 134 Installing Kubrix and Rhino, 9 interfaces, 109, 138, 140, 141, 142, 143, 150, 155 intermittent, 109, 143 intersections, 15, 37, 49, 66, 109, 120, 132, 133, 149 Invert Selection and Hide Objects, 52, 71, 72, 82, 126, 128, 129 Layers, 109, 110, 114, 120, 121, 126, 127, 128, 129, 130, 131, 133 Loft, 112, 146, 157 Page 179
Loft Options, 112, 146 manifold surfaces, 29 Match mesh edges, 58, 62, 63, 114, 119, 134 MatchMeshEdges, 58 Medial axis/Mid-surface, 172 MergeBreps, 29, 34, 54, 175 MergeBreps icon, 29 Mesh from Points, 158 Mesh Intersect, 120, 126, 129, 130, 131, 147, 149 Mesh split, 99 Mesh|From NURBS objects, 19, 25, 43 Mesh|Mesh edit tools|Extract|Duplicate, 108 Mesh|Mesh edit tools|Extract|Faces, 101, 102 Mesh|Mesh edit Tools|Weld, 90 Mesh|Polygon mesh primitives|Box, 67 MeshPatch, 80, 81 Model simplification, 165 Model triangulation, 166 Naked edges, 25, 58, 64, 106, 107, 108, 113 Nb. Of surface smoothing iterations, 67 Non-manifold, 58 Non-manifold edges, 58 non-manifold surfaces, 29 normal orientation, 167 Octree meshes, 37, 49 Octree Meshing, 38, 50, 51, 85, 86, 87 origin, 11, 19, 40, 41, 43, 56, 57, 81, 93, 121, 127, 146 Ortho, 10, 11, 116, 125 overlap, 145, 174 PFC3D, 163 Pit, 71, 110, 114, 116, 120, 128, 129, 130, 131, 132, 133, 136, 158 Polygon mesh detailed options, 19 quality, 13, 67, 109, 132, 133, 134, 138, 139, 143 ReadStlFile FISH function, 165 Relative Offset, 36, 37 remeshing, 70, 132, 133, 137, 176 repair, 59, 66, 67, 102, 106, 114 Rhino Stuff folder, 9 Rotating and panning views, 10 SampleDensityPlusNoise, 158 self-intersection, 133, 135, 137, 176 sequential excavation, 51, 52 Shaded Viewport, 23, 42, 76, 110, 114, 117 Simple control, 19 Kubrix/Rhino Users Manual
slivers, 61 snap, 11, 40, 72 Solid|Box|Diagonal, 22, 43, 81 Solid|Difference, 24, 43 Solid|Solid edit tools|Wire cut, 89 Solid|Union, 42 solid-based, 164 Solids, 29 SpaceRanger, 15, 16, 17, 18, 143, 144, 148, 150, 154, 155 Split disjoint mesh, 59, 62, 102 SplitMeshEdge, 11 SplitMeshWithCurve, 127, 129, 130, 132, 177 Stirred Tank Reactor, 168 Straight sections, 112, 146 Structure of the mesh, 28, 47, 55 structured grid, 28 Surface|Extrude Curve|Along Curve, 79, 116, 125 Surface|Extrude Curve|Straight, 40, 160 Surface|Planar Curves, 28, 33, 53, 54, 73, 74 Template, 19, 143 Tetra blocking failed, 176 Tetrahedral meshing, 48, 66, 68, 69 The Command area, 9 the Kubrix icon, 21 Tolerances, 11 Toolbars, 9 topography, 109, 110, 119, 145 Transform|Array, 90 Transform|Move, 23, 57, 90 Transform|Rotate, 41, 90, 93 Transform|Scale 2D, 41 transparent, 53, 76, 117, 120, 170 Triangulate Mesh, 25, 30, 35, 44, 54, 67 triangulation, 164 Trim, 76, 77, 78, 82, 89, 97, 114, 115, 118 Troubleshooting, 175 tunnels, 40, 41, 42, 43, 52, 53, 54, 67, 69, 104 Unify, 59, 120 Unify mesh normals, 59 Units, 11, 143 Volume Centroid, 112 VRML 2.0, 13, 14, 84, 89, 90, 95, 144 VTPT, 89, 90 Wire cut, 32, 93, 94, 95 Zoom Extents All Viewports, 40, 82, 116, 117, 128 Page 180
Page 181