# Intact.Simulation for nTop Manual Intact.Simulation offers a revolutionary meshing-free finite element method now fully integrated with nTop, enabling users to explore their design space rapidly without the usual meshing bottlenecks. This advanced technology is particularly adept at handling large geometric complexities, such as intricate lattice structures, which are often challenging to mesh using traditional finite element analysis (FEA) methods. Key features and capabilities - Geometry Support - Implicit - Brep - Physics Support - Stress - Thermal - Modal (Coming Soon) ## 1. Getting Started ### 1.1 Installation and Accessing Intact inside nTop 1. **Download and install Intact Simulation for nTop** 1. You will receive download info and trial license in the email after applying for beta. 2. Default Installation directory (`Intact Directory`): `C:\Users\$username$\AppData\Local\Programs\Intact.Simulation for nTop` 3. Documentation and Example files are in `C:\Users\$username$\AppData\Local\Programs\Intact.Simulation for nTop\Getting Started` 2. **Move custom Intact blocks to nTop’s My Blocks folder directory** 1. Go to: `nTop menu > File > My blocks folder` 2. Copy Intact custom blocks from `C:\Users\$username$\AppData\Local\Programs\Intact.Simulation for nTop\Custom Blocks` to nTop’s `My Blocks folder`. 3. ***Restart* nTop. Now you can access Intact Blocks within nTop by *Searching* “Intact“** ### 1.2 Example Simulations 📌 See the file **`Example_GyroidShear.ntop`** in the `Getting Started` folder. Update the `Intact Dir` and `Project Dir` variables. Change the parameter `Gyroid Cell Size` to automatically update the simulation results. ![Example Gyroid Shear](images/gyroid_shear.png) ## 2. How To Guide The high-level workflow of nTop-Intact Integration. Intact requires the inputs needed for any typical structural FEA such as geometry, material, boundary conditions, and simulation settings. ![**Figure: Black boxes are nTop blocks. Blue boxes are Intact custom blocks**](images/workflow.png) **Figure: Black boxes are nTop blocks. Blue boxes are Intact custom blocks** ### 2.1 Intact Stress Custom Block First import the **`Intact Stress`** block for directly analyzing an implicit geometry or **`Intact Stress (Surface Mesh)`** for analyzing a Brep (surface mesh) geometry. Before setting up the simulation, set up the folders and simulation name. - `Simulation Name`: A name for your simulation. - `Project Directory`: A directory to save the simulation - `Intact Directory`: Directory where Intact Program lives. The default is in the following folder in your AppData (replace $username$ with your user name). `C:\Users\$username$\AppData\Local\Programs\Intact.Simulation for nTop` ![Untitled](images/IntactStress.png) ### 2.2 Intact Thermal Custom Block First import the **`Intact Thermal`** block for directly analyzing an implicit geometry or **`Intact Thermal (Surface Mesh)`** for analyzing a Brep (surface mesh) geometry. Before setting up the simulation, set up the folders and simulation name. - `Simulation Name`: A name for your simulation. - `Project Directory`: A directory to save the simulation - `Intact Directory`: Directory where Intact Program lives. The default is in the following folder in your AppData (replace $username$ with your user name). `C:\Users\$username$\AppData\Local\Programs\Intact.Simulation for nTop` ### 2.3 Component Setup #### Geometry The simulation component consists of geometry and material. - When using the **`Intact Stress`** block, the `Geometry` must be a **nTop implicit model**. Intact.Simulation can represent the implicit model as a **VDB or Voxel Model:** The VDB model efficiently stores the implicit field at the nodes of the voxel and interpolates the implicit field within the voxel. Voxel size is specified using the `Geometry Tolerance` ****parameter, which can be decided based on the minimum feature size as well as the level of accuracy desired. - When using the **`Intact Stress (Surface Mesh)`** block, the Geometry must be a `Surface Mesh`**.** *Recommendation*: It is generally recommended to use VDB or Voxel Model, unless the geometry is predominantly CAD-like with edges and corners, in which case surface tessellation could be faster. #### Material **Material** is defined using nTop’s **`Isotropic Material`** block with **`Isotropic Linear Elastic Properties`**. ![Untitled](images/IsotropicMaterial.png) ### 2.4 Boundary Conditions (Stress) #### **Restraints** - **Intact Fixed Restraint** A “Fixed Boundary” restraint fixes the selected geometry in all directions. The fixed boundary only has one input: - `Unique Name` - `Project Directory` - `Boundary Mesh` surface to be fixed (must be a surface mesh) ![alt text](images/IntactFixedRestraint.png) - **Intact Displacement Restraint** A “Fixed Vector” restraint allows for each direction to be optionally set to a specified displacement value, 0 being fixed and ‘None’ being un-restrained. Note that a structural problem must have all three directions restrained somewhere to be valid. Also, note that this boundary condition **doesn’t take custom units** and it’s always in the units of the scenario metadata. A fixed vector requires the following inputs: - `Unique Name` - `Project Directory` - the `Mesh Boundary` surface to be fixed - the `*_Displacement` magnitude with distance units to set the displacement for the *-axis direction (ignored if the toggle is off) In the example below, the Z-axis is considered “free” and thus the z-displacement value is ignored/replaced by 'null' regardless of its input. ![alt text](images/IntactDisplacementRestraint.png) #### **Structural Loads** - **Pressure** A “Pressure” load is a surface load specified in terms of force per unit area. Positive pressures ‘push’ into the surface, and negative pressures ‘pull’. A Pressure Load requires three inputs: - `Unique Name` - `Project Directory` - the `boundary` surfaces where the load is applied - the `UnitSystem` that applies to the magnitude - needs to be specified before the magnitude is set (default MKS) - the `Magnitude` of the pressure with units (e.g. ‘Pa’ for Pascal). ![alt text](images/IntactPressure.png) - **Vector Force** “Vector Force” load is a surface load applied to a face in a specified direction. An example of this load is pressing on the top of a book to push it across a table. A vector load requires four inputs: - `Unique Name` - `Project Directory` - the `Boundary Mesh` surfaces where the load is applied - the `Force` vector with force units (e.g. ‘N’ for Newton) ![alt text](images/IntactVectorForce.png) - **Moment Load** “Moment” load is a surface load that applies a twisting force around an axis. The direction of the moment is determined using the right-hand rule: using your right hand, point your thumb in the direction of the axis. A positive moment value applies a moment acting in the direction the fingers of your right hand would wrap around the axis. The moment load is applied among the load faces with a distribution that varies linearly from zero at the axis. A Moment load requires five inputs: - `Unique Name` - `Project Directory` - the `Boundary Mesh` surfaces where the load is applied - `Origin` is the starting point of the axis of rotation - the `Vector` which species the axis of rotation and the **magnitude** with units (e.g. ‘N*m’ for Newton-Meter). ![alt text](images/IntactMoment.png) - **Bearing Force** A “Bearing Force” is a surface load applied to a (typically) cylindrical face to approximate the effects of a shaft pressing against the side of a hole. The applied force gets converted to a varying pressure distribution on the portion of the face experiencing compressive pressure. The pressure distribution is computed automatically to achieve the specified overall bearing force. A Bearing Force requires three inputs: - `Unique Name` - `Project Directory` - the `Boundary Mesh` surfaces where the load is applied - the `Direction Vector` of the bearing force - the `Magnitude` of the load with force units (e.g. ‘N’ for Newton) ![alt text](images/bearing-force.png) #### **Body Loads** - **Acceleration Load** An “Acceleration” load is a linear acceleration body load which acts on the entire component/body. An Acceleration Load requires a single input: - the `Vector` of the acceleration which describes both the direction and magnitude of acceleration with units (e.g. 'm/s^2') ![alt text](images/acceleration-load.png) ### 2.5 Boundary Conditions (Thermal) #### **Restraints** - **Temperature Restraint (Fixed Temperature)** A “Temperature Restraint” restraint fixes the temperature of a selected geometry to a set value. The fixed boundary custom block has four inputs: - `Unique Name` - `Project Directory` - `Boundary Mesh` surface to be fixed (must be a surface mesh) - `Temperature` ![alt text](images/TempRestraint.png) #### **Thermal Loads** - **Surface Flux** A “Surface Flux” load is a surface load specified in terms of power per unit area. A Surface Flux Load block requires four inputs: - `Unique Name` - `Project Directory` - the `Boundary Mesh` surfaces where the load is applied - the `Magnitude` of the flux with units (e.g. ‘W/m^2’) ![alt text](images/Surface-Flux.png) - **Convection** A “Convection" load specifies the transfer of heat from a surrounding medium. A convection load requires five inputs: - `Unique Name` - `Project Directory` - the `Boundary Mesh` surfaces where the load is applied - the `Heat Transfer Coefficient` with units (e.g. ‘W/m^2) - the `Ambient Temperature` of the medium with units of temperature (e.g. 'K') ![alt text](images/convection-load.png) #### **Thermal Body Loads** - **Volumetric Heat Generation** A “volumetric heat generation” load is a flux body load which applies uniform heat generation all over the component (volume). Volumetric heat generation requires a single input: - the `Magnitude` of the flux with units (e.g. ‘W/m^3’) ![alt text](images/volumetric-heat.png) ### 2.6 Simulation Settings Intact.Simulation allows customizations to support rapid coarse as well as accurate fine simulation as desired. The following Simulation Settings are available: - The `Basis order` is the order of finite elements used. It can be `Linear` (default) or `Quadratic`. - Note that with quadratic elements, far fewer elements are needed to compute an accurate solution. However, quadratic elements are much more expensive in terms of time and memory resources than linear elements. - *Recommendation:* - Quadratic elements are suited for bending dominant problems like thin shells and beam-type structures. - Specify **Precision Type** and **Precision Value** for the desired accuracy/speed of the simulation. - `Resolution` is the target number of finite elements. An iterative process determines a `Cell size` that achieves approximately the specified number of elements. The simulation log in the Project directory contains the exact cell size and number of finite elements used in the simulation. - You can toggle on `Use Cell Size?` to directly specify the `Cell Size` instead of the `Resolution`, for example, when you want to resolve the correct behavior of certain geometric features. Note that when `Use Cell Size?` is `On`, `Resolution` is ignored. - The immerse grid for the simulation is stored in `_solution.vtu` in the project folder and can be visualized if desired (using Paraview). - *Recommendation:* - We recommend using `Resolution` if you are unsure of the cell size. A small `Cell Size` can quickly result in a large number of finite elements and long solve times. - `Solver Type` is the linear solver used in the simulation with the following options: - `Direct` “directly” solves the linear system and is very robust but typically consumes more memory, which can be a problem for high resolution or small cell size. - `Iterative` solves the linear system “iteratively” and uses less memory than `Direct`. They are suited for high resolutions. - `Default`: Sets the solver automatically based on `Basis order` and `Resolution` . - For static structural `Linear` elements, default is `Iterative` Solver for resolution greater than 200K and `Direct` Solver for less than 200K. Note that if the `Precision Type` is `cell size`, the default is always `Iterative` for linear elements. `Quadratic` elements, it defaults to `Direct` solver for all resolutions or cell sizes. - Thermal solvers default to `Direct`, if desired `Iterative` can be manually selected for some cases which utilize large amounts of memory. ### 2.7 Result Visualization #### Default Result Visualization By default, the visualization produced by the **Intact Stress** block includes both Displacement and von Mises stress fields. These can be accessed like other simulation results in nTop. Currently, visualization is supported only on surface tessellation, even for implicit geometry (visualization directly on implicit is in work in progress). The default surface meshes for different geometric representations are as follows: - **Implicit/Voxel Model**: Intact produces visualization on a surface mesh that represents the zero-level set as approximated by the voxel grid. You can also **resample** the solution on a higher-quality surface mesh for improved visualization. - **Brep (Surface Mesh)**: Visualization is done on the input surface mesh geometry. ![Untitled](images/DefaultVisualization.png) #### Resampling Immerse Grid Solution The solution is computed on an immersed grid and can be interpolated within the grid cells. To resample an existing solution, use the **`Intact Resample`** block**.** Resampling can generate a better visualization or create slice/cross-section views. - `Intact Stress` is the `Intact Stress` simulation *being resampled* - `Previous Sim Name`: The name of the `Intact Stress` simulation *being resampled* - `Project Directory` - `Intact Directory` - `Resampling Mesh`: The new mesh for resampling the FEA solution for visualization - `Resampling ID`: An *optional* input which allows resampling the same `Intact Stress` simulation on multiple `Resample Meshes` - `Material`: The material used for computing stresses (Should be the same as the `Intact Stress` simulation *being resampled*) 📌 For a resampling example see the file **`Example_StaticConnectingRod.ntop`** in the `Getting Started\Static Structural` folder. Update the `Intact Directory`/`Project Directory` variables and manually run the unloaded lattice block to generate the geometry. ![alt text](images/ResamplingEx.png) ![alt text](images/ResamplingEx_ID.png) ## 3. Technology Overview ### 3.1 Immersed Method of Moments Overview Immersed Method of Moments (IMM) is a technology that uses the Finite Element Analysis (FEA) for performing simulation tasks, *without* the need to build a conformal mesh. IMM adopts an immersed-grid methodology where the geometry is “immersed” in a non-conformal background grid; and our patent-pending moment-vector technology is used to compute geometry and material-dependent quantities (e.g., element quadrature) at runtime for the FEA. ![**Figure: Immersed method of moments: Geometry is immersed in a grid & solved using the method of moments.**](https://www.intact-solutions.com/rev/wp-content/uploads/2023/06/IMM_Figure_1-1024x594.png) **Figure: Immersed method of moments: Geometry is immersed in a grid & solved using the method of moments.** The above picture captures the essence of IMM. The geometry (left image) is immersed in a background analysis grid (middle image). The elements in the analysis grid are conventional FEA elements (e.g., 8-noded hexahedral linear elements or 27-noded hexahedral quadratic elements), *except* that the quadrature used for the elements are computed using the method of moments. For instance, an element that is completely inside the the geometry will have quadrature that is different from an element that is only partially inside the geometry. After computing the solution on the analysis grid, the quantities of interest are projected back on to the native geometry (right figure). ### 3.2 Benchmarks #### Complex Benchmark- Lightweight Piston Connecting Rod This comparison is for a complex geometry with a lattice. The goal is to compare the displacement and stress results for a similar number of elements. The stresses are compared away from stress singularity as stresses in areas of stress concentration do not converge. 📌 See the file **`Example_StaticConnectingRod.ntop`** in the `Getting Started\Static Structural` folder. Update the `Intact Directory`/`Project Directory` variables and manually run the unloaded lattice block to generate the geometry. | | Number of Elements | Displacement (mm) | Total Time (secs) | | --- | --- | --- | --- | | nTop mesh-based FEA | 330,000 | 1.18 | 215 (includes meshing) | | Intact IMM FEA | 300,000 | 1.20 | 229 (includes VDB export) | **von Mises Stress comparison** ![Untitled](images/ntopStressLattice1.png) ![Untitled](images/IntactStressLattice1.png) ![Untitled](images/ntopStressLattice2.png) ![Untitled](images/IntactStressLattice2.png) #### Standard Benchmark- Beam 📌 See the file **`Benchmark_PlateWHole.ntop`** in the `Getting Started\Static Structural` folder. Update the `Intact Directory`/`Project Directory` variables and manually run any necessary unloaded blocks. **Displacement from Intact IMM vs nTop mesh-based FEA** | | Analytical | nTop mesh-based FEA | Intact IMM FEA | | --- | --- | --- | --- | | Beam Bending | 59.19 mm | 58.98 mm | 58.57 mm | | Beam Twisting | - | 15.78 mm | 15.77 mm | Beam Bending - nTop mesh-based: ![Beam Bending- nTop mesh-based](images/ntopBeamBending.png) Beam Bending - Intact: ![Beam Bending- Intact](images/IntactBeamBending.png) Beam Twisting - nTop mesh-based: ![Beam Twisting- nTop mesh-based](images/nTopBeamTwisting.png) Beam Twisting - Intact: ![Beam Twisting Intact](images/IntactBeamTwisting.png) #### Standard Benchmark- Plate with a Hole 📌 See the file **`Benchmark_PlateWHole.ntop`** in the `Getting Started\Static Structural` folder. Update the `Intact Directory`/`Project Directory` variables and manually run any necessary unloaded blocks. The figure below compares stress concentration due to the hole in a plate as obtained from mesh-based FEA and Intact IMM FEA. ![Untitled](images/nTopStressConcentration.png) ![Untitled](images/IntactStressConcentration.png) The theoretical stress concentration (Stress XX) value can be computed using the analytical formulation for the stress concentration factor given as (d is hole diameter and W is plate width) ![Untitled](images/stress_concentration_formula.png) The above formula leads to a `Kt = 2.233` and the resulting theoretical stress concentration value `3.72 Pa` . #### Standard Thermal Benchmark - Cylinder with Convection 📌 See the file **`Benchmark_ThermalCylinder.ntop`** in the `Getting Started\Thermal` folder. Update the `Intact Directory`/`Project Directory` variables and manually run any necessary unloaded blocks. | | Reference* | nTop mesh-based FEA | Intact IMM FEA | | --- | --- | --- | --- | | Inner Temperature (K) | 545.45 | 545.36 | 545.44 | | Outer Temperature (K) | 478.25 | 477.96 | 477.66 | | Inner Convection (W/m^2) | 34,160 | 33,294 | 33,605 | | Outer Convection (W/m^2) | 26,280 | 27,164 | 26,478 | *Societe Francaise des Mecaniciens. Guide de validation des progiciels de calcul de structures. Paris, Afnor Technique, 1990. Test No. TPLA03/89. Temperature - nTop mesh-based: ![alt text](images/ntop-cylinder-temp.png) Temperaure - Intact: ![alt text](images/Intact-Cylinder-Temp.png) Heat Flux - nTop mesh-based: ![alt text](images/ntop-cylinder-convection.png) Heat Flux - Intact: ![alt text](images/Intact-Cylinder-Convection.png) #### Complex Thermal Benchmark - Gyroid Heat Sink 📌 See the file **`Example_ThermalHeatSink.ntop`** in the `Getting Started\Thermal` folder. Update the `Intact Directory`/`Project Directory` variables and manually run any necessary unloaded blocks. | | # of Elements | Max/Min Temp (K) | Total Time (secs) | Local Flux (W/m^2) | | --- | --- | --- | --- | --- | | nTop mesh-based FEA | 293,625 | 400/306 | 215 (includes meshing) | 3.86e5 | | Intact IMM FEA | 312,831 | 400/305 | 76 | 4.22e5 | nTop Temperature: ![alt text](images/ntop-heatsink-temp.png) Intact Temperature: ![alt text](images/intact-heatsink-temp.png) nTop Heat Flux (note there is some global maxima which impacts the flux scale): ![alt text](images/ntop-heatsink-flux.png) Intact Heat Flux: ![alt text](images/intact-heatsink-flux.png) ## Release notes ### [1.0.2] - 2024-10-10 - Made `intact_ntop` a self-contained executable, so it is no longer necessary to separately install the .NET runtime. - The resampling custom block now allows resampling the a solution multiple times when provided an optional "Resampling ID". - Fixed a bug so the sample geometry is written to the project directory, and not the installation directory. ### [1.0.0] - 2024-10-1 - Initial release of Intact.Simulation for nTop.