Welcome to the NetCologne GmbH open source mirroring service!

This machine mirrors various open-source projects. 20 Gbit/s uplink.

If there are any issues or you want another project mirrored, please contact mirror-service -=AT=- netcologne DOT de !

GetFEM: src/getfem/getfem_contact_and_friction_large_sliding.h Source File
GetFEM  5.5
getfem_contact_and_friction_large_sliding.h
1 /* -*- c++ -*- (enables emacs c++ mode) */
2 /*===========================================================================
3 
4  Copyright (C) 2013-2026 Yves Renard, Konstantinos Poulios.
5 
6  This file is a part of GetFEM
7 
8  GetFEM is free software; you can redistribute it and/or modify it
9  under the terms of the GNU Lesser General Public License as published
10  by the Free Software Foundation; either version 3 of the License, or
11  (at your option) any later version along with the GCC Runtime Library
12  Exception either version 3.1 or (at your option) any later version.
13  This program is distributed in the hope that it will be useful, but
14  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15  or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
16  License and GCC Runtime Library Exception for more details.
17  You should have received a copy of the GNU Lesser General Public License
18  along with this program. If not, see https://www.gnu.org/licenses/.
19 
20  As a special exception, you may use this file as it is a part of a free
21  software library without restriction. Specifically, if other files
22  instantiate templates or use macros or inline functions from this file,
23  or you compile this file and link it with other files to produce an
24  executable, this file does not by itself cause the resulting executable
25  to be covered by the GNU Lesser General Public License. This exception
26  does not however invalidate any other reasons why the executable file
27  might be covered by the GNU Lesser General Public License.
28 
29 ===========================================================================*/
30 
31 /** @file getfem_contact_and_friction_integral.h
32  @author Yves Renard <Yves.Renard@insa-lyon.fr>
33  @author Konstantinos Poulios <logari81@googlemail.com>
34  @date May, 2013.
35  @brief Large sliding unilateral contact and friction condition brick.
36  */
37 #ifndef GETFEM_CONTACT_AND_FRICTION_LARGE_SLIDING_H__
38 #define GETFEM_CONTACT_AND_FRICTION_LARGE_SLIDING_H__
39 
41 
42 namespace getfem {
43 
44 
45 
46  /** Adds a large sliding contact with friction brick to the model.
47  This brick is able to deal with self-contact, contact between
48  several deformable bodies and contact with rigid obstacles.
49  It uses the high-level generic assembly. It adds to the model
50  a raytracing_interpolate_transformation object.
51  For each slave boundary a multiplier variable should be defined.
52  The release distance should be determined with care
53  (generally a few times a mean element size, and less than the
54  thickness of the body). Initially, the brick is added with no contact
55  boundaries. The contact boundaries and rigid bodies are added with
56  special functions.
57  */
59  (model &md, const std::string &augm_param,
60  scalar_type release_distance, const std::string &f_coeff = "0",
61  const std::string &alpha = "1",
62  bool sym_v = false, bool frame_indifferent = false);
63 
64  /** Adds a contact boundary to an existing large sliding contact
65  with friction brick. When a boundary is declared slave, a multiplier
66  `lambda` has to be given which whould be defined on the boundary
67  `region`. The integration of contact terms is performed on each
68  slave boundary. A boundary can be both declare master and slave
69  which allows self-contact detection.
70  */
72  (model &md, size_type indbrick, const mesh_im &mim, size_type region,
73  bool is_master, bool is_slave, const std::string &u,
74  const std::string &lambda = "", const std::string &w = "");
75 
76  /** Adds a rigid obstacle to an existing large sliding contact
77  with friction brick. `expr` is an expression using the high-level
78  generic assembly language (where `x` is the current position)
79  which should be a signed distance to the obstacle.
80  `N` is the mesh dimension.
81  */
83  (model &md, size_type indbrick, const std::string &expr, size_type N);
84 
85  /** Gives the name of the group of variables corresponding to the
86  sliding data for an existing large sliding contact brick.
87  */
89  (model &md, size_type indbrick);
90 
91  /** Gives the name of the group of variables corresponding to the
92  displacement for an existing large sliding contact brick.
93  */
95  (model &md, size_type indbrick);
96 
97  /** Gives the name of the raytracing interpolate transformation
98  for an existing large sliding contact brick.
99  */
101  (model &md, size_type indbrick);
102 
103 
104 
105 
106 
107  /** Adds a large sliding contact with friction brick to the model.
108  This brick is able to deal with self-contact, contact between
109  several deformable bodies and contact with rigid obstacles.
110  It takes a variable of type multi_contact_frame wich describe
111  the contact situation (master and slave contact boundaries,
112  self-contact detection or not, and a few parameter).
113  For each slave boundary (and also master boundaries if self-contact
114  is asked) a multiplier variable should be defined.
115  DEPRECATED brick.
116  */
118  (model &md, multi_contact_frame &mcf,
119  const std::string &dataname_r,
120  const std::string &dataname_friction_coeff = std::string(),
121  const std::string &dataname_alpha = std::string());
122 
123 
124  /** Adds a large sliding contact with friction brick to the model based on Nitsche's method.
125  This brick is able to deal with self-contact, contact between
126  several deformable bodies and contact with rigid obstacles.
127  It uses the high-level generic assembly. It adds to the model
128  a raytracing_interpolate_transformation object.
129  For each slave boundary a material law should be defined as a function of the dispacement variable on this boundary.
130  The release distance should be determined with care
131  (generally a few times a mean element size, and less than the
132  thickness of the body). Initially, the brick is added with no contact
133  boundaries. The contact boundaries and rigid bodies are added with
134  special functions.
135  */
137  (model &md, bool is_unbiased, const std::string &Nitsche_param,
138  scalar_type release_distance, const std::string &f_coeff = "0",
139  const std::string &alpha = "1",
140  bool sym_v = false, bool frame_indifferent = false);
141 
142  /** Adds a contact boundary to an existing large sliding contact
143  with friction brick. When a boundary is declared slave, a multiplier
144  `lambda` has to be given which whould be defined on the boundary
145  `region`. The integration of contact terms is performed on each
146  slave boundary. A boundary can be both declare master and slave
147  which allows self-contact detection.
148  */
150  (model &md, size_type indbrick, const mesh_im &mim, size_type region,
151  bool is_master, bool is_slave, bool is_unbiased, const std::string &u,
152  const std::string &lambda = "", const std::string &w = "");
153 
154  /** Adds a rigid obstacle to an existing large sliding contact
155  with friction brick. `expr` is an expression using the high-level
156  generic assembly language (where `x` is the current position)
157  which should be a signed distance to the obstacle.
158  `N` is the mesh dimension.
159  */
161  (model &md, size_type indbrick, const std::string &expr, size_type N);
162 
163  /** Gives the name of the group of variables corresponding to the
164  sliding data for an existing large sliding contact brick.
165  */
167  (model &md, size_type indbrick);
168 
169  /** Gives the name of the group of variables corresponding to the
170  displacement for an existing large sliding contact brick.
171  */
173  (model &md, size_type indbrick);
174 
175  /** Gives the name of the raytracing interpolate transformation
176  for an existing large sliding contact brick.
177  */
179  (model &md, size_type indbrick);
180 
181 
182 
183 
184 #if 0 // Old brick, to be adapted ...
185 
186 
187 
188  /** Adds a large sliding contact with friction brick to the model.
189  This brick is able to deal with auto-contact, contact between
190  several deformable bodies and contact with rigid obstacles.
191  The condition is applied on the variable `varname_u` on the
192  boundary corresponding to `region`. `dataname_r` is the augmentation
193  parameter of the augmented Lagrangian. `dataname_friction_coeff`
194  is the friction coefficient. `mim` is an integration method on the
195  boundary. `varname_u` is the variable on which the contact condition
196  will be prescribed (should be of displacement type). `multname` is
197  a multiplier defined on the boundary which will represent the contact
198  force. If no additional boundary or rigid
199  obstacle is added, only auto-contact will be detected. Use
200  `add_boundary_to_large_sliding_contact_brick` and
201  `add_rigid_obstacle_to_large_sliding_contact_brick` to add contact
202  boundaries and rigid obstacles.
203  */
204  size_type add_integral_large_sliding_contact_brick_field_extension
205  (model &md, const mesh_im &mim, const std::string &varname_u,
206  const std::string &multname, const std::string &dataname_r,
207  const std::string &dataname_friction_coeff, size_type region);
208 
209 
210  /** Adds a contact boundary to an existing large sliding contact brick.
211  `indbrick` is the brick index.
212  */
213  void add_boundary_to_large_sliding_contact_brick
214  (model &md, size_type indbrick, const mesh_im &mim,
215  const std::string &varname_u, const std::string &multname,
216  size_type region);
217 
218  /** Adds a rigid obstacle to an existing large sliding contact brick.
219  `indbrick` is the brick index, `obs` is the expression of a
220  function which should be closed to a signed distance to the obstacle.
221  In `obs`, the current position is denoted `X` with components
222  `X(1), X(2), ...`. It is also allowed to use `x` instead of `X(1)`,
223  `y` instead of `X(2)`, `z` instead of `X(3)` and `w` instead of `X(4)`.
224  */
226  (model &md, size_type indbrick, const std::string &obs);
227 
228 
229 #endif
230 
231 } /* end of namespace getfem. */
232 
233 
234 #endif /* GETFEM_CONTACT_AND_FRICTION_LARGE_SLIDING_H__ */
Comomon tools for unilateral contact and Coulomb friction bricks.
size_t size_type
used as the common size type in the library
Definition: bgeot_poly.h:48
GEneric Tool for Finite Element Methods.
const std::string & transformation_name_of_large_sliding_contact_brick(model &md, size_type indbrick)
Gives the name of the raytracing interpolate transformation for an existing large sliding contact bri...
const std::string & sliding_data_group_name_of_Nitsche_large_sliding_contact_brick(model &md, size_type indbrick)
Gives the name of the group of variables corresponding to the sliding data for an existing large slid...
size_type add_integral_large_sliding_contact_brick_raytracing(model &md, const std::string &augm_param, scalar_type release_distance, const std::string &f_coeff="0", const std::string &alpha="1", bool sym_v=false, bool frame_indifferent=false)
Adds a large sliding contact with friction brick to the model.
size_type add_integral_large_sliding_contact_brick_raytrace(model &md, multi_contact_frame &mcf, const std::string &dataname_r, const std::string &dataname_friction_coeff=std::string(), const std::string &dataname_alpha=std::string())
Adds a large sliding contact with friction brick to the model.
size_type add_Nitsche_large_sliding_contact_brick_raytracing(model &md, bool is_unbiased, const std::string &Nitsche_param, scalar_type release_distance, const std::string &f_coeff="0", const std::string &alpha="1", bool sym_v=false, bool frame_indifferent=false)
Adds a large sliding contact with friction brick to the model based on Nitsche's method.
void add_rigid_obstacle_to_Nitsche_large_sliding_contact_brick(model &md, size_type indbrick, const std::string &expr, size_type N)
Adds a rigid obstacle to an existing large sliding contact with friction brick.
const std::string & sliding_data_group_name_of_large_sliding_contact_brick(model &md, size_type indbrick)
Gives the name of the group of variables corresponding to the sliding data for an existing large slid...
void add_contact_boundary_to_Nitsche_large_sliding_contact_brick(model &md, size_type indbrick, const mesh_im &mim, size_type region, bool is_master, bool is_slave, bool is_unbiased, const std::string &u, const std::string &lambda="", const std::string &w="")
Adds a contact boundary to an existing large sliding contact with friction brick.
void add_rigid_obstacle_to_large_sliding_contact_brick(model &md, size_type indbrick, const std::string &expr, size_type N)
Adds a rigid obstacle to an existing large sliding contact with friction brick.
const std::string & transformation_name_of_Nitsche_large_sliding_contact_brick(model &md, size_type indbrick)
Gives the name of the raytracing interpolate transformation for an existing large sliding contact bri...
const std::string & displacement_group_name_of_large_sliding_contact_brick(model &md, size_type indbrick)
Gives the name of the group of variables corresponding to the displacement for an existing large slid...
const std::string & displacement_group_name_of_Nitsche_large_sliding_contact_brick(model &md, size_type indbrick)
Gives the name of the group of variables corresponding to the displacement for an existing large slid...
void add_contact_boundary_to_large_sliding_contact_brick(model &md, size_type indbrick, const mesh_im &mim, size_type region, bool is_master, bool is_slave, const std::string &u, const std::string &lambda="", const std::string &w="")
Adds a contact boundary to an existing large sliding contact with friction brick.