periodic boundary condition peoblems with tetrahedral mesh

General discussion about TexGen.

Moderators: Martin, Developers

Post Reply
Yu_Rider
Posts: 3
Joined: Fri Jun 15, 2018 3:51 am

periodic boundary condition peoblems with tetrahedral mesh

Post by Yu_Rider »

I want to create a RVE mode with tetrahedral mesh and periodic boundary conditions, as shown in the pictures below. When I check the inp files, numbers of nodes in the corresponding faces and lines are not equal, so the periodic boundary conditions are not existed. So could please tell me how to solve this problem?
Attachments
RVE.png
RVE.png (174.81 KiB) Viewed 8537 times
louisepb
Project Leader
Posts: 998
Joined: Tue Dec 08, 2009 2:27 pm
Location: Nottingham

Re: periodic boundary condition peoblems with tetrahedral me

Post by louisepb »

Hi,

Have you checked that your domain is correct and that the sections through your model match on the domain faces? In some cases, depending on the model, the algorithm is unable to generate a periodic mesh. Can you send an example so that I can see what's happening?

Best wishes,
Louise
Yu_Rider
Posts: 3
Joined: Fri Jun 15, 2018 3:51 am

Re: periodic boundary condition peoblems with tetrahedral me

Post by Yu_Rider »

louisepb wrote:Hi,

Have you checked that your domain is correct and that the sections through your model match on the domain faces? In some cases, depending on the model, the algorithm is unable to generate a periodic mesh. Can you send an example so that I can see what's happening?

Best wishes,
Louise
At the beginning, thank you very much for your timely help.

The python code that used to generate the RVE of the composite is listed below.
*******************
Textile = CTextile()

Yarns = [CYarn(),CYarn(),CYarn(),CYarn()]
delta = 0.2085686
Yarns[0].AddNode(CNode(XYZ(delta*0 ,0.8342744+0.001579,-0.000719)))
Yarns[0].AddNode(CNode(XYZ(delta*1 ,0.8342744-0.005413,0.034950 )))
Yarns[0].AddNode(CNode(XYZ(delta*2 ,0.8342744-0.010288,0.056718 )))
Yarns[0].AddNode(CNode(XYZ(delta*3 ,0.8342744-0.002591,0.065968 )))
Yarns[0].AddNode(CNode(XYZ(delta*4 ,0.8342744-0.006163,0.070504 )))
Yarns[0].AddNode(CNode(XYZ(delta*5 ,0.8342744-0.001306,0.066754 )))
Yarns[0].AddNode(CNode(XYZ(delta*6 ,0.8342744-0.002859,0.056200 )))
Yarns[0].AddNode(CNode(XYZ(delta*7 ,0.8342744-0.002966,0.038290 )))
Yarns[0].AddNode(CNode(XYZ(delta*8 ,0.8342744-0.000270,0.012933 )))
Yarns[0].AddNode(CNode(XYZ(delta*9 ,0.8342744+0.001927,-0.011782)))
Yarns[0].AddNode(CNode(XYZ(delta*10,0.8342744+0.006998,-0.036228)))
Yarns[0].AddNode(CNode(XYZ(delta*11,0.8342744-0.000823,-0.055657)))
Yarns[0].AddNode(CNode(XYZ(delta*12,0.8342744+0.002676,-0.066264)))
Yarns[0].AddNode(CNode(XYZ(delta*13,0.8342744+0.006891,-0.071942)))
Yarns[0].AddNode(CNode(XYZ(delta*14,0.8342744+0.005319,-0.066710)))
Yarns[0].AddNode(CNode(XYZ(delta*15,0.8342744+0.004034,-0.056014)))
Yarns[0].AddNode(CNode(XYZ(delta*16,0.8342744+0.001677,-0.036282)))
Yarns[0].AddNode(CNode(XYZ(delta*17,0.8342744+0.001579,-0.000719)))

