getfem-commits
[Top][All Lists]
Advanced

[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




reply via email to

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