Periodic boundary conditions

Hey everyone, I’m looking for a more efficient way to set up periodic boundary conditions for an RVE. Manually writing the *EQUATION command for every node pair is very tedious with fine meshes. Is there a better method to apply these constraints? I was looking through the documentation, but I didn’t find anything useful.
Thanks in advance!

The following is a working example of 1 element with periodic bc on all sides using *equation:

*NODE,NSET=NODES_ALL
1 ,0,0,0
2 ,0.5,0,0
3 ,1,0,0
4 ,0,0.5,0
5 ,0.5,0.5,0
6 ,1,0.5,0
7 ,0,1,0
8 ,0.5,1,0
9 ,1,1,0
10 ,0,0,0.5
11 ,0.5,0,0.5
12 ,1,0,0.5
13 ,0,0.5,0.5
14 ,0.5,0.5,0.5
15 ,1,0.5,0.5
16 ,0,1,0.5
17 ,0.5,1,0.5
18 ,1,1,0.5
19 ,0,0,1
20 ,0.5,0,1
21 ,1,0,1
22 ,0,0.5,1
23 ,0.5,0.5,1
24 ,1,0.5,1
25 ,0,1,1
26 ,0.5,1,1
27 ,1,1,1
*NODE, NSET=STRAIN_NODE1
28, -1.0, 0.0, 0.0
*NODE, NSET=STRAIN_NODE2
29, 0.0, -1.0, 0.0
*NODE, NSET=STRAIN_NODE3
30, 0.0, 0.0, -1.0
*NSET, NSET=STRAIN_NODES
28,29,30
*NSET, NSET=CORNER_NODE
1
*NSET, NSET=FACE_X_MIN
1,4,7,10,13,16,19,22,25
*NSET, NSET=FACE_X_MAX
3,6,9,12,15,18,21,24,27
*NSET, NSET=FACE_Y_MIN
1,2,3,10,11,12,19,20,21
*NSET, NSET=FACE_Y_MAX
7,8,9,16,17,18,25,26,27
*NSET, NSET=FACE_Z_MIN
1,2,3,4,5,6,7,8,9
*NSET, NSET=FACE_Z_MAX
19,20,21,22,23,24,25,26,27
*ELEMENT, TYPE=C3D20R, ELSET=ELEMENTS_ALL
1 ,1,3,9,7,19,21,27,25,2,6,
8,4,20,24,26,22,10,12,18,16
*ELSET, ELSET=ELEM_FACE_X_MIN
1
*Surface, Name=ELEM_FACE_X_MIN_S6, Type=Element
ELEM_FACE_X_MIN, S6
*ELSET, ELSET=ELEM_FACE_X_MAX
1
*Surface, Name=ELEM_FACE_X_MAX_S4, Type=Element
ELEM_FACE_X_MAX, S4
*ELSET, ELSET=ELEM_FACE_Y_MIN
1
*Surface, Name=ELEM_FACE_Y_MIN_S3, Type=Element
ELEM_FACE_Y_MIN, S3
*ELSET, ELSET=ELEM_FACE_Y_MAX
1
*Surface, Name=ELEM_FACE_Y_MAX_S5, Type=Element
ELEM_FACE_Y_MAX, S5
*ELSET, ELSET=ELEM_FACE_Z_MIN
1
*Surface, Name=ELEM_FACE_Z_MIN_S5, Type=Element
ELEM_FACE_Z_MIN, S1
*ELSET, ELSET=ELEM_FACE_Z_MAX
1
*Surface, Name=ELEM_FACE_Z_MAX_S5, Type=Element
ELEM_FACE_Z_MAX, S2

** PERIODIC BOUNDARY CONDITIONS
** EQUATIONS FOR X-FACES
*EQUATION
3
3,1,1, 1,1,-1, 28,1,-1
*EQUATION
3
3,2,1, 1,2,-1, 28,2,-1
*EQUATION
3
3,3,1, 1,3,-1, 28,3,-1
*EQUATION
3
6,1,1, 4,1,-1, 28,1,-1
*EQUATION
3
6,2,1, 4,2,-1, 28,2,-1
*EQUATION
3
6,3,1, 4,3,-1, 28,3,-1
*EQUATION
3
9,1,1, 7,1,-1, 28,1,-1
*EQUATION
3
9,2,1, 7,2,-1, 28,2,-1
*EQUATION
3
9,3,1, 7,3,-1, 28,3,-1
*EQUATION
3
12,1,1, 10,1,-1, 28,1,-1
*EQUATION
3
12,2,1, 10,2,-1, 28,2,-1
*EQUATION
3
12,3,1, 10,3,-1, 28,3,-1
*EQUATION
3
15,1,1, 13,1,-1, 28,1,-1
*EQUATION
3
15,2,1, 13,2,-1, 28,2,-1
*EQUATION
3
15,3,1, 13,3,-1, 28,3,-1
*EQUATION
3
18,1,1, 16,1,-1, 28,1,-1
*EQUATION
3
18,2,1, 16,2,-1, 28,2,-1
*EQUATION
3
18,3,1, 16,3,-1, 28,3,-1
*EQUATION
3
21,1,1, 19,1,-1, 28,1,-1
*EQUATION
3
21,2,1, 19,2,-1, 28,2,-1
*EQUATION
3
21,3,1, 19,3,-1, 28,3,-1
*EQUATION
3
24,1,1, 22,1,-1, 28,1,-1
*EQUATION
3
24,2,1, 22,2,-1, 28,2,-1
*EQUATION
3
24,3,1, 22,3,-1, 28,3,-1
*EQUATION
3
27,1,1, 25,1,-1, 28,1,-1
*EQUATION
3
27,2,1, 25,2,-1, 28,2,-1
*EQUATION
3
27,3,1, 25,3,-1, 28,3,-1