Yarns[1].AddNode(CNode(XYZ(delta*0 ,2.7113918+0.001579,-0.000719)))
Yarns[1].AddNode(CNode(XYZ(delta*1 ,2.7113918+0.001677,-0.036282)))
Yarns[1].AddNode(CNode(XYZ(delta*2 ,2.7113918+0.004034,-0.056014)))
Yarns[1].AddNode(CNode(XYZ(delta*3 ,2.7113918+0.005319,-0.066710)))
Yarns[1].AddNode(CNode(XYZ(delta*4 ,2.7113918+0.006891,-0.071942)))
Yarns[1].AddNode(CNode(XYZ(delta*5 ,2.7113918+0.002676,-0.066264)))
Yarns[1].AddNode(CNode(XYZ(delta*6 ,2.7113918-0.000823,-0.055657)))
Yarns[1].AddNode(CNode(XYZ(delta*7 ,2.7113918+0.006998,-0.036228)))
Yarns[1].AddNode(CNode(XYZ(delta*8 ,2.7113918+0.001927,-0.011782)))
Yarns[1].AddNode(CNode(XYZ(delta*9 ,2.7113918-0.000270,0.012933 )))
Yarns[1].AddNode(CNode(XYZ(delta*10,2.7113918-0.002966,0.038290 )))
Yarns[1].AddNode(CNode(XYZ(delta*11,2.7113918-0.002859,0.056200 )))
Yarns[1].AddNode(CNode(XYZ(delta*12,2.7113918-0.001306,0.066754 )))
Yarns[1].AddNode(CNode(XYZ(delta*13,2.7113918-0.006163,0.070504 )))
Yarns[1].AddNode(CNode(XYZ(delta*14,2.7113918-0.002591,0.065968 )))
Yarns[1].AddNode(CNode(XYZ(delta*15,2.7113918-0.010288,0.056718 )))
Yarns[1].AddNode(CNode(XYZ(delta*16,2.7113918-0.005413,0.034950 )))
Yarns[1].AddNode(CNode(XYZ(delta*17,2.7113918+0.001579,-0.000719)))

Yarns[2].AddNode(CNode(XYZ(0.8342744+0.000829,delta*0 ,-0.000719)))
Yarns[2].AddNode(CNode(XYZ(0.8342744+0.006998,delta*1 ,-0.036282)))
Yarns[2].AddNode(CNode(XYZ(0.8342744-0.000823,delta*2 ,-0.056014)))
Yarns[2].AddNode(CNode(XYZ(0.8342744+0.002676,delta*3 ,-0.066710)))
Yarns[2].AddNode(CNode(XYZ(0.8342744+0.006891,delta*4 ,-0.071942)))
Yarns[2].AddNode(CNode(XYZ(0.8342744+0.005319,delta*5 ,-0.066264)))
Yarns[2].AddNode(CNode(XYZ(0.8342744+0.004034,delta*6 ,-0.055657)))
Yarns[2].AddNode(CNode(XYZ(0.8342744+0.001677,delta*7 ,-0.036228)))
Yarns[2].AddNode(CNode(XYZ(0.8342744+0.000730,delta*8 ,-0.011782)))
Yarns[2].AddNode(CNode(XYZ(0.8342744+0.002427,delta*9 ,0.012933 )))
Yarns[2].AddNode(CNode(XYZ(0.8342744-0.005413,delta*10,0.038290 )))
Yarns[2].AddNode(CNode(XYZ(0.8342744-0.010288,delta*11,0.056200 )))
Yarns[2].AddNode(CNode(XYZ(0.8342744-0.002591,delta*12,0.066754 )))
Yarns[2].AddNode(CNode(XYZ(0.8342744-0.006163,delta*13,0.070504 )))
Yarns[2].AddNode(CNode(XYZ(0.8342744-0.001306,delta*14,0.065968 )))
Yarns[2].AddNode(CNode(XYZ(0.8342744-0.002859,delta*15,0.056718 )))
Yarns[2].AddNode(CNode(XYZ(0.8342744-0.002966,delta*16,0.034950 )))
Yarns[2].AddNode(CNode(XYZ(0.8342744+0.000829,delta*17,-0.000719)))

