getfem-users
[Top][All Lists]
Advanced

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

Re: [Getfem-users] mesh_deformation


From: Zhenghuai Guo
Subject: Re: [Getfem-users] mesh_deformation
Date: Fri, 19 Apr 2019 02:55:36 +0000

Hi Andriy and Yves and Konstantinos,

 

I think I run through the code with no error by setting

  getfem::add_contact_boundary_to_large_sliding_contact_brick(model,ind,  mim_contact_1, boundary_bot_1, false, true, "u_1", "pre_mflambda_1");

  getfem::add_contact_boundary_to_large_sliding_contact_brick(model,ind,  mim_contact_2, boundary_top_2, true, true, "u_2", "pre_mflambda_2");

 

The top mesh has to be only slave, and bottom has to be master and slave. Not sure why, but in this way I can run through the case 3 as below picture

 

 

Thank you very much

Regards

Zhenghuai Guo

 

From: Andriy Andreykiv <address@hidden>
Sent: Tuesday, April 16, 2019 11:46 PM
To: Zhenghuai Guo <address@hidden>
Cc: address@hidden; Yves Renard <address@hidden>; Konstantinos Poulios <address@hidden>
Subject: Re: [Getfem-users] mesh_deformation

 

Dear Zhenghuai Guo,

 

I have little experience with Getfem contact bricks, but I can suggest the following.

You don't have a convergence problem, but a solver failure due to singular stiffness matrix. This can happen

due to missing or too low integration method, missing structural stiffness, rigid body modes, etc.

So, I suggest first try to remove the contact and see if you get this problem. If everything is correct you should get

bottom mesh with zero deformation and top mesh overlapping with it. If you still get solver failure, you need to investigate

the points I mentioned.

I added Yves and Konstantinos, so that you can kindly ask them to review your contact application.

 

Best regards,

                          Andriy

 

On Tue, 16 Apr 2019 at 01:57, Zhenghuai Guo <address@hidden> wrote:

Hi Andriy,

 

Following my previous email, the case 3 always gives errors :

Can you please advise?  Thank you

 

 

 

From: Zhenghuai Guo
Sent: Monday, April 15, 2019 8:18 PM
To: address@hidden
Cc: address@hidden
Subject: RE: [Getfem-users] mesh_deformation

 

Hi Andriy,

 

Following your email on February as below. I tried to start from simple case to first achieve contact between two mesh with static linear elasticity. I still couldn’t do it and hope you can advise to me. Following is what I have done:

 

  1. Case 1: static linear elastic, one mesh, no contact

This is an easy case. The mesh is as below picture. The left and right and bottom are prescribed by add_normal_Dirichlet_condition_with_multipliers, the defined as zero normal values.

 

Linear elasticity brick is used:

getfem::add_isotropic_linearized_elasticity_brick(model, mim_1, "u_1", "lambda_1", "mu_1");

 

Then, the top of the mesh is translated downwards by -0.01:

getfem::add_Dirichlet_condition_with_multipliers(model, mim_1, "u_1", mf_u_1, boundary_top_1,"traslation_value" );

 

It runs good, no problem

 

 

 

  1. Case 2: static linear elastic, one mesh, contact with rigid obstacle on bottom

The mesh is as below picture. The left and right are prescribed by add_normal_Dirichlet_condition_with_multipliers, the defined as zero normal values.

 

The bottom is rigid obstacle.  Contact is defined as:

  scalar_type release_dist = 1;

  size_type ind;

  ind = getfem::add_integral_large_sliding_contact_brick_raytracing(model, "1", release_dist, "0", "1", false);

  getfem::add_contact_boundary_to_large_sliding_contact_brick(model,ind,  mim_contact_1, boundary_bot_1, true, true, "u_1", "pre_mflambda_1");

 getfem::add_rigid_obstacle_to_large_sliding_contact_brick(model, ind, "y", N);

 

Linear elasticity brick is used:

getfem::add_isotropic_linearized_elasticity_brick(model, mim_1, "u_1", "lambda_1", "mu_1");

 

Then, the top of the mesh is translated downwards by -0.01:

getfem::add_Dirichlet_condition_with_multipliers(model, mim_1, "u_1", mf_u_1, boundary_top_1,"traslation_value" );

 