** EQUATIONS FOR Y-FACES
*EQUATION
3
7,1,1, 1,1,-1, 29,1,-1
*EQUATION
3
7,2,1, 1,2,-1, 29,2,-1
*EQUATION
3
7,3,1, 1,3,-1, 29,3,-1
*EQUATION
3
8,1,1, 2,1,-1, 29,1,-1
*EQUATION
3
8,2,1, 2,2,-1, 29,2,-1
*EQUATION
3
8,3,1, 2,3,-1, 29,3,-1
*EQUATION
3
16,1,1, 10,1,-1, 29,1,-1
*EQUATION
3
16,2,1, 10,2,-1, 29,2,-1
*EQUATION
3
16,3,1, 10,3,-1, 29,3,-1
*EQUATION
3
17,1,1, 11,1,-1, 29,1,-1
*EQUATION
3
17,2,1, 11,2,-1, 29,2,-1
*EQUATION
3
17,3,1, 11,3,-1, 29,3,-1
*EQUATION
3
25,1,1, 19,1,-1, 29,1,-1
*EQUATION
3
25,2,1, 19,2,-1, 29,2,-1
*EQUATION
3
25,3,1, 19,3,-1, 29,3,-1
*EQUATION
3
26,1,1, 20,1,-1, 29,1,-1
*EQUATION
3
26,2,1, 20,2,-1, 29,2,-1
*EQUATION
3
26,3,1, 20,3,-1, 29,3,-1

** EQUATIONS FOR Z-FACES
*EQUATION
3
19,1,1, 1,1,-1, 30,1,-1
*EQUATION
3
19,2,1, 1,2,-1, 30,2,-1
*EQUATION
3
19,3,1, 1,3,-1, 30,3,-1
*EQUATION
3
20,1,1, 2,1,-1, 30,1,-1
*EQUATION
3
20,2,1, 2,2,-1, 30,2,-1
*EQUATION
3
20,3,1, 2,3,-1, 30,3,-1
*EQUATION
3
22,1,1, 4,1,-1, 30,1,-1
*EQUATION
3
22,2,1, 4,2,-1, 30,2,-1
*EQUATION
3
22,3,1, 4,3,-1, 30,3,-1
*EQUATION
3
23,1,1, 5,1,-1, 30,1,-1
*EQUATION
3
23,2,1, 5,2,-1, 30,2,-1
*EQUATION
3
23,3,1, 5,3,-1, 30,3,-1
*Material, Name=MAT1
*Elastic
100, 0.3
*Solid section, Elset=ELEMENTS_ALL, Material=MAT1
*Step, Nlgeom
*Static
1, 1, 1e-5, 1
*SOLVER,PARDISO
*Output, Frequency=1
*Boundary, op=New
*Boundary
** 1. Prevent rigid body motion by fixing one corner node
CORNER_NODE, 1, 3, 0.0
** 2. Apply a prescribed strain by moving a master node
** Master node 1
STRAIN_NODE1, 1, 1, 0.01
** Master node 2
STRAIN_NODE2, 1, 1, 0.00
STRAIN_NODE2, 2, 2, 0.00
STRAIN_NODE2, 3, 3, 0.00
** Master node 3
STRAIN_NODE3, 1, 1, 0.00
STRAIN_NODE3, 2, 2, 0.00
STRAIN_NODE3, 3, 3, 0.00
*Node print, Nset=FACE_X_MAX,Totals=Only, Global=Yes
RF
*Node file
RF
U
*El file, Output=3D
S
E
*End step

Check this script for brick RVE by Martin Kraska: CalculiX-Examples/Scripts/periodic.py at master · calculix/CalculiX-Examples · GitHub

1 Like

Thank you, that is helpful. So I guess there is no consice way to do this and I do have to generate an *equation commnd for every node pair.