Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -350,7 +350,7 @@ if(WIN32 AND BUILD_PYTHON_BINDINGS)
endif()

# Compile public executables (with main functions)
set(EXECUTABLES solver identification L_eff Elastic_props ODF PDF)
set(EXECUTABLES solver L_eff Elastic_props ODF PDF)
foreach(exe_name ${EXECUTABLES})
add_executable(${exe_name} software/${exe_name}.cpp)
target_link_libraries(${exe_name} PRIVATE simcoon ${CMAKE_DL_LIBS})
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ Simcoon is developed with the aim to be a high-quality scientific library to fac
Simcoon integrates
- a easy way to handle geometrical non-linearities : Use of Lagrangian measures, Eulerian measures and cumulative strains considering several spins : Jaumann, Green-Naghdi, Xi-Meyers-Bruhns logarithmic. With this last measure, cumulative strain correspond to a logarithmic strain measure and is the standard measure utilized for our constitutive laws.

Simcoon is a C++ library with emphasis on speed and ease-of-use, that offers a python interface to facilitate its use. Its principle focus is to provide tools to facilitate the implementation of up-to-date constitutive model for materials in Finite Element Analysis Packages. This is done by providing a C++ API to generate user material subroutine based on a library of functions. Also, Simconnn provides tools to analyse the behavior of material, considering loading at the material point level. Such tools include a thermomechanical solver, a software to predict effective properties of composites, and a built-in identification software (using a combined genetic-gradient based algorithm)
Simcoon is a C++ library with emphasis on speed and ease-of-use, that offers a python interface to facilitate its use. Its principle focus is to provide tools to facilitate the implementation of up-to-date constitutive model for materials in Finite Element Analysis Packages. This is done by providing a C++ API to generate user material subroutine based on a library of functions. Also, Simcoon provides tools to analyse the behavior of material, considering loading at the material point level. Such tools include a thermomechanical solver and a software to predict effective properties of composites. Parameter identification can be performed using Python with scipy.optimize (e.g. differential_evolution) and the simcoon Parameter/Constant key system

