getfem-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Getfem-commits] r4629 - in /trunk/getfem/doc/sphinx/source/userdoc: int


From: Yves . Renard
Subject: [Getfem-commits] r4629 - in /trunk/getfem/doc/sphinx/source/userdoc: interMM.rst model.rst model_nonlinear_elasticity.rst
Date: Sun, 27 Apr 2014 14:34:34 -0000

Author: renard
Date: Sun Apr 27 16:34:33 2014
New Revision: 4629

URL: http://svn.gna.org/viewcvs/getfem?rev=4629&view=rev
Log:
interpolation and nonlinear elasticity

Modified:
    trunk/getfem/doc/sphinx/source/userdoc/interMM.rst
    trunk/getfem/doc/sphinx/source/userdoc/model.rst
    trunk/getfem/doc/sphinx/source/userdoc/model_nonlinear_elasticity.rst

Modified: trunk/getfem/doc/sphinx/source/userdoc/interMM.rst
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/doc/sphinx/source/userdoc/interMM.rst?rev=4629&r1=4628&r2=4629&view=diff
==============================================================================
--- trunk/getfem/doc/sphinx/source/userdoc/interMM.rst  (original)
+++ trunk/getfem/doc/sphinx/source/userdoc/interMM.rst  Sun Apr 27 16:34:33 2014
@@ -56,29 +56,31 @@
 
 It is possible to extract some arbitraries expressions on possibly several 
fields thanks to the high-level generic assembly langage and the interpolation 
functions.
 
-This is specially dedicated to the model object (but it can also be used with 
a ga_workspace object). For instance if ``md`` is a valid object containing 
some defined variables ``u`` (vectorial) and ``p`` (scalar), one can 
interpolate on a Lagrange finite element method an expression such as 
``p*Trace(Grad_u)``  ...
+This is specially dedicated to the model object (but it can also be used with 
a ga_workspace object). For instance if ``md`` is a valid object containing 
some defined variables ``u`` (vectorial) and ``p`` (scalar), one can 
interpolate on a Lagrange finite element method an expression such as 
``p*Trace(Grad_u)``. The resulting expression can be scalar, vectorial or 
tensorial. The size of the resulting vector is automatically adapted.
 
 The high-level generic interpolation functions are defined in the file 
:file:`getfem/getfem_generic_assembly.h`.
 
-There are different interpolation functions corresponding to the interpolation 
on a Lagrange fem on the same mesh, the interpolation on a cloud on points or 
on a ``getfem::im_data`` object. Interpolation on a Lagrange fem::
+There is different interpolation functions corresponding to the interpolation 
on a Lagrange fem on the same mesh, the interpolation on a cloud on points or 
on a ``getfem::im_data`` object.
 
-  void ga_interpolation_Lagrange_fem(workspace, mf, result);
+Interpolation on a Lagrange fem::
 
-where ``workspace`` is a ``getfem::ga_workspace`` object which aims to store 
the different variables and data (see  :ref:`ud-gasm-high`), ``mf`` is the 
``getfem::mesh_fem`` object reresenting the Lagrange fem on which the 
interpolation is to be done and ``result`` is a ``beot::base_vector`` which 
store the interpolatin. Note that the workspace should contain the epression to 
be interpolated.::
+  void getfem::ga_interpolation_Lagrange_fem(workspace, mf, result);
 
-  void ga_interpolation_Lagrange_fem(md, expr, mf, result, 
rg=mesh_region::all_convexes());
+where ``workspace`` is a ``getfem::ga_workspace`` object which aims to store 
the different variables and data (see  :ref:`ud-gasm-high`), ``mf`` is the 
``getfem::mesh_fem`` object reresenting the Lagrange fem on which the 
interpolation is to be done and ``result`` is a ``beot::base_vector`` which 
store the interpolatin. Note that the workspace should contain the epression to 
be interpolated. ::
+
+  void getfem::ga_interpolation_Lagrange_fem(md, expr, mf, result, 
rg=mesh_region::all_convexes());
 
 where ``md`` is a ``getfem::model`` object (containing the variables and 
data), ``expr`` (std::string object) is the expression to be interpolated, 
``mf`` is the ``getfem::mesh_fem`` object reresenting the Lagrange fem on which 
the interpolation is to be done, ``result`` is the vector in which the 
interpolation is stored and ``rg`` is the optional mesh region.
 
 Interpolation on a cloud of points::
 
-  void ga_interpolation_mti(md, expr, mti, result, extrapolation = 0, 
rg=mesh_region::all_convexes(), nbpoints = size_type(-1));
+  void getfem::ga_interpolation_mti(md, expr, mti, result, extrapolation = 0, 
rg=mesh_region::all_convexes(), nbpoints = size_type(-1));
 
 where ``md`` is a ``getfem::model`` object (containing the variables and 
data), ``expr`` (std::string object) is the expression to be interpolated, 
``mti`` is a ``getfem::mesh_trans_inv`` object which stores the cloud of points 
(see :file:`getfem/getfem_interpolation.h`), ``result`` is the vector in which 
the interpolation is stored, ``extrapolation`` is an option for extrapolating 
the field outside the mesh for outside points, ``rg`` is the optional mesh 
region and ``nbpoints`` is the optional maximal number of points.
 
 Interpolation on an im_data object (on the Gauss points of an integration 
method)::
 
