This is an old revision of the document!
Table of Contents
Ex-4: Planar Orthotropic Materials: Transformation Workflow (Work in Progress)
đź§°The Rhino and Grasshopper files used in this example can be downloaded below: orthotropic_transformations.zip
This example demonstrates a workflow for correctly orienting fiber directions based on arbitrary geometries with grasshopper transformation matrices. Following this, a basic static simulation utilizes this newly aligned orthotropic material.
- The key steps involved in setting up the simulation are explained here.
- New users are advised to check out the getting started page to understand the basics of using the plugin.
Geometry Setup
- An initial solid box is centered at the origin and rotations are applied in each world plane (XY, YZ, ZX) to yield an arbitrarily oriented surface
- For the automated transformations (Grasshopper only) the surfaces of interest along with their normal are extracted (normal to align our Z-axis and longitudinal direction to align our fiber direction or X-axis)
- Note, the oriented box geometry and surfaces should be baked for future use in simulation.
Transformations
Note, that there are many ways to approach getting a transformation for an input to an orthotropic material block, and only two quick options are shown here. The most important part is that the end transformation result must represent the total transformation from the standard global XYZ to whatever the desired orientation is. If multiple transformations are done sequentially the corresponding matrices will need to be multiplied in the correct order, as described here.
Transformation Multiplication:
[C] = [A]*[B]
where,
- [C] Is the final transformation
- [A] Is a simple rotation
- [B] Flips about an axis
In this setup, the final transformation matrix, [C] would flip the geometry about an axis THEN rotate the geometry. Note that the multiplication is in the opposite order of how the transformations are done. To explain a bit more, we are mapping a vector {x} where [C]*{x} does the transform/mapping we want. This is the same as [A]*[B]*{x} where [B], the flip, operates first on vector {x} to yield {x'} and [A], the rotation, operates second on this new vector {x'}.
Manual Transformation
For the first method, we can set a “Plane” component by selecting 3 points inside of Rhino
- Create a “Plane” component
- Right-click and select “Set one Plane”
- Select an origin point
- Select a X-axis direction point (fiber direction)
- Select a Y-axis direction point (follow right-hand rule so the Z-axis or normal points where you want)
- Connect this plane component to the target plane of the “Orient” component where the source plane is the world XY.
- This transformation can then be used for an orthotropic material or the matrix can be stored and multiplied if needed.
These steps are demonstrated in a short video here along with some additional visualization.
Automated Transformation
Now, here is a second method of obtaining the transformation matrix for an orthotropic material on an arbitrarily oriented plane. This method is essentially just getting two direction vectors, one for normal direction (z' axis) and one for the fiber direction (x' axis)
- Extract surface/plane and use the “Evaluate Surface” component to get the normal and flip the direction if needed. (*here the list item component is used as the geometry is a simple box)
- Repeat this process for the surface/plane where the normal is aligned with the fiber direction.
- (Can get these vectors in many other ways as well)
- Create a “Plane Normal” component, and attach the normal vector to the Z-axis. (A)
- Attach this plane to the “Align Plane” and also attach the fiber direction vector to the direction input. (B)
- Use the “Orient” component again with the source as the world XY and this new plane as the target. (C)
- This will yield the transformation matrix as before, remaining steps are the same as for the manual method.
Multiple Transformations
As described in the transformation multiplication section, if we have successive transformations we need to multiply them together. An example is given here:
- Attach the transformations to the “Display Matrix” component
- Attach the matrices to the multiply component in the correct order (check the multiplication section or use visualization as a check)
- Use the resultant/total matrix as the transformation input in simulations.
Visualization
Lastly, the oriented system can be visualized as seen in previous sections via a “Deconstruct Matrix” component and list items. The first column of the matrix corresponds to the x-axis, the second column corresponds to the y-axis, and the last column corresponds to the z-axis. The grasshopper setup is shown here and could be converted to a cluster for ease-of-use in future simulations.
Example Simulation Setup
Now, for a composite material, add an Orthotropic Material Block from the Comp&Mat menu in Intact.Simulation. Since composite materials also require material orientation, we will need a transformation input (X). For this example, we align Material X to Global X, Material Y to Global Y, and so on.
- Connect the transformation output from the previous workflow to the “Orthotropic Material” block (c)
This will align the stronger “E1/Ex” material properties to the rotated x-axis and the other properties to the y and z axes respectively
Using the geometry setup, orthotropic material setup, and a few other inputs we can set up all the necessary components (a), restraint (b), and load (c) blocks.
- Attach the corresponding geometries to the corresponding component, restraint, or load block.
- Attach the orthotropic material to the component block
- Set the axis for the Torque Load block by clicking “Set one Line” and choosing the two endpoints of the line that goes through the centroid of the largest hole on the motor mount.
- Attach a slider set to -20 for the “Torque” magnitude in the torque load block
Solver and Visualization Setup
- Create a solver settings block as shown in (a)
- Set the target resolution (Res) to 150K by attaching a number slider with a value of 150000
- Use the default direct solver type (St)
- Use the default basis order (B) of 1 for linear elements (basis order = 2 for quadratic elements)
- Create a Stress Solver object as shown in (b)
- Connect the solver settings (SS)
- Connect the oriented plate component (C)
- Connect the plate restraint surface (R)
- Connect the plate pressure load (L)
- Hit solve to compute the solution
- Create a visualization block (d) and connect the solver output to it
- Optionally, users can connect the visualization settings block (c) for customizing the views
- Right-click on the visualize block and choose the simulation output for display (e.g., total displacement)
- Again optionally, users can add a deflection scale input to scale the visualized displacement as desired
Hide CAD Model
- To better visualize you can hide the geometry in Rhino or set the display to wireframe. This will prevent the object from interfering with the visualization of the simulation.
The displacement distribution resulting from this static simulation example is displayed below. The maximum displacement is near .5 mm. To load the simulation results later, create a simulation reader block, right-click, select the simulation, and connect it to a visualize block.