Yarns[3].AddNode(CNode(XYZ(2.7113918+0.001579,delta*0 ,-0.000719)))
Yarns[3].AddNode(CNode(XYZ(2.7113918-0.005413,delta*1 ,0.034950 )))
Yarns[3].AddNode(CNode(XYZ(2.7113918-0.010288,delta*2 ,0.056718 )))
Yarns[3].AddNode(CNode(XYZ(2.7113918-0.002591,delta*3 ,0.065968 )))
Yarns[3].AddNode(CNode(XYZ(2.7113918-0.006163,delta*4 ,0.070504 )))
Yarns[3].AddNode(CNode(XYZ(2.7113918-0.001306,delta*5 ,0.066754 )))
Yarns[3].AddNode(CNode(XYZ(2.7113918-0.002859,delta*6 ,0.056200 )))
Yarns[3].AddNode(CNode(XYZ(2.7113918-0.002966,delta*7 ,0.038290 )))
Yarns[3].AddNode(CNode(XYZ(2.7113918-0.000270,delta*8 ,0.012933 )))
Yarns[3].AddNode(CNode(XYZ(2.7113918+0.001927,delta*9 ,-0.011782)))
Yarns[3].AddNode(CNode(XYZ(2.7113918+0.006998,delta*10,-0.036228)))
Yarns[3].AddNode(CNode(XYZ(2.7113918-0.000823,delta*11,-0.055657)))
Yarns[3].AddNode(CNode(XYZ(2.7113918+0.002676,delta*12,-0.066264)))
Yarns[3].AddNode(CNode(XYZ(2.7113918+0.006891,delta*13,-0.071942)))
Yarns[3].AddNode(CNode(XYZ(2.7113918+0.005319,delta*14,-0.066710)))
Yarns[3].AddNode(CNode(XYZ(2.7113918+0.004034,delta*15,-0.056014)))
Yarns[3].AddNode(CNode(XYZ(2.7113918+0.001677,delta*16,-0.036282)))
Yarns[3].AddNode(CNode(XYZ(2.7113918+0.001579,delta*17,-0.000719)))

