# Virtual Material Model (VMM)¶

## Introduction¶

The basic problem with laminated cones is the change of the local fiber angle due to the plane ply parts and the curved cone surface. Because of the curved surface the fibers are lying on the geodesic path, see Figure 1. There are two different fiber angles and at the positions and . The variable s is part of the conical coordinate system. Goldfeld [goldfeld2007] describes the local fiber angle as a function of s:

This approach is only valid for the path of a single fiber. A new approach is to describe the local fiber angle by the difference between the angle of the point of interest and the angle of the starting point of the ply part:

This approach can be used for ply parts with a finite width and is the key formula for this program.

The objective of this tool is to calculate the local fiber angle and thickness of any given point on a laminated cone. To do this the laminate will be rebuilt as a virtual model. Each ply (i) consists of a finite number of pieces (j) with a certain ply angle and offset angle . These are called ply pieces. After building the model, another algorithm determines in which ply piece(s) a given point lies and calculates the local fiber angles and thickness.

This manual is supposed to explain the VMM. The corresponding code is located
in `desicos.cppot.core`

. This material model is used by both the
Abaqus-plugin (`desicos.abaqus.imperfections.ppi.PPI`

)
and in the separate Cone Ply Piece Optimization Tool (CPPOT).

## Coordinate systems¶

This program works with several different coordinate systems:

**3D-Cartesian**: Used for the model generation in ABAQUS

**3D-cylindrical**: This often allows considerable simplification in axisymmetric cases, such as cones. Note that the symbol is used here for the circumferential coordinate instead of , because the latter will be used for the fiber angle.

The coordinate transformation between Cartesian and cylindrical coordinates and vice versa is done as follows:

**Unfolded coordinates**

The cone surface is a two-dimensional surface within the three-dimensional space. Points on the cone have to satisfy the following equation:

Points that satisfy this equation can be described using a two-dimensional coordinate system. For this purpose, an imaginary cut is made through the cone at , see the above figure. The apex of the cone is placed at the origin of the new coordinate system. The edge in the direction (right edge in the figure) is mapped to the horizontal axis. This results in the layout shown below:

These unfolded coordinates can be described using two coordinate systems:

**2D-polar**: This is the most natural description:

The relation between the 2D-polar coordinates and 3D-cylindrical coordinates is as follows, valid only for points on the cone surface:

Using the above coordinate transformation, the maximum value for the -coordinate (labeled ) can be calculated, as well as the radial limits and :

**2D-Cartesian**: Used for geometrical operations on the unfolded cone (defining lines, calculating intersection points, …):

The transformation rules are fairly straightforward:

**Laminate coordinates**To describe the orientation of fibers and plies, a laminate coordinate system is used in Abaqus, as is shown in the figure below. This is a local coordinate system that defines three directions at each point on the cone. The 1-direction is obtained by projecting the z-axis onto the cone surface, i.e. it is always pointing towards the apex of the cone. The n-direction is normal to the surface and always pointing outward. The 2-direction is obtained by rotating the 1-direction around the normal vector, using the right-hand rule. The angle is used to define the orientation of a fiber or ply. It is defined as being 0 for fibers parallel to the 1-direction and increases when rotating from the 1- to 2-direction, as shown in the figure.

## Detailed cone geometry¶

The cone geometry used in the DESICOS project is slightly more complex than the elementary truncated cone discussed in the previous chapter. Apart from the free cone area, additional support parts are present along both edges, as shown in the figure below. The support areas will be partially cut away (to obtain straight, clean edges) after laminating and the rest will be molded in resin. These areas do need to be considered when discussing the ply placement process, however.

Translating this geometry to the unfolded cone results in the figure below. There are four relevant radii, labelled s1 to s4. These correspond to the edges numbered 1 to 4 in figure 6. The total area between the dotted arcs (s1 and s4) will need to be covered with ply pieces. However, only the area between the solid arcs (s2 and s3) will be relevant when determining the local fiber orientation at a later stage.

In the code, the geometry of the cone is encapsulated in the
`desicos.cppot.core.geom.ConeGeometry`

class. This class is constructed
based on a few input parameters, listed below. All other parameters
(`s1`

.. `s4`

, `rtop`

, …) are then easily retrieved upon request.

