Commit aee2ab05 authored by Jeremy BLEYER's avatar Jeremy BLEYER

Add multiphase demo and doc

parent e7bb88c4
......@@ -17,8 +17,7 @@
"<font color=red> TODO:\n",
"* Write the gallery example comments and refer to it?\n",
"\n",
"* or use standard brick with comments here ?\n",
"</font> \n",
"* or use standard brick with comments here ?</font> \n",
"\n",
"\n",
"## FEniCS implementation\n",
......@@ -160,7 +159,21 @@
"\n",
"Increment 2\n",
"Increment 3\n",
"Increment 4\n"
"Increment 4\n",
"Increment 5\n",
"Increment 6\n",
"Increment 7\n",
"Increment 8\n",
"Increment 9\n",
"Increment 10\n",
"Increment 11\n",
"Increment 12\n",
"Increment 13\n",
"Increment 14\n",
"Increment 15\n",
"Increment 16\n",
"Increment 17\n",
"Increment 18\n"
]
}
],
......
This diff is collapsed.
......@@ -70,7 +70,7 @@
"explicitly computed from the temperature and the temperature gradient.\n",
"The `DefaultGenericBehaviour` is the most suitable choice:\n",
"\n",
"``` cxx\n",
"``` cpp\n",
"@DSL DefaultGenericBehaviour;\n",
"```\n",
"\n",
......@@ -80,7 +80,7 @@
"The following lines define the name of the behaviour, the name of the\n",
"author and the date of its writing:\n",
"\n",
"``` cxx\n",
"``` cpp\n",
"@Behaviour StationaryHeatTransfer;\n",
"@Author Thomas Helfer;\n",
"@Date 15/02/2019;\n",
......@@ -95,7 +95,7 @@
"\n",
"The temperature gradient is declared as follows (note that Unicode characters are supported):\n",
"\n",
"``` cxx\n",
"``` cpp\n",
"@Gradient TemperatureGradient ∇T;\n",
"∇T.setGlossaryName(\"TemperatureGradient\");\n",
"```\n",
......@@ -110,7 +110,7 @@
"\n",
"The heat flux is then declared as follows:\n",
"\n",
"``` cxx\n",
"``` cpp\n",
"@Flux HeatFlux j;\n",
"j.setGlossaryName(\"HeatFlux\");\n",
"```\n",
......@@ -129,7 +129,7 @@
"flux with respect to the increment of the temperature (or equivalently\n",
"with respect to the temperature at the end of the time step).\n",
"\n",
"``` cxx\n",
"``` cpp\n",
"@AdditionalTangentOperatorBlock ∂j∕∂ΔT;\n",
"```\n",
"\n",
......@@ -139,7 +139,7 @@
"The `A` and `B` coefficients that appears in the definition of the\n",
"thermal conductivity are declared as parameters:\n",
"\n",
"``` cxx\n",
"``` cpp\n",
"@Parameter real A = 0.0375;\n",
"@Parameter real B = 2.165e-4;\n",
"```\n",
......@@ -157,7 +157,7 @@
"order to be able to compute its value during the behaviour integration\n",
"and to reuse this value when computing the tangent operator.\n",
"\n",
"``` cxx\n",
"``` cpp\n",
"@LocalVariable thermalconductivity k;\n",
"```\n",
"\n",
......@@ -169,7 +169,7 @@
"conductivity (at the end of the time step) and the heat flux using the\n",
"temperature gradient (at the end of the time step).\n",
"\n",
"``` cxx\n",
"``` cpp\n",
"@Integrator{\n",
" // temperature at the end of the time step\n",
" const auto T_ = T + ΔT;\n",
......@@ -185,7 +185,7 @@
"\n",
"The computation of the tangent operator blocks is equally simple:\n",
"\n",
"``` cxx\n",
"``` cpp\n",
"@TangentOperator {\n",
" ∂j∕∂Δ∇T = -k ⋅ tmatrix<N, N, real>::Id();\n",
" ∂j∕∂ΔT = B ⋅ k ⋅ k ⋅ (∇T + Δ∇T);\n",
......@@ -276,7 +276,7 @@
"When defining the non-linear problem, we will specify the boundary conditions and the requested quadrature degree which will control the number of quadrature points used in each cell to compute the non-linear constitutive law. Here, we specify a quadrature of degree 2 (i.e. 3 Gauss points for a triangular element). Finally, we need to associate to MFront gradient object the corresponding UFL expression as a function of the unknown field `T`. To do so, we use the `register_gradient` method linking MFront `\"TemperatureGradient\"` object to the UFL expression `grad(T)`. Doing so, the corresponding non-linear variational problem will be automatically be built:\n",
"\n",
"\\begin{equation}\n",
"F(\\widehat{T}) = \\int_\\Omega \\boldsymbol{j}\\cdot \\nabla \\widehat{T} \\text{dx} = 0 \\quad \\forall \\widehat{T}\n",
"F(\\widehat{T}) = \\int_\\Omega \\mathbf{j}\\cdot \\nabla \\widehat{T} \\text{dx} = 0 \\quad \\forall \\widehat{T}\n",
"\\end{equation}"
]
},
......@@ -294,10 +294,10 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"From the two tangent operator blocks `dj_ddgT` and `dj_ddT`, it will automatically be deduced that the heat flux $\\boldsymbol{j}$ is a function of both the temperature gradient $\\boldsymbol{g}=\\nabla T$ and the temperature itself i.e. $\\boldsymbol{j}=\\boldsymbol{j}(\\boldsymbol{g}, T)$. The following tangent bilinear form will therefore be used when solving the above non-linear problem:\n",
"From the two tangent operator blocks `dj_ddgT` and `dj_ddT`, it will automatically be deduced that the heat flux $\\mathbf{j}$ is a function of both the temperature gradient $\\mathbf{g}=\\nabla T$ and the temperature itself i.e. $\\mathbf{j}=\\mathbf{j}(\\mathbf{g}, T)$. The following tangent bilinear form will therefore be used when solving the above non-linear problem:\n",
"\n",
"\\begin{equation}\n",
"J(\\widehat{T},T^*) = \\int_{\\Omega} \\nabla \\widehat{T}\\cdot\\left(\\dfrac{\\partial \\boldsymbol{j}}{\\partial \\boldsymbol{g}}\\cdot \\nabla T^*+\\dfrac{\\partial \\boldsymbol{j}}{\\partial T}\\cdot T^*\\right) \\text{dx}\n",
"J(\\widehat{T},T^*) = \\int_{\\Omega} \\nabla \\widehat{T}\\cdot\\left(\\dfrac{\\partial \\mathbf{j}}{\\partial \\mathbf{g}}\\cdot \\nabla T^*+\\dfrac{\\partial \\mathbf{j}}{\\partial T}\\cdot T^*\\right) \\text{dx}\n",
"\\end{equation}\n",
"\n",
"Similarly to the case of external state variables, common gradient expressions for some [TFEL Glossary](http://tfel.sourceforge.net/glossary.html) names have been already predefined which avoid calling explicitly the `register_gradient` method. Predefined expressions can be obtained from:"
......@@ -432,6 +432,24 @@
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.9"
},
"latex_envs": {
"LaTeX_envs_menu_present": true,
"autoclose": false,
"autocomplete": true,
"bibliofile": "biblio.bib",
"cite_by": "apalike",
"current_citInitial": 1,
"eqLabelWithNumbers": true,
"eqNumInitial": 1,
"hotkeys": {
"equation": "Ctrl-E",
"itemize": "Ctrl-I"
},
"labels_anchors": false,
"latex_user_defs": false,
"report_style_numbering": false,
"user_envs_cfg": false
}
},
"nbformat": 4,
......
......@@ -10,22 +10,22 @@
"\n",
"This example is a direct continuation of the [previous 2D example on non-linear heat transfer](nonlinear_heat_transfer.ipynb). The present computations will use the same behaviour `StationaryHeatTransfer.mfront`.\n",
"\n",
"![3D fuel rod example](supplementary_files/fuel_rod_solution.png)\n",
"<img src=\"supplementary_files/fuel_rod_solution.png\" width=\"300\">\n",
"\n",
"## FEniCS implementation\n",
"\n",
"We now consider a portion of nuclear fuel rod (Uranium Dioxide $\\text{UO}_2$) subject to an external imposed temperature $T_{ext}=1000\\text{ K}$ and uniform volumetric heat source $r=300 \\text{ MW/m}^3$. From the steady state heat balance equation $\\operatorname{div}\\boldsymbol{j} = r$, the variational formulation is now:\n",
"We now consider a portion of nuclear fuel rod (Uranium Dioxide $\\text{UO}_2$) subject to an external imposed temperature $T_{ext}=1000\\text{ K}$ and uniform volumetric heat source $r=300 \\text{ MW/m}^3$. From the steady state heat balance equation $\\operatorname{div}\\mathbf{j} = r$, the variational formulation is now:\n",
"\n",
"\\begin{equation}\n",
"F(\\widehat{T}) = \\int_\\Omega \\boldsymbol{j}(T,\\nabla T)\\cdot\\nabla \\widehat{T}\\,\\text{dx} + \\int_\\Omega r \\widehat{T} \\,\\text{dx}=0 \\quad \\forall \\widehat{T}\n",
"F(\\widehat{T}) = \\int_\\Omega \\mathbf{j}(T,\\nabla T)\\cdot\\nabla \\widehat{T}\\,\\text{dx} + \\int_\\Omega r \\widehat{T} \\,\\text{dx}=0 \\quad \\forall \\widehat{T}\n",
"\\end{equation}\n",
"\n",
"which fits the general default format of a `MFrontNonlinearProblem`:\n",
"\\begin{equation}\n",
"F(\\widehat{u}) = \\sum_i \\int_\\Omega \\boldsymbol{\\sigma}_i(\\boldsymbol{u})\\cdot \\boldsymbol{g}_i(\\widehat{u})\\,\\text{dx} -L(\\widehat{u}) =0 \\quad \\forall \\widehat{u}\n",
"F(\\widehat{u}) = \\sum_i \\int_\\Omega \\boldsymbol{\\sigma}_i(u)\\cdot \\mathbf{g}_i(\\widehat{u})\\,\\text{dx} -L(\\widehat{u}) =0 \\quad \\forall \\widehat{u}\n",
"\\end{equation}\n",
"\n",
"where $(\\boldsymbol{\\sigma}_i,\\boldsymbol{g}_i)$ are pairs of dual flux/gradient and here the external loading form $L$ is given by $-\\int_\\Omega r \\widehat{T} \\,\\text{dx}$. Compared to the previous example, we just add this source term using the `set_loading` method. Here we use a quadratic interpolation for the temperature field and external temperature is imposed on the surface numbered 12. Finally, we also rely on automatic registration of the gradient and external state variables as explained in the first demo."
"where $(\\boldsymbol{\\sigma}_i,\\mathbf{g}_i)$ are pairs of dual flux/gradient and here the external loading form $L$ is given by $-\\int_\\Omega r \\widehat{T} \\,\\text{dx}$. Compared to the previous example, we just add this source term using the `set_loading` method. Here we use a quadratic interpolation for the temperature field and external temperature is imposed on the surface numbered 12. Finally, we also rely on automatic registration of the gradient and external state variables as explained in the previous demo."
]
},
{
......@@ -39,12 +39,11 @@
"from time import time\n",
"\n",
"mesh = Mesh()\n",
"mvc = MeshValueCollection(\"size_t\", mesh, 3)\n",
"with XDMFFile(\"mesh.xdmf\") as infile:\n",
"with XDMFFile(\"fuel_rod_mesh.xdmf\") as infile:\n",
" infile.read(mesh)\n",
"mvc = MeshValueCollection(\"size_t\", mesh, 2)\n",
"with XDMFFile(\"mf.xdmf\") as infile:\n",
" infile.read(mvc, \"name_to_read\")\n",
"with XDMFFile(\"fuel_rod_mf.xdmf\") as infile:\n",
" infile.read(mvc, \"facets\")\n",
"facets = cpp.mesh.MeshFunctionSizet(mesh, mvc)\n",
"\n",
"V = FunctionSpace(mesh, \"CG\", 2)\n",
......@@ -149,15 +148,23 @@
"\n",
"## On the use of the correct tangent operator\n",
"\n",
"Most FE software do not take into account the contribution of $\\dfrac{\\partial \\boldsymbol{j}}{\\partial T}$ to the tangent operator. One can easily test this variant by assigning `dj_ddT` in the MFront behaviour or change the expression of the jacobian in the pure FEniCS implementation by:\n",
"Most FE software do not take into account the contribution of $\\dfrac{\\partial \\mathbf{j}}{\\partial T}$ to the tangent operator. One can easily test this variant by assigning `dj_ddT` in the MFront behaviour or change the expression of the jacobian in the pure FEniCS implementation by:\n",
"```\n",
"J = dot(grad(T_), -grad(dT)/(A+B*T))*dx(metadata={'quadrature_degree': quad_deg})\n",
"```\n",
"In the present case, using this partial tangent operator yields a convergence in 4 iterations instead of 3, giving a computational cost increase by roughly 25%."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"celltoolbar": "Aucun(e)",
"kernelspec": {
"display_name": "Python 3",
"language": "python",
......
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Fri Feb 1 08:49:11 2019
#!/usr/bin/env python
# coding: utf-8
# # Stationnary non-linear heat transfer: 3D problem and performance comparisons
#
# ## Description of the non-linear constitutive heat transfer law
#
# This example is a direct continuation of the [previous 2D example on non-linear heat transfer](nonlinear_heat_transfer.ipynb). The present computations will use the same behaviour `StationaryHeatTransfer.mfront`.
#
# ![3D fuel rod example](supplementary_files/fuel_rod_solution.png)
#
# ## FEniCS implementation
#
# We now consider a portion of nuclear fuel rod (Uranium Dioxide $\text{UO}_2$) subject to an external imposed temperature $T_{ext}=1000\text{ K}$ and uniform volumetric heat source $r=300 \text{ MW/m}^3$. From the steady state heat balance equation $\operatorname{div}\boldsymbol{j} = r$, the variational formulation is now:
#
# \begin{equation}
# F(\widehat{T}) = \int_\Omega \boldsymbol{j}(T,\nabla T)\cdot\nabla \widehat{T}\,\text{dx} + \int_\Omega r \widehat{T} \,\text{dx}=0 \quad \forall \widehat{T}
# \end{equation}
#
# which fits the general default format of a `MFrontNonlinearProblem`:
# \begin{equation}
# F(\widehat{u}) = \sum_i \int_\Omega \boldsymbol{\sigma}_i(\boldsymbol{u})\cdot \boldsymbol{g}_i(\widehat{u})\,\text{dx} -L(\widehat{u}) =0 \quad \forall \widehat{u}
# \end{equation}
#
# where $(\boldsymbol{\sigma}_i,\boldsymbol{g}_i)$ are pairs of dual flux/gradient and here the external loading form $L$ is given by $-\int_\Omega r \widehat{T} \,\text{dx}$. Compared to the previous example, we just add this source term using the `set_loading` method. Here we use a quadratic interpolation for the temperature field and external temperature is imposed on the surface numbered 12. Finally, we also rely on automatic registration of the gradient and external state variables as explained in the first demo.
# In[11]:
@author: bleyerj
"""
from dolfin import *
import mfront_wrapper as mf
import numpy as np
import meshio
fname = "../meshes/rod3D.msh"
msh = meshio.read(fname)
for cell in msh.cells:
if cell.type == "triangle":
triangle_cells = cell.data
elif cell.type == "tetra":
tetra_cells = cell.data
for key in msh.cell_data_dict["gmsh:physical"].keys():
if key == "triangle":
triangle_data = msh.cell_data_dict["gmsh:physical"][key]
elif key == "tetra":
tetra_data = msh.cell_data_dict["gmsh:physical"][key]
tetra_mesh = meshio.Mesh(points=msh.points, cells={"tetra": tetra_cells},
cell_data={"name_to_read":[tetra_data]})
triangle_mesh =meshio.Mesh(points=msh.points,
cells=[("triangle", triangle_cells)],
cell_data={"name_to_read":[triangle_data]})
meshio.write("mesh.xdmf", tetra_mesh)
meshio.write("mf.xdmf", triangle_mesh)
# remove blank spaces in field_date keys
tags = dict([(key.strip(), value) for (key, value) in msh.field_data.items()])
def get_tag(tag):
return tags[tag][0]
# get points on top line for postprocess
top_cells = msh.get_cell_data("gmsh:physical","line")==get_tag("00LRM01")
line = np.unique(msh.points[msh.get_cells_type("line")[top_cells, :].flatten(), :], axis=0)
from time import time
mesh = Mesh()
mvc = MeshValueCollection("size_t", mesh, 3)
with XDMFFile("mesh.xdmf") as infile:
infile.read(mesh)
infile.read(mvc, "name_to_read")
domains = cpp.mesh.MeshFunctionSizet(mesh, mvc)
mvc = MeshValueCollection("size_t", mesh, 2)
with XDMFFile("mf.xdmf") as infile:
infile.read(mvc, "name_to_read")
facets = cpp.mesh.MeshFunctionSizet(mesh, mvc)
dx = Measure("dx", domain=mesh, subdomain_data=domains)
ds = Measure("ds", domain=mesh, subdomain_data=facets)
V = FunctionSpace(mesh, "CG", 2)
T = Function(V, name="Temperature")
T_ = TestFunction(V)
......@@ -62,52 +48,61 @@ T0 = Constant(300.)
T.interpolate(T0)
Text = Constant(1e3)
v = Function(V)
bc = DirichletBC(V, Text, facets, get_tag("00SOO"))
bc.apply(v.vector())
bc = DirichletBC(V, Text, facets, 12)
r = Constant(3e8)
quad_deg=2
quad_deg = 2
material = mf.MFrontNonlinearMaterial("../materials/src/libBehaviour.so",
"StationaryHeatTransfer")
problem = mf.MFrontNonlinearProblem(T, material, quadrature_degree=quad_deg, bcs=bc)
problem.set_loading(-r*T*dx)
from time import time
# The `solve` method computing time is monitored:
# In[12]:
tic = time()
problem.solve(T.vector())
print("MFront/FEniCS solve time:", time()-tic)
ffile = XDMFFile("results/3D_heat_transfer.xdmf")
ffile.parameters["functions_share_mesh"] = True
ffile.write(T, 0)
Tline = np.zeros((line.shape[0],1))
for (i, x) in enumerate(line):
Tline[i] = T(*x)
np.savetxt("fuel_rod_3d_results.csv", np.hstack((line, Tline)), delimiter=",")
# T.interpolate(T0)
# t = problem.fluxes["HeatFlux"].tangent_blocks["TemperatureGradient"]
# problem.a = inner(grad(T_), t*grad(dT))*problem.dx
# tic = time()
# problem.solve(T.vector())
# print("MFront/FEniCS solve time (wrong jacobian):", time()-tic)
T.interpolate(T0)
# For the purpose of performance comparison, we also implement a direct non-linear variational problem with pure UFL expressions. This is possible in the present case since the non-linear heat constitutive law is very simple. Note that we enfore the use of the same quadrature rule degree. The temperature field is also reinterpolated to its previous initial value for a fair comparison between both solution strategies.
# In[ ]:
A = Constant(material.get_parameter("A"))
B = Constant(material.get_parameter("B"))
j = -1/(A + B*T)*grad(T)
F = (dot(grad(T_), j) + r*T_)*dx(metadata={'quadrature_degree': quad_deg})
J = derivative(F, T)
J = derivative(F, T, dT)
T.interpolate(T0)
tic = time()
solve(F == 0, T, bc, J=J)
print("Pure FEniCS solve time:", time()-tic)
T2 = Function(V, name="Temperature (fenics)")
T2.assign(T)
ffile.write(T2, 0)
ffile.close()
\ No newline at end of file
# ## Performance comparison
#
# We can observe that both methods, relying on the same default Newton solver, yield the same total iteration counts and residual values. As regards computing time, the pure FEniCS implementation is slightly faster as expected. In the following table, comparison has been made for a coarse (approx 4 200 cells) and a refined (approx 34 000 cells) mesh with quadrature degrees equal either to 2 or 5.
#
# |Mesh type | Quadrature degree | FEniCS/MFront | Pure FEniCS |
# |:--------:|:-----------------:|:-------------:|:-----------:|
# |coarse | 2 | 1.2 s | 0.8 s |
# | coarse | 5 | 2.2 s | 1.0 s |
# | fine | 2 | 62.8 s | 58.4 s |
# | fine | 5 | 77.0 s | 66.3 s |
#
# The difference is slightly larger for large quadrature degrees, however, the difference is moderate when compared to the total computing time for large scale problems. FE
#
# ## On the use of the correct tangent operator
#
# Most FE software do not take into account the contribution of $\dfrac{\partial \boldsymbol{j}}{\partial T}$ to the tangent operator. One can easily test this variant by assigning `dj_ddT` in the MFront behaviour or change the expression of the jacobian in the pure FEniCS implementation by:
# ```
# J = dot(grad(T_), -grad(dT)/(A+B*T))*dx(metadata={'quadrature_degree': quad_deg})
# ```
# In the present case, using this partial tangent operator yields a convergence in 4 iterations instead of 3, giving a computational cost increase by roughly 25%.
import matplotlib.pyplot as plt
from dolfin import *
import mfront_wrapper as mf
import numpy as np
import ufl
Re, Ri = 1.3, 1. # external/internal radius
# elastic parameters
E = 70e3
nu = 0.3
# yield strength
sig0 = 250.
Et = E/100.
# hardening slope
H = E*Et/(E-Et)
mesh = Mesh("../meshes/thick_cylinder.xml")
facets = MeshFunction("size_t", mesh, "../meshes/thick_cylinder_facet_region.xml")
ds = Measure('ds', subdomain_data=facets)
V = VectorFunctionSpace(mesh, "CG", 2)
bc = [DirichletBC(V.sub(1), 0, facets, 1), DirichletBC(V.sub(0), 0, facets, 3)]
n = FacetNormal(mesh)
for hypothesis in ["plane_strain", "axisymmetric"]:
u = Function(V, name="Displacement")
if hypothesis == "plane_strain":
print("Expansion of a thick cylinder in plane strain")
q_lim = float(2/sqrt(3)*ln(Re/Ri)*sig0)
measure = 1
elif hypothesis == "axisymmetric":
x = SpatialCoordinate(mesh)
q_lim = float(2*ln(Re/Ri)*sig0)
measure = 2*pi*abs(x[0])
print("---------------------------------------------")
loading = Expression("-q*t", q=q_lim, t=0, degree=2)
mat_prop = {"YoungModulus": E,
"PoissonRatio": nu,
"HardeningSlope": H,
"YieldStrength": sig0}
material = mf.MFrontNonlinearMaterial("../materials/src/libBehaviour.so",
"IsotropicLinearHardeningPlasticity",
hypothesis=hypothesis,
material_properties=mat_prop)
problem = mf.MFrontNonlinearProblem(u, material, quadrature_degree=4, bcs=bc)
problem.set_loading(loading*dot(n, u)*measure*ds(4))
p = problem.get_state_variable("EquivalentPlasticStrain")
assert (ufl.shape(p) == ())
epsel = problem.get_state_variable("ElasticStrain")
assert (ufl.shape(epsel)==(4, ))
file_results = XDMFFile("results/plasticity_{}_results.xdmf".format(hypothesis))
file_results.parameters["flush_output"] = True
file_results.parameters["functions_share_mesh"] = True
P0 = FunctionSpace(mesh, "DG", 0)
p_avg = Function(P0, name="Plastic_strain")
Nincr = 20
load_steps = np.linspace(0, 1.1, Nincr+1)[1:]**0.5
results = np.zeros((Nincr+1, 2))
for (i, t) in enumerate(load_steps):
loading.t = t
problem.solve(u.vector())
file_results.write(u, t)
p_avg.assign(project(p, P0))
file_results.write(p_avg, t)
results[i+1, :] = (u(Ri, 0)[0], t)
plt.plot(results[:, 0], results[:, 1], "-o")
plt.xlabel("Displacement of inner boundary")
plt.ylabel(r"Applied pressure $q/q_{lim}$")
plt.show()
@book{zienkiewicz_finite_2000,
address = {Oxford ; Boston},
edition = {5th ed},
title = {The finite element method},
isbn = {978-0-7506-5049-6 978-0-7506-5055-7 978-0-7506-5050-2},
publisher = {Butterworth-Heinemann},
author = {Zienkiewicz, O. C. and Taylor, Robert L.},
year = {2000},
keywords = {Finite element method, Structural analysis (Engineering), Continuum mechanics},
file = {Zienkiewicz and Taylor - 2000 - The finite element method - Vol 1.pdf:C\:\\Users\\chadi.el-boustani\\Dropbox\\CIFRE\\99_REFERENCES\\Zienkiewicz and Taylor - 2000 - The finite element method - Vol 1.pdf:application/pdf;Zienkiewicz and Taylor - 2000 - The finite element method - Vol 2.pdf:C\:\\Users\\chadi.el-boustani\\Dropbox\\CIFRE\\99_REFERENCES\\Zienkiewicz and Taylor - 2000 - The finite elements method - Vol 2.pdf:application/pdf}
}
@book{wriggers_nonlinear_2008,
address = {Berlin},
title = {Nonlinear finite element methods},
isbn = {978-3-540-71000-4 978-3-540-71001-1},
publisher = {Springer},
author = {Wriggers, P.},
year = {2008},
note = {OCLC: ocn236120878},
keywords = {Finite element method, Festkörpermechanik, Nichtlineare Finite-Elemente-Methode, Nonlinear theories, Technische Mechanik},
file = {Wriggers - 2008 - Nonlinear finite element methods.pdf:C\:\\Users\\chadi.el-boustani\\Dropbox\\CIFRE\\99_REFERENCES\\Wriggers - 2008 - Nonlinear finite element methods.pdf:application/pdf}
@article{bleyer2018multiphase,
title={Multiphase continuum models for fiber-reinforced materials},
author={Bleyer, Jeremy},
journal={Journal of the Mechanics and Physics of Solids},
volume={121},
pages={198--233},
year={2018},
publisher={Elsevier}
}
@book{kim_introduction_2015,
address = {Boston, MA},
title = {Introduction to {Nonlinear} {Finite} {Element} {Analysis}},
isbn = {978-1-4419-1745-4 978-1-4419-1746-1},
url = {http://link.springer.com/10.1007/978-1-4419-1746-1},
language = {en},
urldate = {2018-01-12},
publisher = {Springer US},
author = {Kim, Nam-Ho},
year = {2015},
doi = {10.1007/978-1-4419-1746-1},
file = {Kim - 2015 - Introduction to Nonlinear Finite Element Analysis.pdf:C\:\\Users\\chadi.el-boustani\\Dropbox\\CIFRE\\99_REFERENCES\\Kim - 2015 - Introduction to Nonlinear Finite Element Analysis.pdf:application/pdf}
}
@book{chaves_notes_2013,
address = {Barcelona},
edition = {1. ed},
series = {Lecture notes on numerical methods in engineering and sciences},
title = {Notes on continuum mechanics},
isbn = {978-94-007-5985-5 978-94-007-5986-2},
language = {en},
number = {4},
publisher = {CINME [u.a.]},
author = {Chaves, Eduardo Walter Vieira},
year = {2013},
note = {OCLC: 931535074},
file = {Chaves - 2013 - Notes on continuum mechanics.pdf:C\:\\Users\\chadi.el-boustani\\Dropbox\\CIFRE\\99_REFERENCES\\Chaves - 2013 - Notes on continuum mechanics.pdf:application/pdf;Chaves - 2013 - The Objectivity of Tensors.pdf:C\:\\Users\\chadi.el-boustani\\Dropbox\\CIFRE\\99_REFERENCES\\Chaves - 2013 - The Objectivity of Tensors.pdf:application/pdf}
@@book{debuhan2017elastic,
title={Elastic, Plastic and Yield Design of Reinforced Structures},
author={De Buhan, Patrick and Bleyer, J{\'e}r{\'e}my and Hassen, Ghazi},
year={2017},
publisher={Elsevier}
}
@article{miehe_anisotropic_2002,
......@@ -71,179 +34,4 @@
file = {Miehe et al. - 2002 - Anisotropic additive plasticity in the logarithmic.pdf:C\:\\Users\\chadi.el-boustani\\Dropbox\\CIFRE\\99_REFERENCES\\Miehe et al. - 2002 - Anisotropic additive plasticity in the logarithmic.pdf:application/pdf}
}
@phdthesis{al_akhrass_methodes_2014,
title = {Méthodes éléments finis mixtes robustes pour gérer l'incompressibilité en grandes déformations dans un cadre industriel},
school = {Mines Saint-Etienne},
author = {Al Akhrass, Dina},
year = {2014},
file = {Al Akhrass - 2014 - (article) Méthodes éléments finis mixtes robustes pour gérer.pdf:C\:\\Users\\chadi.el-boustani\\Dropbox\\CIFRE\\99_REFERENCES\\Al Akhrass - 2014 - Méthodes éléments finis mixtes robustes pour gérer 2.pdf:application/pdf;Al Akhrass - 2014 - Méthodes éléments finis mixtes robustes pour gérer.pdf:C\:\\Users\\chadi.el-boustani\\Dropbox\\CIFRE\\99_REFERENCES\\Al Akhrass - 2014 - Méthodes éléments finis mixtes robustes pour gérer.pdf:application/pdf}
}
@article{garrigues_algebre_nodate,
title = {Algèbre et analyse tensorielles pour l’étude des milieux continus},
language = {fr},
journal = {Cours de l'école centrale de Marseille},
author = {Garrigues, Jean},
pages = {127},
file = {Garrigues - Algèbre et analyse tensorielles pour l’étude des (slides).pdf:C\:\\Users\\chadi.el-boustani\\Dropbox\\CIFRE\\99_REFERENCES\\01_COURS_INDEXES\\MMC-Centrale marseilles\\Algèbre et analyse tensorielles - pour l'étude des.pdf:application/pdf;Garrigues - Algèbre et analyse tensorielles pour l’étude des m.pdf:C\:\\Users\\chadi.el-boustani\\Dropbox\\CIFRE\\99_REFERENCES\\01_COURS_INDEXES\\MMC-Centrale marseilles\\Garrigues - Algèbre et analyse tensorielles pour l’étude des m.pdf:application/pdf}
}
@article{garrigues_cinematique_nodate,
title = {Cinématique des milieux continus},
language = {fr},
journal = {Cours de l'école centrale de Marseille},
author = {Garrigues, Jean},
pages = {116},
file = {Garrigues - Cinématique des milieux continus (slides).pdf:C\:\\Users\\chadi.el-boustani\\Dropbox\\CIFRE\\99_REFERENCES\\01_COURS_INDEXES\\MMC-Centrale marseilles\\Garrigues - Cinématique des milieux continus.pdf:application/pdf;Garrigues - Cinématique des milieux continus.pdf:C\:\\Users\\chadi.el-boustani\\Dropbox\\CIFRE\\99_REFERENCES\\01_COURS_INDEXES\\MMC-Centrale marseilles\\Garrigues - Cinématique des milieux continus 2.pdf:application/pdf}
}
@article{brunig_large_1999,
title = {Large strain elastic-plastic theory and nonlinear finite element analysis based on metric transformation tensors},
volume = {24},
issn = {0178-7675, 1432-0924},
url = {http://link.springer.com/10.1007/s004660050451},
doi = {10.1007/s004660050451},
language = {en},
number = {3},
urldate = {2019-03-21},
journal = {Computational Mechanics},
author = {Brünig, M.},
month = sep,
year = {1999},
pages = {187--196},
file = {Brünig - 1999 - Large strain elastic-plastic theory and nonlinear .pdf:C\:\\Users\\chadi.el-boustani\\Dropbox\\CIFRE\\99_REFERENCES\\Brünig - 1999 - Large strain elastic-plastic theory and nonlinear .pdf:application/pdf}
}
@article{brunig_nonlinear_1995,