mfront-wrapper issueshttps://gitlab.enpc.fr/navier-fenics/mfront-wrapper/-/issues2020-04-17T08:20:01Zhttps://gitlab.enpc.fr/navier-fenics/mfront-wrapper/-/issues/1Multimaterials2020-04-17T08:20:01ZJeremy BLEYERMultimaterialsHandle multiple materialsHandle multiple materialshttps://gitlab.enpc.fr/navier-fenics/mfront-wrapper/-/issues/2Variable property fields2020-03-09T22:31:48ZJeremy BLEYERVariable property fieldsCheck how spatially variable property fields can be handled e.g:
- variable temperature
- Young modulusCheck how spatially variable property fields can be handled e.g:
- variable temperature
- Young modulushttps://gitlab.enpc.fr/navier-fenics/mfront-wrapper/-/issues/3Add support for generalized plane strain2020-02-21T16:11:33ZJeremy BLEYERAdd support for generalized plane strainhttps://gitlab.enpc.fr/navier-fenics/mfront-wrapper/-/issues/4Examples2020-04-17T08:21:38ZJeremy BLEYERExamples* [x] **Stationary non-linear heat transfer**
general presentation of interface, single 2D non-linear computation, problem with one gradient but two jacobian blocks
* [x] **Stationary non-linear heat transfer (advanced)**:
more complex example with heat source and performance comparison with pure FEniCS implementation. Comparison with pseudo-Newton when neglecting the `dj_ddT` jacobian block
* [x] **Small strain elastoplasticity**
2D plane strain and axisymmetric computation, incremental load process with multiple computations,we show how to pass material properties from FEniCS and how to get state variables for post-processing or visualization, automatic registration of "Strain" in plane strain and axisym conditions
* [x] **Large strain 3D elastoplasticity**
3D computation with logarithmic deformation setting, we show how to set up the nonlinear solver parameters and show parallel compuations
* [x] **Elastic multiphase model**
2D or 3D compuations with a non-standard model using two displacement fields and three generalized gradients, we mention the current limitation on tensor/vector derivatives, e show how to register these non-standard gradients, we highlight the big advantage of the MFront formulation using linear algebra on 4-rank tensors and unicode support
* [x] **Phase-field**
coupling between two MFront computations (although the damage problem is linear), we show how to setup the state variables for each problem from the solution of the other
* [ ] **Advanced phase-field models**
use cohesive-type model and varitional inequality approach for treating irreversibility, also show how to pass spatially varying material properties (inclusions ?)
* [ ] **Crystal plasticity**
in large strain or with strain gradient model
* [ ] **Transient heat equation**
show how to write explicitly the variational formulation
* [ ] **Monolithic thermoelasticity**
* [ ] **Monolithic phase-field**
* [ ] **Porous visco-plasticity**
application case of the `StandardElastoViscoPlasticity` brick extension to porous materials
* [x] **Stationary non-linear heat transfer**
general presentation of interface, single 2D non-linear computation, problem with one gradient but two jacobian blocks
* [x] **Stationary non-linear heat transfer (advanced)**:
more complex example with heat source and performance comparison with pure FEniCS implementation. Comparison with pseudo-Newton when neglecting the `dj_ddT` jacobian block
* [x] **Small strain elastoplasticity**
2D plane strain and axisymmetric computation, incremental load process with multiple computations,we show how to pass material properties from FEniCS and how to get state variables for post-processing or visualization, automatic registration of "Strain" in plane strain and axisym conditions
* [x] **Large strain 3D elastoplasticity**
3D computation with logarithmic deformation setting, we show how to set up the nonlinear solver parameters and show parallel compuations
* [x] **Elastic multiphase model**
2D or 3D compuations with a non-standard model using two displacement fields and three generalized gradients, we mention the current limitation on tensor/vector derivatives, e show how to register these non-standard gradients, we highlight the big advantage of the MFront formulation using linear algebra on 4-rank tensors and unicode support
* [x] **Phase-field**
coupling between two MFront computations (although the damage problem is linear), we show how to setup the state variables for each problem from the solution of the other
* [ ] **Advanced phase-field models**
use cohesive-type model and varitional inequality approach for treating irreversibility, also show how to pass spatially varying material properties (inclusions ?)
* [ ] **Crystal plasticity**
in large strain or with strain gradient model
* [ ] **Transient heat equation**
show how to write explicitly the variational formulation
* [ ] **Monolithic thermoelasticity**
* [ ] **Monolithic phase-field**
* [ ] **Porous visco-plasticity**
application case of the `StandardElastoViscoPlasticity` brick extension to porous materials
Jeremy BLEYERJeremy BLEYERhttps://gitlab.enpc.fr/navier-fenics/mfront-wrapper/-/issues/5Return stress measures2020-02-22T16:17:01ZJeremy BLEYERReturn stress measuresImplement a `get_stress(measure)` method with different stress measures in finite strain:
* measure = Piola-Krichhoff-1 (default)
* measure = Piola-Kirchhoff-2
* measure = CauchyImplement a `get_stress(measure)` method with different stress measures in finite strain:
* measure = Piola-Krichhoff-1 (default)
* measure = Piola-Kirchhoff-2
* measure = Cauchyhttps://gitlab.enpc.fr/navier-fenics/mfront-wrapper/-/issues/6Parallel support2020-03-24T21:48:38ZJeremy BLEYERParallel supporthttps://gitlab.enpc.fr/navier-fenics/mfront-wrapper/-/issues/7Handle generalized behaviours with block structure2020-04-17T08:19:37ZJeremy BLEYERHandle generalized behaviours with block structureMany pairs of Gradient/Flux are defined in MFront, each flux $`\sigma_i`$ being associated with one gradient $`g_i`$ so that internal power is assumed to be
$`\sigma_i\cdot\delta{g}_i dx`$. Each flux may depend on all gradients and state variables (temperature in particular), this will be handled using `tangent_operator_blocks`. The only thing which needs to be done is to register the gradient operator with something like:
```python
problem.register_gradient("TotalStrain", sym(grad(u)))
problem.register_gradient("TemperatureGradient", grad(T))
problem.register_gradient("TransformationGradient", Identity(dim)+grad(u))
```
for such classical gradient operators, we can implement them by default. Note that expressions depend on the hypothesis.
For more general behaviours like multiphase models for instance, we can have:
```python
u = Function(V)
(u1, u2) = split(u)
problem.register_gradient("Strain1", sym(grad(u1)))
problem.register_gradient("Strain2", sym(grad(u2)))
problem.register_gradient("RelativeDisplacement", u2-u1)
```
For more general behaviours which do not fit into this scope, we could ask for registering (or just writing?) explicitly the terms of the variational form:
```python
H = problem.get_state_variable("Enthalpy")
H0 = H.previous()
j = problem.get_thermodynamical_force("HeatFlux")
j0 = j.previous()
problem.register_term(H-H0, test_field="Temperature")
problem.register_term(dt*(theta*j-(1-theta)*j0), test_field="TemperatureGradient")
# or instead of the last two lines just do
problem.L = (T_*(H-H0)+dt*(theta*dot(grad(T_), j)-(1-theta)*dot(grad(T_) ,j0)))*dx
```Many pairs of Gradient/Flux are defined in MFront, each flux $`\sigma_i`$ being associated with one gradient $`g_i`$ so that internal power is assumed to be
$`\sigma_i\cdot\delta{g}_i dx`$. Each flux may depend on all gradients and state variables (temperature in particular), this will be handled using `tangent_operator_blocks`. The only thing which needs to be done is to register the gradient operator with something like:
```python
problem.register_gradient("TotalStrain", sym(grad(u)))
problem.register_gradient("TemperatureGradient", grad(T))
problem.register_gradient("TransformationGradient", Identity(dim)+grad(u))
```
for such classical gradient operators, we can implement them by default. Note that expressions depend on the hypothesis.
For more general behaviours like multiphase models for instance, we can have:
```python
u = Function(V)
(u1, u2) = split(u)
problem.register_gradient("Strain1", sym(grad(u1)))
problem.register_gradient("Strain2", sym(grad(u2)))
problem.register_gradient("RelativeDisplacement", u2-u1)
```
For more general behaviours which do not fit into this scope, we could ask for registering (or just writing?) explicitly the terms of the variational form:
```python
H = problem.get_state_variable("Enthalpy")
H0 = H.previous()
j = problem.get_thermodynamical_force("HeatFlux")
j0 = j.previous()
problem.register_term(H-H0, test_field="Temperature")
problem.register_term(dt*(theta*j-(1-theta)*j0), test_field="TemperatureGradient")
# or instead of the last two lines just do
problem.L = (T_*(H-H0)+dt*(theta*dot(grad(T_), j)-(1-theta)*dot(grad(T_) ,j0)))*dx
```https://gitlab.enpc.fr/navier-fenics/mfront-wrapper/-/issues/8Proper field reinitialization when reloading material2020-03-09T22:24:18ZJeremy BLEYERProper field reinitialization when reloading materialWe want a seamless recomputation when changing material propertiesWe want a seamless recomputation when changing material propertieshttps://gitlab.enpc.fr/navier-fenics/mfront-wrapper/-/issues/9Handle plate models2020-03-09T22:43:49ZJeremy BLEYERHandle plate modelsFor plate models, we want to integrate the behaviour at NG = nG x mG Gauss points in total where nG is the number of Gauss points on the plate 2D mesh and mG the number of Gauss points across the thickness.
We need a mechanism to handle the case of non-matching values between NG (used to load the behaviour) and nG the number of Gauss points for the 2D mesh. In addition to just reshaping the appropriate arrays, we can have different expressions for the same gradient depending on the z-coordinate, the integration weights in the form may also be different from one z-Gauss point to another.
Possible syntax:
```python
problem.register_gradient("Strain", [sym(grad(u-zi*theta)) for zi in z_Gauss], weights=w_Gauss)
```For plate models, we want to integrate the behaviour at NG = nG x mG Gauss points in total where nG is the number of Gauss points on the plate 2D mesh and mG the number of Gauss points across the thickness.
We need a mechanism to handle the case of non-matching values between NG (used to load the behaviour) and nG the number of Gauss points for the 2D mesh. In addition to just reshaping the appropriate arrays, we can have different expressions for the same gradient depending on the z-coordinate, the integration weights in the form may also be different from one z-Gauss point to another.
Possible syntax:
```python
problem.register_gradient("Strain", [sym(grad(u-zi*theta)) for zi in z_Gauss], weights=w_Gauss)
```https://gitlab.enpc.fr/navier-fenics/mfront-wrapper/-/issues/10Refactor code2020-03-16T09:26:47ZJeremy BLEYERRefactor codeRefactoring small code duplicates involving internal/external state variables names and sizesRefactoring small code duplicates involving internal/external state variables names and sizeshttps://gitlab.enpc.fr/navier-fenics/mfront-wrapper/-/issues/11Automatic compilation2020-04-17T13:35:09ZJeremy BLEYERAutomatic compilationCompiles automatically a behaviour if not foundCompiles automatically a behaviour if not foundhttps://gitlab.enpc.fr/navier-fenics/mfront-wrapper/-/issues/12Follower forces2020-04-17T08:18:42ZJeremy BLEYERFollower forcesWork of external forces is assumed to be given by a linear form only. This excludes follower forces.Work of external forces is assumed to be given by a linear form only. This excludes follower forces.https://gitlab.enpc.fr/navier-fenics/mfront-wrapper/-/issues/13Energy in OptimisationProblem2020-04-15T15:01:46ZJeremy BLEYEREnergy in OptimisationProblemCurrently we rely on the explicit computation of the total energy from MFront, can we define it based on the default setting ?
```math
E = \sum_{i=1}^p \frac{1}{2}\sigma_i(u)\cdot\mathbf{g}_i(u)
```Currently we rely on the explicit computation of the total energy from MFront, can we define it based on the default setting ?
```math
E = \sum_{i=1}^p \frac{1}{2}\sigma_i(u)\cdot\mathbf{g}_i(u)
```