for Yarn in Yarns:
if Yarn == Yarns[0] or Yarn == Yarns[3]:
Yarn.AssignInterpolation(CInterpolationLinear())
YarnSection = CYarnSectionInterpNode(1, 0, 1)
Section = CSectionEllipse(0.7829025*2, 0.080362*2)
Section = CSectionRotated(Section, -0.216923*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.784817*2, 0.075321*2)
Section = CSectionRotated(Section, -0.097758*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.779567*2, 0.072356*2)
Section = CSectionRotated(Section, -0.231744*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.782061*2, 0.071426*2)
Section = CSectionRotated(Section, -0.223119*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.781471*2, 0.069320*2)
Section = CSectionRotated(Section, -0.289946*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.779083*2, 0.070450*2)
Section = CSectionRotated(Section, -0.276007*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.783953*2, 0.071232*2)
Section = CSectionRotated(Section, -0.083315*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.789217*2, 0.074492*2)
Section = CSectionRotated(Section, -0.090647*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.793654*2, 0.080406*2)
Section = CSectionRotated(Section, 0.028518*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.790705*2, 0.079941*2)
Section = CSectionRotated(Section, 0.052015*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.786330*2, 0.074452*2)
Section = CSectionRotated(Section, 0.044724*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.780351*2, 0.070513*2)
Section = CSectionRotated(Section, -0.081866*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.787712*2, 0.070118*2)
Section = CSectionRotated(Section, -0.107904*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.789320*2, 0.068984*2)
Section = CSectionRotated(Section, -0.166876*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.782074*2, 0.067477*2)
Section = CSectionRotated(Section, -0.296215*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.782956*2, 0.070002*2)
Section = CSectionRotated(Section, -0.132859*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.787867*2, 0.073062*2)
Section = CSectionRotated(Section, -0.261218*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.7829025*2, 0.080362*2)
Section = CSectionRotated(Section, -0.216923*3.1415926/180)
YarnSection.AddSection(Section)
Yarn.AssignSection(YarnSection)
Yarn.SetResolution(20)
Yarn.AddRepeat(XYZ(delta*35,0,0))
Yarn.AddRepeat(XYZ(0,delta*35,0))
Yarn.SetYoungsModulusX(202547.036, 'MPa')
Yarn.SetYoungsModulusY(11366.203, 'MPa')
Yarn.SetYoungsModulusZ(11366.203, 'MPa')
Yarn.SetShearModulusXY(6351.450, 'MPa')
Yarn.SetShearModulusXZ(6351.450, 'MPa')
Yarn.SetShearModulusYZ(4048.035, 'MPa')
Yarn.SetPoissonsRatioX(0.404)
Yarn.SetPoissonsRatioY(0.21452)
Yarn.SetPoissonsRatioZ(0.21452)
Yarn.SetAlphaX(-2e-007, '/K')
Yarn.SetAlphaY(3e-006, '/K')
Yarn.SetAlphaZ(3e-006, '/K')
Textile.AddYarn(Yarn)
else:
Yarn.AssignInterpolation(CInterpolationLinear())
YarnSection = CYarnSectionInterpNode(1, 0, 1)
Section = CSectionEllipse(0.7921795*2, 0.0801735*2)
Section = CSectionRotated(Section, -0.216923*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.786330*2, 0.074452*2)
Section = CSectionRotated(Section, -0.261218*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.780351*2, 0.070513*2)
Section = CSectionRotated(Section, -0.132859*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.787712*2, 0.070118*2)
Section = CSectionRotated(Section, -0.296215*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.789320*2, 0.068984*2)
Section = CSectionRotated(Section, -0.166876*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.782074*2, 0.067477*2)
Section = CSectionRotated(Section, -0.107904*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.782956*2, 0.070002*2)
Section = CSectionRotated(Section, -0.081866*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.787867*2, 0.073062*2)
Section = CSectionRotated(Section, 0.044724*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.781868*2, 0.079465*2)
Section = CSectionRotated(Section, 0.052015*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.783937*2, 0.081259*2)
Section = CSectionRotated(Section, 0.028518*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.784817*2, 0.075321*2)
Section = CSectionRotated(Section, -0.090647*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.779567*2, 0.072356*2)
Section = CSectionRotated(Section, -0.083315*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.782061*2, 0.071426*2)
Section = CSectionRotated(Section, -0.276007*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.781471*2, 0.069320*2)
Section = CSectionRotated(Section, -0.289946*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.779083*2, 0.070450*2)
Section = CSectionRotated(Section, -0.223119*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.783953*2, 0.071232*2)
Section = CSectionRotated(Section, -0.231744*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.789217*2, 0.074492*2)
Section = CSectionRotated(Section, -0.097758*3.1415926/180)
YarnSection.AddSection(Section)
Section = CSectionEllipse(0.7921795*2, 0.0801735*2)
Section = CSectionRotated(Section, -0.216923*3.1415926/180)
YarnSection.AddSection(Section)
Yarn.AssignSection(YarnSection)
Yarn.SetResolution(20)
Yarn.AddRepeat(XYZ(delta*35,0,0))
Yarn.AddRepeat(XYZ(0,delta*35,0))
Yarn.SetYoungsModulusX(202547.036, 'MPa')
Yarn.SetYoungsModulusY(11366.203, 'MPa')
Yarn.SetYoungsModulusZ(11366.203, 'MPa')
Yarn.SetShearModulusXY(6351.450, 'MPa')
Yarn.SetShearModulusXZ(6351.450, 'MPa')
Yarn.SetShearModulusYZ(4048.035, 'MPa')
Yarn.SetPoissonsRatioX(0.404)
Yarn.SetPoissonsRatioY(0.21452)
Yarn.SetPoissonsRatioZ(0.21452)
Yarn.SetAlphaX(-2e-007, '/K')
Yarn.SetAlphaY(3e-006, '/K')
Yarn.SetAlphaZ(3e-006, '/K')
Textile.AddYarn(Yarn)
Textile.SetMatrixYoungsModulus(3116, 'MPa')
Textile.SetMatrixPoissonsRatio(0.32)
Textile.SetMatrixAlpha(6.5e-006)

