Yarn dimensions, porosity of a 3D Orthongal weave? (aerospace application)

General discussion about TexGen.

Moderators: Martin, Developers

Post Reply
dreamchaser4180
Posts: 7
Joined: Tue Jan 09, 2024 8:14 pm

Yarn dimensions, porosity of a 3D Orthongal weave? (aerospace application)

Post by dreamchaser4180 »

Hello,

I am a graduate student from the aerospace engineering department. I apologize in advance for my lack of knowledge in the area of materials.
For aerospace applications, there is interest in using 3D woven composite materials to protect the outside of the vehicle/spacecraft.

I want to try to simulate flow over a representative 3D Orthogonal weave material. As a start, I used the Orthogonal.py
script to generate a basic 3D weave geometry. I just wanted to get some input on the yarn widths, binder widths, and some of the spacing to make sure it is representative of a real 3D woven geometry. I need to understand the dimensions since my simulation domain will depend on it.

I understand that the yarns are maybe made of ~1000 carbon fibers which are about 5 microns in diameter. What is the size of the pore space (or void space) for a 3D weave composite? What about the value of the porosity? By porosity I mean the (volume of pore space)/(total volume)?

An example script I am using for my domain is below. Are you able to tell me if the dimensions for the yarns,binders, etc being used is reasonable and makes sense?

I appreciate any insight and feedback,

Code: Select all

