# Periodic boundary conditions

**URL:** <https://calculix.discourse.group/t/periodic-boundary-conditions/2828>\
**Category:** Model setup\
**Created:** [July 27, 2025, 8:28pm UTC](https://calculix.discourse.group/t/periodic-boundary-conditions/2828 "2025-07-27T20:28:51Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Basem](https://avatars.discourse-cdn.com/v4/letter/b/6bbea6/32.png) [@Basem](https://calculix.discourse.group/u/Basem)\
**Post date:** [July 27, 2025, 8:28pm UTC](https://calculix.discourse.group/t/periodic-boundary-conditions/2828/1 "2025-07-27T20:28:51Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Calc\_em](https://avatars.discourse-cdn.com/v4/letter/c/43a26b/32.png) [@Calc\_em](https://calculix.discourse.group/u/Calc_em)\
**Post date:** [July 28, 2025, 6:46am UTC](https://calculix.discourse.group/t/periodic-boundary-conditions/2828/2 "2025-07-28T06:46:02Z")

</div>

Check this script for brick RVE by Martin Kraska: [CalculiX-Examples/Scripts/periodic.py at master · calculix/CalculiX-Examples · GitHub](https://github.com/calculix/CalculiX-Examples/blob/master/Scripts/periodic.py)

---

<div class="post-metadata">

**Author:** ![Basem](https://avatars.discourse-cdn.com/v4/letter/b/6bbea6/32.png) [@Basem](https://calculix.discourse.group/u/Basem)\
**Post date:** [July 28, 2025, 8:58am UTC](https://calculix.discourse.group/t/periodic-boundary-conditions/2828/3 "2025-07-28T08:58:17Z")

</div>

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.