The bottom radius of the free cone (400 mm in figure 6)

The semi-vertex angle ( in figure 6)

The free cone height (300 mm in figure 6)

The support height

`extra_height`

(70 mm in figure 6)

## Building the Ply model¶

The VMM is the virtual model of the lay-up of the laminated cone. Every ply consists of a finite number of pieces. Between the parts are no gaps, depending on the ply piece geometry there may be overlaps. In the Abaqus-plugin only one type of ply piece is available:

Type A: Trapezoidal ply pieces without overlaps

Two additional shapes are accessible through the CPPOT-program:

Type B: Trapezoidal ply pieces with one overlap

Type C: Rectangular ply pieces with many overlaps.

In this document, only shape A will be discussed, because it is the only one that has actually been used in the manufacturing of cones.

The basic process flow for building the model for a single ply is:

Construct a prototype piece

Copy and rotate the prototype piece to fill the entire cone

Calculate the local fiber orientation at the desired points

The three numbered steps will now be discussed sequentially:

## 1. Constructing the prototype piece¶

The construction of a single ply piece will now be described step-by-step.
Objective is mainly to describe the procedure, not to bother the reader with
implementation details (e.g. “How to find the intersection of two lines?”). For
the latter, consult the relevant pieces of code. The implementation of the
procedure described here is contained in the method
`desicos.cppot.core.ply_model.TrapezPlyPieceModel.construct_single_ply_piece()`

.

The constructed ply pieces will be trapezoidal in shape, as shown in the figure below. These trapezoidal pieces will be constructed such the angle that is spanned or “covered” by each ply piece is a constant , independent of . This property is important to allow covering the entire cone with similarly-shaped pieces, without having gaps or overlaps.

**Step 1: Origin line `L_0`**

The first step is to construct the *origin line* . All fibers in the ply
piece will be parallel to this line. It is defined based on three parameters:

The nominal fiber angle , which is the same for all ply pieces in a ply.

The nominal ply piece angle . Note that this is a property of the individual ply piece, not a property of the ply.

The starting position , which is the radius at which (at the nominal ply piece angle ) the actual fiber angle equals the nominal fiber angle.

The line is then defined as the line going through the point at an angle () with respect to the -axis. See figure 9:

**Step 2: Base line `L_2`**

The *base line* is the line along which the width of the ply piece will
be measured. is defined as the line perpendicular to and tangent to
the circle with radius . Point is then defined as the intersection
point of and . See Figure 10:

**Step 3: Corners at outer edge**

The outer edge of the polygon is formed by the line . The position of the corner points and along this line is determined by two parameters:

The maximum ply piece width is equal to the distance between the two points and .

The

*eccentricity parameter*(also known as*width variation*) determines the placement of the two points relative to . is defined as the distance from to , divided by . So for , and coincide and for , and coincide.

This is also shown in figure 11. So is defined as the point on at a distance () from , while is defined as the point on at a distance () from . For completeness, it should be mentioned that is to be placed in the counter-clockwise direction relative to and in the clockwise direction relative to , as is evident in the figure below.

**Step 4: Calculating the spanned angle**

Now it is necessary to calculate the angle that is spanned by the ply piece. This angle is determined by the position of points and . However, it would be wrong to take the angular coordinates of and and subtract them (), because the radii and of these points are not the same.

Therefore, the points and are constructed first. Point is defined as the point lying on at a distance from the origin. Now the two constituent parts of can be calculated. One part is the difference in angular coordinate between and , the other between and . This is shown more clearly in figure 12 below.

**Step 5: Constructing the side lines**

Now the side lines and can be constructed by rotating around the origin. is constructed by rotating counter-clockwise with angle , is constructed by rotating clockwise around angle .The intersection point between and circle is denoted as , the intersection point between and circle is denoted as . All of this is shown in figure 13:

**Step 6: Corners at the inner edge**

Now the inner edge of the polygon is to be defined. First, it is examined which point is further from , either or . See figure 14, in the shown example case the point is the furthest from . The line is then defined to be parallel to and through this furthest point. Then points and are defined as the intersection points of with, respectively, and .