[binder only has two options, either at the top or the bottom
Textile = CTextileOrthogonal( 3, 3, 1.0, 0.10, 0.10, 0.10, False)

#The default units are mm.
# Set the ratio of warp/binder yarns
Textile.SetWarpRatio( 1 )
Textile.SetBinderRatio( 1 )
#changing these numbers will make the weave thicker in the z-direction 
NumWarpLayers=2
NumWeftLayers=3
Textile.SetupLayers(NumWarpLayers,NumWeftLayers)

Textile.SetWarpYarnWidths( 0.5 )
#thickness 
Textile.SetWarpYarnHeights( 0.10 )
#guessing that (WarpYarnSpacing-WarpYarnWidths >= 
Textile.SetWarpYarnSpacings( 0.50 )

#thickness of the binder (look in y-z plane)
Textile.SetBinderYarnWidths( 0.25 )
#thickness of the binder (look in the z-x plane)
Textile.SetBinderYarnHeights( 0.05 )
Textile.SetBinderYarnSpacings( 0.25 )

# Weft yarns, perpendicular to the x -axis 
Textile.SetYYarnWidths(0.50)
#the difference (YYarnSpacing - YYarnWidths >= BinderYarnHeight)
Textile.SetYYarnSpacings(0.55)

# Set the power of the power ellipses used
Textile.SetWarpYarnPower(0.6)
Textile.SetWeftYarnPower(0.6)
Textile.SetBinderYarnPower(0.8)


Textile.SwapBinderPosition( 0,1)
Textile.SwapBinderPosition( 2,1)


# Create a default domain to fit the textile
Textile.AssignDefaultDomain()

# Add the textile
AddTextile(Textile)
louisepb
Project Leader
Posts: 998
Joined: Tue Dec 08, 2009 2:27 pm
Location: Nottingham

Re: Yarn dimensions, porosity of a 3D Orthongal weave? (aerospace application)

Post by louisepb »

Hi,

You will need to use the data sheet and/or any samples of the fabric to get the yarn dimensions to put into your model. To generate the volume fraction information (ie to take into account the porosity) you need to put the fibre information into the yarn properties. You can either set them in your script (as described in the scripting guide) or use the GUI as described here: https://texgen.sourceforge.io/index.php ... Properties

I hope that helps,
Louise
dreamchaser4180
Posts: 7
Joined: Tue Jan 09, 2024 8:14 pm

Re: Yarn dimensions, porosity of a 3D Orthongal weave? (aerospace application)

Post by dreamchaser4180 »

Hi Louise,

Thanks for the information. To clarify, what do you mean by 'data sheet'? I will try to see if literature has any of these values for the particular model I am trying to make. I guess I was thinking there was some standard set dimensions I could have started with for a 3D Orthogonal weave?

another question, I understand the yarns are actually made of ~ 1000 carbon fibers with a diameter of ~ 10 microns. In Texgen, can you actually generate
the individual filaments or carbon-fibers of the yarn? Is that possible using the python script? Right now the script just generates the yarn.

How do you create a corresponding matrix for the 3D Orthogonal weave? Can you use the same python script?

Thanks for your insight,
louisepb
Project Leader
Posts: 998
Joined: Tue Dec 08, 2009 2:27 pm
Location: Nottingham

Re: Yarn dimensions, porosity of a 3D Orthongal weave? (aerospace application)

Post by louisepb »

Hi,
By data sheet I meant that of the tow. Presumably there is some data about the material that you are using.

TexGen models the yarn as a solid but the information about the number of fibres and their diameter is used to calculate the area of fibre in any given cross section and hence to calculate the volume fraction in the yarn. This is calculated and exported in the .eld file when one of the Abaqus export types are used. For a constant cross-section the Vf will be constant along the yarn. If the cross-section varied along the yarn then the Vf will vary accordingly. As I said in the previous answer, use the yarn properties to input this data (either from the GUI or a script).

For any textile the domain outline is taken to be the area occupied by the matrix. For any export, the domain is the area that will be used. Any elements created within the yarns are in the yarn element set and any in the remaining area of the domain will be in the matrix element set.
Best wishes,
Louise
dreamchaser4180
Posts: 7
Joined: Tue Jan 09, 2024 8:14 pm

Re: Yarn dimensions, porosity of a 3D Orthongal weave? (aerospace application)

Post by dreamchaser4180 »

Hi Louise,

Thanks so much for your response, I found some data for the yarn data and will implement them soon. In making this TexGen model, which I will do flow simulations over it, (I will not be doing finite element analysis to examine its material properties), replicating the volume fraction and hence the porosity of the whole textile will be most important.

For now, I'm just trying to make sure I understand how to get a volume fraction of the yarn and of the whole textile using my python script where I am using the CTextileOrthogonal Class. All yarns (weft and warp) will have the same volume fraction for now.

I understand that I need certain properties in order for TexGen to compute a volume fraction.
I added the code below to my 3D orthogonal python script (this was from a tutorial script).

Code: Select all

# Set fibre properties
Textile.SetFibreDiameter( WARP, 0.007, "mm" )
Textile.SetFibreDiameter( WEFT, 0.007, "mm" )
Textile.SetFibreDiameter( BINDER, 0.007, "mm" )
Textile.SetFibresPerYarn( WARP, 5000 )
Textile.SetFibresPerYarn( WEFT, 8000 )
Textile.SetFibresPerYarn( BINDER, 3500 )
Now for setting the yarn linear density, what is the command for the python script?
All yarns (weft and warp and binder) will have the same linear density for now
I'm not using the correct syntax when I"m setting the yarn linear density since I"m getting 'YarnVector' object has no attribute 'SetLinearDensity'
I understand I need to loop through the yarns.

Code: Select all

Yarns=Textile.GetYarns()
for i in range(len(Yarns)):
    Yarns.SetLinearDensity(1400, 'MPa')
    
 VF=Textile.GetFibreYarnVolumeFraction()
print("Yarn Volume fraction for entire textile: ", VF)
I appreciate your insight and time,
dreamchaser4180
Posts: 7
Joined: Tue Jan 09, 2024 8:14 pm

Re: Yarn dimensions, porosity of a 3D Orthongal weave? (aerospace application)

Post by dreamchaser4180 »

Hi Louise,

To clarify, From reading the forum, I thought I could just set the fiber diameter and the number of fibers and get a volume fraction? Is this correct?
However, doing the code below in my python script, I get a message that "There is no yarn linear density specified"?

I do also know the fiber density. However, the yarn linear density I"m just not sure where to get that information.

Code: Select all

# Set fibre properties
Textile.SetFibreDiameter( WARP, 0.007, "mm" )
Textile.SetFibreDiameter( WEFT, 0.007, "mm" )
Textile.SetFibreDiameter( BINDER, 0.007, "mm" )
Textile.SetFibresPerYarn( WARP, 5000 )
Textile.SetFibresPerYarn( WEFT, 8000 )
Textile.SetFibresPerYarn( BINDER, 3500 )
VF=Textile.GetFibreYarnVolumeFraction()
print("Yarn Volume fraction for entire textile: ", VF)
Thanks for any insight,
louisepb
Project Leader
Posts: 998
Joined: Tue Dec 08, 2009 2:27 pm
Location: Nottingham

Re: Yarn dimensions, porosity of a 3D Orthongal weave? (aerospace application)

Post by louisepb »

Hi,
Setting up the fibre diameter and number of fibres should be sufficient. Would it be possible to share your whole script and then I can see if I can work out what the problem is?
Best wishes,
Louise
dreamchaser4180
Posts: 7
Joined: Tue Jan 09, 2024 8:14 pm

Re: Yarn dimensions, porosity of a 3D Orthongal weave? (aerospace application)

Post by dreamchaser4180 »

Hi Louise,

The code is below. Its basically the 3dOrthogonalRefined.py taken from the example scripts.
I figured I should try to get a volume fraction calculated from this example script.

BTW I'm using the NASA PuMA code which calls TexGen.

Code: Select all

import numpy as np
import pumapy as puma
import os
#import pyvista as pv



# The objective of this notebook is to familiarize new users with the main datastructures that stand at the basis of the
# PuMA project, and outline the functions to compute material properties (please refer to these papers
# ([1](https://www.sciencedirect.com/science/article/pii/S2352711018300281),
# [2](https://www.sciencedirect.com/science/article/pii/S235271102100090X)) for more details on the software).

notebook = False  # when running locally, actually open pyvista window
export_path = "out"  # CHANGE THIS PATH
if not os.path.exists(export_path):
    os.makedirs(export_path)



# Python 3 version used runpy module to execute scripts from TexGen GUI which requires import of library
from TexGen.Core import *

# =============================================================================
# TexGen: Geometric textile modeller.
# Copyright (C) 2015 Louise Brown
# =============================================================================

Textile = CTextileOrthogonal( 6, 4, 1.0,1.0, 0.35, 0.25, False)

# Set the ratio of warp/binder yarns
Textile.SetWarpRatio( 2 )
Textile.SetBinderRatio( 1 )


# Add yarn layers.  There must always be one NoYarn layer and one Bindery layer
Textile.AddNoYarnLayer()
Textile.AddYLayers()
Textile.AddWarpLayer()
Textile.AddYLayers()
Textile.AddWarpLayer()
Textile.AddYLayers()
Textile.AddBinderLayer()

#using tow width and thickness for warp and weft yarns from Lincoln's paper "Mesoscale simulation of woven composite design decisions"
# Adjust the yarn widths, heights and spacings
Textile.SetWarpYarnWidths( 3.6 )
#thickness 
Textile.SetWarpYarnHeights( 0.35 )
#guessing that (WarpYarnSpacing-WarpYarnWidths >= 
Textile.SetWarpYarnSpacings( 3.8 )

#thickness of the binder (look in y-z plane)
Textile.SetBinderYarnWidths( 1.375 )
#thickness of the binder (look in the z-x plane)
Textile.SetBinderYarnHeights( 0.16 )
Textile.SetBinderYarnSpacings(1.4 )

# Weft yarns, perpendicular to the x -axis 
Textile.SetYYarnWidths(2.58)
#the difference (YYarnSpacing - YYarnWidths >= BinderYarnHeight)
Textile.SetYYarnSpacings(2.8)

# Set the power of the power ellipses used
Textile.SetWarpYarnPower(0.6)
Textile.SetWeftYarnPower(0.6)
Textile.SetBinderYarnPower(0.8)

Textile.SwapBinderPosition( 0,2)
Textile.SwapBinderPosition( 2,2)
Textile.SwapBinderPosition( 1,5)
Textile.SwapBinderPosition( 3,5)



# Create a default domain to fit the textile
Textile.AssignDefaultDomain()

# Set fibre properties
Textile.SetFibreDiameter( WARP, 0.007, "mm" )
Textile.SetFibreDiameter( WEFT, 0.007, "mm" )
Textile.SetFibreDiameter( BINDER, 0.007, "mm" )
Textile.SetFibresPerYarn( WARP, 5000 )
Textile.SetFibresPerYarn( WEFT, 8000 )
Textile.SetFibresPerYarn( BINDER, 3500 )
# Set the target thickness for the refined textile
Textile.SetThickness(1.4)


VF=Textile.GetFibreYarnVolumeFraction()
print("Yarn Volume fraction for entire textile: ", VF)
#

# Add the textile
AddTextile(Textile)


textile=GetTextile()
#the surface mesh is generated by creating a CMesh object
mesh=CMesh() 
#the TrimDomain is set to specify whether or not the yarms are trimmed to the domain dimensions. If not the mesh, 
#is generated for the entire yarns. 
TrimDomain=True 
#The AddSurfaceToMesh function is used to create the surface mesh for the yarns in the textile and store the nodes and elements in the mesh object
textile.AddSurfaceToMesh(mesh,TrimDomain)
# The outline of the domain can also be added to the mesh 
#mesh.InsertMesh(textile.GetDomain().GetMesh())



#if true, STL file will be a binary
mesh.SaveToSTL("weave.stl",True)
#mesh.SaveToVTK("ortho-weave.vtu")

Domain = Textile.GetDefaultDomain()
Min = XYZ()
Max = XYZ()



Thanks for any insight
louisepb
Project Leader
Posts: 998
Joined: Tue Dec 08, 2009 2:27 pm
Location: Nottingham

Re: Yarn dimensions, porosity of a 3D Orthongal weave? (aerospace application)

Post by louisepb »

Hi,
It took me a while to track this down!
It seems that the function which CTextile::GetFibreYarnVolumeFraction() calls to calculate the Vf of the individual yarns wasn't set up to use the number of fibres and their diameter. I've fixed this now and the code is on Github so you can access it if you've built the TexGen code. If not, that won't help until the next release.
In the meantime there are a couple of options which might help: You can call the GetFibreYarnVolumeFraction function directly for each yarn which will then use a version which works with the data you've entered. Something like this:

Code: Select all

NumYarns = Textile.GetNumYarns()
for i in range(NumYarns) :
    yarnVF = Textile.GetYarn(i).GetFibreYarnVolumeFraction()
    print("Yarn volume fraction = ", yarnVF)
You would then need to work out how you use that information.
If you're working with a composite and are using the domain as the matrix region then you can get the Vf for the whole domain:

Code: Select all

DomainVF = Textile.GetQuickDomainVolumeFraction()
print("Domain Volume fraction : ", DomainVF)
I hope that's useful.
Best wishes,
Louise
dreamchaser4180
Posts: 7
Joined: Tue Jan 09, 2024 8:14 pm

Re: Yarn dimensions, porosity of a 3D Orthongal weave? (aerospace application)

Post by dreamchaser4180 »

Hi Louise,

Thanks so much for taking the time to catch that bug!! I really appreciate your time.
I can see the changes on github. I will take some time and see if I am able to rebuild the TexGen code.

I want to make sure I understand how the porosity (the total void space) works for a composite.
I'm thinking that one way to verify that the weave geometry from Texgen is representative of an actual aerospace material
is to match up the tow dimensions, binder width etc. and also match the porosity with the material specification from the literature.

I am making a dry weave (no matrix) to do flow simulations, so the total void space would be the space in the domain excluding the warp,weft, and binder yarns. In this case, the porosity would be: 1 - (Volume fraction of all yarns)
Does this make sense?

Is there a way to get the volume fraction of all of the yarns? Is that what the code below does?
Sorry for my misunderstanding.

Code: Select all

DomainVF = Textile.GetQuickDomainVolumeFraction()
print("Domain Volume fraction : ", DomainVF)
louisepb
Project Leader
Posts: 998
Joined: Tue Dec 08, 2009 2:27 pm
Location: Nottingham

Re: Yarn dimensions, porosity of a 3D Orthongal weave? (aerospace application)

Post by louisepb »

Hi,
The domain volume fraction function gives the Vf for the whole domain area, taking into account the Vf in the yarns. If the yarns were solid (ie the yarn Vf is 1) then the domain Vf would be the yarn volume/domain volume. If the yarn is porous (ie the yarn Vf < 1) then it's the yarn fibre volume/domain volume. The function uses the fibre information to calculate the fibre volume in the yarns. Does that make sense?

You can find the functions in Textile.cpp and Yarn.cpp in the Core folder if looking at the code would help you to understand what's being done.

Best wishes,
Louise
dreamchaser4180
Posts: 7
Joined: Tue Jan 09, 2024 8:14 pm

Re: Yarn dimensions, porosity of a 3D Orthongal weave? (aerospace application)

Post by dreamchaser4180 »

Okay, to clarify I understand you can make the yarns porous (Yarn_VF < 1), but in the end when TexGen exports its stl file,
only the whole yarn is modeled. For example, TexGen does not model the individual fibers in each yarn. So to clarify, what is the purpose
of modeling the yarns as porous in TexGen when in the end only the whole yarns are exported?

How do I make all of my yarns solid in the python script? e.g. Yarn_VF = 1.
Then in this case the domain Vf would be (Yarn_VOLUME/Domain_VOLUME) as you stated.
And then the porosity or the amount of void space would be (1-Vf).

Thanks for any insight!
louisepb
Project Leader
Posts: 998
Joined: Tue Dec 08, 2009 2:27 pm
Location: Nottingham

Re: Yarn dimensions, porosity of a 3D Orthongal weave? (aerospace application)

Post by louisepb »

Hi,
Many apologies for the slow reply - I thought I'd sent one and then realised that I hadn't hit send so had lost it.
If you export an stl file all you have is the geometry, there is no information included about volume fraction or orientations.
When export either an Abaqus .inp file or a .vtu file then the volume fraction information is exported for each element. In TexGen the yarn is modelled as the whole yarn but then your simulation can make use of the Vf information for individual elements within that yarn to account for the porosity. If the yarn has a constant cross-section then the Vf will be the same throughout the yarn. If the cross-section changes along the length then the Vf will change along the length of the yarn.
The Vf is calculated from the yarn properties so making the Total Fibre Area the same as the yarn cross-sectional area should result in a Vf of 1.

Best wishes,
Louise
Post Reply