📚 Examples
This page provides practical examples of using pyLattice for various lattice design and simulation tasks.
🔵 Basic Lattice Generation
Simple BCC Lattice
Create and visualize a basic Body-Centered Cubic (BCC) lattice structure:
from pyLattice.lattice import Lattice
from pyLattice.plotting_lattice import LatticePlotting
# Load a simple BCC lattice configuration
name_file = "design/simple_BCC"
lattice_object = Lattice(name_file)
# Create visualizer and plot the lattice
visualizer = LatticePlotting()
visualizer.visualize_lattice(lattice_object, beam_color_type="radii")
All Design Parameters
Example showcasing all available design parameters:
from pyLattice.lattice import Lattice
from pyLattice.plotting_lattice import LatticePlotting
name_file = "design/all_design_parameters"
lattice_object = Lattice(name_file, verbose=1)
# Visualize with different color schemes
visualizer = LatticePlotting()
visualizer.visualize_lattice(lattice_object, beam_color_type="materials")
🔧 Mesh Operations
Lattice Trimming with MeshTrimmer
Use MeshTrimmer to cut lattice structures to fit complex geometries:
from pyLattice.lattice import Lattice
from pyLattice.plotting_lattice import LatticePlotting
from data.inputs.mesh_file.mesh_trimmer import MeshTrimmer
# Load a mesh (e.g., bone structure)
name_mesh = "CutedBone"
mesh_trimmer = MeshTrimmer(name_mesh)
mesh_trimmer.scale_mesh(1.5)
# Create lattice with mesh trimming
name_lattice = "Bone_cuted_hybrid"
lattice_object = Lattice.from_json(name_lattice, mesh_trimmer)
# Visualize the trimmed lattice
visualizer = LatticePlotting()
visualizer.visualize_lattice(lattice_object)
🧮 Finite Element Simulation
Simple Beam Flexion Simulation
Perform a finite element simulation using pyLatticeSim:
from pyLatticeSim.lattice_sim import LatticeSim
from pyLattice.plotting_lattice import LatticePlotting
from pyLatticeSim.utils_simulation import solve_FEM_FenicsX
from pyLatticeSim.export_simulation_results import exportSimulationResults
# Load simulation configuration
name_file = "simulation/beam_flexion"
lattice_sim = LatticeSim(name_file, verbose=1)
# Run FE simulation
result = solve_FEM_FenicsX(lattice_sim)
# Export results
exportSimulationResults(lattice_sim, result)
Homogenization Analysis
Compute effective material properties of a lattice unit cell:
from pyLattice.plotting_lattice import LatticePlotting
from pyLatticeSim.lattice_sim import LatticeSim
from pyLatticeSim.utils import create_homogenization_figure
from pyLatticeSim.utils_simulation import get_homogenized_properties
from pyLatticeSim.export_simulation_results import exportSimulationResults
name_file = "simulation/hybrid_cell_homogenization"
lattice_sim = LatticeSim(name_file, verbose=1)
# Compute homogenized properties
properties = get_homogenized_properties(lattice_sim)
print(f"Effective Young's modulus: {properties['E_eff']:.2f} MPa")
🚀 Optimization
Topology Optimization
Optimize lattice topology for minimum compliance:
from pyLattice.plotting_lattice import LatticePlotting
from pyLatticeOpti.lattice_opti import LatticeOpti
name_file = "optimization/optimization_beam_flexion"
lattice_object = LatticeOpti(name_file, verbose=1, convergence_plotting=True)
# Run optimization
lattice_object.run_optimization()
# Visualize optimized result
visualizer = LatticePlotting()
visualizer.visualize_lattice(lattice_object.get_optimized_lattice())
Surrogate Model Generation
Create surrogate models for predicting lattice properties:
from pyLattice.lattice import Lattice
from pyLatticeOpti.surrogate_model_relative_densities import (
compute_relative_densities_dataset,
plot_3D_scatter,
evaluate_kriging_from_pickle
)
# Generate dataset
dataset = compute_relative_densities_dataset("hybrid_cell_parametric")
# Create and visualize surrogate model
plot_3D_scatter(dataset)
model = evaluate_kriging_from_pickle("relative_density_model")
💾 Data Management
Saving and Loading Lattices
Save computed lattices for later use:
from pyLattice.lattice import Lattice
from pyLattice.plotting_lattice import LatticePlotting
# Create and save a lattice
lattice = Lattice("design/complex_lattice")
lattice.save_pickle_lattice("my_lattice")
# Load the saved lattice
loaded_lattice = Lattice.open_pickle_lattice("my_lattice")
# Visualize
visualizer = LatticePlotting()
visualizer.visualize_lattice(loaded_lattice)
📐 Custom Geometries
Adding New Unit Cell Geometries
Define custom lattice unit cells using JSON geometry files:
{
"name": "MyCustomCell",
"description": "A custom parametric lattice unit cell",
"parameters": {
"height": 0.35,
"angle": 20,
"offset": "height - tan(angle * pi / 180) / 2"
},
"beams": [
[0.0, 0.0, 0.0, 0.5, 0.5, "height"],
[0.5, 0.5, "height", 1.0, 1.0, 1.0],
[0.0, 1.0, "offset", 1.0, 0.0, "1 - offset"]
]
}
Use the custom geometry:
from pyLattice.lattice import Lattice
# The geometry file should be placed in src/pyLattice/geometries/
lattice = Lattice("design/config_with_custom_cell")
🛠️ Advanced Usage
Domain Decomposition
For large-scale simulations using domain decomposition methods:
from pyLatticeSim.lattice_sim import LatticeSim
name_file = "simulation/3PointBending"
solver_DDM = LatticeSim(name_file, verbose=1, enable_domain_decomposition_solver=True)
# Run simulation with domain decomposition
result = solver_DDM.solve_with_DDM()
Schur Complement Methods
Use Schur complement methods for efficient substructuring:
from pyLatticeSim.lattice_sim import LatticeSim
from pyLatticeSim.utils_simulation import get_schur_complement
name_file = "simulation/hybrid_cell_simulation"
lattice_sim = LatticeSim(name_file, verbose=1)
# Compute Schur complement
schur_matrix = get_schur_complement(lattice_sim)
For more examples, check the examples/
directory in the repository, which contains:
design/: Basic lattice generation examples
simulation/: Finite element analysis examples
optimization/: Topology and parameter optimization examples
Each example includes a corresponding JSON parameter file and detailed comments explaining the setup and usage.