-  void ga_interpolation_im_data(md, expr, im_data &imd,
+  void getfem::ga_interpolation_im_data(md, expr, im_data &imd,
    base_vector &result, const mesh_region &rg=mesh_region::all_convexes());
 
 where ``md`` is a ``getfem::model`` object (containing the variables and 
data), ``expr`` (std::string object) is the expression to be interpolated, 
``imd`` is a ``getfem::im_data`` object which refers to a integration method 
(see :file:`getfem/getfem_im_data.h`), ``result`` is the vector in which the 
interpolation is stored and ``rg`` is the optional mesh region.

Modified: trunk/getfem/doc/sphinx/source/userdoc/model.rst
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/doc/sphinx/source/userdoc/model.rst?rev=4629&r1=4628&r2=4629&view=diff
==============================================================================
--- trunk/getfem/doc/sphinx/source/userdoc/model.rst    (original)
+++ trunk/getfem/doc/sphinx/source/userdoc/model.rst    Sun Apr 27 16:34:33 2014
@@ -54,9 +54,9 @@
    model_mass.rst
    model_time_dispatch.rst
    model_basic_nonlinear.rst
+   model_nonlinear_elasticity.rst
    model_contact_friction.rst
    model_contact_friction_large_sliding.rst
    model_elastoplasticity.rst
-   model_nonlinear_elasticity.rst
    model_bilaplacian.rst
    model_continuation.rst

Modified: trunk/getfem/doc/sphinx/source/userdoc/model_nonlinear_elasticity.rst
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/doc/sphinx/source/userdoc/model_nonlinear_elasticity.rst?rev=4629&r1=4628&r2=4629&view=diff
==============================================================================
--- trunk/getfem/doc/sphinx/source/userdoc/model_nonlinear_elasticity.rst       
(original)
+++ trunk/getfem/doc/sphinx/source/userdoc/model_nonlinear_elasticity.rst       
Sun Apr 27 16:34:33 2014
@@ -345,9 +345,82 @@
 High-level generic assembly versions
 ++++++++++++++++++++++++++++++++++++
 
-For incompressibility ::
-
- ind = add_finite_strain_incompressibility_brick
-    (md, mim, varname, multname, region = -1);
-
-In fact this brick just add the term ``p*(1-Det(Id(meshdim)+Grad_u))`` if 
``p`` is the multiplier and ``u`` the variable which represent the displacement.
+The high-level generic assembly langage give access to the potential and 
constitutive laws of the hyperelastic constitutive laws implemented in |gf|. 
This allows to directly use them into the language, for instance using a 
generic assembly brick in a model or for interpolation of certain quantities 
(the stress for instance).
+
+Here is the list of Langage nonlinear operator which could be usefull for 
nonlinear elasticity::
+
+  Det(M)                                % determinant of the matrix M
+  Trace(M)                              % trace of the matrix M
+  Matrix_i2(M)                          % second invariant of M (in 3D): 
(sqr(Trace(m)) - Trace(m*m))/2
+  Matrix_j1(M)                          % modified first invariant of M: 
Trace(m)pow(Det(m),-1/3).
+  Matrix_j2(M)                          % modified second invariant of M: 
Matrix_I2(m)*pow(Det(m),-2/3).
+  Right_Cauchy_Green(F)                 % F' * F
+  Left_Cauchy_Green(F)                  % F * F'
+  Green_Lagrangian(F)                   % (F'F - Id(meshdim))/2
+  Cauchy_stress_from_PK2(sigma, Grad_u) % 
(Id+Grad_u)*sigma*(I+Grad_u')/det(I+Grad_u)
+
+The potentials::
+
+  Saint_Venant_Kirchhoff_potential(Grad_u, [lambda; mu])
+  Plane_Strain_Saint_Venant_Kirchhoff_potential(Grad_u, [lambda; mu])
+  Generalized_Blatz_Ko_potential(Grad_u, [a;b;c;d;n])
+  Plane_Strain_Generalized_Blatz_Ko_potential(Grad_u, [a;b;c;d;n])
+  Ciarlet_Geymonat_potential(Grad_u, [lambda;mu;a])
+  Plane_Strain_Ciarlet_Geymonat_potential(Grad_u, [lambda;mu;a])
+  Incompressible_Mooney_Rivlin_potential(Grad_u, [c1;c2])
+  Plane_Strain_Incompressible_Mooney_Rivlin_potential(Grad_u, [c1;c2])
+  Compressible_Mooney_Rivlin_potential(Grad_u, [c1;c2;d1])
+  Plane_Strain_Compressible_Mooney_Rivlin_potential(Grad_u, [c1;c2;d1])
+  Incompressible_Neo_Hookean_potential(Grad_u, [c1])
+  Plane_Strain_Incompressible_Neo_Hookean_potential(Grad_u,  [c1])
+  Compressible_Neo_Hookean_potential(Grad_u,  [lambda;mu])
+  Plane_Strain_Compressible_Neo_Hookean_potential(Grad_u,  [lambda;mu])
+
+
+The second Piola-Kirchoff stress tensors::
+
+  Saint_Venant_Kirchhoff_sigma(Grad_u, [lambda; mu])
+  Plane_Strain_Saint_Venant_Kirchhoff_sigma(Grad_u, [lambda; mu])
+  Generalized_Blatz_Ko_sigma(Grad_u, [a;b;c;d;n])
+  Plane_Strain_Generalized_Blatz_Ko_sigma(Grad_u, [a;b;c;d;n])
+  Ciarlet_Geymonat_sigma(Grad_u, [lambda;mu;a])
+  Plane_Strain_Ciarlet_Geymonat_sigma(Grad_u, [lambda;mu;a])
+  Incompressible_Mooney_Rivlin_sigma(Grad_u, [c1;c2])
+  Plane_Strain_Incompressible_Mooney_Rivlin_sigma(Grad_u, [c1;c2])
+  Compressible_Mooney_Rivlin_sigma(Grad_u, [c1;c2;d1])
+  Plane_Strain_Compressible_Mooney_Rivlin_sigma(Grad_u, [c1;c2;d1])
+  Incompressible_Neo_Hookean_sigma(Grad_u, [c1])
+  Plane_Strain_Incompressible_Neo_Hookean_sigma(Grad_u, [c1])
+  Compressible_Neo_Hookean_sigma(Grad_u,  [lambda;mu])
+  Plane_Strain_Compressible_Neo_Hookean_sigma(Grad_u,  [lambda;mu])
+
+
+Note that for the derivative with respect to the parameters has not been 
implemented apart for the Saint Venant Kirchhoff hyperelastic law. So that it 
is not possible to make the parameter depend on other variables of a model 
(derivatives are not necessary complicated to implement but for the moment, 
only a wrapper with old implementations has been written).
+
+Note that the coupling of models it to be done at the weak formulation level. 
In a general way, it is recommended not to use the potential to define a 
problem. Two reasons are first that the second order derivative of the 
potential  (necessary to obtain the tangent system) can be very complicated and 
non-optimized and main couplings cannot be obtained at the potential level. 
Thus the use of potential should be restricted to the actual computation of the 
potential.
+
+An example of use to add a  Saint Venant-Kirchhoff hyperelastic term to a 
variable ``u`` in a model or a ga_workspace is given by the addition of the 
following assembly string::
+
+  
"((Id(meshdim)+Grad_u)*(Saint_Venant_Kirchhoff_sigma(Grad_u,[lambda;mu]))):Grad_Test_u"
+
+Note that in that case, ``lambda`` and ``mu`` have to be declared data of the 
model/ga_workspace. It is of course possible to replace them by explicit 
constants or expressions depending on several data.
+
+Concerning the incompressible Mooney-Rivlin law, it has to be completed by a 
incompressibility term. For instance by adding the following incompressibility 
brick::
+
+ ind = add_finite_strain_incompressibility_brick(md, mim, varname, multname, 
region = -1);
+
+This brick just add the term ``p*(1-Det(Id(meshdim)+Grad_u))`` if ``p`` is the 
multiplier and ``u`` the variable which represent the displacement.
+
+The addition to an hyperelastic term to a model can also be done thanks to the 
following function::
+
+  ind = add_finite_strain_elasticity_brick(md, mim, varname, lawname, params,
+                                           region = size_type(-1));
+
+where ``md`` is the model, ``mim`` the integration method, ``varname`` the 
variable of the model representing the large strain displacement, ``lawname`` 
is the constitutive law name which could be ``Saint_Venant_Kirchhoff``, 
``Generalized_Blatz_Ko``, ``Ciarlet_Geymonat``, 
``Incompressible_Mooney_Rivlin``, ``Compressible_Mooney_Rivlin``, 
``Incompressible_Neo_Hookean_sigma`` or ``Compressible_Neo_Hookean_sigma``, 
``params`` is a string representing the parameters of the law. It should 
represent a small vector or vetor field.
+
+The Von Mises stress can be interpolated with the following function::
+
+  void finite_strain_elasticity_Von_Mises(md, varname, lawname, params, mf_vm, 
VM,
+                                          rg=mesh_region::all_convexes());
+
+where ``md`` is the model, ``varname`` the variable of the model representing 
the large strain displacement, ``lawname`` is the constitutive law name (see 
previou brick), ``params`` is a string representing the parameters of the law, 
``mf_vm`` a (preferably discontinuous) Lagrange  finite element method on which 
the interpolation will be done and ``VM`` a vector of type 
``model_real_plain_vector`` in which the interpolation will be stored.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]