fracture with thre present of contact

90 views
Skip to first unread message

D-Nguyen

unread,
Jun 2, 2020, 5:37:23 PM6/2/20
to MoFEM Q&A
Hello,

I try to make some fracture simulations with the present of the contact between different parts (combination between the fracture mechanics module and contact mechanics module). Did you make a similar test case or  can I find a benchmark for a such problem in the MoFEM code? 

Thanks in advance,

Dung Nguyen

Andrei G. Shvarts

unread,
Jun 3, 2020, 1:39:00 PM6/3/20
to MoFEM Q&A

Hi Dung,


Thank you for your question. Following your request, we added an example of running crack propagation with contact loading to folder examples/three_point_bending_contact

It includes mesh file, config file for setting elastic properties and boundary conditions, param file for solvers, and README file with detailed explanations on creating the mesh in Salome Meca, setting up the problem and running simulations. To access it you would need to checkout develop branches (git checkout develop; git pull) in three repositories: 

  1. $HOME/mofem_install/mofem-cephas/mofem
  2. $HOME/mofem_install/mofem-cephas/mofem/users_modules
  3. $HOME/mofem_install/mofem-cephas/mofem/users_modules/mofem_um_fracture_mechanics

And after that you would need to recompile (make -j4; make install) in build directories:

  1. $HOME/mofem_install/lib
  2. $HOME/mofem_install/um/build

Actual paths might differ if you chose different names during installation. Alternatively, the example with contact loading will be included in the upcoming release in the following month.


Please let us know if you encounter any problems,

Best wishes,

Andrei Shvarts

D-Nguyen

unread,
Jun 3, 2020, 5:33:27 PM6/3/20
to MoFEM Q&A
Hello Andrei,

That is perfect. Thanks a lot for your help.  I will recontact you if I have further problems.

Bests regards,

Dung Nguyen

D-Nguyen

unread,
Jun 5, 2020, 5:36:35 PM6/5/20
to MoFEM Q&A
Hello Andrei,

I can run this cas withount any problem if I run with 1 processor.  However, using MPI with multiple procs, I have an error with PETSC (see log file in attachement). I followed exactly the install instruction in "Installation on Ubuntu" and everything went well. 

I knew quite well the fracture mechanics theory in the user module "fracture mechanics" MoFEM, but the documentation about contact is limited. Would you mind show me some theory behind the implementation?

In the user module "contact mechanics", I found the keywords "mortar" and "tied" key word. Are they two possiblities that can be used for contact? Can I use the fracture module to run a contact simulation or Do I have to use the contact-mechanics module?

Thanks for your  help,

Regards,

Dung,


log

Andrei G. Shvarts

unread,
Jun 8, 2020, 5:31:40 AM6/8/20
to MoFEM Q&A
  1. Module contact_mechanics is used for the development of mortar contact between non-matching meshes and is not supported in the current version of the fracture_mechanics module. However, the support for non-matching meshes for contact will be added in future releases. Currently, the fracture_mechanics module supports contact between matching meshes, and to run crack propagation with contact no additional modules are needed since the code for this type of contact is in the standard module basic_finite_elements. This implementation is tailored for matching meshes and requires that contacting solids are glued in the input mesh along an interface that is marked as a BLOCKSET of surface(s) denoted by the keyword "INT_CONTACT". Before the actual computation starts, the glued interface is to be (automatically) split and contact elements are to be (also automatically) introduced between the contacting solids along this interface. You can find more details in the README file in the directory $HOME/mofem_install/mofem-cephas/mofem/users_modules/basic_finite_elements/simple_contact, as well as in the examples sub-directory. Regarding the theory behind this implementation, we refer you to the conference paper attached. (Note that it covers a more general case of non-matching meshes, however, equations governing contact interaction are similar to both non-matching and matching cases.)
  2. Regarding this error, could you please send us the mesh input file and the param_file.petsc file from the folder where this simulation was running so we would be able to reproduce it?
P26_Ignatios Athanasiadis_Mortar Contact Formulation For Hierarchical Basis Functions Using Smooth Active Set Strategy.pdf

D-Nguyen

unread,
Jun 8, 2020, 6:49:42 AM6/8/20
to MoFEM Q&A
Thanks for your response !!!