Simcoon is mainly developed by faculty and researchers from University of Bordeaux and the I2M Laboratory (Institut de d'Ingénierie et de Mécanique). Fruitful contribution came from the LEM3 laboratory in Metz, France, TU Bergakademie Freiberg in Germany and the TIMC-IMAG laboratory in Grenoble, France. It is released under the GNU General Public License: GPL, version 3.

Expand Down
2 changes: 1 addition & 1 deletion docs/cpp_api/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Simcoon's C++ library provides high-performance implementations for:
- **Continuum Mechanics**: Tensor operations, strain/stress transformations, kinematics
- **Constitutive Models**: Hyperelastic, viscoelastic, and viscoplastic material models
- **Homogenization**: Mean-field homogenization methods for composite materials
- **Simulation Tools**: Solvers, identification algorithms, and utilities
- **Simulation Tools**: Solvers and utilities

.. note::
The C++ API is designed for advanced users who need direct access to the
Expand Down
10 changes: 0 additions & 10 deletions docs/cpp_api/simulation/identification.rst

This file was deleted.

6 changes: 2 additions & 4 deletions docs/cpp_api/simulation/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
Simulation
==========

The Simulation module provides tools for running simulations, including solvers,
identification algorithms, and mathematical utilities.
The Simulation module provides tools for running simulations, including solvers
and mathematical utilities.

.. toctree::
:maxdepth: 2
Expand All @@ -12,7 +12,6 @@ identification algorithms, and mathematical utilities.
maths
rotation
solver
identification
phase

Overview
Expand All @@ -23,7 +22,6 @@ This module contains simulation and numerical tools:
- **Maths**: Mathematical utilities (random numbers, statistics, solvers)
- **Rotation**: Comprehensive 3D rotation tools with ``Rotation`` class and Voigt notation support
- **Solver**: Material point simulation solvers
- **Identification**: Parameter identification algorithms
- **Phase**: Phase management and properties

What's New in Simcoon 2.0
Expand Down
158 changes: 6 additions & 152 deletions docs/cpp_api/simulation_overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## Introduction

The Simulation module provides the infrastructure for executing multi-physics simulations, parameter identification, and optimization. It includes the solver framework, phase management, mathematical utilities, and identification algorithms for material parameter calibration.
The Simulation module provides the infrastructure for executing multi-physics simulations. It includes the solver framework, phase management, and mathematical utilities.

## Module Organization

Expand Down Expand Up @@ -88,104 +88,9 @@ Results management:
- **read.hpp** - Phase file parsing
- **write.hpp** - State serialization

### 3. **Identification** - Parameter Identification Framework
### 3. **Maths** - Mathematical Utilities

Inverse analysis tools for material parameter calibration from experimental data.

#### **Optimization Framework:**

##### **identification.hpp**
Main identification driver supporting multiple optimization algorithms:
- Genetic Algorithms (GA)
- Gradient-based methods (Levenberg-Marquardt)
- Hybrid strategies

##### **Core Components:**

**parameters.hpp**
Defines optimization variables:
```cpp
class parameters {
public:
double value; // Current value
double min_value; // Lower bound
double max_value; // Upper bound
string key; // Parameter identifier
int ninit; // Number of initializations
};
```

**constants.hpp**
Fixed values during optimization:
```cpp
class constants {
public:
double value;
string key;
int ninit;
};
```

**individual.hpp**
Solution candidate in population-based methods:
- Parameter vector
- Cost function value
- Constraint violations
- Fitness ranking

**generation.hpp**
Population management for evolutionary algorithms:
- Population initialization
- Selection operators
- Crossover and mutation
- Elitism strategies

**methods.hpp**
Optimization algorithm implementations:
- Cost function evaluation
- Gradient computation (numerical/analytical)
- Hessian approximation

**optimize.hpp**
High-level optimization loop:
- Convergence checking
- Iteration management
- History tracking
- Checkpointing

**opti_data.hpp**
Experimental data management:
- Loading experimental files
- Data interpolation
- Weight assignment

**doe.hpp** (Design of Experiments)
Sampling strategies for parameter space exploration:
- Latin Hypercube Sampling (LHS)
- Random sampling

**script.hpp**
Script interpretation for identification workflows.

#### **Cost Function Definition:**

The identification minimizes a weighted sum of squared residuals:

\f[
f(\mathbf{p}) = \sum_{i=1}^{N_{exp}} \sum_{j=1}^{N_{pts}} w_{ij} \left( y^{exp}_{ij} - y^{sim}_{ij}(\mathbf{p}) \right)^2
\f]

where:
- \f$ \mathbf{p} \f$ = parameter vector
- \f$ N_{exp} \f$ = number of experimental datasets
- \f$ N_{pts} \f$ = number of data points per dataset
- \f$ w_{ij} \f$ = weight for point j in experiment i
- \f$ y^{exp}_{ij} \f$ = experimental observation
- \f$ y^{sim}_{ij}(\mathbf{p}) \f$ = simulation prediction

### 4. **Maths** - Mathematical Utilities

Mathematical tools supporting simulation and identification:
Mathematical tools supporting simulation:

#### **rotation.hpp**
Rotation operations for objective stress integration:
Expand Down Expand Up @@ -241,7 +146,7 @@ Random number generation:
- Seeding control
- Reproducibility support

### 5. **Geometry** - Geometric Primitives
### 4. **Geometry** - Geometric Primitives

Geometric representations for multi-phase materials:

Expand Down Expand Up @@ -312,42 +217,6 @@ solver(umat_name, props, nstatev, psi, theta, phi);

Results are written to output files specified in the control file.

## Parameter Identification Workflow

### 1. Define Parameters to Identify

```cpp
vector<parameters> params;
params.push_back({"E", 50000, 100000, "Young"});
params.push_back({"sigma_Y", 100, 500, "Yield"});
```

### 2. Load Experimental Data

```cpp
opti_data data;
data.import("tensile_test.txt");
data.weight = 1.0;
```

### 3. Configure Optimization

```cpp
int method = 0; // Genetic Algorithm
int maxiter = 100;
double tolerance = 1e-6;
```

### 4. Run Identification

```cpp
identification(method, params, constants, data_files);
```

### 5. Retrieve Optimal Parameters

The identified parameters are written to `parameters_results.txt`.

## Advanced Features

### Multi-scale Modeling
Expand Down Expand Up @@ -375,14 +244,6 @@ The solver automatically adjusts time step size based on:

Some operations support parallel execution (using OpenMP):
- Multiple phase response
- Population-based optimization (outdated)

### Checkpointing

Identification can be checkpointed for:
- Recovery from interruptions
- Continuation of long-running optimizations
- Sensitivity analysis

## Configuration Files

Expand Down Expand Up @@ -448,20 +309,13 @@ Block_1:

## References

1. **Genetic Algorithms:**
- Goldberg, D. E. (1989). *Genetic Algorithms in Search, Optimization, and Machine Learning*. Addison-Wesley.

2. **Micromechanics and Multi-scale Modeling:**
1. **Micromechanics and Multi-scale Modeling:**
- Qu, J., & Cherkaoui, M. (2006). *Fundamentals of Micromechanics of Solids*. Wiley.

3. **Parameter Identification:**
- Mahnken, R., & Stein, E. (1996). "Parameter identification for viscoplastic models based on analytical derivatives of a least-squares functional and stability investigations." *International Journal of Plasticity*.

4. **Fischer-Burmeister Method:**
2. **Fischer-Burmeister Method:**
- Fischer, A. (1997). "Solution of monotone complementarity problems with locally Lipschitzian functions." *Mathematical Programming*.

## See Also

- [Continuum Mechanics Module](continuum_mechanics_overview.md) - Material models and constitutive functions
- [Solver API](solver/) - Detailed solver documentation
- [Identification API](identification/) - Parameter identification reference
2 changes: 1 addition & 1 deletion docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ Simcoon is a free, open-source C++ library for simulating multiphysics systems.
[microgen](https://github.com/3MAH/microgen) for CAD and meshing of heterogeneous materials and
[fedoo](https://github.com/3MAH/fedoo), our finite-element solver, the project provides a comprehensive toolset for analyzing heterogeneous materials.

Simcoon aims to be a high-quality scientific library for analysing complex, nonlinear system behaviour. It emphasizes performance and ease of use and exposes a Python interface to simplify workflows. The principal focus is to provide a C++ API to generate user-material subroutines for finite-element packages. Simcoon also includes tools to analyse material-point behaviour under loading, such as a thermomechanical solver, a tool to predict effective properties of composites, and a built-in identification tool that combines genetic and gradient-based algorithms.
Simcoon aims to be a high-quality scientific library for analysing complex, nonlinear system behaviour. It emphasizes performance and ease of use and exposes a Python interface to simplify workflows. The principal focus is to provide a C++ API to generate user-material subroutines for finite-element packages. Simcoon also includes tools to analyse material-point behaviour under loading, such as a thermomechanical solver and a tool to predict effective properties of composites. Parameter identification can be performed using Python with scipy.optimize (e.g. differential_evolution) and the simcoon Parameter/Constant key system.

Simcoon supports geometric nonlinearity using Lagrangian and Eulerian measures, and cumulative strains with several objective rates (Jaumann, Green--Naghdi, and Xi--Meyers--Brühns logarithmic). The logarithmic cumulative-strain measure is the default used by the library's constitutive laws.

Expand Down
Loading
Loading