There is a special case, which is shown in figure 15. Namely, for some combinations of parameters, the previous procedure may lead to polygons (, , , ) that are self-intersecting. In this case, both and are defined to be equal to the intersection point of and and the ply piece becomes a triangle. This results in some very small areas along circle being not covered with any ply piece. This is deemed acceptable, because the area between and is not relevant for the finite element model.

In the normal case of figure 14, where the polygon is not self-intersecting, the final locations of and are equal to and , respectively.

**Step 7: Final ply piece**

The final shape of the ply piece is shown in figure 16 below. Its shape is defined by the four corner points . On the circle with radius (the starting position), the ply piece spans an angle from to . These angles can be calculated by:

Additionally, the *limit angles* of the ply piece are defined as the minimal
and maximum value of the angular coordinate. Since the extreme values are
always located at the corner points, these can be calculated by:

## 2. Constructing all ply pieces¶

Based on the prototype ply piece discussed in the previous section, the
complete set of ply pieces can be constructed. In the code, this is implemented
mainly in the method
`desicos.cppot.core.ply_model.PlyPieceModel.rebuild()`

.

First the required number of ply pieces is determined:

Generally, is not an integer, so covering the entire cone with
similar pieces would result in a discontinuous model, as shown in figure 17.
To remedy this problem, a smaller *rest* piece is added. This rest piece should
span an angle: (with denoting the floor function)

with

So in words, is the fractional part of . To construct the rest piece, the same procedure is followed as for a normal ply piece. However, during step 4, the calculated values of and are multiplied by as stated below. This results in a ply piece whose angular span satisfies the above equations. The positions of points and (and, of course, the calculations in subsequent steps) are adjusted accordingly.

Now the procedure to cover the entire cone with ply pieces is as follows. The first piece is placed at a nominal angle equal to . This is done to allow offsettnig multiple plies with the same nominal fiber orientation with respect to each other. This avoids that the ply piece edges in multiple plies coincide, which would (unnecessarily) cause weak spots in the actual cone. The offset parameter is specified in relative terms (0…1), based on this value is calculated as follows:

Ply pieces are then placed in both directions at angular increments of . Pieces are added as long as they cover some area in the angular range , which is the case if both below-stated inequalities are satisfied.

The possible result of this operation is shown in figure 18. Here the unfolded cone is drawn in red, the first ply piece in blue, the other ply pieces in green and the nominal angle of each ply piece as a dashed black line. The rest piece is inserted right after (in counter-clockwise direction) the first piece for which . This prevents the rest piece from overlapping the “cut” in the model, which would add additional complexity to the model. Some special handling is needed to set the angular offsets between the rest piece and its neighboring pieces. If the nominal angles of the rest piece, the previous piece and the next piece are named , and , respectively, their mutual relations are as stated below. Refer also to the figure.

Note that the model contains a few more ply pieces than the actual cone, because the pieces that intersect the cut ( and ) are represented twice. This is done because it simplifies the implementation, while not affecting the results in any way.

## 3. Calculating the local orientation¶

To calculate what the local fiber angle is at any point on the cone, several steps are needed.

**Step 1: Change coordinate system**

First, the coordinates in the global coordinate system have to be transformed to the coordinates of the unfolded cone, i.e. and/or . These coordinate transformations have been discussed in a previous chapter on this page and will not be repeated.

**Step 2: Find the correct ply piece**

Next, it is necessary to find the ply piece(s) located at the given coordinates. This is done by iterating over all ply pieces and then,for each ply piece:

Quickly check whether . If not, continue.

Perform the (computationally more expensive) test whether the point is inside the polygon that defines this ply piece. In earlier versions the “interior angle”-algorithm was used, but for performance reasons this was changed to the “ray casting”-algorithm. Both algorithms are widely used and extensively documented in other sources. If this check returns a positive result, stop iteration and return this ply piece. If not, continue.

If iteration completes without having found a ply piece, the point is not on the cone at all and

`NaN`

is returned.

**Step 3: Find the local angle**
A relation for the local fiber angle can be found, based on the principle that
the sum of all angles inside a triangle is always equal to . This
results in the following equation:

An example plot of the local fiber angle is shown in the figure below. Note that all points within the same ply piece have a constant fiber angle along radial lines () and that there are significant discontinuities between adjacent plies.