It means that there is no way using the fracture_mechanics module in current version  to make a contact (also a glued contact) between two non-matching meshes. In case of matching meshes, glued contacts are obtained by not introduced contact elements.

You find also in attachment the files I used to run and the log files with error. I used mpirun -np 2,

Regards,

Dung
mpi.zip

Andrei G. Shvarts

unread,
Jun 8, 2020, 9:59:04 AM6/8/20
to MoFEM Q&A

 

Hi Dung,

  1. Regarding matching meshes, there is some important context that we need to be clear about since there can be a misunderstanding when we refer to "glued meshes". In the contact community, it is common to apply similar techniques as contact to mechanically tie two different meshes with a common geometrical surface. It is often called "mesh tying", i.e. two meshes are tied along a common interface. However, this is not implemented yet in MoFEM. When we refer to glued meshes we mean that the mesh that is used as input file was treated as follows: two (or more) bodies are initially generated and treated as independent geometrical entities with one or more common surfaces shared. These bodies are then meshed such that at the common surface vertices, edges and triangles are common to both bodies. These interfaces have to be denoted by BLOCKSETS with name starting with "INT_CONTACT" in the input mesh or in the config file, so that MoFEM will recognise them as surfaces where contact will be modelled. Then once MoFEM identifies these areas a special algorithm is triggered that splits these surfaces with unique vertices, edges and triangles into pairs that perfectly coincide with each other. These pairs become connected by contact elements which are used to model contact. Therefore, actual contact problem (not mesh tying/gluing) is solved, however there is a need of some preprocessing so that MoFEM will treat the contact interfaces appropriately.
  2. Thank you for sending the files. Unfortunately, I cannot reproduce this error (in the Linux environment) both on master and develop branches of our repositories. Were you using the following command to run it? mpirun -np 2 crack_propagation -my_file three_point_bending.h5m | tee log 
  3. How did you install MoFEM on Ubuntu, using instructions on the page  Installation on Ubuntu (Advanced) - not recommended for common users, or on the page  Installation with Spack (Recommended for Linux, macOS, HPC) - recommended for all users?
  4. You could notice that in the beginning of the log file git commits of three repositories are output: MoFEM Core, User module (basic finite elements) and Fracture module. These are essential for us to checkout exactly the same code as you have to be able to reproduce an error. However, in order to ensure that the correct git commits are being printed to the log file, it is required that every time you switch branches on any of three repositories, before you recompile (make -j4; make install) you do the following in the same folder where you will compile: touch CMakeCache.txt 

 

Andrei and Ignatios

D-Nguyen

unread,
Jun 8, 2020, 12:53:52 PM6/8/20
to MoFEM Q&A
Hello,

Thank you for your explanation.

1. If I understand correctly, the contact model in the current version of the fracture module can only consider glued meshes between maters and slaves (it means that the  common boundaries between masters and slaves are known a priori by BLOCKSETS identified by INT_CONTACT). MoFEM will separate the common boundaries to make a contact. 

2. Yes, I used mpirun -np 2 crack_propagation -my_file three_point_bending.h5m | tee log  to run application.

3. I followed the instruction on the page ''Installation on Ubuntu (Advanced)"  and everything went well. 

With MPI, I found that the "Segmentation Violation" error in the MPI communication with the function DMoFEMLoopFiniteElements during calling CPSolvers::calculateGc --> cP.calculateFrontProjectionMatrix-->DMoFEMLoopFiniteElements-->ConstrainMatrixCtx::initializeQorP-->VecManager::vecScatterCreate -->VecScatterCreate (in petsc)->VecScatterSetUp (in petsc)->...-> VecScatterCreateLocal_PtoP_MPI1 -> calling MPI_Isend (mofem_installation/petsc/src/vec/vscat/impls/mpi1/vpscat_mpi1.c:2461)

Regards,

Dung

Andrei G. Shvarts

unread,
Jun 9, 2020, 8:43:44 AM6/9/20
to MoFEM Q&A
Hi Dung,

1. Yes, you are correct: in the input mesh file master and slave triangles must be glued in order to enforce matching meshes at the contact interface. Once MoFEM is run, this glued interface is split, i.e. master and slave triangles are separated, and contact elements (prisms) are inserted between them.

