[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Getfem-commits] r4758 - in /trunk/getfem: interface/src/ src/ src/getfe
From: |
logari81 |
Subject: |
[Getfem-commits] r4758 - in /trunk/getfem: interface/src/ src/ src/getfem/ |
Date: |
Wed, 27 Aug 2014 07:21:13 -0000 |
Author: logari81
Date: Wed Aug 27 09:21:12 2014
New Revision: 4758
URL: http://svn.gna.org/viewcvs/getfem?rev=4758&view=rev
Log:
add frame indifferent sliding velocity option in new large sliding contact
brick (naive implementation)
Modified:
trunk/getfem/interface/src/gf_model_set.cc
trunk/getfem/src/getfem/getfem_contact_and_friction_large_sliding.h
trunk/getfem/src/getfem_contact_and_friction_large_sliding.cc
Modified: trunk/getfem/interface/src/gf_model_set.cc
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/interface/src/gf_model_set.cc?rev=4758&r1=4757&r2=4758&view=diff
==============================================================================
--- trunk/getfem/interface/src/gf_model_set.cc (original)
+++ trunk/getfem/interface/src/gf_model_set.cc Wed Aug 27 09:21:12 2014
@@ -2968,7 +2968,7 @@
(not fully symmetric even without friction). @*/
sub_command
- ("add integral large sliding contact brick raytracing", 2, 5, 0, 1,
+ ("add integral large sliding contact brick raytracing", 2, 6, 0, 1,
std::string dataname_r = in.pop().to_string();
scalar_type d = in.pop().to_scalar();
@@ -2980,10 +2980,13 @@
if (dataname_alpha.size() == 0) dataname_alpha = "1";
bool sym_v = false;
if (in.remaining()) sym_v = (in.pop().to_integer() != 0);
+ bool frame_indifferent = false;
+ if (in.remaining()) frame_indifferent = (in.pop().to_integer() != 0);
size_type ind
= getfem::add_integral_large_sliding_contact_brick_raytracing
- (md->model(), dataname_r, d, dataname_fr, dataname_alpha, sym_v);
+ (md->model(), dataname_r, d, dataname_fr, dataname_alpha, sym_v,
+ frame_indifferent);
out.pop().from_integer(int(ind + config::base_index()));
);
@@ -3045,7 +3048,7 @@
(allowing the self-contact). @*/
sub_command
("add master slave contact boundary to large sliding contact brick",
- 4, 5, 0, 0,
+ 5, 6, 0, 0,
size_type ind = in.pop().to_integer() - config::base_index();
getfemint_mesh_im *gfi_mim = in.pop().to_getfemint_mesh_im();
size_type region = in.pop().to_integer();
Modified: trunk/getfem/src/getfem/getfem_contact_and_friction_large_sliding.h
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem/getfem_contact_and_friction_large_sliding.h?rev=4758&r1=4757&r2=4758&view=diff
==============================================================================
--- trunk/getfem/src/getfem/getfem_contact_and_friction_large_sliding.h
(original)
+++ trunk/getfem/src/getfem/getfem_contact_and_friction_large_sliding.h Wed Aug
27 09:21:12 2014
@@ -58,8 +58,9 @@
*/
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);
+ 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 contact boundary to an existing large sliding contact
with friction brick. When a boundary is declared slave, a multiplier
Modified: trunk/getfem/src/getfem_contact_and_friction_large_sliding.cc
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem_contact_and_friction_large_sliding.cc?rev=4758&r1=4757&r2=4758&view=diff
==============================================================================
--- trunk/getfem/src/getfem_contact_and_friction_large_sliding.cc
(original)
+++ trunk/getfem/src/getfem_contact_and_friction_large_sliding.cc Wed Aug
27 09:21:12 2014
@@ -1411,8 +1411,7 @@
(G, mfu.linked_mesh().points_of_convex(cv));
pfem_precomp pfp = fppool(pf_s, &(pgt->geometric_nodes()));
- fem_interpolation_context ctx(pgt, pfp, size_type(-1), G, cv,
- short_type(-1));
+ fem_interpolation_context ctx(pgt, pfp, size_type(-1), G, cv);
size_type nb_pt_on_face = 0;
gmm::clear(n_mean);
@@ -2312,7 +2311,7 @@
model::varnamelist vl, dl;
model::mimlist ml;
- bool sym_version;
+ bool sym_version, frame_indifferent;
void add_contact_boundary(model &md, const mesh_im &mim, size_type region,
bool is_master, bool is_slave,
@@ -2367,34 +2366,44 @@
cb.is_slave = is_slave;
cb.mim = &mim;
if (is_slave) {
+ std::string n, n0, Vs, g, Y;
+ n = "Transformed_unit_vector(Grad_"+u+", Normal)";
+ n0 = "Transformed_unit_vector(Grad_"+w+", Normal)";
+
// Coulomb_friction_coupled_projection(lambda,
// Transformed_unit_vector(Grad_u, Normal),
// (u-Interpolate(ug,trans)-(w-Interpolate(wg,trans)))*alpha,
// (Interpolate(X,trans)+Interpolate(ug,trans)-X-u).
// Transformed_unit_vector(Grad_u, Normal), f, r)
+ Y = "Interpolate(X,"+transformation_name+")";
+ g =
"("+Y+"+Interpolate("+u_group+","+transformation_name+")-X-"+u+")."+n;
+ Vs = "("+u+"-Interpolate("+u_group+","+transformation_name+")";
+ if (w.size()) {
+ Vs += "-"+w+"+Interpolate("+w_group+","+transformation_name+")";
+ if (frame_indifferent)
+ Vs += "+("+g+")*("+n+"-"+n0+")";
+ }
+ Vs += ")*"+alpha;
+
std::string coupled_projection_def =
"Coulomb_friction_coupled_projection("
- + lambda+", Transformed_unit_vector(Grad_"+u+", Normal),"
- + "("+u+"-Interpolate("+u_group+","+transformation_name+")"
- + (w.size()
- ? ("-"+w+"+Interpolate("+w_group+","+transformation_name+")")
- : "")
- +")*"+alpha+","
- + "(Interpolate(X,"+transformation_name+")+Interpolate("+u_group+","
- + transformation_name+")-X-"+u+").Transformed_unit_vector(Grad_"
- + u+", Normal),"+friction_coeff+","+augmentation_param+")";
+ + lambda+","+n+","+Vs+","+g+","+friction_coeff+","
+ + augmentation_param+")";
// Coulomb_friction_coupled_projection(lambda,
// Transformed_unit_vector(Grad_u, Normal), (u-w)*alpha,
// (Interpolate(X,trans)-X-u).Transformed_unit_vector(Grad_u,
// Normal), f, r)
+ g = "(Interpolate(X,"+transformation_name+")-X-"+u+")."+n;
+ if (frame_indifferent && w.size())
+ Vs = "("+u+"-"+w+"+"+g+"*("+n+"-"+n0+"))*"+alpha;
+ else
+ Vs = "("+u+(w.size() ? ("-"+w):"")+")*"+alpha;
+
std::string coupled_projection_rig =
"Coulomb_friction_coupled_projection("
- + lambda+", Transformed_unit_vector(Grad_"+u+", Normal),"
- + "("+u+(w.size() ? ("-"+w):"")+")*"+alpha
- + ",(Interpolate(X,"+transformation_name+")-X-"+u
- + ").Transformed_unit_vector(Grad_"+u+", Normal),"
- + friction_coeff+","+augmentation_param+")";
+ + lambda+","+n+","+Vs+","+g+","+ friction_coeff+","
+ + augmentation_param+")";
cb.expr =
// -lambda.Test_u for non-symmetric version
@@ -2466,13 +2475,15 @@
(const std::string &r,
const std::string &f_coeff,const std::string &ug,
const std::string &wg, const std::string &tr,
- const std::string &alpha_ = "1", bool sym_v = false) {
- sym_version = sym_v;
+ const std::string &alpha_ = "1", bool sym_v = false,
+ bool frame_indiff = false) {
transformation_name = tr;
u_group = ug; w_group = wg;
friction_coeff = f_coeff;
alpha = alpha_;
augmentation_param = r;
+ sym_version = sym_v;
+ frame_indifferent = frame_indiff;
set_flags("Integral large sliding contact bick raytracing",
false /* is linear*/,
@@ -2588,7 +2599,7 @@
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,
- const std::string &alpha, bool sym_v) {
+ const std::string &alpha, bool sym_v, bool frame_indifferent) {
char ugroupname[50], wgroupname[50], transname[50];
for (int i = 0; i < 10000; ++i) {
@@ -2621,7 +2632,8 @@
intergral_large_sliding_contact_brick_raytracing *p
= new intergral_large_sliding_contact_brick_raytracing
- (augm_param, f_coeff, ugroupname, wgroupname, transname, alpha, sym_v);
+ (augm_param, f_coeff, ugroupname, wgroupname, transname, alpha,
+ sym_v, frame_indifferent);
pbrick pbr = p;
p->dl = dl;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Getfem-commits] r4758 - in /trunk/getfem: interface/src/ src/ src/getfem/,
logari81 <=