Again, it runs good, no problem

 

 

 

  1. Case 3: static linear elastic, two meshes, contact between the meshes

 

The meshes are as below picture. The left and right and bottom are prescribed by add_normal_Dirichlet_condition_with_multipliers, the defined as zero normal values

 

Contact is defined between two meshes as:

  scalar_type release_dist = 1;

  size_type ind;

  ind = getfem::add_integral_large_sliding_contact_brick_raytracing(model, "1", release_dist, "0", "1", false);

  getfem::add_contact_boundary_to_large_sliding_contact_brick(model,ind,  mim_contact_1, boundary_bot_1, true, true, "u_1", "pre_mflambda_1");

  getfem::add_contact_boundary_to_large_sliding_contact_brick(model,ind,  mim_contact_2, boundary_top_2, true, true, "u_2", "pre_mflambda_2");

 

 

Linear elasticity brick is used:

getfem::add_isotropic_linearized_elasticity_brick(model, mim_1, "u_1", "lambda_1", "mu_1");

getfem::add_isotropic_linearized_elasticity_brick(model, mim_2, "u_2", "lambda_1", "mu_1");

 

Then, the top of the top mesh is translated downwards by -0.01:

getfem::add_Dirichlet_condition_with_multipliers(model, mim_1, "u_1", mf_u_1, boundary_top_1,"traslation_value" );

 

 

This case always can not converge and can’t run through.

 

 

I attached the codes for the case three. Could you please give some advices?

 

Thank you very much

 

Regards

Zhenghuai Guo

 

 

 

From: Andriy Andreykiv <address@hidden>
Sent: Monday, February 25, 2019 7:53 AM
To: Zhenghuai Guo <address@hidden>
Subject: Re: [Getfem-users] mesh_deformation

 

Dear Zhenghuai Guo,

 

Yes, you can model all those steps with Getfem.

If your elasticity coefficients don't even depend on stress, modelling this process is much easier.

All you need to do is to update them every step.

I would suggest that you build this model in stages, -  from simple to the complete one. 

On the first run just don't model any contact at all and replace rigid obstacle with boundary conditions.

Then add the contact between the meshes, then for the obstacles, than start cyclically updating elastic properties.

 

Best regards,

                        Andriy

 

 

On Sat, 16 Feb 2019 at 08:40, Zhenghuai Guo <address@hidden> wrote:

Hi Andriy,

 

Thank you for the help. Sorry I have been not clear. I was trying to run some simple cases against theoretical solution and  learn the getfem. Looks like adding a point source is not easy for me. I would put the point source problem on the side for now.

 

What I eventually want to do is the follows:

 

  1. Suppose there are two meshes A and B as below picture. The left and bottom sides are a fixed and rigid obstacles.

The gap between the two meshes can be consider zero.

 

  1. A hydraulic pressure is applied from the top to the mesh A. Basically, I think this can be implemented by add_normal_source_term_brick.
  2. To the right side of the meshes , there is also a hydraulic pressure applied.
  3. Linear elasticity is applied. But, the elasticity coefficients cmu and clambda are functions of time. It looks like these:

  const std::string clambda="nu/((1+nu)*(1-2*nu))*E*Ev/(Ev+E*(1-exp(-Ev/yv*t)))";

  const std::string cmu="1/(2*(1+nu))*E*Ev/(Ev+E*(1-exp(-Ev/yv*t)))";

  getfem::add_linear_term(model, mim,"("+clambda+"*Trace(Grad_u)*Id(qdim(u)) +"+ cmu+"*(Grad_u+Grad_u')):Grad_Test_u" );

 

where nu, E, Ev, yv are some constants.

 

  1. The friction between two meshes are considered. The friction between the mesh and the obstacles can be considered or not.
  2. Then after applied the pressure, at each time step I would like to calculate the area or volumetric change of the two meshes.

 

In the case of an unity mesh, the displacement of the initial elasticity at time step 0 is of the scale of 1E-4 and afterwards the strain change rate is about 1E-9/per second.

 

Do you think it is some I can achieve with getfem? Could you please advise?

 

Thank you very much

Regards

Zhenghuai Guo

 

 


reply via email to

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