2. Unfortunately, we are unable to reproduce this error. However, the error seems to originate from PETSc library, which is handling MPI communications. I noticed from your log files that the version of PETSc that you are using (3.11.4) is different from the one we are currently using (3.11.3), which could be the reason for this error. However, there could be more problems, since MoFEM depends on a number of different packages and libraries, and it is difficult to control their versions if they are installed manually. Therefore, we highly recommend and support installation of MoFEM using Spack package manager. Following this type of installation, you will have exactly the same versions of required libraries as we have now, and most likely your error will not happen again, since this example has been tested several times on different systems. Furthermore, we have developed an installation script, which performs installation using Spack manager in an automatic regime: you run the script and in one hour or so you should have all required libraries with appropriate versions and MoFEM itself installed. You can find this script as well as detailed instructions on the page Installation with Spack (Recommended for Linux, macOS, HPC) Please let us know if you encounter any difficulties with the installation.

Regards,
Andrei

D-Nguyen

unread,
Jun 21, 2020, 4:00:44 AM6/21/20
to MoFEM Q&A
Hello Andrei,

Thanks for your kind help.

In MoFEM, does there exist any way to extract the noal displacement  or force with a operator (distribution, average, min, max, ...) on a part of the mesh (node, edge, face, or volume elements) which defined by a mesh ID? In special cases, can I extract the pressure an displacement distribution on a fixed boundary condition or on the contact surface? Do I have to use an external software?

Moreover, in the fracture module of MoFEM, how can I apply boundary conditons which are not constants but depends on, for example, the position (force(disp or traction on BC) = functic of (x,y,z))? I saw in your cfg file, the constant pressure is used.

Regards,

Dung

Andrei G. Shvarts

unread,
Jun 23, 2020, 9:41:03 AM6/23/20
to MoFEM Q&A
Hi Dung,

1.     Displacements are always available at every node of the output (solution) mesh and can be directly accessed and visualized in Paraview. For example, in basic_finite_elements/elasticity they are output to file out.h5m under tag DISPLACEMENT. In basic_finite_elements/simple_contact(file out.h5m)and in fracture_mecanics (files out_spatial_N.h5m, N is the step number ) we output separately material coordinates (tag MESH_NODE_POSITIONS) and current coordinates (tag SPATIAL_POSITION). You can easily obtain displacement using Calculator filter in Paraview as DISPLACEMENT=SPATIAL_POSITION-MESH_NODE_POSITIONS. Note that if you are using crack_propagation with singularity present in the stress field, which is switched on by the flag -my_add_singularity (True by default), you should compute displacements as DISPLACEMENT=SPATIAL_POSITION-MESH_NODE_POSITIONS-SINGULAR_DISP

2.    Currently there is no functionality to extract tractions/forces on surfaces. Note that it can be done in Paraview by multiplying the stress tensor (also output as solution) by normal vector (provided by Generate Surface Normals filter). However, computations of normals in Paraview may have issues. Please let us know how critical for you is the extraction of tractions/forces, and we will try to include it in our development plan.

3.    Regarding contact surface, alongside with files out_spatial_N.h5m we output gap and contact pressure (as Lagrange multipliers, since their values are equivalent to contact pressure) at every gauss point of the contact surface to the file out_contact_N.h5m . These can be visualised in Paraview using Glyph filter or the Point Gaussian representation. In the upcoming release it will be possible to output contact Lagrange multipliers at all nodes of the contact surface, i.e. obtain interpolation of the contact pressure field rather than its values at gauss points.

4.    Regarding non-constant boundary conditions, currently it is possible to apply linearly varying pressure/force. Please let us know if that option is sufficient for you or you would need more complex (i.e. polynomial) distribution of pressure.  Please also note that only pressure/force load control is supported in fracture_mecanics, while displacement control is not supported. 


Regards,

Andrei

D-Nguyen

unread,
Jul 5, 2020, 4:22:51 PM7/5/20
to MoFEM Q&A
Thanks alot for your reponse.  You make many things clear to me that I didn't know before. 

Regards,

Dung

Reply all
Reply to author
Forward
0 new messages