Textile.AssignDomain(CDomainPlanes(XYZ(0,0,-0.140927),XYZ(delta*17,delta*17,0.139825)))

AddTextile("C-Epoxy-TrueModel-Modified-LinearInterpolate",Textile)
*****************************
Then I exported the volume mesh of the RVE model, and used Abaqus to read the inp file. The result is listed in the picture below: There are only two faces in sets. The other 4 faces are missing. All the edges are missing too.
Attachments
Abaqus.jpg
Abaqus.jpg (212.35 KiB) Viewed 8531 times
louisepb
Project Leader
Posts: 998
Joined: Tue Dec 08, 2009 2:27 pm
Location: Nottingham

Re: periodic boundary condition peoblems with tetrahedral me

Post by louisepb »

Hi,

I think the issue is that your repeats don't match your domain and therefore your textile isn't periodic. I increased the size of the domain and you can see below that the repeat is far larger than the length of the yarns specified which means that there isn't continuity. Because of this the two surfaces on opposite sides of the domain don't match and TexGen can't generate periodic boundary conditions. It has generated faces E and F because these are the top and bottom surfaces which are all matrix and therefore match.
YuRider.png
YuRider.png (226.63 KiB) Viewed 8529 times
You need to make your repeat such that it matches the distance between the ends of your yarns and then, as long as the domain matches this, it should be able to create matching boundaries.

Hope that helps,
Louise
Yu_Rider
Posts: 3
Joined: Fri Jun 15, 2018 3:51 am

Re: periodic boundary condition peoblems with tetrahedral me

Post by Yu_Rider »

Thank you for your effective help, Louise!
According to you advice, I have solve the problem above, and got the tetrahedral mesh with periodical boundary conditions (PBC). The solution is to change the code
“Yarn.AddRepeat(XYZ(delta*35,0,0))
Yarn.AddRepeat(XYZ(0,delta*35,0))”
into
“Yarn.AddRepeat(XYZ(delta*17,0,0))
Yarn.AddRepeat(XYZ(0,delta*17,0))”.
Because we added 17segments in each yarn above.

The tetrahedral mesh is closer to the real geometrical shape than hexahedral mesh. But when I compare the simulation results between the two meshes, the stress distributions of matrix in hexahedral mesh accords with PBC, while those of tetrahedral mesh doesn’t accord with the PBC. And there are obvious stress concentration in the tetrahedral mesh, for example in the edges of matrix and yarn. The biggest Mises Stress of tetrahedral mesh (2.377E7) is 5.6 times of that of hexahedral mesh (4.271E6). Did you ever meet the same problem?

Xiuwei Yu
Attachments
MeshComparison.jpg
MeshComparison.jpg (251.17 KiB) Viewed 8521 times
louisepb
Project Leader
Posts: 998
Joined: Tue Dec 08, 2009 2:27 pm
Location: Nottingham

Re: periodic boundary condition peoblems with tetrahedral me

Post by louisepb »

Hi Xiuwei Yu,

it's difficult to see from the images what is going on. It could be that there are some distorted elements which are affecting things. You could try a quadratic mesh which might behave better.
It's difficult to see the circled area clearly. If the red portion is on the front face then it's possible that this would, in fact, be replicated on the next repeat of the unit cell. Are you sure that your boundary conditions are set up correctly?

Best regards,
Louise
Post Reply