I want to make simulation of shearing of one cubic finite element as in the code below. How can I constrain all horizontal displacements (in X direction) of nodes "X"==L to have the same values?

<< AceFEM`;
L = 10; 
  "cube", {"ML:", "SE", "D3", "H1", "DF", "HY", "H1", 
   "D", {{"NeoHooke", "WA"}}}, {"E *" -> 21000 }];
SMTAddEssentialBoundary[{"X" == L  & , 3 -> -L/2}];
SMTAddEssentialBoundary[{"X" == 0  &, 1 -> 0, 2 -> 0, 3 -> 0}];
  "H1", {1, 1, 
   1}, {{{{0, 0, 0}, {L, 0, 0}}, {{0, L, 0}, {L, L, 0}}}, {{{0, 0, 
      L}, {L, 0, L}}, {{0, L, L}, {L, L, L}}}}];
SMTEquilibriumPaths["Method" -> "Newton", "Steps" -> "Adaptive", 
  "\[Lambda]Max" -> 1, "Show" -> "Window"];
SMTShowMesh["DeformedMesh" -> True]

Below there is a figure with deformation obtained from the above code. As you can see displacements in horizontal direction are different fot the top and bottom nodes on right side. My question is how can I tie the nodes to obtain a result denoted with red lines (i.e. the right side of the cube vertical not inclined).

deformed mesh

  • $\begingroup$ Your code is quite hard to read. In particular, I found the construction of your While condition, with multiple statements piled together, pretty hard to disentangle. Do you think you could reduce this down to a simpler example that showcases your problem? $\endgroup$
    – MarcoB
    Dec 21, 2023 at 16:07
  • $\begingroup$ MarcoB, thanks for your comment, I have changed the code and the description. I hope that now the problem is understood. $\endgroup$
    – Binka
    Dec 21, 2023 at 17:13

1 Answer 1


What you need to do is to impose an additional global constraint on all X displacements in nodes at "X"==L. This cannot be done by imposing essential boundary conditions. You will have to create an additional Lagrange type constrain element and add elements to the mesh. There exists an example called "Multi-scale Analysis" in the help where periodic boundary conditions were imposed by additional constrain elements. AceGen code is provided, thus you can use it as a starting point.

  • 1
    $\begingroup$ I believe this is more of a comment than an answer :) $\endgroup$
    – Domen
    Dec 29, 2023 at 12:08
  • $\begingroup$ Thank you for the answer, I've created such additional code and it works. $\endgroup$
    – Binka
    Jan 17 at 12:10

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.