[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Getfem-commits] r4936 - /trunk/getfem/contrib/static_contact_gears/
From: |
logari81 |
Subject: |
[Getfem-commits] r4936 - /trunk/getfem/contrib/static_contact_gears/ |
Date: |
Sun, 05 Apr 2015 21:39:06 -0000 |
Author: logari81
Date: Sun Apr 5 23:39:06 2015
New Revision: 4936
URL: http://svn.gna.org/viewcvs/getfem?rev=4936&view=rev
Log:
update static contact gears demo
Added:
trunk/getfem/contrib/static_contact_gears/static_contact_gears.pl (with
props)
Modified:
trunk/getfem/contrib/static_contact_gears/Makefile.am
trunk/getfem/contrib/static_contact_gears/static_contact_gears.cc
trunk/getfem/contrib/static_contact_gears/static_contact_gears.param
trunk/getfem/contrib/static_contact_gears/static_contact_gears_2teeth.param
trunk/getfem/contrib/static_contact_gears/static_contact_gears_u1_u2.cc
Modified: trunk/getfem/contrib/static_contact_gears/Makefile.am
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/contrib/static_contact_gears/Makefile.am?rev=4936&r1=4935&r2=4936&view=diff
==============================================================================
--- trunk/getfem/contrib/static_contact_gears/Makefile.am (original)
+++ trunk/getfem/contrib/static_contact_gears/Makefile.am Sun Apr 5
23:39:06 2015
@@ -10,7 +10,7 @@
AM_CPPFLAGS = -I$(top_srcdir)/src -I../../src
LDADD = ../../src/libgetfem.la -lm @SUPLDFLAGS@ @BOOST_LIBS@
-TESTS =
+TESTS = static_contact_gears.pl
EXTRA_DIST = \
gear1.msh \
Modified: trunk/getfem/contrib/static_contact_gears/static_contact_gears.cc
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/contrib/static_contact_gears/static_contact_gears.cc?rev=4936&r1=4935&r2=4936&view=diff
==============================================================================
--- trunk/getfem/contrib/static_contact_gears/static_contact_gears.cc
(original)
+++ trunk/getfem/contrib/static_contact_gears/static_contact_gears.cc Sun Apr
5 23:39:06 2015
@@ -49,8 +49,7 @@
struct elastostatic_contact_problem {
enum { DIRICHLET_BOUNDARY_1 = 0, DIRICHLET_BOUNDARY_2 = 1,
- CONTACT_BOUNDARY_1 = 1001, CONTACT_BOUNDARY_2 = 1002,
- CONTACT_BOUNDARY = 1003 };
+ CONTACT_BOUNDARY_1 = 1001, CONTACT_BOUNDARY_2 = 1002 };
getfem::mesh mesh; /* the mesh */
getfem::mesh_im mim; /* the integration methods */
getfem::mesh_fem mf_u; /* main mesh_fem, for the elastostatic solution
*/
@@ -66,7 +65,7 @@
size_type N; /* dimension of the problem
*/
bool frictionless; /* flag for frictionless model
*/
- int contact_algo; /* contact algorithm (0:nodal, 1-4: integral
+ int contact_algo; /* contact algorithm (0:nodal, 1-4: integral
>=5:integral large sliding)
*/
// Vectors holding the ids of mesh region pairs expected to come in contact
@@ -224,10 +223,6 @@
mr2 = getfem::mesh_region::merge(mr2, mesh.region(*rg_it));
dal::bit_vector dol = mf_mult.basic_dof_on_region(CONTACT_BOUNDARY_1);
- if (contact_algo > 4) {
- mesh.region(CONTACT_BOUNDARY) = getfem::mesh_region::merge(mr1, mr2);
- dol.merge_from(mf_mult.basic_dof_on_region(CONTACT_BOUNDARY_2));
- }
mf_mult.reduce_to_basic_dof(dol);
}
@@ -278,10 +273,19 @@
}
}
else { // large sliding is for the moment always frictionless
- GMM_ASSERT1(false, "not supported yet");
- // md.add_initialized_scalar_data("f_coeff", frict_coeff);
- // size_type indb =
getfem::add_integral_large_sliding_contact_brick_field_extension
- // (md, mim, "u", "mult", "r", "f_coeff", CONTACT_BOUNDARY);
+ std::string u0_str("");
+// if (frict_coeff > scalar_type(0)) {
+// u0_str = "u0";
+// md.add_fem_variable(u0_str, mf_u);
+// }
+ md.add_initialized_scalar_data("f_coeff", frict_coeff);
+ size_type indb =
+ getfem::add_integral_large_sliding_contact_brick_raytracing
+ (md, "r", 20., "f_coeff", "1", false, false);
+ getfem::add_contact_boundary_to_large_sliding_contact_brick
+ (md, indb, mim, CONTACT_BOUNDARY_1, false, true, "u", "mult", u0_str);
+ getfem::add_contact_boundary_to_large_sliding_contact_brick
+ (md, indb, mim, CONTACT_BOUNDARY_2, true, false, "u", "", u0_str);
}
}
@@ -307,7 +311,8 @@
gmm::iteration iter(residual, 1, 40000);
- getfem::default_newton_line_search ls;
+// getfem::default_newton_line_search ls;
+ getfem::simplest_newton_line_search ls(50, 5., 5., 0.6, 1e-1);
getfem::standard_solve(md, iter, getfem::rselect_linear_solver(md,"mumps"),
ls);
if (!iter.converged()) return false; // Solution has not converged
Modified: trunk/getfem/contrib/static_contact_gears/static_contact_gears.param
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/contrib/static_contact_gears/static_contact_gears.param?rev=4936&r1=4935&r2=4936&view=diff
==============================================================================
--- trunk/getfem/contrib/static_contact_gears/static_contact_gears.param
(original)
+++ trunk/getfem/contrib/static_contact_gears/static_contact_gears.param
Sun Apr 5 23:39:06 2015
@@ -26,10 +26,10 @@
ROOTFILENAME = 'static_contact_gears'; % Root of data files
% CONTACT_ALGO = 0 % nodal contact
-CONTACT_ALGO = 1 % integral contact (non-symmetric Alart-Curnier)
+% CONTACT_ALGO = 1 % integral contact (non-symmetric Alart-Curnier)
% CONTACT_ALGO = 2 % integral contact (symmetric one Alart-Curnier)
% CONTACT_ALGO = 3 % integral contact (non-symmetric Alart-Curnier method with
an additional augmentation
% CONTACT_ALGO = 4 % integral contact (new unsymmetric method)
-% CONTACT_ALGO = 5 % integral large sliding contact
+CONTACT_ALGO = 5 % integral large sliding contact
MULT_FEM_TYPE = 'FEM_QK(3, 1)';
Added: trunk/getfem/contrib/static_contact_gears/static_contact_gears.pl
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/contrib/static_contact_gears/static_contact_gears.pl?rev=4936&view=auto
==============================================================================
--- trunk/getfem/contrib/static_contact_gears/static_contact_gears.pl (added)
+++ trunk/getfem/contrib/static_contact_gears/static_contact_gears.pl Sun Apr
5 23:39:06 2015
@@ -0,0 +1,61 @@
+# Copyright (C) 2012-2012 Yves Renard
+#
+# This file is a part of GETFEM++
+#
+# Getfem++ is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 or (at your option) any later version.
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+# License and GCC Runtime Library Exception for more details.
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+$bin_dir = "$ENV{srcdir}/../../bin";
+$tmp = `$bin_dir/createmp test_static_contact_gears.param`;
+
+sub catch { `rm -f $tmp`; exit(1); }
+$SIG{INT} = 'catch';
+
+open(TMPF, ">$tmp") or die "Open file impossible : $!\n";
+print TMPF <<""
+MU = 0.83E+5;
+LAMBDA = 1.18E+5;
+ROT_ANGLE = -1.5E-2;
+RESIDUAL = 1E-6;
+FRICTION_COEFFICIENT = 0.0E+0;
+MESHNAME_GEAR1 = 'gmsh:./gear1.msh';
+MESHNAME_GEAR2 = 'gmsh:./gear2.msh';
+CONTACT_FACES_1 = [113];
+CONTACT_FACES_2 = [113];
+DIRICHLET_FACES_1 = [133,142,143,173,182,183];
+DIRICHLET_FACES_2 = [133,142,143,173,182,183];
+FEM_TYPE = 'FEM_QK(3, 1)';
+INTEGRATION = 'IM_HEXAHEDRON(5)';
+ROOTFILENAME = 'static_contact_gears';
+CONTACT_ALGO = 5;
+MULT_FEM_TYPE = 'FEM_QK(3, 1)';
+
+;
+close(TMPF);
+
+$er = 0;
+open F, "./static_contact_gears $tmp 2>&1 |" or die;
+while (<F>) {
+ #print $_;
+ if ($_ =~ /error has been detected/)
+ {
+ $er = 1;
+ print "============================================\n";
+ print $_, <F>;
+ }
+}
+close(F); if ($?) { `rm -f $tmp`; exit(1); }
+if ($er == 1) { `rm -f $tmp`; exit(1); }
+`rm -f $tmp`;
+
+
Propchange: trunk/getfem/contrib/static_contact_gears/static_contact_gears.pl
------------------------------------------------------------------------------
svn:executable = *
Modified:
trunk/getfem/contrib/static_contact_gears/static_contact_gears_2teeth.param
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/contrib/static_contact_gears/static_contact_gears_2teeth.param?rev=4936&r1=4935&r2=4936&view=diff
==============================================================================
--- trunk/getfem/contrib/static_contact_gears/static_contact_gears_2teeth.param
(original)
+++ trunk/getfem/contrib/static_contact_gears/static_contact_gears_2teeth.param
Sun Apr 5 23:39:06 2015
@@ -26,10 +26,10 @@
ROOTFILENAME = 'static_contact_gears_2teeth'; % Root of data files
% CONTACT_ALGO = 0 % nodal contact
-CONTACT_ALGO = 1 % integral contact (non-symmetric Alart-Curnier)
+% CONTACT_ALGO = 1 % integral contact (non-symmetric Alart-Curnier)
% CONTACT_ALGO = 2 % integral contact (symmetric one Alart-Curnier)
% CONTACT_ALGO = 3 % integral contact (non-symmetric Alart-Curnier method with
an additional augmentation
% CONTACT_ALGO = 4 % integral contact (new unsymmetric method)
-% CONTACT_ALGO = 5 % integral large sliding contact
+CONTACT_ALGO = 5 % integral large sliding contact
MULT_FEM_TYPE = 'FEM_QK(3, 1)';
Modified:
trunk/getfem/contrib/static_contact_gears/static_contact_gears_u1_u2.cc
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/contrib/static_contact_gears/static_contact_gears_u1_u2.cc?rev=4936&r1=4935&r2=4936&view=diff
==============================================================================
--- trunk/getfem/contrib/static_contact_gears/static_contact_gears_u1_u2.cc
(original)
+++ trunk/getfem/contrib/static_contact_gears/static_contact_gears_u1_u2.cc
Sun Apr 5 23:39:06 2015
@@ -57,7 +57,6 @@
getfem::mesh_fem mf_rhs1; /* 1st mesh_fem for the right hand side
*/
getfem::mesh_fem mf_rhs2; /* 2nd mesh_fem for the right hand side
*/
getfem::mesh_fem mf_mult1; /* 1st mesh_fem for the multipliers.
*/
- getfem::mesh_fem mf_mult2; /* 2nd mesh_fem for the multipliers.
*/
scalar_type lambda, mu; /* elastic coefficients.
*/
scalar_type residual; /* max residual for the iterative solvers
*/
@@ -68,7 +67,7 @@
size_type N; /* dimension of the problem
*/
bool frictionless; /* flag for frictionless model
*/
- int contact_algo; /* contact algorithm (0:nodal, 1-4: integral
+ int contact_algo; /* contact algorithm (0:nodal, 1-4: integral
>=5:integral large sliding)
*/
// Vectors holding the ids of mesh region pairs expected to come in contact
@@ -82,7 +81,7 @@
void init(void);
elastostatic_contact_problem(void) : mim1(mesh1), mim2(mesh2),
mf_u1(mesh1), mf_u2(mesh2), mf_rhs1(mesh1), mf_rhs2(mesh2),
- mf_mult1(mesh1), mf_mult2(mesh2) {}
+ mf_mult1(mesh1) {}
};
@@ -213,17 +212,12 @@
if (contact_algo != 0) { // integral contact
std::string MULT_FEM_TYPE = PARAM.string_value("MULT_FEM_TYPE","FEM name
for the multipliers");
- if (frictionless && contact_algo >= 1 && contact_algo <= 4) {
+ if (frictionless && contact_algo >= 1 && contact_algo <= 4)
mf_mult1.set_qdim(dim_type(1));
- mf_mult2.set_qdim(dim_type(1));
- }
- else {
+ else
mf_mult1.set_qdim(dim_type(N));
- mf_mult2.set_qdim(dim_type(N));
- }
getfem::pfem pf_mult = getfem::fem_descriptor(MULT_FEM_TYPE);
mf_mult1.set_finite_element(pf_mult);
- mf_mult2.set_finite_element(pf_mult);
getfem::mesh_region &mr1 = mesh1.region(CONTACT_BOUNDARY_1);
getfem::mesh_region &mr2 = mesh2.region(CONTACT_BOUNDARY_2);
@@ -236,8 +230,6 @@
dal::bit_vector dol1 = mf_mult1.basic_dof_on_region(CONTACT_BOUNDARY_1);
mf_mult1.reduce_to_basic_dof(dol1);
- dal::bit_vector dol2 = mf_mult2.basic_dof_on_region(CONTACT_BOUNDARY_2);
- mf_mult2.reduce_to_basic_dof(dol2);
}
}
@@ -292,13 +284,21 @@
}
}
else { // large sliding is for the moment always frictionless
- GMM_ASSERT1(false, "not supported yet");
- // md.add_fem_variable("mult2", mf_mult2);
- // md.add_initialized_scalar_data("f_coeff", frict_coeff);
- // size_type indb =
getfem::add_integral_large_sliding_contact_brick_field_extension
- // (md, mim1, "u1", "mult1", "r", "f_coeff", CONTACT_BOUNDARY_1);
- // getfem::add_boundary_to_large_sliding_contact_brick
- // (md, indb, mim2, "u2", "mult2", CONTACT_BOUNDARY_2);
+ std::string u01_str(""), u02_str("");
+// if (frict_coeff > scalar_type(0)) {
+// u01_str = "u01";
+// u02_str = "u02";
+// md.add_fem_variable(u01_str, mf_u1);
+// md.add_fem_variable(u02_str, mf_u2);
+// }
+ md.add_initialized_scalar_data("f_coeff", frict_coeff);
+ size_type indb =
+ getfem::add_integral_large_sliding_contact_brick_raytracing
+ (md, "r", 20., "f_coeff", "1", false, false);
+ getfem::add_contact_boundary_to_large_sliding_contact_brick
+ (md, indb, mim1, CONTACT_BOUNDARY_1, false, true, "u1", "mult1",
u01_str);
+ getfem::add_contact_boundary_to_large_sliding_contact_brick
+ (md, indb, mim2, CONTACT_BOUNDARY_2, true, false, "u2", "", u02_str);
}
}
@@ -325,7 +325,8 @@
gmm::iteration iter(residual, 1, 40000);
- getfem::default_newton_line_search ls;
+// getfem::default_newton_line_search ls;
+ getfem::simplest_newton_line_search ls(50, 5., 5., 0.6, 1e-1);
getfem::standard_solve(md, iter, getfem::rselect_linear_solver(md,"mumps"),
ls);
if (!iter.converged()) return false; // Solution has not converged
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Getfem-commits] r4936 - /trunk/getfem/contrib/static_contact_gears/,
logari81 <=