### INSTRUCTIONS ###
# NOTE: This version creates materials, mesh, boundary and conditions of 
#   the following parts: metal liner, three 0 deg composite layers and 
#   three +-19 deg composite layers and the end plate. 
# 1. Define the parameters under the section "USER DEFINED VARIABLES"
# 2. Run the script
# 3. Cohesive elements must be created manually#
# 4. Update the REF variable value accordingly - Outer surface of the cylinder, line 107
# 5. Update the POWER_SURF values - surfaces to make contact with the support
# 6. Update fibre angles where applicable (default 0 deg, +19 deg, -19 deg)

### This is the heading of the script ###
session.journalOptions.setValues(replayGeometry=COORDINATE, recoverGeometry=COORDINATE)

### Load modulus ###
from part import *
from material import *
from section import *
from assembly import *
from step import *
from interaction import *
from load import *
from mesh import *
from optimization import *
from job import *
from sketch import *
from visualization import *
from connectorBehavior import *

########## USER DEFINED VARIABLES ##########
MODEL_NAME = 'Model_Name'
PERIOD_TIME = 300
COH_THICKNESS = 0.01
CYL_LENGTH = 183.0

### Meshing sections ###
MESH_SEC_A = 70
MESH_SEC_B = 120
MESH_SEC_C = 15
MESH_SEC_D = 20

### Liner variables ###
LINER_IR = 72.6
LINER_THICKNESS = 2.2
LINER_OR = LINER_IR + LINER_THICKNESS 
PARTITION_XY = 153    #Value must be less than CYL_LENGTH
PARTITION_XZ = 49.5 #Value must be larger than LINER_IR/2

### CompL1 variables ###
COMPL1_ANGLE = 0.0
COMPL1_THICKNESS = 1.0
COMPL1_IR = LINER_OR + COH_THICKNESS
COMPL1_OR = COMPL1_IR + COMPL1_THICKNESS

### CompL2A variables ###
COMPL2A_ANGLE = 19.0
COMPL2A_THICKNESS = 0.25
COMPL2A_IR = COMPL1_OR + COH_THICKNESS
COMPL2A_OR = COMPL2A_IR + COMPL2A_THICKNESS

### CompL2B variables ###
COMPL2B_ANGLE = -19.0
COMPL2B_THICKNESS = 0.25
COMPL2B_IR = COMPL2A_OR
COMPL2B_OR = COMPL2B_IR + COMPL2B_THICKNESS

### CompL3 variables ###
COMPL3_ANGLE = 0.0
COMPL3_THICKNESS = 0.5
COMPL3_IR = COMPL2B_OR + COH_THICKNESS
COMPL3_OR = COMPL3_IR + COMPL3_THICKNESS

### CompL4A variables ###
COMPL4A_ANGLE = 19.0
COMPL4A_THICKNESS = 0.25
COMPL4A_IR = COMPL3_OR + COH_THICKNESS
COMPL4A_OR = COMPL4A_IR + COMPL4A_THICKNESS

### CompL4A variables ###
COMPL4B_ANGLE = -19.0
COMPL4B_THICKNESS = 0.25
COMPL4B_IR = COMPL4A_OR
COMPL4B_OR = COMPL4B_IR + COMPL4B_THICKNESS

### CompL5 variables ###
COMPL5_ANGLE = 0.0
COMPL5_THICKNESS = 1.0
COMPL5_IR = COMPL4B_OR + COH_THICKNESS
COMPL5_OR = COMPL5_IR + COMPL5_THICKNESS

### CompL6A variables ###
COMPL6A_ANGLE = 19.0
COMPL6A_THICKNESS = 0.25
COMPL6A_IR = COMPL5_OR + COH_THICKNESS
COMPL6A_OR = COMPL6A_IR + COMPL6A_THICKNESS

### CompL6B variables ###
COMPL6B_ANGLE = -19.0
COMPL6B_THICKNESS = 0.25
COMPL6B_IR = COMPL6A_OR
COMPL6B_OR = COMPL6B_IR + COMPL6B_THICKNESS

### Plate variables ###
PLATE_THICKNESS = 2.0
PLATE_OR = COMPL6B_OR
PLATE_IR = LINER_IR

### Coordinates of the outer layers of the cylinder ###
REF = COMPL6B_OR ### Input here the name of the outer layer of the cylinder
MAX_OUTER_X = -COMPL6B_OR ### Maximum outer point that contacts the support
MAX_OUTER_Y = ((REF**2)-(MAX_OUTER_X**2))**0.5
MAX_OUTER_Z1 = PARTITION_XY - 0.1 ### Z coordinate after the partition
MAX_OUTER_Z2 = PARTITION_XY - 0.1 ### Z coordinate before the partition 

########## MODEL CREATION AND NAMING ####################################################################
mdb.Model(modelType=STANDARD_EXPLICIT, name='Model-1')
mdb.models.changeKey(fromName='Model-1', toName=MODEL_NAME)

########## MATERIALS ####################################################################################
mdb.models[MODEL_NAME].Material(name='Aluminium')
mdb.models[MODEL_NAME].materials['Aluminium'].Density(table=((2.7e-06, ), ))
mdb.models[MODEL_NAME].materials['Aluminium'].Elastic(table=((69.0, 0.3), ))
mdb.models[MODEL_NAME].materials['Aluminium'].Plastic(table=((0.27248, 0.0), 
    (0.28557, 0.0086521), (0.29163, 0.0099545), (0.29365, 0.010596), (0.29607, 
    0.012279), (0.30165, 0.017988), (0.30884, 0.026462), (0.31676, 0.037071), (
    0.32298, 0.048701), (0.32757, 0.061665), (0.33064, 0.075394), (0.33204, 
    0.08563), (0.33269, 0.097363), (0.33211, 0.10883), (0.33055, 0.12111), (
    0.32929, 0.12831)))
mdb.models[MODEL_NAME].Material(name='CFRP')
mdb.models[MODEL_NAME].materials['CFRP'].Density(table=((1.6e-06, ), ))
mdb.models[MODEL_NAME].materials['CFRP'].Elastic(table=((146.0, 9.5, 9.5, 
    0.28, 0.28, 0.4, 5.7, 1.45, 1.45), ), type=ENGINEERING_CONSTANTS)
mdb.models[MODEL_NAME].Material(name='Cohesive_MetalComp')
mdb.models[MODEL_NAME].materials['Cohesive_MetalComp'].Elastic(table=((
    1000.0, 1000.0, 1000.0), ), type=TRACTION)
mdb.models[MODEL_NAME].materials['Cohesive_MetalComp'].MaxsDamageInitiation(
    table=((0.02, 0.04, 0.04), ))
mdb.models[MODEL_NAME].materials['Cohesive_MetalComp'].maxsDamageInitiation.DamageEvolution(
    table=((0.1, ), ), type=DISPLACEMENT)
mdb.models[MODEL_NAME].materials['Cohesive_MetalComp'].Density(table=((
    1e-06, ), ))
mdb.models[MODEL_NAME].Material(name='Cohesive_CFRP', objectToCopy=
    mdb.models[MODEL_NAME].materials['Cohesive_MetalComp'])
mdb.models[MODEL_NAME].materials['Cohesive_CFRP'].maxsDamageInitiation.setValues(
    table=((0.01, 0.02, 0.02), ))
mdb.models[MODEL_NAME].materials['Cohesive_CFRP'].maxsDamageInitiation.damageEvolution.setValues(
    type=DISPLACEMENT)
mdb.models[MODEL_NAME].Material(name='Steel')
mdb.models[MODEL_NAME].materials['Steel'].Density(table=((2.7e-06, ), ))
mdb.models[MODEL_NAME].materials['Steel'].Elastic(table=((210.0, 0.3), ))

########## THIS SECTION CREATES LINER ######################################################################
### Part creation - Liner ###
mdb.models[MODEL_NAME].ConstrainedSketch(name='__profile__', sheetSize=
    200.0)
mdb.models[MODEL_NAME].sketches['__profile__'].CircleByCenterPerimeter(
    center=(0.0, 0.0), point1=(57.5, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].CircleByCenterPerimeter(
    center=(0.0, 0.0), point1=(48.75, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].Line(point1=(0.0, -71.25), 
    point2=(0.0, 71.25))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].VerticalConstraint(
    addUndoState=False, entity=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    0.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-57.5, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].autoTrimCurve(curve1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-57.5, 
    0.0), ), point1=(39.5766830444336, -39.1373481750488))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-48.75, 
    0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].autoTrimCurve(curve1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-48.75, 
    0.0), ), point1=(36.8982925415039, -30.4100723266602))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-34.471456, 
    34.471456))
mdb.models[MODEL_NAME].sketches['__profile__'].autoTrimCurve(curve1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((
    -34.471456, 34.471456), ), point1=(44.933464050293, 19.6039352416992))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.65864, 
    40.65864))
mdb.models[MODEL_NAME].sketches['__profile__'].autoTrimCurve(curve1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((
    -40.65864, 40.65864), ), point1=(48.2814559936523, 31.0165252685547))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].autoTrimCurve(curve1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    0.0), ), point1=(2.41394996643066, 66.2613067626953))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    -6.875))
mdb.models[MODEL_NAME].sketches['__profile__'].autoTrimCurve(curve1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    -6.875), ), point1=(2.07915687561035, 25.6458969116211))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, -60.0))
mdb.models[MODEL_NAME].sketches['__profile__'].autoTrimCurve(curve1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    -60.0), ), point1=(1.07476234436035, -65.6548461914063))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-57.5, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].RadialDimension(curve=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-57.5, 
    0.0), ), radius=LINER_OR, textPoint=(-76.5987014770508, 36.0514984130859))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-48.75, 
    0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].RadialDimension(curve=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-48.75, 
    0.0), ), radius=LINER_IR, textPoint=(-71.9115142822266, 18.5969467163086))
mdb.models[MODEL_NAME].Part(dimensionality=THREE_D, name='Liner', type=
    DEFORMABLE_BODY)
mdb.models[MODEL_NAME].parts['Liner'].BaseSolidExtrude(depth=CYL_LENGTH, sketch=
    mdb.models[MODEL_NAME].sketches['__profile__'])
del mdb.models[MODEL_NAME].sketches['__profile__']

### Part partitioning - Liner ###
mdb.models[MODEL_NAME].parts['Liner'].DatumPlaneByPrincipalPlane(offset=PARTITION_XY
    , principalPlane=XYPLANE)
mdb.models[MODEL_NAME].parts['Liner'].PartitionCellByDatumPlane(cells=
    mdb.models[MODEL_NAME].parts['Liner'].cells.findAt(
    ((-LINER_OR, 0.0, 0.0), )), 
    datumPlane= mdb.models[MODEL_NAME].parts['Liner'].datums[2])
mdb.models[MODEL_NAME].parts['Liner'].DatumPointByCoordinate(coords=
    (0.0, 0.0, 0.0))
mdb.models[MODEL_NAME].parts['Liner'].DatumPointByCoordinate(coords=
    (-((LINER_OR**2)-(PARTITION_XZ**2))**0.5, PARTITION_XZ, 0.0))
mdb.models[MODEL_NAME].parts['Liner'].DatumPointByCoordinate(coords=
    (-((LINER_OR**2)-(PARTITION_XZ**2))**0.5, PARTITION_XZ, CYL_LENGTH))
mdb.models[MODEL_NAME].parts['Liner'].PartitionCellByPlaneThreePoints(cells=
    mdb.models[MODEL_NAME].parts['Liner'].cells.findAt(
    ((-((LINER_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, PARTITION_XY +1), ), 
    ((-((LINER_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, PARTITION_XY -1), ), ), 
    point1= mdb.models[MODEL_NAME].parts['Liner'].datums[4], 
    point2= mdb.models[MODEL_NAME].parts['Liner'].datums[5], 
    point3= mdb.models[MODEL_NAME].parts['Liner'].datums[6])

### Section assignment (Metal) - Liner ### 
mdb.models[MODEL_NAME].HomogeneousSolidSection(material='Aluminium', name=
    'Liner', thickness=None)
mdb.models[MODEL_NAME].parts['Liner'].Set(cells=
    mdb.models[MODEL_NAME].parts['Liner'].cells.getSequenceFromMask((
    '[#f ]', ), ), name='Set-1')
mdb.models[MODEL_NAME].parts['Liner'].SectionAssignment(offset=0.0, 
    offsetField='', offsetType=MIDDLE_SURFACE, region=
    mdb.models[MODEL_NAME].parts['Liner'].sets['Set-1'], sectionName='Liner'
    , thicknessAssignment=FROM_SECTION)
    
### Add liner to assembly ###
mdb.models[MODEL_NAME].rootAssembly.DatumCsysByDefault(CARTESIAN)
mdb.models[MODEL_NAME].rootAssembly.Instance(dependent=ON, name='Liner-1', 
    part=mdb.models[MODEL_NAME].parts['Liner'])

### Create part surfaces - Liner ### 
W_BOT = ((LINER_IR**2)-(1.0**2))**(0.5)
X_BOT = ((LINER_IR**2)-(1.0**2))**(0.5)
mdb.models[MODEL_NAME].rootAssembly.Surface(name='W_Liner_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['Liner-1'].faces.findAt(((
    -1.0, ((LINER_OR**2)-(1.0**2))**(0.5), CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='W_Liner_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['Liner-1'].faces.findAt(((
    -1.0, ((LINER_IR**2)-(1.0**2))**(0.5), CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='X_Liner_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['Liner-1'].faces.findAt(((
    -1.0, ((LINER_OR**2)-(1.0**2))**(0.5), 1.0), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='X_Liner_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['Liner-1'].faces.findAt(((
    -1.0, ((LINER_IR**2)-(1.0**2))**(0.5), 1.0), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Y_Liner_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['Liner-1'].faces.findAt(((
    -LINER_OR, 0.0, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Y_Liner_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['Liner-1'].faces.findAt(((
    -LINER_IR, 0.0, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Z_Liner_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['Liner-1'].faces.findAt(((
    -LINER_OR, 0.0, 1.0), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Z_Liner_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['Liner-1'].faces.findAt(((
    -LINER_OR, 0.0, 1.0), )))

### Mesh generation - Liner ###
LINER_Y_COORD = PARTITION_XZ*LINER_IR/LINER_OR
LINER_CONSTANT = PARTITION_XZ/LINER_OR
mdb.models[MODEL_NAME].parts['Liner'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['Liner'].edges.findAt(
    ((0.0, LINER_IR + ((LINER_OR-LINER_IR)/2), CYL_LENGTH), ), 
    ((0.0, LINER_IR + ((LINER_OR-LINER_IR)/2), PARTITION_XY), ), 
    ((0.0, LINER_IR + ((LINER_OR-LINER_IR)/2), 0.0), ), ), 
    number=3)
mdb.models[MODEL_NAME].parts['Liner'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['Liner'].edges.findAt(
    ((0.0, LINER_IR, (CYL_LENGTH-1)), ), 
    ((0.0, LINER_OR, (CYL_LENGTH-1)), ), 
    ((0.0, -LINER_IR, (CYL_LENGTH-1)), ), 
    ((0.0, -LINER_OR, (CYL_LENGTH-1)), ), 
    ((-((LINER_OR**2)-(PARTITION_XZ**2))**0.5, PARTITION_XZ, CYL_LENGTH-1), ), 
    ((-((LINER_IR**2)-(LINER_Y_COORD**2))**0.5, LINER_Y_COORD, CYL_LENGTH-1), ), 
    ), number=MESH_SEC_A)
mdb.models[MODEL_NAME].parts['Liner'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['Liner'].edges.findAt(
    ((-1.0, ((LINER_IR**2)-(1**2))**0.5, CYL_LENGTH), ), 
    ((-1.0, ((LINER_OR**2)-(1**2))**0.5, CYL_LENGTH), ), 
    ((-1.0, ((LINER_IR**2)-(1**2))**0.5, PARTITION_XY), ), 
    ((-1.0, ((LINER_OR**2)-(1**2))**0.5, PARTITION_XY), ), 
    ((-1.0, ((LINER_IR**2)-(1**2))**0.5, 0.0), ), 
    ((-1.0, ((LINER_OR**2)-(1**2))**0.5, 0.0), ), ), 
    number=MESH_SEC_B)
mdb.models[MODEL_NAME].parts['Liner'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['Liner'].edges.findAt(
    ((0.0, LINER_IR, (PARTITION_XY-1)), ), 
    ((0.0, LINER_OR, (PARTITION_XY-1)), ), 
    ((0.0, -LINER_IR, (PARTITION_XY-1)), ), 
    ((0.0, -LINER_OR, (PARTITION_XY-1)), ), 
    ((-((LINER_OR**2)-(PARTITION_XZ**2))**0.5, PARTITION_XZ, PARTITION_XY-1), ), 
    ((-((LINER_IR**2)-(LINER_Y_COORD**2))**0.5, LINER_Y_COORD, PARTITION_XY-1), ), 
    ), number=MESH_SEC_C)
mdb.models[MODEL_NAME].parts['Liner'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['Liner'].edges.findAt(
    ((-LINER_IR, 0.0, CYL_LENGTH), ), 
    ((-LINER_OR, 0.0, CYL_LENGTH), ), 
    ((-LINER_IR, 0.0, PARTITION_XY), ), 
    ((-LINER_OR, 0.0, PARTITION_XY), ), 
    ((-LINER_IR, 0.0, 0.0), ), 
    ((-LINER_OR, 0.0, 0.0), ), ), 
    number=MESH_SEC_D)
 
########## THIS SECTION CREATES COMPL1 ########################################################################
### Part creation - CompL1 ###
mdb.models[MODEL_NAME].ConstrainedSketch(name='__profile__', sheetSize=
    200.0)
mdb.models[MODEL_NAME].sketches['__profile__'].ArcByCenterEnds(center=(0.0, 
    0.0), direction=COUNTERCLOCKWISE, point1=(0.0, 50.0), point2=(0.0, -50.0))
mdb.models[MODEL_NAME].sketches['__profile__'].ArcByCenterEnds(center=(0.0, 
    0.0), direction=COUNTERCLOCKWISE, point1=(0.0, 40.0), point2=(0.0, -40.0))
mdb.models[MODEL_NAME].sketches['__profile__'].Line(point1=(0.0, 50.0), 
    point2=(0.0, 40.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].VerticalConstraint(
    addUndoState=False, entity=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].PerpendicularConstraint(
    addUndoState=False, entity1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 
    0.0), ), entity2=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].Line(point1=(0.0, -40.0), 
    point2=(0.0, -50.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, -45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].VerticalConstraint(
    addUndoState=False, entity=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    -45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, -45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].PerpendicularConstraint(
    addUndoState=False, entity1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 
    0.0), ), entity2=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    -45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].RadialDimension(curve=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 
    0.0), ), radius=COMPL1_OR, textPoint=(-59.0553855895996, 22.8824577331543))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].RadialDimension(curve=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 
    0.0), ), radius=COMPL1_IR, textPoint=(-49.8903465270996, 17.7138023376465))
mdb.models[MODEL_NAME].Part(dimensionality=THREE_D, name='CompL1', type=
    DEFORMABLE_BODY)
mdb.models[MODEL_NAME].parts['CompL1'].BaseSolidExtrude(depth=CYL_LENGTH, sketch=
    mdb.models[MODEL_NAME].sketches['__profile__'])
del mdb.models[MODEL_NAME].sketches['__profile__']

### Part partitioning - CompL1 ### 
COMPL1_Y_MESHCOORD = PARTITION_XZ*COMPL1_IR/COMPL1_OR
mdb.models[MODEL_NAME].parts['CompL1'].DatumPlaneByPrincipalPlane(offset=PARTITION_XY
    , principalPlane=XYPLANE)
mdb.models[MODEL_NAME].parts['CompL1'].PartitionCellByDatumPlane(cells=
    mdb.models[MODEL_NAME].parts['CompL1'].cells.findAt(
    ((-COMPL1_OR, 0.0, 0.0), )), 
    datumPlane= mdb.models[MODEL_NAME].parts['CompL1'].datums[2])
mdb.models[MODEL_NAME].parts['CompL1'].DatumPointByCoordinate(coords=
    (0.0, 0.0, 0.0))
mdb.models[MODEL_NAME].parts['CompL1'].DatumPointByCoordinate(coords=
    (-((COMPL1_OR**2)-((LINER_CONSTANT*COMPL1_OR)**2))**0.5, (LINER_CONSTANT*COMPL1_OR), 0.0))
mdb.models[MODEL_NAME].parts['CompL1'].DatumPointByCoordinate(coords=
    (-((COMPL1_OR**2)-((LINER_CONSTANT*COMPL1_OR)**2))**0.5, (LINER_CONSTANT*COMPL1_OR), CYL_LENGTH))
mdb.models[MODEL_NAME].parts['CompL1'].PartitionCellByPlaneThreePoints(cells=
    mdb.models[MODEL_NAME].parts['CompL1'].cells.findAt(
    ((-((COMPL1_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, PARTITION_XY +1), ), 
    ((-((COMPL1_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, PARTITION_XY -1), ), ), 
    point1= mdb.models[MODEL_NAME].parts['CompL1'].datums[4], 
    point2= mdb.models[MODEL_NAME].parts['CompL1'].datums[5], 
    point3= mdb.models[MODEL_NAME].parts['CompL1'].datums[6])

### Assign section and orientations - CompL1 ###
mdb.models[MODEL_NAME].HomogeneousSolidSection(material='CFRP', name='CFRP', 
    thickness=None)
mdb.models[MODEL_NAME].parts['CompL1'].Set(cells=
    mdb.models[MODEL_NAME].parts['CompL1'].cells.findAt(
    ((-1.0, ((COMPL1_OR**2)-(1.0**2))**(0.5), PARTITION_XY+1), ), 
    ((-1.0, ((COMPL1_OR**2)-(1.0**2))**(0.5), 1.0), ), 
    ((0.0, -COMPL1_OR, PARTITION_XY+1), ), 
    ((0.0, -COMPL1_OR, 1.0), ), ), 
    name='Set-7')
mdb.models[MODEL_NAME].parts['CompL1'].SectionAssignment(offset=0.0, 
    offsetField='', offsetType=MIDDLE_SURFACE, region=
    mdb.models[MODEL_NAME].parts['CompL1'].sets['Set-7'], sectionName='CFRP'
    , thicknessAssignment=FROM_SECTION)
mdb.models[MODEL_NAME].parts['CompL1'].Surface(name='Surf-3', side1Faces=
    mdb.models[MODEL_NAME].parts['CompL1'].faces.findAt(
    ((-1.0, ((COMPL1_OR**2)-(1.0**2))**(0.5), PARTITION_XY+1), )))
mdb.models[MODEL_NAME].parts['CompL1'].Set(edges=
    mdb.models[MODEL_NAME].parts['CompL1'].edges.findAt(
    ((-1.0, ((COMPL1_OR**2)-(1.0**2))**(0.5), CYL_LENGTH), )), 
    name='Set-8')
mdb.models[MODEL_NAME].parts['CompL1'].MaterialOrientation(
    additionalRotationField='', additionalRotationType=ROTATION_ANGLE, angle=
    COMPL1_ANGLE, axis=AXIS_3, flipNormalDirection=False, flipPrimaryDirection=False, 
    normalAxisDefinition=SURFACE, normalAxisDirection=AXIS_3, normalAxisRegion=
    mdb.models[MODEL_NAME].parts['CompL1'].surfaces['Surf-3'], 
    orientationType=DISCRETE, primaryAxisDefinition=EDGE, primaryAxisDirection=
    AXIS_1, primaryAxisRegion=
    mdb.models[MODEL_NAME].parts['CompL1'].sets['Set-8'], region=Region(
    cells=mdb.models[MODEL_NAME].parts['CompL1'].cells.findAt(
    ((-1.0, ((COMPL1_OR**2)-(1.0**2))**(0.5), PARTITION_XY+1), ), 
    ((-1.0, ((COMPL1_OR**2)-(1.0**2))**(0.5), 1.0), ), 
    ((0.0, -COMPL1_OR, PARTITION_XY+1), ), 
    ((0.0, -COMPL1_OR, 1.0), ), )), 
    stackDirection=STACK_3)

### Add part to assembly - CompL1 ### 
mdb.models[MODEL_NAME].rootAssembly.Instance(dependent=ON, name='CompL1-1', 
    part=mdb.models[MODEL_NAME].parts['CompL1'])
    
### Create part surfaces - CompL1 ###
COMPL1_TOP = ((COMPL1_OR**2)-(1.0**2))**(0.5)
COMPL1_BOT = ((COMPL1_IR**2)-(1.0**2))**(0.5)
mdb.models[MODEL_NAME].rootAssembly.Surface(name='W_CompL1_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL1-1'].faces.findAt(
    ((-1.0, COMPL1_TOP, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='W_CompL1_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL1-1'].faces.findAt(
    ((-1.0, COMPL1_BOT, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='X_CompL1_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL1-1'].faces.findAt(
    ((-1.0, COMPL1_TOP, 1.0), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='X_CompL1_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL1-1'].faces.findAt(
    ((-1.0, COMPL1_BOT, 1.0), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Y_CompL1_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL1-1'].faces.findAt(((
    -COMPL1_OR, 0.0, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Y_CompL1_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL1-1'].faces.findAt(((
    -COMPL1_IR, 0.0, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Z_CompL1_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL1-1'].faces.findAt(((
    -COMPL1_OR, 0.0, 1.0), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Z_CompL1_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL1-1'].faces.findAt(((
    -COMPL1_IR, 0.0, 1.0), )))
    
### Mesh generation - CompL1 ### 
mdb.models[MODEL_NAME].parts['CompL1'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL1'].edges.findAt(
    ((0.0, (COMPL1_IR+((COMPL1_OR-COMPL1_IR)/2)), PARTITION_XY), ), 
    ((0.0, (COMPL1_IR+((COMPL1_OR-COMPL1_IR)/2)), CYL_LENGTH), ), 
    ((0.0, (COMPL1_IR+((COMPL1_OR-COMPL1_IR)/2)), 0.0), ), ), 
    number=1)
mdb.models[MODEL_NAME].parts['CompL1'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL1'].edges.findAt(
    ((0.0, -(COMPL1_IR+((COMPL1_OR-COMPL1_IR)/2)), PARTITION_XY), ), 
    ((0.0, -(COMPL1_IR+((COMPL1_OR-COMPL1_IR)/2)), CYL_LENGTH), ), 
    ((0.0, -(COMPL1_IR+((COMPL1_OR-COMPL1_IR)/2)), 0.0), ), 
    ), number=1)
mdb.models[MODEL_NAME].parts['CompL1'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL1'].edges.findAt(
    ((0.0, COMPL1_OR, PARTITION_XY-1.0), ), 
    ((0.0, COMPL1_IR, PARTITION_XY-1.0), ), 
    ((0.0, -COMPL1_IR, PARTITION_XY-1.0), ), 
    ((0.0, -COMPL1_OR, PARTITION_XY-1.0), ), 
    ((-((COMPL1_OR**2)-((LINER_CONSTANT*COMPL1_OR)**2))**0.5, (LINER_CONSTANT*COMPL1_OR), CYL_LENGTH-1), ), 
    ((-((COMPL1_IR**2)-((LINER_CONSTANT*COMPL1_IR)**2))**0.5, (LINER_CONSTANT*COMPL1_IR), CYL_LENGTH-1), ), 
    ), number=MESH_SEC_A)
mdb.models[MODEL_NAME].parts['CompL1'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL1'].edges.findAt(
    ((-((COMPL1_IR**2)-((COMPL1_IR-0.1)**2))**0.5, COMPL1_IR-0.1, PARTITION_XY), ), 
    ((-((COMPL1_OR**2)-((COMPL1_IR-0.1)**2))**0.5, COMPL1_IR-0.1, PARTITION_XY), ), 
    ((-((COMPL1_IR**2)-((COMPL1_IR-0.1)**2))**0.5, COMPL1_IR-0.1, 0.0), ), 
    ((-((COMPL1_IR**2)-((COMPL1_IR-0.1)**2))**0.5, COMPL1_IR-0.1, CYL_LENGTH), ), 
    ((-((COMPL1_OR**2)-((COMPL1_IR-0.1)**2))**0.5, COMPL1_IR-0.1, CYL_LENGTH), ), 
    ((-((COMPL1_OR**2)-((COMPL1_IR-0.1)**2))**0.5, COMPL1_IR-0.1, 0.0), ), ), 
    number=MESH_SEC_B)
mdb.models[MODEL_NAME].parts['CompL1'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL1'].edges.findAt(
    ((-((COMPL1_IR**2)-((LINER_CONSTANT*COMPL1_IR)**2))**0.5, (LINER_CONSTANT*COMPL1_IR), PARTITION_XY-1), ), 
    ((-((COMPL1_OR**2)-((LINER_CONSTANT*COMPL1_OR)**2))**0.5, (LINER_CONSTANT*COMPL1_OR), PARTITION_XY-1), ), 
    ((0.0, -COMPL1_IR, 1.0), ), 
    ((0.0, -COMPL1_OR, 1.0), ), 
    ((0.0, COMPL1_IR, 1.0), ), 
    ((0.0, COMPL1_OR, 1.0), ), ), 
    number=MESH_SEC_C)
mdb.models[MODEL_NAME].parts['CompL1'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL1'].edges.findAt(
    ((-COMPL1_IR, 0.0, PARTITION_XY), ), 
    ((-COMPL1_OR, 0.0, PARTITION_XY), ), 
    ((-COMPL1_IR, 0.0, CYL_LENGTH), ), 
    ((-COMPL1_OR, 0.0, CYL_LENGTH), ), 
    ((-COMPL1_IR, 0.0, 0.0), ), 
    ((-COMPL1_OR, 0.0, 0.0), ), ), number=MESH_SEC_D)   
    
########## THIS SECTION CREATES COMPL2A ########################################################################
### Part creation - CompL2A ###
mdb.models[MODEL_NAME].ConstrainedSketch(name='__profile__', sheetSize=
    200.0)
mdb.models[MODEL_NAME].sketches['__profile__'].ArcByCenterEnds(center=(0.0, 
    0.0), direction=COUNTERCLOCKWISE, point1=(0.0, 50.0), point2=(0.0, -50.0))
mdb.models[MODEL_NAME].sketches['__profile__'].ArcByCenterEnds(center=(0.0, 
    0.0), direction=COUNTERCLOCKWISE, point1=(0.0, 40.0), point2=(0.0, -40.0))
mdb.models[MODEL_NAME].sketches['__profile__'].Line(point1=(0.0, 50.0), 
    point2=(0.0, 40.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].VerticalConstraint(
    addUndoState=False, entity=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].PerpendicularConstraint(
    addUndoState=False, entity1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 
    0.0), ), entity2=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].Line(point1=(0.0, -40.0), 
    point2=(0.0, -50.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, -45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].VerticalConstraint(
    addUndoState=False, entity=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    -45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, -45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].PerpendicularConstraint(
    addUndoState=False, entity1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 
    0.0), ), entity2=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    -45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].RadialDimension(curve=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 
    0.0), ), radius=COMPL2A_OR, textPoint=(-59.0553855895996, 22.8824577331543))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].RadialDimension(curve=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 
    0.0), ), radius=COMPL2A_IR, textPoint=(-49.8903465270996, 17.7138023376465))
mdb.models[MODEL_NAME].Part(dimensionality=THREE_D, name='CompL2A', type=
    DEFORMABLE_BODY)
mdb.models[MODEL_NAME].parts['CompL2A'].BaseSolidExtrude(depth=CYL_LENGTH, sketch=
    mdb.models[MODEL_NAME].sketches['__profile__'])
del mdb.models[MODEL_NAME].sketches['__profile__']

### Part partitioning - CompL2A ### 
mdb.models[MODEL_NAME].parts['CompL2A'].DatumPlaneByPrincipalPlane(offset=PARTITION_XY
    , principalPlane=XYPLANE)
mdb.models[MODEL_NAME].parts['CompL2A'].PartitionCellByDatumPlane(cells=
    mdb.models[MODEL_NAME].parts['CompL2A'].cells.findAt(
    ((-COMPL2A_OR, 0.0, 0.0), )), 
    datumPlane= mdb.models[MODEL_NAME].parts['CompL2A'].datums[2])
mdb.models[MODEL_NAME].parts['CompL2A'].DatumPointByCoordinate(coords=
    (0.0, 0.0, 0.0))
mdb.models[MODEL_NAME].parts['CompL2A'].DatumPointByCoordinate(coords=
    (-((COMPL2A_OR**2)-((LINER_CONSTANT*COMPL2A_OR)**2))**0.5, (LINER_CONSTANT*COMPL2A_OR), 0.0))
mdb.models[MODEL_NAME].parts['CompL2A'].DatumPointByCoordinate(coords=
    (-((COMPL2A_OR**2)-((LINER_CONSTANT*COMPL2A_OR)**2))**0.5, (LINER_CONSTANT*COMPL2A_OR), CYL_LENGTH))
mdb.models[MODEL_NAME].parts['CompL2A'].PartitionCellByPlaneThreePoints(cells=
    mdb.models[MODEL_NAME].parts['CompL2A'].cells.findAt(
    ((-((COMPL2A_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, PARTITION_XY +1), ), 
    ((-((COMPL2A_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, PARTITION_XY -1), ), ), 
    point1= mdb.models[MODEL_NAME].parts['CompL2A'].datums[4], 
    point2= mdb.models[MODEL_NAME].parts['CompL2A'].datums[5], 
    point3= mdb.models[MODEL_NAME].parts['CompL2A'].datums[6])

### Assign section and orientations - CompL2A ###
mdb.models[MODEL_NAME].HomogeneousSolidSection(material='CFRP', name='CFRP', 
    thickness=None)
mdb.models[MODEL_NAME].parts['CompL2A'].Set(cells=
    mdb.models[MODEL_NAME].parts['CompL2A'].cells.findAt(
    ((-1.0, ((COMPL2A_OR**2)-(1.0**2))**(0.5), PARTITION_XY+1), ), 
    ((-1.0, ((COMPL2A_OR**2)-(1.0**2))**(0.5), 1.0), ), 
    ((0.0, -COMPL2A_OR, PARTITION_XY+1), ), ((0.0, -COMPL2A_OR, 1.0), ), ), 
    name='Set-7')
mdb.models[MODEL_NAME].parts['CompL2A'].SectionAssignment(offset=0.0, 
    offsetField='', offsetType=MIDDLE_SURFACE, region=
    mdb.models[MODEL_NAME].parts['CompL2A'].sets['Set-7'], sectionName='CFRP'
    , thicknessAssignment=FROM_SECTION)
mdb.models[MODEL_NAME].parts['CompL2A'].Surface(name='Surf-3', side1Faces=
    mdb.models[MODEL_NAME].parts['CompL2A'].faces.findAt(
    ((-1.0, ((COMPL2A_OR**2)-(1.0**2))**(0.5), PARTITION_XY+1), )))
mdb.models[MODEL_NAME].parts['CompL2A'].Set(edges=
    mdb.models[MODEL_NAME].parts['CompL2A'].edges.findAt(
    ((-1.0, ((COMPL2A_OR**2)-(1.0**2))**(0.5), CYL_LENGTH), )), 
    name='Set-8')
mdb.models[MODEL_NAME].parts['CompL2A'].MaterialOrientation(
    additionalRotationField='', additionalRotationType=ROTATION_ANGLE, angle=
    COMPL2A_ANGLE, axis=AXIS_3, flipNormalDirection=False, flipPrimaryDirection=False, 
    normalAxisDefinition=SURFACE, normalAxisDirection=AXIS_3, normalAxisRegion=
    mdb.models[MODEL_NAME].parts['CompL2A'].surfaces['Surf-3'], 
    orientationType=DISCRETE, primaryAxisDefinition=EDGE, primaryAxisDirection=
    AXIS_1, primaryAxisRegion=
    mdb.models[MODEL_NAME].parts['CompL2A'].sets['Set-8'], region=Region(
    cells=mdb.models[MODEL_NAME].parts['CompL2A'].cells.findAt(
    ((-1.0, ((COMPL2A_OR**2)-(1.0**2))**(0.5), PARTITION_XY+1), ), 
    ((-1.0, ((COMPL2A_OR**2)-(1.0**2))**(0.5), 1.0), ), 
    ((0.0, -COMPL2A_OR, PARTITION_XY+1), ), 
    ((0.0, -COMPL2A_OR, 1.0), ), )), 
    stackDirection=STACK_3)

### Add part to assembly - CompL2A ### 
mdb.models[MODEL_NAME].rootAssembly.Instance(dependent=ON, name='CompL2A-1', 
    part=mdb.models[MODEL_NAME].parts['CompL2A'])
    
### Create part surfaces - CompL2A ###
COMPL2A_TOP = ((COMPL2A_OR**2)-(1.0**2))**(0.5)
COMPL2A_BOT = ((COMPL2A_IR**2)-(1.0**2))**(0.5)
mdb.models[MODEL_NAME].rootAssembly.Surface(name='W_CompL2A_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL2A-1'].faces.findAt(((
    -1.0, COMPL2A_TOP, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='W_CompL2A_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL2A-1'].faces.findAt(((
    -1.0, COMPL2A_BOT, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='X_CompL2A_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL2A-1'].faces.findAt(((
    -1.0, COMPL2A_TOP, 1.0), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='X_CompL2A_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL2A-1'].faces.findAt(((
    -1.0, COMPL2A_BOT, 1.0), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Y_CompL2A_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL2A-1'].faces.findAt(((
    -COMPL2A_OR, 0.0, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Y_CompL2A_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL2A-1'].faces.findAt(((
    -COMPL2A_IR, 0.0, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Z_CompL2A_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL2A-1'].faces.findAt(((
    -COMPL2A_OR, 0.0, 1.0), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Z_CompL2A_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL2A-1'].faces.findAt(((
    -COMPL2A_IR, 0.0, 1.0), )))

### Mesh generation - CompL2A ### 
mdb.models[MODEL_NAME].parts['CompL2A'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL2A'].edges.findAt(
    ((0.0, (COMPL2A_IR+((COMPL2A_OR-COMPL2A_IR)/2)), PARTITION_XY), ), 
    ((0.0, (COMPL2A_IR+((COMPL2A_OR-COMPL2A_IR)/2)), CYL_LENGTH), ), 
    ((0.0, (COMPL2A_IR+((COMPL2A_OR-COMPL2A_IR)/2)), 0.0), ), ), 
    number=1)
mdb.models[MODEL_NAME].parts['CompL2A'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL2A'].edges.findAt(
    ((0.0, -(COMPL2A_IR+((COMPL2A_OR-COMPL2A_IR)/2)), PARTITION_XY), ), 
    ((0.0, -(COMPL2A_IR+((COMPL2A_OR-COMPL2A_IR)/2)), CYL_LENGTH), ), 
    ((0.0, -(COMPL2A_IR+((COMPL2A_OR-COMPL2A_IR)/2)), 0.0), ), 
    ), number=1)
mdb.models[MODEL_NAME].parts['CompL2A'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL2A'].edges.findAt(
    ((0.0, COMPL2A_OR, PARTITION_XY-1.0), ), 
    ((0.0, COMPL2A_IR, PARTITION_XY-1.0), ), 
    ((0.0, -COMPL2A_IR, PARTITION_XY-1.0), ), 
    ((0.0, -COMPL2A_OR, PARTITION_XY-1.0), ), 
    ((-((COMPL2A_OR**2)-((LINER_CONSTANT*COMPL2A_OR)**2))**0.5, (LINER_CONSTANT*COMPL2A_OR), CYL_LENGTH-1), ), 
    ((-((COMPL2A_IR**2)-((LINER_CONSTANT*COMPL2A_IR)**2))**0.5, (LINER_CONSTANT*COMPL2A_IR), CYL_LENGTH-1), ), 
    ), number=MESH_SEC_A)
mdb.models[MODEL_NAME].parts['CompL2A'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL2A'].edges.findAt(
    ((-((COMPL2A_IR**2)-((COMPL2A_IR-0.1)**2))**0.5, COMPL2A_IR-0.1, PARTITION_XY), ), 
    ((-((COMPL2A_OR**2)-((COMPL2A_IR-0.1)**2))**0.5, COMPL2A_IR-0.1, PARTITION_XY), ), 
    ((-((COMPL2A_IR**2)-((COMPL2A_IR-0.1)**2))**0.5, COMPL2A_IR-0.1, 0.0), ), 
    ((-((COMPL2A_IR**2)-((COMPL2A_IR-0.1)**2))**0.5, COMPL2A_IR-0.1, CYL_LENGTH), ), 
    ((-((COMPL2A_OR**2)-((COMPL2A_IR-0.1)**2))**0.5, COMPL2A_IR-0.1, CYL_LENGTH), ), 
    ((-((COMPL2A_OR**2)-((COMPL2A_IR-0.1)**2))**0.5, COMPL2A_IR-0.1, 0.0), ), ), 
    number=MESH_SEC_B)
mdb.models[MODEL_NAME].parts['CompL2A'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL2A'].edges.findAt(
    ((-((COMPL2A_OR**2)-((LINER_CONSTANT*COMPL2A_OR)**2))**0.5, (LINER_CONSTANT*COMPL2A_OR), PARTITION_XY-1), ), 
    ((-((COMPL2A_IR**2)-((LINER_CONSTANT*COMPL2A_IR)**2))**0.5, (LINER_CONSTANT*COMPL2A_IR), PARTITION_XY-1), ), 
    ((0.0, -COMPL2A_IR, 1.0), ), 
    ((0.0, -COMPL2A_OR, 1.0), ), 
    ((0.0, COMPL2A_IR, 1.0), ), 
    ((0.0, COMPL2A_OR, 1.0), ), ), 
    number=MESH_SEC_C)
mdb.models[MODEL_NAME].parts['CompL2A'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL2A'].edges.findAt(
    ((-COMPL2A_IR, 0.0, PARTITION_XY), ), 
    ((-COMPL2A_OR, 0.0, PARTITION_XY), ), 
    ((-COMPL2A_IR, 0.0, CYL_LENGTH), ), 
    ((-COMPL2A_OR, 0.0, CYL_LENGTH), ), 
    ((-COMPL2A_IR, 0.0, 0.0), ), 
    ((-COMPL2A_OR, 0.0, 0.0), ), ), number=MESH_SEC_D)

########## THIS SECTION CREATES COMPL2B ##################################################################################
### Part creation - CompL2B ###
mdb.models[MODEL_NAME].ConstrainedSketch(name='__profile__', sheetSize=
    200.0)
mdb.models[MODEL_NAME].sketches['__profile__'].ArcByCenterEnds(center=(0.0, 
    0.0), direction=COUNTERCLOCKWISE, point1=(0.0, 50.0), point2=(0.0, -50.0))
mdb.models[MODEL_NAME].sketches['__profile__'].ArcByCenterEnds(center=(0.0, 
    0.0), direction=COUNTERCLOCKWISE, point1=(0.0, 40.0), point2=(0.0, -40.0))
mdb.models[MODEL_NAME].sketches['__profile__'].Line(point1=(0.0, 50.0), 
    point2=(0.0, 40.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].VerticalConstraint(
    addUndoState=False, entity=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].PerpendicularConstraint(
    addUndoState=False, entity1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 
    0.0), ), entity2=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].Line(point1=(0.0, -40.0), 
    point2=(0.0, -50.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, -45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].VerticalConstraint(
    addUndoState=False, entity=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    -45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, -45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].PerpendicularConstraint(
    addUndoState=False, entity1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 
    0.0), ), entity2=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    -45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].RadialDimension(curve=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 
    0.0), ), radius=COMPL2B_OR, textPoint=(-59.0553855895996, 22.8824577331543))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].RadialDimension(curve=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 
    0.0), ), radius=COMPL2B_IR, textPoint=(-49.8903465270996, 17.7138023376465))
mdb.models[MODEL_NAME].Part(dimensionality=THREE_D, name='CompL2B', type=
    DEFORMABLE_BODY)
mdb.models[MODEL_NAME].parts['CompL2B'].BaseSolidExtrude(depth=CYL_LENGTH, sketch=
    mdb.models[MODEL_NAME].sketches['__profile__'])
del mdb.models[MODEL_NAME].sketches['__profile__']

### Part partitioning - CompL2B ### 
mdb.models[MODEL_NAME].parts['CompL2B'].DatumPlaneByPrincipalPlane(offset=PARTITION_XY
    , principalPlane=XYPLANE)
mdb.models[MODEL_NAME].parts['CompL2B'].PartitionCellByDatumPlane(cells=
    mdb.models[MODEL_NAME].parts['CompL2B'].cells.findAt(
    ((-COMPL2B_OR, 0.0, 0.0), )), 
    datumPlane= mdb.models[MODEL_NAME].parts['CompL2B'].datums[2])
mdb.models[MODEL_NAME].parts['CompL2B'].DatumPointByCoordinate(coords=
    (0.0, 0.0, 0.0))
mdb.models[MODEL_NAME].parts['CompL2B'].DatumPointByCoordinate(coords=
    (-((COMPL2B_OR**2)-((LINER_CONSTANT*COMPL2B_OR)**2))**0.5, (LINER_CONSTANT*COMPL2B_OR), 0.0))
mdb.models[MODEL_NAME].parts['CompL2B'].DatumPointByCoordinate(coords=
    (-((COMPL2B_OR**2)-((LINER_CONSTANT*COMPL2B_OR)**2))**0.5, (LINER_CONSTANT*COMPL2B_OR), CYL_LENGTH))
mdb.models[MODEL_NAME].parts['CompL2B'].PartitionCellByPlaneThreePoints(cells=
    mdb.models[MODEL_NAME].parts['CompL2B'].cells.findAt(
    ((-((COMPL2B_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, PARTITION_XY +1), ), 
    ((-((COMPL2B_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, PARTITION_XY -1), ), ), 
    point1= mdb.models[MODEL_NAME].parts['CompL2B'].datums[4], 
    point2= mdb.models[MODEL_NAME].parts['CompL2B'].datums[5], 
    point3= mdb.models[MODEL_NAME].parts['CompL2B'].datums[6])

### Assign section and orientations - CompL2B ###
mdb.models[MODEL_NAME].HomogeneousSolidSection(material='CFRP', name='CFRP', 
    thickness=None)
mdb.models[MODEL_NAME].parts['CompL2B'].Set(cells=
    mdb.models[MODEL_NAME].parts['CompL2B'].cells.findAt(
    ((-1.0, ((COMPL2B_OR**2)-(1.0**2))**(0.5), PARTITION_XY+1), ), 
    ((-1.0, ((COMPL2B_OR**2)-(1.0**2))**(0.5), 1.0), ), 
    ((0.0, -COMPL2B_OR, PARTITION_XY+1), ), 
    ((0.0, -COMPL2B_OR, 1.0), ), ), 
    name='Set-7')
mdb.models[MODEL_NAME].parts['CompL2B'].SectionAssignment(offset=0.0, 
    offsetField='', offsetType=MIDDLE_SURFACE, region=
    mdb.models[MODEL_NAME].parts['CompL2B'].sets['Set-7'], sectionName='CFRP'
    , thicknessAssignment=FROM_SECTION)
mdb.models[MODEL_NAME].parts['CompL2B'].Surface(name='Surf-3', side1Faces=
    mdb.models[MODEL_NAME].parts['CompL2B'].faces.findAt(
    ((-1.0, ((COMPL2B_OR**2)-(1.0**2))**(0.5), PARTITION_XY+1), )))
mdb.models[MODEL_NAME].parts['CompL2B'].Set(edges=
    mdb.models[MODEL_NAME].parts['CompL2B'].edges.findAt(
    ((-1.0, ((COMPL2B_OR**2)-(1.0**2))**(0.5), CYL_LENGTH), )), 
    name='Set-8')
mdb.models[MODEL_NAME].parts['CompL2B'].MaterialOrientation(
    additionalRotationField='', additionalRotationType=ROTATION_ANGLE, angle=
    COMPL2B_ANGLE, axis=AXIS_3, flipNormalDirection=False, flipPrimaryDirection=False, 
    normalAxisDefinition=SURFACE, normalAxisDirection=AXIS_3, normalAxisRegion=
    mdb.models[MODEL_NAME].parts['CompL2B'].surfaces['Surf-3'], 
    orientationType=DISCRETE, primaryAxisDefinition=EDGE, primaryAxisDirection=
    AXIS_1, primaryAxisRegion=
    mdb.models[MODEL_NAME].parts['CompL2B'].sets['Set-8'], region=Region(
    cells=mdb.models[MODEL_NAME].parts['CompL2B'].cells.findAt(
    ((-1.0, ((COMPL2B_OR**2)-(1.0**2))**(0.5), PARTITION_XY+1), ), 
    ((-1.0, ((COMPL2B_OR**2)-(1.0**2))**(0.5), 1.0), ), 
    ((0.0, -COMPL2B_OR, PARTITION_XY+1), ), 
    ((0.0, -COMPL2B_OR, 1.0), ), )), 
    stackDirection=STACK_3)

### Add part to assembly - CompL2B ### 
mdb.models[MODEL_NAME].rootAssembly.Instance(dependent=ON, name='CompL2B-1', 
    part=mdb.models[MODEL_NAME].parts['CompL2B'])
    
### Create part surfaces - CompL2B ###
COMPL2B_TOP = ((COMPL2B_OR**2)-(1.0**2))**(0.5)
COMPL2B_BOT = ((COMPL2B_IR**2)-(1.0**2))**(0.5)
mdb.models[MODEL_NAME].rootAssembly.Surface(name='W_CompL2B_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL2B-1'].faces.findAt(((
    -1.0, COMPL2B_TOP, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='W_CompL2B_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL2B-1'].faces.findAt(((
    -1.0, COMPL2B_BOT, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='X_CompL2B_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL2B-1'].faces.findAt(((
    -1.0, COMPL2B_TOP, 1.0), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='X_CompL2B_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL2B-1'].faces.findAt(((
    -1.0, COMPL2B_BOT, 1.0), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Y_CompL2B_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL2B-1'].faces.findAt(((
    -COMPL2B_OR, 0.0, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Y_CompL2B_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL2B-1'].faces.findAt(((
    -COMPL2B_IR, 0.0, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Z_CompL2B_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL2B-1'].faces.findAt(((
    -COMPL2B_OR, 0.0, 1.0), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Z_CompL2B_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL2B-1'].faces.findAt(((
    -COMPL2B_IR, 0.0, 1.0), )))

### Mesh generation - CompL2B ### 
mdb.models[MODEL_NAME].parts['CompL2B'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL2B'].edges.findAt(
    ((0.0, (COMPL2B_IR+((COMPL2B_OR-COMPL2B_IR)/2)), PARTITION_XY), ), 
    ((0.0, (COMPL2B_IR+((COMPL2B_OR-COMPL2B_IR)/2)), CYL_LENGTH), ), 
    ((0.0, (COMPL2B_IR+((COMPL2B_OR-COMPL2B_IR)/2)), 0.0), ), ), 
    number=1)
mdb.models[MODEL_NAME].parts['CompL2B'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL2B'].edges.findAt(
    ((0.0, -(COMPL2B_IR+((COMPL2B_OR-COMPL2B_IR)/2)), PARTITION_XY), ), 
    ((0.0, -(COMPL2B_IR+((COMPL2B_OR-COMPL2B_IR)/2)), CYL_LENGTH), ), 
    ((0.0, -(COMPL2B_IR+((COMPL2B_OR-COMPL2B_IR)/2)), 0.0), ), 
    ), number=1)
mdb.models[MODEL_NAME].parts['CompL2B'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL2B'].edges.findAt(
    ((0.0, COMPL2B_OR, PARTITION_XY-1.0), ), 
    ((0.0, COMPL2B_IR, PARTITION_XY-1.0), ), 
    ((0.0, -COMPL2B_IR, PARTITION_XY-1.0), ), 
    ((0.0, -COMPL2B_OR, PARTITION_XY-1.0), ), 
    ((-((COMPL2B_OR**2)-((LINER_CONSTANT*COMPL2B_OR)**2))**0.5, (LINER_CONSTANT*COMPL2B_OR), CYL_LENGTH-1), ), 
    ((-((COMPL2B_IR**2)-((LINER_CONSTANT*COMPL2B_IR)**2))**0.5, (LINER_CONSTANT*COMPL2B_IR), CYL_LENGTH-1), ), 
    ), number=MESH_SEC_A)
mdb.models[MODEL_NAME].parts['CompL2B'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL2B'].edges.findAt(
    ((-((COMPL2B_IR**2)-((COMPL2B_IR-0.1)**2))**0.5, COMPL2B_IR-0.1, PARTITION_XY), ), 
    ((-((COMPL2B_OR**2)-((COMPL2B_IR-0.1)**2))**0.5, COMPL2B_IR-0.1, PARTITION_XY), ), 
    ((-((COMPL2B_IR**2)-((COMPL2B_IR-0.1)**2))**0.5, COMPL2B_IR-0.1, 0.0), ), 
    ((-((COMPL2B_IR**2)-((COMPL2B_IR-0.1)**2))**0.5, COMPL2B_IR-0.1, CYL_LENGTH), ), 
    ((-((COMPL2B_OR**2)-((COMPL2B_IR-0.1)**2))**0.5, COMPL2B_IR-0.1, CYL_LENGTH), ), 
    ((-((COMPL2B_OR**2)-((COMPL2B_IR-0.1)**2))**0.5, COMPL2B_IR-0.1, 0.0), ), ), 
    number=MESH_SEC_B)
mdb.models[MODEL_NAME].parts['CompL2B'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL2B'].edges.findAt(
    ((-((COMPL2B_OR**2)-((LINER_CONSTANT*COMPL2B_OR)**2))**0.5, (LINER_CONSTANT*COMPL2B_OR), PARTITION_XY-1), ), 
    ((-((COMPL2B_IR**2)-((LINER_CONSTANT*COMPL2B_IR)**2))**0.5, (LINER_CONSTANT*COMPL2B_IR), PARTITION_XY-1), ), 
    ((0.0, -COMPL2B_IR, 1.0), ), 
    ((0.0, -COMPL2B_OR, 1.0), ), 
    ((0.0, COMPL2B_IR, 1.0), ), 
    ((0.0, COMPL2B_OR, 1.0), ), ), 
    number=MESH_SEC_C)
mdb.models[MODEL_NAME].parts['CompL2B'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL2B'].edges.findAt(
    ((-COMPL2B_IR, 0.0, PARTITION_XY), ), 
    ((-COMPL2B_OR, 0.0, PARTITION_XY), ), 
    ((-COMPL2B_IR, 0.0, CYL_LENGTH), ), 
    ((-COMPL2B_OR, 0.0, CYL_LENGTH), ), 
    ((-COMPL2B_IR, 0.0, 0.0), ), 
    ((-COMPL2B_OR, 0.0, 0.0), ), ), number=MESH_SEC_D)

########## THIS SECTION CREATES COMPL3 ##################################################################################
### Part creation - CompL3 ###
mdb.models[MODEL_NAME].ConstrainedSketch(name='__profile__', sheetSize=
    200.0)
mdb.models[MODEL_NAME].sketches['__profile__'].ArcByCenterEnds(center=(0.0, 
    0.0), direction=COUNTERCLOCKWISE, point1=(0.0, 50.0), point2=(0.0, -50.0))
mdb.models[MODEL_NAME].sketches['__profile__'].ArcByCenterEnds(center=(0.0, 
    0.0), direction=COUNTERCLOCKWISE, point1=(0.0, 40.0), point2=(0.0, -40.0))
mdb.models[MODEL_NAME].sketches['__profile__'].Line(point1=(0.0, 50.0), 
    point2=(0.0, 40.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].VerticalConstraint(
    addUndoState=False, entity=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].PerpendicularConstraint(
    addUndoState=False, entity1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 
    0.0), ), entity2=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].Line(point1=(0.0, -40.0), 
    point2=(0.0, -50.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, -45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].VerticalConstraint(
    addUndoState=False, entity=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    -45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, -45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].PerpendicularConstraint(
    addUndoState=False, entity1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 
    0.0), ), entity2=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    -45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].RadialDimension(curve=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 
    0.0), ), radius=COMPL3_OR, textPoint=(-59.0553855895996, 22.8824577331543))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].RadialDimension(curve=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 
    0.0), ), radius=COMPL3_IR, textPoint=(-49.8903465270996, 17.7138023376465))
mdb.models[MODEL_NAME].Part(dimensionality=THREE_D, name='CompL3', type=
    DEFORMABLE_BODY)
mdb.models[MODEL_NAME].parts['CompL3'].BaseSolidExtrude(depth=CYL_LENGTH, sketch=
    mdb.models[MODEL_NAME].sketches['__profile__'])
del mdb.models[MODEL_NAME].sketches['__profile__']

### Part partitioning - CompL3 ### 
mdb.models[MODEL_NAME].parts['CompL3'].DatumPlaneByPrincipalPlane(offset=PARTITION_XY
    , principalPlane=XYPLANE)
mdb.models[MODEL_NAME].parts['CompL3'].PartitionCellByDatumPlane(cells=
    mdb.models[MODEL_NAME].parts['CompL3'].cells.findAt(
    ((-COMPL3_OR, 0.0, 0.0), )), 
    datumPlane= mdb.models[MODEL_NAME].parts['CompL3'].datums[2])
mdb.models[MODEL_NAME].parts['CompL3'].DatumPointByCoordinate(coords=
    (0.0, 0.0, 0.0))
mdb.models[MODEL_NAME].parts['CompL3'].DatumPointByCoordinate(coords=
    (-((COMPL3_OR**2)-((LINER_CONSTANT*COMPL3_OR)**2))**0.5, (LINER_CONSTANT*COMPL3_OR), 0.0))
mdb.models[MODEL_NAME].parts['CompL3'].DatumPointByCoordinate(coords=
    (-((COMPL3_OR**2)-((LINER_CONSTANT*COMPL3_OR)**2))**0.5, (LINER_CONSTANT*COMPL3_OR), CYL_LENGTH))
mdb.models[MODEL_NAME].parts['CompL3'].PartitionCellByPlaneThreePoints(cells=
    mdb.models[MODEL_NAME].parts['CompL3'].cells.findAt(
    ((-((COMPL3_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, PARTITION_XY +1), ), 
    ((-((COMPL3_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, PARTITION_XY -1), ), ), 
    point1= mdb.models[MODEL_NAME].parts['CompL3'].datums[4], 
    point2= mdb.models[MODEL_NAME].parts['CompL3'].datums[5], 
    point3= mdb.models[MODEL_NAME].parts['CompL3'].datums[6])

### Assign section and orientations - CompL3 ###
mdb.models[MODEL_NAME].HomogeneousSolidSection(material='CFRP', name='CFRP', 
    thickness=None)
mdb.models[MODEL_NAME].parts['CompL3'].Set(cells=
    mdb.models[MODEL_NAME].parts['CompL3'].cells.findAt(
    ((-1.0, ((COMPL3_OR**2)-(1.0**2))**(0.5), PARTITION_XY+1), ), 
    ((-1.0, ((COMPL3_OR**2)-(1.0**2))**(0.5), 1.0), ), 
    ((0.0, -COMPL3_OR, PARTITION_XY+1), ), 
    ((0.0, -COMPL3_OR, 1.0), ), ), 
    name='Set-7')
mdb.models[MODEL_NAME].parts['CompL3'].SectionAssignment(offset=0.0, 
    offsetField='', offsetType=MIDDLE_SURFACE, region=
    mdb.models[MODEL_NAME].parts['CompL3'].sets['Set-7'], sectionName='CFRP'
    , thicknessAssignment=FROM_SECTION)
mdb.models[MODEL_NAME].parts['CompL3'].Surface(name='Surf-3', side1Faces=
    mdb.models[MODEL_NAME].parts['CompL3'].faces.findAt(
    ((-1.0, ((COMPL3_OR**2)-(1.0**2))**(0.5), PARTITION_XY+1), )))
mdb.models[MODEL_NAME].parts['CompL3'].Set(edges=
    mdb.models[MODEL_NAME].parts['CompL3'].edges.findAt(
    ((-1.0, ((COMPL3_OR**2)-(1.0**2))**(0.5), CYL_LENGTH), )), 
    name='Set-8')
mdb.models[MODEL_NAME].parts['CompL3'].MaterialOrientation(
    additionalRotationField='', additionalRotationType=ROTATION_ANGLE, angle=
    COMPL3_ANGLE, axis=AXIS_3, flipNormalDirection=False, flipPrimaryDirection=False, 
    normalAxisDefinition=SURFACE, normalAxisDirection=AXIS_3, normalAxisRegion=
    mdb.models[MODEL_NAME].parts['CompL3'].surfaces['Surf-3'], 
    orientationType=DISCRETE, primaryAxisDefinition=EDGE, primaryAxisDirection=
    AXIS_1, primaryAxisRegion=
    mdb.models[MODEL_NAME].parts['CompL3'].sets['Set-8'], region=Region(
    cells=mdb.models[MODEL_NAME].parts['CompL3'].cells.findAt(
    ((-1.0, ((COMPL3_OR**2)-(1.0**2))**(0.5), PARTITION_XY+1), ), 
    ((-1.0, ((COMPL3_OR**2)-(1.0**2))**(0.5), 1.0), ), 
    ((0.0, -COMPL3_OR, PARTITION_XY+1), ), 
    ((0.0, -COMPL3_OR, 1.0), ), )), 
    stackDirection=STACK_3)

### Add part to assembly - CompL3 ### 
mdb.models[MODEL_NAME].rootAssembly.Instance(dependent=ON, name='CompL3-1', 
    part=mdb.models[MODEL_NAME].parts['CompL3'])
    
### Create part surfaces - CompL3 ###
COMPL3_TOP = ((COMPL3_OR**2)-(1.0**2))**(0.5)
COMPL3_BOT = ((COMPL3_IR**2)-(1.0**2))**(0.5)
mdb.models[MODEL_NAME].rootAssembly.Surface(name='W_CompL3_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL3-1'].faces.findAt(((
    -1.0, COMPL3_TOP, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='W_CompL3_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL3-1'].faces.findAt(((
    -1.0, COMPL3_BOT, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='X_CompL3_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL3-1'].faces.findAt(((
    -1.0, COMPL3_TOP, 1.0), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='X_CompL3_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL3-1'].faces.findAt(((
    -1.0, COMPL3_BOT, 1.0), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Y_CompL3_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL3-1'].faces.findAt(((
    -COMPL3_OR, 0.0, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Y_CompL3_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL3-1'].faces.findAt(((
    -COMPL3_IR, 0.0, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Z_CompL3_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL3-1'].faces.findAt(((
    -COMPL3_OR, 0.0, 1.0), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Z_CompL3_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL3-1'].faces.findAt(((
    -COMPL3_IR, 0.0, 1.0), )))
    
### Mesh generation - CompL3 ### 
mdb.models[MODEL_NAME].parts['CompL3'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL3'].edges.findAt(
    ((0.0, (COMPL3_IR+((COMPL3_OR-COMPL3_IR)/2)), PARTITION_XY), ), 
    ((0.0, (COMPL3_IR+((COMPL3_OR-COMPL3_IR)/2)), CYL_LENGTH), ), 
    ((0.0, (COMPL3_IR+((COMPL3_OR-COMPL3_IR)/2)), 0.0), ), ), 
    number=1)
mdb.models[MODEL_NAME].parts['CompL3'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL3'].edges.findAt(
    ((0.0, -(COMPL3_IR+((COMPL3_OR-COMPL3_IR)/2)), PARTITION_XY), ), 
    ((0.0, -(COMPL3_IR+((COMPL3_OR-COMPL3_IR)/2)), CYL_LENGTH), ), 
    ((0.0, -(COMPL3_IR+((COMPL3_OR-COMPL3_IR)/2)), 0.0), ), 
    ), number=1)
mdb.models[MODEL_NAME].parts['CompL3'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL3'].edges.findAt(
    ((0.0, COMPL3_OR, PARTITION_XY-1.0), ), 
    ((0.0, COMPL3_IR, PARTITION_XY-1.0), ), 
    ((0.0, -COMPL3_IR, PARTITION_XY-1.0), ), 
    ((0.0, -COMPL3_OR, PARTITION_XY-1.0), ), 
    ((-((COMPL3_OR**2)-((LINER_CONSTANT*COMPL3_OR)**2))**0.5, (LINER_CONSTANT*COMPL3_OR), CYL_LENGTH-1), ), 
    ((-((COMPL3_IR**2)-((LINER_CONSTANT*COMPL3_IR)**2))**0.5, (LINER_CONSTANT*COMPL3_IR), CYL_LENGTH-1), ), 
    ), number=MESH_SEC_A)
mdb.models[MODEL_NAME].parts['CompL3'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL3'].edges.findAt(
    ((-((COMPL3_IR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, PARTITION_XY), ), 
    ((-((COMPL3_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, PARTITION_XY), ), 
    ((-((COMPL3_IR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, 0.0), ), 
    ((-((COMPL3_IR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, CYL_LENGTH), ), 
    ((-((COMPL3_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, CYL_LENGTH), ), 
    ((-((COMPL3_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, 0.0), ), ), 
    number=MESH_SEC_B)
mdb.models[MODEL_NAME].parts['CompL3'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL3'].edges.findAt(
    ((-((COMPL3_OR**2)-((LINER_CONSTANT*COMPL3_OR)**2))**0.5, (LINER_CONSTANT*COMPL3_OR), PARTITION_XY-1), ), 
    ((-((COMPL3_IR**2)-((LINER_CONSTANT*COMPL3_IR)**2))**0.5, (LINER_CONSTANT*COMPL3_IR), PARTITION_XY-1), ), 
    ((0.0, -COMPL3_IR, 1.0), ), 
    ((0.0, -COMPL3_OR, 1.0), ), 
    ((0.0, COMPL3_IR, 1.0), ), 
    ((0.0, COMPL3_OR, 1.0), ), ), 
    number=MESH_SEC_C)
mdb.models[MODEL_NAME].parts['CompL3'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL3'].edges.findAt(
    ((-COMPL3_IR, 0.0, PARTITION_XY), ), 
    ((-COMPL3_OR, 0.0, PARTITION_XY), ), 
    ((-COMPL3_IR, 0.0, CYL_LENGTH), ), 
    ((-COMPL3_OR, 0.0, CYL_LENGTH), ), 
    ((-COMPL3_IR, 0.0, 0.0), ), 
    ((-COMPL3_OR, 0.0, 0.0), ), ), number=MESH_SEC_D)
    
########## THIS SECTION CREATES COMPL4A ########################################################################
### Part creation - CompL4A ###
mdb.models[MODEL_NAME].ConstrainedSketch(name='__profile__', sheetSize=
    200.0)
mdb.models[MODEL_NAME].sketches['__profile__'].ArcByCenterEnds(center=(0.0, 
    0.0), direction=COUNTERCLOCKWISE, point1=(0.0, 50.0), point2=(0.0, -50.0))
mdb.models[MODEL_NAME].sketches['__profile__'].ArcByCenterEnds(center=(0.0, 
    0.0), direction=COUNTERCLOCKWISE, point1=(0.0, 40.0), point2=(0.0, -40.0))
mdb.models[MODEL_NAME].sketches['__profile__'].Line(point1=(0.0, 50.0), 
    point2=(0.0, 40.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].VerticalConstraint(
    addUndoState=False, entity=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].PerpendicularConstraint(
    addUndoState=False, entity1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 
    0.0), ), entity2=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].Line(point1=(0.0, -40.0), 
    point2=(0.0, -50.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, -45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].VerticalConstraint(
    addUndoState=False, entity=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    -45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, -45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].PerpendicularConstraint(
    addUndoState=False, entity1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 
    0.0), ), entity2=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    -45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].RadialDimension(curve=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 
    0.0), ), radius=COMPL4A_OR, textPoint=(-59.0553855895996, 22.8824577331543))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].RadialDimension(curve=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 
    0.0), ), radius=COMPL4A_IR, textPoint=(-49.8903465270996, 17.7138023376465))
mdb.models[MODEL_NAME].Part(dimensionality=THREE_D, name='CompL4A', type=
    DEFORMABLE_BODY)
mdb.models[MODEL_NAME].parts['CompL4A'].BaseSolidExtrude(depth=CYL_LENGTH, sketch=
    mdb.models[MODEL_NAME].sketches['__profile__'])
del mdb.models[MODEL_NAME].sketches['__profile__']

### Part partitioning - CompL4A ### 
mdb.models[MODEL_NAME].parts['CompL4A'].DatumPlaneByPrincipalPlane(offset=PARTITION_XY
    , principalPlane=XYPLANE)
mdb.models[MODEL_NAME].parts['CompL4A'].PartitionCellByDatumPlane(cells=
    mdb.models[MODEL_NAME].parts['CompL4A'].cells.findAt(
    ((-COMPL4A_OR, 0.0, 0.0), )), 
    datumPlane= mdb.models[MODEL_NAME].parts['CompL4A'].datums[2])
mdb.models[MODEL_NAME].parts['CompL4A'].DatumPointByCoordinate(coords=
    (0.0, 0.0, 0.0))
mdb.models[MODEL_NAME].parts['CompL4A'].DatumPointByCoordinate(coords=
    (-((COMPL4A_OR**2)-((LINER_CONSTANT*COMPL4A_OR)**2))**0.5, (LINER_CONSTANT*COMPL4A_OR), 0.0))
mdb.models[MODEL_NAME].parts['CompL4A'].DatumPointByCoordinate(coords=
    (-((COMPL4A_OR**2)-((LINER_CONSTANT*COMPL4A_OR)**2))**0.5, (LINER_CONSTANT*COMPL4A_OR), CYL_LENGTH))
mdb.models[MODEL_NAME].parts['CompL4A'].PartitionCellByPlaneThreePoints(cells=
    mdb.models[MODEL_NAME].parts['CompL4A'].cells.findAt(
    ((-((COMPL4A_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, PARTITION_XY +1), ), 
    ((-((COMPL4A_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, PARTITION_XY -1), ), ), 
    point1= mdb.models[MODEL_NAME].parts['CompL4A'].datums[4], 
    point2= mdb.models[MODEL_NAME].parts['CompL4A'].datums[5], 
    point3= mdb.models[MODEL_NAME].parts['CompL4A'].datums[6])

### Assign section and orientations - CompL4A ###
mdb.models[MODEL_NAME].HomogeneousSolidSection(material='CFRP', name='CFRP', 
    thickness=None)
mdb.models[MODEL_NAME].parts['CompL4A'].Set(cells=
    mdb.models[MODEL_NAME].parts['CompL4A'].cells.findAt(
    ((-1.0, ((COMPL4A_OR**2)-(1.0**2))**(0.5), PARTITION_XY+1), ), 
    ((-1.0, ((COMPL4A_OR**2)-(1.0**2))**(0.5), 1.0), ), 
    ((0.0, -COMPL4A_OR, PARTITION_XY+1), ), ((0.0, -COMPL4A_OR, 1.0), ), ), 
    name='Set-7')
mdb.models[MODEL_NAME].parts['CompL4A'].SectionAssignment(offset=0.0, 
    offsetField='', offsetType=MIDDLE_SURFACE, region=
    mdb.models[MODEL_NAME].parts['CompL4A'].sets['Set-7'], sectionName='CFRP'
    , thicknessAssignment=FROM_SECTION)
mdb.models[MODEL_NAME].parts['CompL4A'].Surface(name='Surf-3', side1Faces=
    mdb.models[MODEL_NAME].parts['CompL4A'].faces.findAt(
    ((-1.0, ((COMPL4A_OR**2)-(1.0**2))**(0.5), PARTITION_XY+1), )))
mdb.models[MODEL_NAME].parts['CompL4A'].Set(edges=
    mdb.models[MODEL_NAME].parts['CompL4A'].edges.findAt(
    ((-1.0, ((COMPL4A_OR**2)-(1.0**2))**(0.5), CYL_LENGTH), )), 
    name='Set-8')
mdb.models[MODEL_NAME].parts['CompL4A'].MaterialOrientation(
    additionalRotationField='', additionalRotationType=ROTATION_ANGLE, angle=
    COMPL4A_ANGLE, axis=AXIS_3, flipNormalDirection=False, flipPrimaryDirection=False, 
    normalAxisDefinition=SURFACE, normalAxisDirection=AXIS_3, normalAxisRegion=
    mdb.models[MODEL_NAME].parts['CompL4A'].surfaces['Surf-3'], 
    orientationType=DISCRETE, primaryAxisDefinition=EDGE, primaryAxisDirection=
    AXIS_1, primaryAxisRegion=
    mdb.models[MODEL_NAME].parts['CompL4A'].sets['Set-8'], region=Region(
    cells=mdb.models[MODEL_NAME].parts['CompL4A'].cells.findAt(
    ((-1.0, ((COMPL4A_OR**2)-(1.0**2))**(0.5), PARTITION_XY+1), ), 
    ((-1.0, ((COMPL4A_OR**2)-(1.0**2))**(0.5), 1.0), ), 
    ((0.0, -COMPL4A_OR, PARTITION_XY+1), ), 
    ((0.0, -COMPL4A_OR, 1.0), ), )), 
    stackDirection=STACK_3)

### Add part to assembly - CompL4A ### 
mdb.models[MODEL_NAME].rootAssembly.Instance(dependent=ON, name='CompL4A-1', 
    part=mdb.models[MODEL_NAME].parts['CompL4A'])
    
### Create part surfaces - CompL4A ###
COMPL4A_TOP = ((COMPL4A_OR**2)-(1.0**2))**(0.5)
COMPL4A_BOT = ((COMPL4A_IR**2)-(1.0**2))**(0.5)
mdb.models[MODEL_NAME].rootAssembly.Surface(name='W_CompL4A_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL4A-1'].faces.findAt(((
    -1.0, COMPL4A_TOP, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='W_CompL4A_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL4A-1'].faces.findAt(((
    -1.0, COMPL4A_BOT, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='X_CompL4A_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL4A-1'].faces.findAt(((
    -1.0, COMPL4A_TOP, 1.0), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='X_CompL4A_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL4A-1'].faces.findAt(((
    -1.0, COMPL4A_BOT, 1.0), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Y_CompL4A_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL4A-1'].faces.findAt(((
    -COMPL4A_OR, 0.0, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Y_CompL4A_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL4A-1'].faces.findAt(((
    -COMPL4A_IR, 0.0, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Z_CompL4A_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL4A-1'].faces.findAt(((
    -COMPL4A_OR, 0.0, 1.0), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Z_CompL4A_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL4A-1'].faces.findAt(((
    -COMPL4A_IR, 0.0, 1.0), )))
    
### Mesh generation - CompL4A ### 
mdb.models[MODEL_NAME].parts['CompL4A'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL4A'].edges.findAt(
    ((0.0, (COMPL4A_IR+((COMPL4A_OR-COMPL4A_IR)/2)), PARTITION_XY), ), 
    ((0.0, (COMPL4A_IR+((COMPL4A_OR-COMPL4A_IR)/2)), CYL_LENGTH), ), 
    ((0.0, (COMPL4A_IR+((COMPL4A_OR-COMPL4A_IR)/2)), 0.0), ), ), 
    number=1)
mdb.models[MODEL_NAME].parts['CompL4A'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL4A'].edges.findAt(
    ((0.0, -(COMPL4A_IR+((COMPL4A_OR-COMPL4A_IR)/2)), PARTITION_XY), ), 
    ((0.0, -(COMPL4A_IR+((COMPL4A_OR-COMPL4A_IR)/2)), CYL_LENGTH), ), 
    ((0.0, -(COMPL4A_IR+((COMPL4A_OR-COMPL4A_IR)/2)), 0.0), ), 
    ), number=1)
mdb.models[MODEL_NAME].parts['CompL4A'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL4A'].edges.findAt(
    ((0.0, COMPL4A_OR, PARTITION_XY-1.0), ), 
    ((0.0, COMPL4A_IR, PARTITION_XY-1.0), ), 
    ((0.0, -COMPL4A_IR, PARTITION_XY-1.0), ), 
    ((0.0, -COMPL4A_OR, PARTITION_XY-1.0), ), 
    ((-((COMPL4A_OR**2)-((LINER_CONSTANT*COMPL4A_OR)**2))**0.5, (LINER_CONSTANT*COMPL4A_OR), CYL_LENGTH-1), ), 
    ((-((COMPL4A_IR**2)-((LINER_CONSTANT*COMPL4A_IR)**2))**0.5, (LINER_CONSTANT*COMPL4A_IR), CYL_LENGTH-1), ), 
    ), number=MESH_SEC_A)
mdb.models[MODEL_NAME].parts['CompL4A'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL4A'].edges.findAt(
    ((-((COMPL4A_IR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, PARTITION_XY), ), 
    ((-((COMPL4A_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, PARTITION_XY), ), 
    ((-((COMPL4A_IR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, 0.0), ), 
    ((-((COMPL4A_IR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, CYL_LENGTH), ), 
    ((-((COMPL4A_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, CYL_LENGTH), ), 
    ((-((COMPL4A_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, 0.0), ), ), 
    number=MESH_SEC_B)
mdb.models[MODEL_NAME].parts['CompL4A'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL4A'].edges.findAt(
    ((-((COMPL4A_OR**2)-((LINER_CONSTANT*COMPL4A_OR)**2))**0.5, (LINER_CONSTANT*COMPL4A_OR), PARTITION_XY-1), ), 
    ((-((COMPL4A_IR**2)-((LINER_CONSTANT*COMPL4A_IR)**2))**0.5, (LINER_CONSTANT*COMPL4A_IR), PARTITION_XY-1), ), 
    ((0.0, -COMPL4A_IR, 1.0), ), 
    ((0.0, -COMPL4A_OR, 1.0), ), 
    ((0.0, COMPL4A_IR, 1.0), ), 
    ((0.0, COMPL4A_OR, 1.0), ), ), 
    number=MESH_SEC_C)
mdb.models[MODEL_NAME].parts['CompL4A'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL4A'].edges.findAt(
    ((-COMPL4A_IR, 0.0, PARTITION_XY), ), 
    ((-COMPL4A_OR, 0.0, PARTITION_XY), ), 
    ((-COMPL4A_IR, 0.0, CYL_LENGTH), ), 
    ((-COMPL4A_OR, 0.0, CYL_LENGTH), ), 
    ((-COMPL4A_IR, 0.0, 0.0), ), 
    ((-COMPL4A_OR, 0.0, 0.0), ), ), number=MESH_SEC_D)

########## THIS SECTION CREATES COMPL4B ##################################################################################
### Part creation - CompL4B ###
mdb.models[MODEL_NAME].ConstrainedSketch(name='__profile__', sheetSize=
    200.0)
mdb.models[MODEL_NAME].sketches['__profile__'].ArcByCenterEnds(center=(0.0, 
    0.0), direction=COUNTERCLOCKWISE, point1=(0.0, 50.0), point2=(0.0, -50.0))
mdb.models[MODEL_NAME].sketches['__profile__'].ArcByCenterEnds(center=(0.0, 
    0.0), direction=COUNTERCLOCKWISE, point1=(0.0, 40.0), point2=(0.0, -40.0))
mdb.models[MODEL_NAME].sketches['__profile__'].Line(point1=(0.0, 50.0), 
    point2=(0.0, 40.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].VerticalConstraint(
    addUndoState=False, entity=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].PerpendicularConstraint(
    addUndoState=False, entity1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 
    0.0), ), entity2=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].Line(point1=(0.0, -40.0), 
    point2=(0.0, -50.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, -45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].VerticalConstraint(
    addUndoState=False, entity=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    -45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, -45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].PerpendicularConstraint(
    addUndoState=False, entity1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 
    0.0), ), entity2=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    -45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].RadialDimension(curve=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 
    0.0), ), radius=COMPL4B_OR, textPoint=(-59.0553855895996, 22.8824577331543))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].RadialDimension(curve=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 
    0.0), ), radius=COMPL4B_IR, textPoint=(-49.8903465270996, 17.7138023376465))
mdb.models[MODEL_NAME].Part(dimensionality=THREE_D, name='CompL4B', type=
    DEFORMABLE_BODY)
mdb.models[MODEL_NAME].parts['CompL4B'].BaseSolidExtrude(depth=CYL_LENGTH, sketch=
    mdb.models[MODEL_NAME].sketches['__profile__'])
del mdb.models[MODEL_NAME].sketches['__profile__']

### Part partitioning - CompL4B ### 
mdb.models[MODEL_NAME].parts['CompL4B'].DatumPlaneByPrincipalPlane(offset=PARTITION_XY
    , principalPlane=XYPLANE)
mdb.models[MODEL_NAME].parts['CompL4B'].PartitionCellByDatumPlane(cells=
    mdb.models[MODEL_NAME].parts['CompL4B'].cells.findAt(
    ((-COMPL4B_OR, 0.0, 0.0), )), 
    datumPlane= mdb.models[MODEL_NAME].parts['CompL4B'].datums[2])
mdb.models[MODEL_NAME].parts['CompL4B'].DatumPointByCoordinate(coords=
    (0.0, 0.0, 0.0))
mdb.models[MODEL_NAME].parts['CompL4B'].DatumPointByCoordinate(coords=
    (-((COMPL4B_OR**2)-((LINER_CONSTANT*COMPL4B_OR)**2))**0.5, (LINER_CONSTANT*COMPL4B_OR), 0.0))
mdb.models[MODEL_NAME].parts['CompL4B'].DatumPointByCoordinate(coords=
    (-((COMPL4B_OR**2)-((LINER_CONSTANT*COMPL4B_OR)**2))**0.5, (LINER_CONSTANT*COMPL4B_OR), CYL_LENGTH))
mdb.models[MODEL_NAME].parts['CompL4B'].PartitionCellByPlaneThreePoints(cells=
    mdb.models[MODEL_NAME].parts['CompL4B'].cells.findAt(
    ((-((COMPL4B_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, PARTITION_XY +1), ), 
    ((-((COMPL4B_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, PARTITION_XY -1), ), ), 
    point1= mdb.models[MODEL_NAME].parts['CompL4B'].datums[4], 
    point2= mdb.models[MODEL_NAME].parts['CompL4B'].datums[5], 
    point3= mdb.models[MODEL_NAME].parts['CompL4B'].datums[6])

### Assign section and orientations - CompL4B ###
mdb.models[MODEL_NAME].HomogeneousSolidSection(material='CFRP', name='CFRP', 
    thickness=None)
mdb.models[MODEL_NAME].parts['CompL4B'].Set(cells=
    mdb.models[MODEL_NAME].parts['CompL4B'].cells.findAt(
    ((-1.0, ((COMPL4B_OR**2)-(1.0**2))**(0.5), PARTITION_XY+1), ), 
    ((-1.0, ((COMPL4B_OR**2)-(1.0**2))**(0.5), 1.0), ), 
    ((0.0, -COMPL4B_OR, PARTITION_XY+1), ), 
    ((0.0, -COMPL4B_OR, 1.0), ), ), 
    name='Set-7')
mdb.models[MODEL_NAME].parts['CompL4B'].SectionAssignment(offset=0.0, 
    offsetField='', offsetType=MIDDLE_SURFACE, region=
    mdb.models[MODEL_NAME].parts['CompL4B'].sets['Set-7'], sectionName='CFRP'
    , thicknessAssignment=FROM_SECTION)
mdb.models[MODEL_NAME].parts['CompL4B'].Surface(name='Surf-3', side1Faces=
    mdb.models[MODEL_NAME].parts['CompL4B'].faces.findAt(
    ((-1.0, ((COMPL4B_OR**2)-(1.0**2))**(0.5), PARTITION_XY+1), )))
mdb.models[MODEL_NAME].parts['CompL4B'].Set(edges=
    mdb.models[MODEL_NAME].parts['CompL4B'].edges.findAt(
    ((-1.0, ((COMPL4B_OR**2)-(1.0**2))**(0.5), CYL_LENGTH), )), 
    name='Set-8')
mdb.models[MODEL_NAME].parts['CompL4B'].MaterialOrientation(
    additionalRotationField='', additionalRotationType=ROTATION_ANGLE, angle=
    -19.0, axis=AXIS_3, flipNormalDirection=False, flipPrimaryDirection=False, 
    normalAxisDefinition=SURFACE, normalAxisDirection=AXIS_3, normalAxisRegion=
    mdb.models[MODEL_NAME].parts['CompL4B'].surfaces['Surf-3'], 
    orientationType=DISCRETE, primaryAxisDefinition=EDGE, primaryAxisDirection=
    AXIS_1, primaryAxisRegion=
    mdb.models[MODEL_NAME].parts['CompL4B'].sets['Set-8'], region=Region(
    cells=mdb.models[MODEL_NAME].parts['CompL4B'].cells.findAt(
    ((-1.0, ((COMPL4B_OR**2)-(1.0**2))**(0.5), PARTITION_XY+1), ), 
    ((-1.0, ((COMPL4B_OR**2)-(1.0**2))**(0.5), 1.0), ), 
    ((0.0, -COMPL4B_OR, PARTITION_XY+1), ), 
    ((0.0, -COMPL4B_OR, 1.0), ), )), 
    stackDirection=STACK_3)

### Add part to assembly - CompL4B ### 
mdb.models[MODEL_NAME].rootAssembly.Instance(dependent=ON, name='CompL4B-1', 
    part=mdb.models[MODEL_NAME].parts['CompL4B'])
    
### Create part surfaces - CompL4B ###
COMPL4B_TOP = ((COMPL4B_OR**2)-(1.0**2))**(0.5)
COMPL4B_BOT = ((COMPL4B_IR**2)-(1.0**2))**(0.5)
mdb.models[MODEL_NAME].rootAssembly.Surface(name='W_CompL4B_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL4B-1'].faces.findAt(((
    -1.0, COMPL4B_TOP, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='W_CompL4B_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL4B-1'].faces.findAt(((
    -1.0, COMPL4B_BOT, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='X_CompL4B_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL4B-1'].faces.findAt(((
    -1.0, COMPL4B_TOP, 1.0), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='X_CompL4B_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL4B-1'].faces.findAt(((
    -1.0, COMPL4B_BOT, 1.0), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Y_CompL4B_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL4B-1'].faces.findAt(((
    -COMPL4B_OR, 0.0, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Y_CompL4B_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL4B-1'].faces.findAt(((
    -COMPL4B_IR, 0.0, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Z_CompL4B_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL4B-1'].faces.findAt(((
    -COMPL4B_OR, 0.0, 1.0), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Z_CompL4B_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL4B-1'].faces.findAt(((
    -COMPL4B_IR, 0.0, 1.0), )))
    
### Mesh generation - CompL4B ### 
mdb.models[MODEL_NAME].parts['CompL4B'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL4B'].edges.findAt(
    ((0.0, (COMPL4B_IR+((COMPL4B_OR-COMPL4B_IR)/2)), PARTITION_XY), ), 
    ((0.0, (COMPL4B_IR+((COMPL4B_OR-COMPL4B_IR)/2)), CYL_LENGTH), ), 
    ((0.0, (COMPL4B_IR+((COMPL4B_OR-COMPL4B_IR)/2)), 0.0), ), ), 
    number=1)
mdb.models[MODEL_NAME].parts['CompL4B'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL4B'].edges.findAt(
    ((0.0, -(COMPL4B_IR+((COMPL4B_OR-COMPL4B_IR)/2)), PARTITION_XY), ), 
    ((0.0, -(COMPL4B_IR+((COMPL4B_OR-COMPL4B_IR)/2)), CYL_LENGTH), ), 
    ((0.0, -(COMPL4B_IR+((COMPL4B_OR-COMPL4B_IR)/2)), 0.0), ), 
    ), number=1)
mdb.models[MODEL_NAME].parts['CompL4B'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL4B'].edges.findAt(
    ((0.0, COMPL4B_OR, PARTITION_XY-1.0), ), 
    ((0.0, COMPL4B_IR, PARTITION_XY-1.0), ), 
    ((0.0, -COMPL4B_IR, PARTITION_XY-1.0), ), 
    ((0.0, -COMPL4B_OR, PARTITION_XY-1.0), ), 
    ((-((COMPL4B_OR**2)-((LINER_CONSTANT*COMPL4B_OR)**2))**0.5, (LINER_CONSTANT*COMPL4B_OR), CYL_LENGTH-1), ), 
    ((-((COMPL4B_IR**2)-((LINER_CONSTANT*COMPL4B_IR)**2))**0.5, (LINER_CONSTANT*COMPL4B_IR), CYL_LENGTH-1), ), 
    ), number=MESH_SEC_A)
mdb.models[MODEL_NAME].parts['CompL4B'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL4B'].edges.findAt(
    ((-((COMPL4B_IR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, PARTITION_XY), ), 
    ((-((COMPL4B_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, PARTITION_XY), ), 
    ((-((COMPL4B_IR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, 0.0), ), 
    ((-((COMPL4B_IR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, CYL_LENGTH), ), 
    ((-((COMPL4B_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, CYL_LENGTH), ), 
    ((-((COMPL4B_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, 0.0), ), ), 
    number=MESH_SEC_B)
mdb.models[MODEL_NAME].parts['CompL4B'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL4B'].edges.findAt(
    ((-((COMPL4B_OR**2)-((LINER_CONSTANT*COMPL4B_OR)**2))**0.5, (LINER_CONSTANT*COMPL4B_OR), PARTITION_XY-1), ), 
    ((-((COMPL4B_IR**2)-((LINER_CONSTANT*COMPL4B_IR)**2))**0.5, (LINER_CONSTANT*COMPL4B_IR), PARTITION_XY-1), ), 
    ((0.0, -COMPL4B_IR, 1.0), ), 
    ((0.0, -COMPL4B_OR, 1.0), ), 
    ((0.0, COMPL4B_IR, 1.0), ), 
    ((0.0, COMPL4B_OR, 1.0), ), ), 
    number=MESH_SEC_C)
mdb.models[MODEL_NAME].parts['CompL4B'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL4B'].edges.findAt(
    ((-COMPL4B_IR, 0.0, PARTITION_XY), ), 
    ((-COMPL4B_OR, 0.0, PARTITION_XY), ), 
    ((-COMPL4B_IR, 0.0, CYL_LENGTH), ), 
    ((-COMPL4B_OR, 0.0, CYL_LENGTH), ), 
    ((-COMPL4B_IR, 0.0, 0.0), ), 
    ((-COMPL4B_OR, 0.0, 0.0), ), ), number=MESH_SEC_D)

########## THIS SECTION CREATES COMPL5 ##################################################################################
### Part creation - CompL5 ###
mdb.models[MODEL_NAME].ConstrainedSketch(name='__profile__', sheetSize=
    200.0)
mdb.models[MODEL_NAME].sketches['__profile__'].ArcByCenterEnds(center=(0.0, 
    0.0), direction=COUNTERCLOCKWISE, point1=(0.0, 50.0), point2=(0.0, -50.0))
mdb.models[MODEL_NAME].sketches['__profile__'].ArcByCenterEnds(center=(0.0, 
    0.0), direction=COUNTERCLOCKWISE, point1=(0.0, 40.0), point2=(0.0, -40.0))
mdb.models[MODEL_NAME].sketches['__profile__'].Line(point1=(0.0, 50.0), 
    point2=(0.0, 40.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].VerticalConstraint(
    addUndoState=False, entity=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].PerpendicularConstraint(
    addUndoState=False, entity1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 
    0.0), ), entity2=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].Line(point1=(0.0, -40.0), 
    point2=(0.0, -50.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, -45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].VerticalConstraint(
    addUndoState=False, entity=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    -45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, -45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].PerpendicularConstraint(
    addUndoState=False, entity1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 
    0.0), ), entity2=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    -45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].RadialDimension(curve=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 
    0.0), ), radius=COMPL5_OR, textPoint=(-59.0553855895996, 22.8824577331543))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].RadialDimension(curve=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 
    0.0), ), radius=COMPL5_IR, textPoint=(-49.8903465270996, 17.7138023376465))
mdb.models[MODEL_NAME].Part(dimensionality=THREE_D, name='CompL5', type=
    DEFORMABLE_BODY)
mdb.models[MODEL_NAME].parts['CompL5'].BaseSolidExtrude(depth=CYL_LENGTH, sketch=
    mdb.models[MODEL_NAME].sketches['__profile__'])
del mdb.models[MODEL_NAME].sketches['__profile__']

### Part partitioning - CompL5 ### 
mdb.models[MODEL_NAME].parts['CompL5'].DatumPlaneByPrincipalPlane(offset=PARTITION_XY
    , principalPlane=XYPLANE)
mdb.models[MODEL_NAME].parts['CompL5'].PartitionCellByDatumPlane(cells=
    mdb.models[MODEL_NAME].parts['CompL5'].cells.findAt(
    ((-COMPL5_OR, 0.0, 0.0), )), 
    datumPlane= mdb.models[MODEL_NAME].parts['CompL5'].datums[2])
mdb.models[MODEL_NAME].parts['CompL5'].DatumPointByCoordinate(coords=
    (0.0, 0.0, 0.0))
mdb.models[MODEL_NAME].parts['CompL5'].DatumPointByCoordinate(coords=
    (-((COMPL5_OR**2)-((LINER_CONSTANT*COMPL5_OR)**2))**0.5, (LINER_CONSTANT*COMPL5_OR), 0.0))
mdb.models[MODEL_NAME].parts['CompL5'].DatumPointByCoordinate(coords=
    (-((COMPL5_OR**2)-((LINER_CONSTANT*COMPL5_OR)**2))**0.5, (LINER_CONSTANT*COMPL5_OR), CYL_LENGTH))
mdb.models[MODEL_NAME].parts['CompL5'].PartitionCellByPlaneThreePoints(cells=
    mdb.models[MODEL_NAME].parts['CompL5'].cells.findAt(
    ((-((COMPL5_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, PARTITION_XY +1), ), 
    ((-((COMPL5_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, PARTITION_XY -1), ), ), 
    point1= mdb.models[MODEL_NAME].parts['CompL5'].datums[4], 
    point2= mdb.models[MODEL_NAME].parts['CompL5'].datums[5], 
    point3= mdb.models[MODEL_NAME].parts['CompL5'].datums[6])

### Assign section and orientations - CompL5 ###
mdb.models[MODEL_NAME].HomogeneousSolidSection(material='CFRP', name='CFRP', 
    thickness=None)
mdb.models[MODEL_NAME].parts['CompL5'].Set(cells=
    mdb.models[MODEL_NAME].parts['CompL5'].cells.findAt(
    ((-1.0, ((COMPL5_OR**2)-(1.0**2))**(0.5), PARTITION_XY+1), ), 
    ((-1.0, ((COMPL5_OR**2)-(1.0**2))**(0.5), 1.0), ), 
    ((0.0, -COMPL5_OR, PARTITION_XY+1), ), 
    ((0.0, -COMPL5_OR, 1.0), ), ), 
    name='Set-7')
mdb.models[MODEL_NAME].parts['CompL5'].SectionAssignment(offset=0.0, 
    offsetField='', offsetType=MIDDLE_SURFACE, region=
    mdb.models[MODEL_NAME].parts['CompL5'].sets['Set-7'], sectionName='CFRP'
    , thicknessAssignment=FROM_SECTION)
mdb.models[MODEL_NAME].parts['CompL5'].Surface(name='Surf-3', side1Faces=
    mdb.models[MODEL_NAME].parts['CompL5'].faces.findAt(
    ((-1.0, ((COMPL5_OR**2)-(1.0**2))**(0.5), PARTITION_XY+1), )))
mdb.models[MODEL_NAME].parts['CompL5'].Set(edges=
    mdb.models[MODEL_NAME].parts['CompL5'].edges.findAt(
    ((-1.0, ((COMPL5_OR**2)-(1.0**2))**(0.5), CYL_LENGTH), )), 
    name='Set-8')
mdb.models[MODEL_NAME].parts['CompL5'].MaterialOrientation(
    additionalRotationField='', additionalRotationType=ROTATION_ANGLE, angle=
    COMPL5_ANGLE, axis=AXIS_3, flipNormalDirection=False, flipPrimaryDirection=False, 
    normalAxisDefinition=SURFACE, normalAxisDirection=AXIS_3, normalAxisRegion=
    mdb.models[MODEL_NAME].parts['CompL5'].surfaces['Surf-3'], 
    orientationType=DISCRETE, primaryAxisDefinition=EDGE, primaryAxisDirection=
    AXIS_1, primaryAxisRegion=
    mdb.models[MODEL_NAME].parts['CompL5'].sets['Set-8'], region=Region(
    cells=mdb.models[MODEL_NAME].parts['CompL5'].cells.findAt(
    ((-1.0, ((COMPL5_OR**2)-(1.0**2))**(0.5), PARTITION_XY+1), ), 
    ((-1.0, ((COMPL5_OR**2)-(1.0**2))**(0.5), 1.0), ), 
    ((0.0, -COMPL5_OR, PARTITION_XY+1), ), 
    ((0.0, -COMPL5_OR, 1.0), ), )), 
    stackDirection=STACK_3)

### Add part to assembly - CompL5 ### 
mdb.models[MODEL_NAME].rootAssembly.Instance(dependent=ON, name='CompL5-1', 
    part=mdb.models[MODEL_NAME].parts['CompL5'])
    
### Create part surfaces - CompL5 ###
COMPL5_TOP = ((COMPL5_OR**2)-(1.0**2))**(0.5)
COMPL5_BOT = ((COMPL5_IR**2)-(1.0**2))**(0.5)
mdb.models[MODEL_NAME].rootAssembly.Surface(name='W_CompL5_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL5-1'].faces.findAt(((
    -1.0, COMPL5_TOP, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='W_CompL5_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL5-1'].faces.findAt(((
    -1.0, COMPL5_BOT, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='X_CompL5_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL5-1'].faces.findAt(((
    -1.0, COMPL5_TOP, 1.0), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='X_CompL5_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL5-1'].faces.findAt(((
    -1.0, COMPL5_BOT, 1.0), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Y_CompL5_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL5-1'].faces.findAt(((
    -COMPL5_OR, 0.0, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Y_CompL5_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL5-1'].faces.findAt(((
    -COMPL5_IR, 0.0, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Z_CompL5_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL5-1'].faces.findAt(((
    -COMPL5_OR, 0.0, 1.0), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Z_CompL5_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL5-1'].faces.findAt(((
    -COMPL5_IR, 0.0, 1.0), )))
    
### Mesh generation - CompL5 ### 
mdb.models[MODEL_NAME].parts['CompL5'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL5'].edges.findAt(
    ((0.0, (COMPL5_IR+((COMPL5_OR-COMPL5_IR)/2)), PARTITION_XY), ), 
    ((0.0, (COMPL5_IR+((COMPL5_OR-COMPL5_IR)/2)), CYL_LENGTH), ), 
    ((0.0, (COMPL5_IR+((COMPL5_OR-COMPL5_IR)/2)), 0.0), ), ), 
    number=1)
mdb.models[MODEL_NAME].parts['CompL5'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL5'].edges.findAt(
    ((0.0, -(COMPL5_IR+((COMPL5_OR-COMPL5_IR)/2)), PARTITION_XY), ), 
    ((0.0, -(COMPL5_IR+((COMPL5_OR-COMPL5_IR)/2)), CYL_LENGTH), ), 
    ((0.0, -(COMPL5_IR+((COMPL5_OR-COMPL5_IR)/2)), 0.0), ), 
    ), number=1)
mdb.models[MODEL_NAME].parts['CompL5'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL5'].edges.findAt(
    ((0.0, COMPL5_OR, PARTITION_XY-1.0), ), 
    ((0.0, COMPL5_IR, PARTITION_XY-1.0), ), 
    ((0.0, -COMPL5_IR, PARTITION_XY-1.0), ), 
    ((0.0, -COMPL5_OR, PARTITION_XY-1.0), ), 
    ((-((COMPL5_OR**2)-((LINER_CONSTANT*COMPL5_OR)**2))**0.5, (LINER_CONSTANT*COMPL5_OR), CYL_LENGTH-1), ), 
    ((-((COMPL5_IR**2)-((LINER_CONSTANT*COMPL5_IR)**2))**0.5, (LINER_CONSTANT*COMPL5_IR), CYL_LENGTH-1), ), 
    ), number=MESH_SEC_A)
mdb.models[MODEL_NAME].parts['CompL5'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL5'].edges.findAt(
    ((-((COMPL5_IR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, PARTITION_XY), ), 
    ((-((COMPL5_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, PARTITION_XY), ), 
    ((-((COMPL5_IR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, 0.0), ), 
    ((-((COMPL5_IR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, CYL_LENGTH), ), 
    ((-((COMPL5_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, CYL_LENGTH), ), 
    ((-((COMPL5_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, 0.0), ), ), 
    number=MESH_SEC_B)
mdb.models[MODEL_NAME].parts['CompL5'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL5'].edges.findAt(
    ((-((COMPL5_OR**2)-((LINER_CONSTANT*COMPL5_OR)**2))**0.5, (LINER_CONSTANT*COMPL5_OR), PARTITION_XY-1), ), 
    ((-((COMPL5_IR**2)-((LINER_CONSTANT*COMPL5_IR)**2))**0.5, (LINER_CONSTANT*COMPL5_IR), PARTITION_XY-1), ), 
    ((0.0, -COMPL5_IR, 1.0), ), 
    ((0.0, -COMPL5_OR, 1.0), ), 
    ((0.0, COMPL5_IR, 1.0), ), 
    ((0.0, COMPL5_OR, 1.0), ), ), 
    number=MESH_SEC_C)
mdb.models[MODEL_NAME].parts['CompL5'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL5'].edges.findAt(
    ((-COMPL5_IR, 0.0, PARTITION_XY), ), 
    ((-COMPL5_OR, 0.0, PARTITION_XY), ), 
    ((-COMPL5_IR, 0.0, CYL_LENGTH), ), 
    ((-COMPL5_OR, 0.0, CYL_LENGTH), ), 
    ((-COMPL5_IR, 0.0, 0.0), ), 
    ((-COMPL5_OR, 0.0, 0.0), ), ), number=MESH_SEC_D)
    
########## THIS SECTION CREATES COMPL6A ########################################################################
### Part creation - CompL6A ###
mdb.models[MODEL_NAME].ConstrainedSketch(name='__profile__', sheetSize=
    200.0)
mdb.models[MODEL_NAME].sketches['__profile__'].ArcByCenterEnds(center=(0.0, 
    0.0), direction=COUNTERCLOCKWISE, point1=(0.0, 50.0), point2=(0.0, -50.0))
mdb.models[MODEL_NAME].sketches['__profile__'].ArcByCenterEnds(center=(0.0, 
    0.0), direction=COUNTERCLOCKWISE, point1=(0.0, 40.0), point2=(0.0, -40.0))
mdb.models[MODEL_NAME].sketches['__profile__'].Line(point1=(0.0, 50.0), 
    point2=(0.0, 40.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].VerticalConstraint(
    addUndoState=False, entity=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].PerpendicularConstraint(
    addUndoState=False, entity1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 
    0.0), ), entity2=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].Line(point1=(0.0, -40.0), 
    point2=(0.0, -50.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, -45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].VerticalConstraint(
    addUndoState=False, entity=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    -45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, -45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].PerpendicularConstraint(
    addUndoState=False, entity1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 
    0.0), ), entity2=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    -45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].RadialDimension(curve=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 
    0.0), ), radius=COMPL6A_OR, textPoint=(-59.0553855895996, 22.8824577331543))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].RadialDimension(curve=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 
    0.0), ), radius=COMPL6A_IR, textPoint=(-49.8903465270996, 17.7138023376465))
mdb.models[MODEL_NAME].Part(dimensionality=THREE_D, name='CompL6A', type=
    DEFORMABLE_BODY)
mdb.models[MODEL_NAME].parts['CompL6A'].BaseSolidExtrude(depth=CYL_LENGTH, sketch=
    mdb.models[MODEL_NAME].sketches['__profile__'])
del mdb.models[MODEL_NAME].sketches['__profile__']

### Part partitioning - CompL6A ### 
mdb.models[MODEL_NAME].parts['CompL6A'].DatumPlaneByPrincipalPlane(offset=PARTITION_XY
    , principalPlane=XYPLANE)
mdb.models[MODEL_NAME].parts['CompL6A'].PartitionCellByDatumPlane(cells=
    mdb.models[MODEL_NAME].parts['CompL6A'].cells.findAt(
    ((-COMPL6A_OR, 0.0, 0.0), )), 
    datumPlane= mdb.models[MODEL_NAME].parts['CompL6A'].datums[2])
mdb.models[MODEL_NAME].parts['CompL6A'].DatumPointByCoordinate(coords=
    (0.0, 0.0, 0.0))
mdb.models[MODEL_NAME].parts['CompL6A'].DatumPointByCoordinate(coords=
    (-((COMPL6A_OR**2)-((LINER_CONSTANT*COMPL6A_OR)**2))**0.5, (LINER_CONSTANT*COMPL6A_OR), 0.0))
mdb.models[MODEL_NAME].parts['CompL6A'].DatumPointByCoordinate(coords=
    (-((COMPL6A_OR**2)-((LINER_CONSTANT*COMPL6A_OR)**2))**0.5, (LINER_CONSTANT*COMPL6A_OR), CYL_LENGTH))
mdb.models[MODEL_NAME].parts['CompL6A'].PartitionCellByPlaneThreePoints(cells=
    mdb.models[MODEL_NAME].parts['CompL6A'].cells.findAt(
    ((-((COMPL6A_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, PARTITION_XY +1), ), 
    ((-((COMPL6A_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, PARTITION_XY -1), ), ), 
    point1= mdb.models[MODEL_NAME].parts['CompL6A'].datums[4], 
    point2= mdb.models[MODEL_NAME].parts['CompL6A'].datums[5], 
    point3= mdb.models[MODEL_NAME].parts['CompL6A'].datums[6])

### Assign section and orientations - CompL6A ###
mdb.models[MODEL_NAME].HomogeneousSolidSection(material='CFRP', name='CFRP', 
    thickness=None)
mdb.models[MODEL_NAME].parts['CompL6A'].Set(cells=
    mdb.models[MODEL_NAME].parts['CompL6A'].cells.findAt(
    ((-1.0, ((COMPL6A_OR**2)-(1.0**2))**(0.5), PARTITION_XY+1), ), 
    ((-1.0, ((COMPL6A_OR**2)-(1.0**2))**(0.5), 1.0), ), 
    ((0.0, -COMPL6A_OR, PARTITION_XY+1), ), ((0.0, -COMPL6A_OR, 1.0), ), ), 
    name='Set-7')
mdb.models[MODEL_NAME].parts['CompL6A'].SectionAssignment(offset=0.0, 
    offsetField='', offsetType=MIDDLE_SURFACE, region=
    mdb.models[MODEL_NAME].parts['CompL6A'].sets['Set-7'], sectionName='CFRP'
    , thicknessAssignment=FROM_SECTION)
mdb.models[MODEL_NAME].parts['CompL6A'].Surface(name='Surf-3', side1Faces=
    mdb.models[MODEL_NAME].parts['CompL6A'].faces.findAt(
    ((-1.0, ((COMPL6A_OR**2)-(1.0**2))**(0.5), PARTITION_XY+1), )))
mdb.models[MODEL_NAME].parts['CompL6A'].Set(edges=
    mdb.models[MODEL_NAME].parts['CompL6A'].edges.findAt(
    ((-1.0, ((COMPL6A_OR**2)-(1.0**2))**(0.5), CYL_LENGTH), )), 
    name='Set-8')
mdb.models[MODEL_NAME].parts['CompL6A'].MaterialOrientation(
    additionalRotationField='', additionalRotationType=ROTATION_ANGLE, angle=
    COMPL6A_ANGLE, axis=AXIS_3, flipNormalDirection=False, flipPrimaryDirection=False, 
    normalAxisDefinition=SURFACE, normalAxisDirection=AXIS_3, normalAxisRegion=
    mdb.models[MODEL_NAME].parts['CompL6A'].surfaces['Surf-3'], 
    orientationType=DISCRETE, primaryAxisDefinition=EDGE, primaryAxisDirection=
    AXIS_1, primaryAxisRegion=
    mdb.models[MODEL_NAME].parts['CompL6A'].sets['Set-8'], region=Region(
    cells=mdb.models[MODEL_NAME].parts['CompL6A'].cells.findAt(
    ((-1.0, ((COMPL6A_OR**2)-(1.0**2))**(0.5), PARTITION_XY+1), ), 
    ((-1.0, ((COMPL6A_OR**2)-(1.0**2))**(0.5), 1.0), ), 
    ((0.0, -COMPL6A_OR, PARTITION_XY+1), ), 
    ((0.0, -COMPL6A_OR, 1.0), ), )), 
    stackDirection=STACK_3)

### Add part to assembly - CompL6A ### 
mdb.models[MODEL_NAME].rootAssembly.Instance(dependent=ON, name='CompL6A-1', 
    part=mdb.models[MODEL_NAME].parts['CompL6A'])
    
### Create part surfaces - CompL6A ###
COMPL6A_TOP = ((COMPL6A_OR**2)-(1.0**2))**(0.5)
COMPL6A_BOT = ((COMPL6A_IR**2)-(1.0**2))**(0.5)
mdb.models[MODEL_NAME].rootAssembly.Surface(name='W_CompL6A_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL6A-1'].faces.findAt(((
    -1.0, COMPL6A_TOP, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='W_CompL6A_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL6A-1'].faces.findAt(((
    -1.0, COMPL6A_BOT, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='X_CompL6A_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL6A-1'].faces.findAt(((
    -1.0, COMPL6A_TOP, 1.0), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='X_CompL6A_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL6A-1'].faces.findAt(((
    -1.0, COMPL6A_BOT, 1.0), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Y_CompL6A_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL6A-1'].faces.findAt(((
    -COMPL6A_OR, 0.0, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Y_CompL6A_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL6A-1'].faces.findAt(((
    -COMPL6A_IR, 0.0, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Z_CompL6A_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL6A-1'].faces.findAt(((
    -COMPL6A_OR, 0.0, 1.0), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Z_CompL6A_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL6A-1'].faces.findAt(((
    -COMPL6A_IR, 0.0, 1.0), )))
    
### Mesh generation - CompL6A ### 
mdb.models[MODEL_NAME].parts['CompL6A'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL6A'].edges.findAt(
    ((0.0, (COMPL6A_IR+((COMPL6A_OR-COMPL6A_IR)/2)), PARTITION_XY), ), 
    ((0.0, (COMPL6A_IR+((COMPL6A_OR-COMPL6A_IR)/2)), CYL_LENGTH), ), 
    ((0.0, (COMPL6A_IR+((COMPL6A_OR-COMPL6A_IR)/2)), 0.0), ), ), 
    number=1)
mdb.models[MODEL_NAME].parts['CompL6A'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL6A'].edges.findAt(
    ((0.0, -(COMPL6A_IR+((COMPL6A_OR-COMPL6A_IR)/2)), PARTITION_XY), ), 
    ((0.0, -(COMPL6A_IR+((COMPL6A_OR-COMPL6A_IR)/2)), CYL_LENGTH), ), 
    ((0.0, -(COMPL6A_IR+((COMPL6A_OR-COMPL6A_IR)/2)), 0.0), ), 
    ), number=1)
mdb.models[MODEL_NAME].parts['CompL6A'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL6A'].edges.findAt(
    ((0.0, COMPL6A_OR, PARTITION_XY-1.0), ), 
    ((0.0, COMPL6A_IR, PARTITION_XY-1.0), ), 
    ((0.0, -COMPL6A_IR, PARTITION_XY-1.0), ), 
    ((0.0, -COMPL6A_OR, PARTITION_XY-1.0), ), 
    ((-((COMPL6A_OR**2)-((LINER_CONSTANT*COMPL6A_OR)**2))**0.5, (LINER_CONSTANT*COMPL6A_OR), CYL_LENGTH-1), ), 
    ((-((COMPL6A_IR**2)-((LINER_CONSTANT*COMPL6A_IR)**2))**0.5, (LINER_CONSTANT*COMPL6A_IR), CYL_LENGTH-1), ), 
    ), number=MESH_SEC_A)
mdb.models[MODEL_NAME].parts['CompL6A'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL6A'].edges.findAt(
    ((-((COMPL6A_IR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, PARTITION_XY), ), 
    ((-((COMPL6A_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, PARTITION_XY), ), 
    ((-((COMPL6A_IR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, 0.0), ), 
    ((-((COMPL6A_IR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, CYL_LENGTH), ), 
    ((-((COMPL6A_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, CYL_LENGTH), ), 
    ((-((COMPL6A_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, 0.0), ), ), 
    number=MESH_SEC_B)
mdb.models[MODEL_NAME].parts['CompL6A'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL6A'].edges.findAt(
    ((-((COMPL6A_OR**2)-((LINER_CONSTANT*COMPL6A_OR)**2))**0.5, (LINER_CONSTANT*COMPL6A_OR), PARTITION_XY-1), ), 
    ((-((COMPL6A_IR**2)-((LINER_CONSTANT*COMPL6A_IR)**2))**0.5, (LINER_CONSTANT*COMPL6A_IR), PARTITION_XY-1), ), 
    ((0.0, -COMPL6A_IR, 1.0), ), 
    ((0.0, -COMPL6A_OR, 1.0), ), 
    ((0.0, COMPL6A_IR, 1.0), ), 
    ((0.0, COMPL6A_OR, 1.0), ), ), 
    number=MESH_SEC_C)
mdb.models[MODEL_NAME].parts['CompL6A'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL6A'].edges.findAt(
    ((-COMPL6A_IR, 0.0, PARTITION_XY), ), 
    ((-COMPL6A_OR, 0.0, PARTITION_XY), ), 
    ((-COMPL6A_IR, 0.0, CYL_LENGTH), ), 
    ((-COMPL6A_OR, 0.0, CYL_LENGTH), ), 
    ((-COMPL6A_IR, 0.0, 0.0), ), 
    ((-COMPL6A_OR, 0.0, 0.0), ), ), number=MESH_SEC_D)
    
########## THIS SECTION CREATES COMPL6B ########################################################################
### Part creation - CompL6B ###
mdb.models[MODEL_NAME].ConstrainedSketch(name='__profile__', sheetSize=
    200.0)
mdb.models[MODEL_NAME].sketches['__profile__'].ArcByCenterEnds(center=(0.0, 
    0.0), direction=COUNTERCLOCKWISE, point1=(0.0, 50.0), point2=(0.0, -50.0))
mdb.models[MODEL_NAME].sketches['__profile__'].ArcByCenterEnds(center=(0.0, 
    0.0), direction=COUNTERCLOCKWISE, point1=(0.0, 40.0), point2=(0.0, -40.0))
mdb.models[MODEL_NAME].sketches['__profile__'].Line(point1=(0.0, 50.0), 
    point2=(0.0, 40.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].VerticalConstraint(
    addUndoState=False, entity=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].PerpendicularConstraint(
    addUndoState=False, entity1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 
    0.0), ), entity2=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].Line(point1=(0.0, -40.0), 
    point2=(0.0, -50.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, -45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].VerticalConstraint(
    addUndoState=False, entity=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    -45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, -45.0))
mdb.models[MODEL_NAME].sketches['__profile__'].PerpendicularConstraint(
    addUndoState=False, entity1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 
    0.0), ), entity2=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    -45.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].RadialDimension(curve=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-50.0, 
    0.0), ), radius=COMPL6B_OR, textPoint=(-59.0553855895996, 22.8824577331543))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].RadialDimension(curve=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-40.0, 
    0.0), ), radius=COMPL6B_IR, textPoint=(-49.8903465270996, 17.7138023376465))
mdb.models[MODEL_NAME].Part(dimensionality=THREE_D, name='CompL6B', type=
    DEFORMABLE_BODY)
mdb.models[MODEL_NAME].parts['CompL6B'].BaseSolidExtrude(depth=CYL_LENGTH, sketch=
    mdb.models[MODEL_NAME].sketches['__profile__'])
del mdb.models[MODEL_NAME].sketches['__profile__']

### Part partitioning - CompL6B ### 
mdb.models[MODEL_NAME].parts['CompL6B'].DatumPlaneByPrincipalPlane(offset=PARTITION_XY
    , principalPlane=XYPLANE)
mdb.models[MODEL_NAME].parts['CompL6B'].PartitionCellByDatumPlane(cells=
    mdb.models[MODEL_NAME].parts['CompL6B'].cells.findAt(
    ((-COMPL6B_OR, 0.0, 0.0), )), 
    datumPlane= mdb.models[MODEL_NAME].parts['CompL6B'].datums[2])
mdb.models[MODEL_NAME].parts['CompL6B'].DatumPointByCoordinate(coords=
    (0.0, 0.0, 0.0))
mdb.models[MODEL_NAME].parts['CompL6B'].DatumPointByCoordinate(coords=
    (-((COMPL6B_OR**2)-((LINER_CONSTANT*COMPL6B_OR)**2))**0.5, (LINER_CONSTANT*COMPL6B_OR), 0.0))
mdb.models[MODEL_NAME].parts['CompL6B'].DatumPointByCoordinate(coords=
    (-((COMPL6B_OR**2)-((LINER_CONSTANT*COMPL6B_OR)**2))**0.5, (LINER_CONSTANT*COMPL6B_OR), CYL_LENGTH))
mdb.models[MODEL_NAME].parts['CompL6B'].PartitionCellByPlaneThreePoints(cells=
    mdb.models[MODEL_NAME].parts['CompL6B'].cells.findAt(
    ((-((COMPL6B_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, PARTITION_XY +1), ), 
    ((-((COMPL6B_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, PARTITION_XY -1), ), ), 
    point1= mdb.models[MODEL_NAME].parts['CompL6B'].datums[4], 
    point2= mdb.models[MODEL_NAME].parts['CompL6B'].datums[5], 
    point3= mdb.models[MODEL_NAME].parts['CompL6B'].datums[6])

### Assign section and orientations - CompL6B ###
mdb.models[MODEL_NAME].HomogeneousSolidSection(material='CFRP', name='CFRP', 
    thickness=None)
mdb.models[MODEL_NAME].parts['CompL6B'].Set(cells=
    mdb.models[MODEL_NAME].parts['CompL6B'].cells.findAt(
    ((-1.0, ((COMPL6B_OR**2)-(1.0**2))**(0.5), PARTITION_XY+1), ), 
    ((-1.0, ((COMPL6B_OR**2)-(1.0**2))**(0.5), 1.0), ), 
    ((0.0, -COMPL6B_OR, PARTITION_XY+1), ), ((0.0, -COMPL6B_OR, 1.0), ), ), 
    name='Set-7')
mdb.models[MODEL_NAME].parts['CompL6B'].SectionAssignment(offset=0.0, 
    offsetField='', offsetType=MIDDLE_SURFACE, region=
    mdb.models[MODEL_NAME].parts['CompL6B'].sets['Set-7'], sectionName='CFRP'
    , thicknessAssignment=FROM_SECTION)
mdb.models[MODEL_NAME].parts['CompL6B'].Surface(name='Surf-3', side1Faces=
    mdb.models[MODEL_NAME].parts['CompL6B'].faces.findAt(
    ((-1.0, ((COMPL6B_OR**2)-(1.0**2))**(0.5), PARTITION_XY+1), )))
mdb.models[MODEL_NAME].parts['CompL6B'].Set(edges=
    mdb.models[MODEL_NAME].parts['CompL6B'].edges.findAt(
    ((-1.0, ((COMPL6B_OR**2)-(1.0**2))**(0.5), CYL_LENGTH), )), 
    name='Set-8')
mdb.models[MODEL_NAME].parts['CompL6B'].MaterialOrientation(
    additionalRotationField='', additionalRotationType=ROTATION_ANGLE, angle=
    COMPL6B_ANGLE, axis=AXIS_3, flipNormalDirection=False, flipPrimaryDirection=False, 
    normalAxisDefinition=SURFACE, normalAxisDirection=AXIS_3, normalAxisRegion=
    mdb.models[MODEL_NAME].parts['CompL6B'].surfaces['Surf-3'], 
    orientationType=DISCRETE, primaryAxisDefinition=EDGE, primaryAxisDirection=
    AXIS_1, primaryAxisRegion=
    mdb.models[MODEL_NAME].parts['CompL6B'].sets['Set-8'], region=Region(
    cells=mdb.models[MODEL_NAME].parts['CompL6B'].cells.findAt(
    ((-1.0, ((COMPL6B_OR**2)-(1.0**2))**(0.5), PARTITION_XY+1), ), 
    ((-1.0, ((COMPL6B_OR**2)-(1.0**2))**(0.5), 1.0), ), 
    ((0.0, -COMPL6B_OR, PARTITION_XY+1), ), 
    ((0.0, -COMPL6B_OR, 1.0), ), )), 
    stackDirection=STACK_3)

### Add part to assembly - CompL6B ### 
mdb.models[MODEL_NAME].rootAssembly.Instance(dependent=ON, name='CompL6B-1', 
    part=mdb.models[MODEL_NAME].parts['CompL6B'])
    
### Create part surfaces - CompL6B ###
COMPL6B_TOP = ((COMPL6B_OR**2)-(1.0**2))**(0.5)
COMPL6B_BOT = ((COMPL6B_IR**2)-(1.0**2))**(0.5)
mdb.models[MODEL_NAME].rootAssembly.Surface(name='W_CompL6B_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL6B-1'].faces.findAt(((
    -1.0, COMPL6B_TOP, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='W_CompL6B_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL6B-1'].faces.findAt(((
    -1.0, COMPL6B_BOT, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='X_CompL6B_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL6B-1'].faces.findAt(((
    -1.0, COMPL6B_TOP, 1.0), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='X_CompL6B_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL6B-1'].faces.findAt(((
    -1.0, COMPL6B_BOT, 1.0), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Y_CompL6B_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL6B-1'].faces.findAt(((
    -COMPL6B_OR, 0.0, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Y_CompL6B_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL6B-1'].faces.findAt(((
    -COMPL6B_IR, 0.0, CYL_LENGTH-1), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Z_CompL6B_top', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL6B-1'].faces.findAt(((
    -COMPL6B_OR, 0.0, 1.0), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Z_CompL6B_bot', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL6B-1'].faces.findAt(((
    -COMPL6B_IR, 0.0, 1.0), )))

### Mesh generation - CompL6B ### 
mdb.models[MODEL_NAME].parts['CompL6B'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL6B'].edges.findAt(
    ((0.0, (COMPL6B_IR+((COMPL6B_OR-COMPL6B_IR)/2)), PARTITION_XY), ), 
    ((0.0, (COMPL6B_IR+((COMPL6B_OR-COMPL6B_IR)/2)), CYL_LENGTH), ), 
    ((0.0, (COMPL6B_IR+((COMPL6B_OR-COMPL6B_IR)/2)), 0.0), ), ), 
    number=1)
mdb.models[MODEL_NAME].parts['CompL6B'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL6B'].edges.findAt(
    ((0.0, -(COMPL6B_IR+((COMPL6B_OR-COMPL6B_IR)/2)), PARTITION_XY), ), 
    ((0.0, -(COMPL6B_IR+((COMPL6B_OR-COMPL6B_IR)/2)), CYL_LENGTH), ), 
    ((0.0, -(COMPL6B_IR+((COMPL6B_OR-COMPL6B_IR)/2)), 0.0), ), 
    ), number=1)
mdb.models[MODEL_NAME].parts['CompL6B'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL6B'].edges.findAt(
    ((0.0, COMPL6B_OR, PARTITION_XY-1.0), ), 
    ((0.0, COMPL6B_IR, PARTITION_XY-1.0), ), 
    ((0.0, -COMPL6B_IR, PARTITION_XY-1.0), ), 
    ((0.0, -COMPL6B_OR, PARTITION_XY-1.0), ), 
    ((-((COMPL6B_OR**2)-((LINER_CONSTANT*COMPL6B_OR)**2))**0.5, (LINER_CONSTANT*COMPL6B_OR), CYL_LENGTH-1), ), 
    ((-((COMPL6B_IR**2)-((LINER_CONSTANT*COMPL6B_IR)**2))**0.5, (LINER_CONSTANT*COMPL6B_IR), CYL_LENGTH-1), ), 
    ), number=MESH_SEC_A)
mdb.models[MODEL_NAME].parts['CompL6B'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL6B'].edges.findAt(
    ((-((COMPL6B_IR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, PARTITION_XY), ), 
    ((-((COMPL6B_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, PARTITION_XY), ), 
    ((-((COMPL6B_IR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, 0.0), ), 
    ((-((COMPL6B_IR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, CYL_LENGTH), ), 
    ((-((COMPL6B_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, CYL_LENGTH), ), 
    ((-((COMPL6B_OR**2)-((LINER_OR-0.01)**2))**0.5, LINER_OR-0.01, 0.0), ), ), 
    number=MESH_SEC_B)
mdb.models[MODEL_NAME].parts['CompL6B'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL6B'].edges.findAt(
    ((-((COMPL6B_OR**2)-((LINER_CONSTANT*COMPL6B_OR)**2))**0.5, (LINER_CONSTANT*COMPL6B_OR), PARTITION_XY-1), ), 
    ((-((COMPL6B_IR**2)-((LINER_CONSTANT*COMPL6B_IR)**2))**0.5, (LINER_CONSTANT*COMPL6B_IR), PARTITION_XY-1), ), 
    ((0.0, -COMPL6B_IR, 1.0), ), 
    ((0.0, -COMPL6B_OR, 1.0), ), 
    ((0.0, COMPL6B_IR, 1.0), ), 
    ((0.0, COMPL6B_OR, 1.0), ), ), 
    number=MESH_SEC_C)
mdb.models[MODEL_NAME].parts['CompL6B'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['CompL6B'].edges.findAt(
    ((-COMPL6B_IR, 0.0, PARTITION_XY), ), 
    ((-COMPL6B_OR, 0.0, PARTITION_XY), ), 
    ((-COMPL6B_IR, 0.0, CYL_LENGTH), ), 
    ((-COMPL6B_OR, 0.0, CYL_LENGTH), ), 
    ((-COMPL6B_IR, 0.0, 0.0), ), 
    ((-COMPL6B_OR, 0.0, 0.0), ), ), number=MESH_SEC_D)

########## THIS SECTION CREATES INDENTER ###################################################################
### Indenter part ###
mdb.models[MODEL_NAME].ConstrainedSketch(name='__profile__', sheetSize=
    200.0)
mdb.models[MODEL_NAME].sketches['__profile__'].ConstructionLine(point1=(0.0, 
    -100.0), point2=(0.0, 100.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].FixedConstraint(entity=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    0.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].CircleByCenterPerimeter(
    center=(0.0, 0.0), point1=(20.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].vertices.findAt((0.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].CoincidentConstraint(
    addUndoState=False, entity1=
    mdb.models[MODEL_NAME].sketches['__profile__'].vertices.findAt((0.0, 
    0.0), ), entity2=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    0.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-20.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].RadialDimension(curve=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-20.0, 
    0.0), ), radius=20.0, textPoint=(-41.3337020874023, 1.43122482299805))
mdb.models[MODEL_NAME].sketches['__profile__'].dimensions[0].setValues(
    value=8)
mdb.models[MODEL_NAME].sketches['__profile__'].Line(point1=(0.0, 15.0), 
    point2=(0.0, -15.7434940338135))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    -14.206319))
mdb.models[MODEL_NAME].sketches['__profile__'].VerticalConstraint(
    addUndoState=False, entity=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    -14.206319), ))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    22222310.4))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    -14.206319))
mdb.models[MODEL_NAME].sketches['__profile__'].ParallelConstraint(
    addUndoState=False, entity1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    22222310.4), ), entity2=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    -14.206319), ))
mdb.models[MODEL_NAME].sketches['__profile__'].vertices.findAt((0.0, 15.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    22222310.4))
mdb.models[MODEL_NAME].sketches['__profile__'].CoincidentConstraint(
    addUndoState=False, entity1=
    mdb.models[MODEL_NAME].sketches['__profile__'].vertices.findAt((0.0, 
    15.0), ), entity2=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    22222310.4), ))
mdb.models[MODEL_NAME].sketches['__profile__'].vertices.findAt((0.0, 
    -15.743494))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    22222310.4))
mdb.models[MODEL_NAME].sketches['__profile__'].CoincidentConstraint(
    addUndoState=False, entity1=
    mdb.models[MODEL_NAME].sketches['__profile__'].vertices.findAt((0.0, 
    -15.7434940338135), ), entity2=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    22222310.4), ))
mdb.models[MODEL_NAME].sketches['__profile__'].Line(point1=(-20.0, 0.0), 
    point2=(20.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-18.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].HorizontalConstraint(
    addUndoState=False, entity=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-18.0, 
    0.0), ))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((7.608452, 
    2.472136))
mdb.models[MODEL_NAME].sketches['__profile__'].autoTrimCurve(curve1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((
    7.608452, 2.472136), ), point1=(4.99638557434082, 6.20105838775635))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-5.656854, 
    -5.656854))
mdb.models[MODEL_NAME].sketches['__profile__'].autoTrimCurve(curve1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((
    -5.656854, -5.656854), ), point1=(-4.94392204284668, 7.03155612945557))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-7.901507, 
    -1.251476))
mdb.models[MODEL_NAME].sketches['__profile__'].autoTrimCurve(curve1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((
    -7.901507, -1.251476), ), point1=(7.6195240020752, -3.4881010055542))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-18.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].autoTrimCurve(curve1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-18.0, 
    0.0), ), point1=(9.0001163482666, 0.802815437316895))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    -14.206319))
mdb.models[MODEL_NAME].sketches['__profile__'].autoTrimCurve(curve1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    -14.206319), ), point1=(0.57847785949707, 10.6303834915161))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-10.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].autoTrimCurve(curve1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-10.0, 
    0.0), ), point1=(-14.3319759368896, 0.664399147033691))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    -14.956319))
mdb.models[MODEL_NAME].sketches['__profile__'].autoTrimCurve(curve1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    -14.956319), ), point1=(-0.111822128295898, -11.5162572860718))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, -7.6))
mdb.models[MODEL_NAME].sketches['__profile__'].autoTrimCurve(curve1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    -7.6), ), point1=(0.0262317657470703, -5.70276165008545))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-4.0, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].autoTrimCurve(curve1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-4.0, 
    0.0), ), point1=(-3.28719902038574, 0.941231727600098))
mdb.models[MODEL_NAME].Part(dimensionality=THREE_D, name='Indenter', type=
    DISCRETE_RIGID_SURFACE)
mdb.models[MODEL_NAME].parts['Indenter'].BaseShellRevolve(angle=90.0, 
    flipRevolveDirection=OFF, sketch=
    mdb.models[MODEL_NAME].sketches['__profile__'])
del mdb.models[MODEL_NAME].sketches['__profile__']
mdb.models[MODEL_NAME].parts['Indenter'].ReferencePoint(point=
    mdb.models[MODEL_NAME].parts['Indenter'].InterestingPoint(
    mdb.models[MODEL_NAME].parts['Indenter'].edges.findAt((-7.391036, 
    -3.061467, 0.0), ), CENTER))
mdb.models[MODEL_NAME].parts['Indenter'].Set(name='Set-1', referencePoints=(
    mdb.models[MODEL_NAME].parts['Indenter'].referencePoints[2], ))
mdb.models[MODEL_NAME].parts['Indenter'].engineeringFeatures.PointMassInertia(
    alpha=0.0, composite=0.0, mass=0.4, name='Inertia-1', region=
    mdb.models[MODEL_NAME].parts['Indenter'].sets['Set-1'])

### Indenter mesh ###
mdb.models[MODEL_NAME].parts['Indenter'].seedPart(deviationFactor=0.1, 
    minSizeFactor=0.1, size=0.5)
mdb.models[MODEL_NAME].parts['Indenter'].generateMesh()

### Add indenter to assembly and position ###
mdb.models[MODEL_NAME].rootAssembly.Instance(dependent=ON, name='Indenter-1'
    , part=mdb.models[MODEL_NAME].parts['Indenter'])
mdb.models[MODEL_NAME].rootAssembly.translate(instanceList=('Indenter-1', ), 
    vector=(-3.5e-05, REF + 8.01, CYL_LENGTH))
mdb.models[MODEL_NAME].rootAssembly.rotate(angle=-90.0, axisDirection=(0.0, 
    8.0, 0.0), axisPoint=(-3.5e-05, REF + 8.01, CYL_LENGTH), instanceList=(
    'Indenter-1', ))
mdb.models[MODEL_NAME].rootAssembly.Set(name='RF_SET', referencePoints=(
    mdb.models[MODEL_NAME].rootAssembly.instances['Indenter-1'].referencePoints[2], 
    ))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Indenter_Surf', 
    side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['Indenter-1'].faces.findAt(
    ((-3.5e-05, REF + 0.01, CYL_LENGTH), )))

########## THIS SECTION CREATES SUPPORT ###################################################################
mdb.models[MODEL_NAME].ConstrainedSketch(name='__profile__', sheetSize=
    200.0)
mdb.models[MODEL_NAME].sketches['__profile__'].Line(point1=(0.0, 0.0), 
    point2=(-46.97, 14.99))
mdb.models[MODEL_NAME].Part(dimensionality=THREE_D, name='Support', type=
    DISCRETE_RIGID_SURFACE)
mdb.models[MODEL_NAME].parts['Support'].BaseShellExtrude(depth=193.0, sketch=
    mdb.models[MODEL_NAME].sketches['__profile__'])
del mdb.models[MODEL_NAME].sketches['__profile__']
mdb.models[MODEL_NAME].parts['Support'].ReferencePoint(point=
    mdb.models[MODEL_NAME].parts['Support'].vertices.findAt((0.0, 0.0, 
    193.0), ))
mdb.models[MODEL_NAME].parts['Support'].seedPart(deviationFactor=0.1, 
    minSizeFactor=0.1, size=3.0)
mdb.models[MODEL_NAME].parts['Support'].generateMesh()

### Add support to assembly & position ###
mdb.models[MODEL_NAME].rootAssembly.Instance(dependent=ON, name='Support-1', 
    part=mdb.models[MODEL_NAME].parts['Support'])
mdb.models[MODEL_NAME].rootAssembly.translate(instanceList=('Support-1', ), 
    vector=(0.0, -REF-4.0, -5.0))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Support_Surf', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['Support-1'].faces.findAt(
    ((0.0, -REF-4.0, -5.0), )))
    
########## THIS SECTION CREATES THE END PLATE #############################################################
### Part creation - Plate ###
mdb.models[MODEL_NAME].ConstrainedSketch(name='__profile__', sheetSize=
    200.0)
mdb.models[MODEL_NAME].sketches['__profile__'].CircleByCenterPerimeter(
    center=(0.0, 0.0), point1=(56.25, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].Line(point1=(0.0, -72.5), 
    point2=(0.0, 80.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 3.75))
mdb.models[MODEL_NAME].sketches['__profile__'].VerticalConstraint(
    addUndoState=False, entity=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    3.75), ))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 3.75))
mdb.models[MODEL_NAME].sketches['__profile__'].autoTrimCurve(curve1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    3.75), ), point1=(-0.309967041015625, -63.2194900512695))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-56.25, 
    0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].autoTrimCurve(curve1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-56.25, 
    0.0), ), point1=(24.4931030273438, -49.6555786132813))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-39.774756, 
    39.774756))
mdb.models[MODEL_NAME].sketches['__profile__'].autoTrimCurve(curve1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((
    -39.774756, 39.774756), ), point1=(35.015625, 41.9008102416992))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    11.875))
mdb.models[MODEL_NAME].sketches['__profile__'].autoTrimCurve(curve1=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((0.0, 
    11.875), ), point1=(1.56904602050781, 66.0144195556641))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-56.25, 
    0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].RadialDimension(curve=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-56.25, 
    0.0), ), radius=PLATE_OR, textPoint=(-76.222412109375, 37.0027236938477))
mdb.models[MODEL_NAME].Part(dimensionality=THREE_D, name='Plate', type=
    DEFORMABLE_BODY)
mdb.models[MODEL_NAME].parts['Plate'].BaseSolidExtrude(depth=PLATE_THICKNESS, sketch=
    mdb.models[MODEL_NAME].sketches['__profile__'])
del mdb.models[MODEL_NAME].sketches['__profile__']

### Part partitioning - Plate ###
mdb.models[MODEL_NAME].ConstrainedSketch(gridSpacing=7.82, name=
    '__profile__', sheetSize=313.07, transform=
    mdb.models[MODEL_NAME].parts['Plate'].MakeSketchTransform(
    sketchPlane=mdb.models[MODEL_NAME].parts['Plate'].faces.findAt((
    -4.287489, 22.93604, 2.0), ), sketchPlaneSide=SIDE1, 
    sketchUpEdge=mdb.models[MODEL_NAME].parts['Plate'].edges.findAt((0.0, 
    35.0, 2.0), ), sketchOrientation=RIGHT, origin=(-29.708923, 0.0, 2.0)))
mdb.models[MODEL_NAME].parts['Plate'].projectReferencesOntoSketch(filter=
    COPLANAR_EDGES, sketch=mdb.models[MODEL_NAME].sketches['__profile__'])
mdb.models[MODEL_NAME].sketches['__profile__'].CircleByCenterPerimeter(
    center=(29.708923, 0.0), point1=(87.975, 0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((-28.557154, 
    0.0))
mdb.models[MODEL_NAME].sketches['__profile__'].RadialDimension(curve=
    mdb.models[MODEL_NAME].sketches['__profile__'].geometry.findAt((
    -28.557154, 0.0), ), radius=PLATE_IR, textPoint=(-69.6093753398438, 
    12.13694190979))
mdb.models[MODEL_NAME].parts['Plate'].PartitionFaceBySketch(faces=
    mdb.models[MODEL_NAME].parts['Plate'].faces.findAt(((-4.287489, 
    22.93604, 2.0), )), sketch=
    mdb.models[MODEL_NAME].sketches['__profile__'], sketchUpEdge=
    mdb.models[MODEL_NAME].parts['Plate'].edges.findAt((0.0, 35.0, 2.0), ))
del mdb.models[MODEL_NAME].sketches['__profile__']
mdb.models[MODEL_NAME].parts['Plate'].DatumPointByCoordinate(coords=
    (-((COMPL6B_OR**2)-((LINER_CONSTANT*COMPL6B_OR)**2))**0.5, (LINER_CONSTANT*COMPL6B_OR), PLATE_THICKNESS))
mdb.models[MODEL_NAME].parts['Plate'].PartitionCellByPlaneThreePoints(cells=
    mdb.models[MODEL_NAME].parts['Plate'].cells.findAt(
    ((0.0, 0.0, PLATE_THICKNESS), )), point1=
    mdb.models[MODEL_NAME].parts['Plate'].InterestingPoint(
    mdb.models[MODEL_NAME].parts['Plate'].edges.findAt(
    (0.0, 0.0, 0.0), ), MIDDLE), 
    point2=mdb.models[MODEL_NAME].parts['Plate'].InterestingPoint(
    mdb.models[MODEL_NAME].parts['Plate'].edges.findAt(
    (0.0, 0.0, PLATE_THICKNESS), ), MIDDLE), 
    point3=mdb.models[MODEL_NAME].parts['Plate'].datums[3])
    
### Assign material and section - Plate ###
mdb.models[MODEL_NAME].HomogeneousSolidSection(material='Steel', name=
    'Steel', thickness=None)
mdb.models[MODEL_NAME].parts['Plate'].Set(cells=
    mdb.models[MODEL_NAME].parts['Plate'].cells.findAt(
    ((0.0, 1.0, 0.0), ), 
    ((0.0, -1.0, 0.0), ), ), name='Set-1')
mdb.models[MODEL_NAME].parts['Plate'].SectionAssignment(offset=0.0, 
    offsetField='', offsetType=MIDDLE_SURFACE, region=
    mdb.models[MODEL_NAME].parts['Plate'].sets['Set-1'], sectionName='Steel'
    , thicknessAssignment=FROM_SECTION)

### Add part to assembly and position - Plate ###
mdb.models[MODEL_NAME].rootAssembly.Instance(dependent=ON, name='Plate-1', 
    part=mdb.models[MODEL_NAME].parts['Plate'])
mdb.models[MODEL_NAME].rootAssembly.translate(instanceList=('Plate-1', ), 
    vector=(0.0, 0.0, -PLATE_THICKNESS))

### Create Surfaces - Plate ###
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Plate_Upper', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['Plate-1'].faces.findAt(
    ((-1, PLATE_OR-1, 0.0), )))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Plate_Lower', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['Plate-1'].faces.findAt(
    ((-1, -PLATE_OR+1, 0.0), )))

### Mesh part - Plate ###
mdb.models[MODEL_NAME].parts['Plate'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['Plate'].edges.findAt(
    ((-1.0, ((LINER_IR**2)-(1**2))**0.5, PLATE_THICKNESS), ), 
    ((-1.0, ((COMPL6B_OR**2)-(1**2))**0.5, PLATE_THICKNESS), ), 
    ((-1.0, ((COMPL6B_OR**2)-(1**2))**0.5, 0.0), ), ), 
    number=MESH_SEC_B)
mdb.models[MODEL_NAME].parts['Plate'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['Plate'].edges.findAt(
    ((-1.0, -((LINER_IR**2)-(1**2))**0.5, PLATE_THICKNESS), ), 
    ((-1.0, -((COMPL6B_OR**2)-(1**2))**0.5, PLATE_THICKNESS), ), 
    ((-1.0, -((COMPL6B_OR**2)-(1**2))**0.5, 0.0), ), ), 
    number=MESH_SEC_D)
mdb.models[MODEL_NAME].parts['Plate'].seedEdgeByNumber(constraint=FINER, 
    edges=mdb.models[MODEL_NAME].parts['Plate'].edges.findAt(
    ((0.0, 10, 2.0), ), 
    ((0.0, 10, 0.0), ), ), 
    number=35)
mdb.models[MODEL_NAME].parts['Plate'].generateMesh()

######### STEPS, HISTORY AND FIELD OUTPUT DEFINITION #################################################################
mdb.models[MODEL_NAME].ExplicitDynamicsStep(massScaling=((SEMI_AUTOMATIC, 
    MODEL, AT_BEGINNING, 1000.0, 0.0, None, 0, 0, 0.0, 0.0, 0, None), ), name=
    'Step-1', previous='Initial', timePeriod=PERIOD_TIME)
mdb.models[MODEL_NAME].ExplicitDynamicsStep(massScaling=((SEMI_AUTOMATIC, 
    MODEL, AT_BEGINNING, 1000.0, 0.0, None, 0, 0, 0.0, 0.0, 0, None), ), name=
    'Step-2', previous='Step-1', timePeriod=PERIOD_TIME)
mdb.models[MODEL_NAME].HistoryOutputRequest(createStepName='Step-1', name=
    'H-Output-2', rebar=EXCLUDE, region=
    mdb.models[MODEL_NAME].rootAssembly.sets['RF_SET'], sectionPoints=
    DEFAULT, timeInterval=5.0, variables=('U2', 'RF2'))
mdb.models[MODEL_NAME].fieldOutputRequests['F-Output-1'].setValues(
    timeInterval=10.0)
mdb.models[MODEL_NAME].fieldOutputRequests['F-Output-1'].setValues(
    variables=('S', 'SVAVG', 'PE', 'PEVAVG', 'PEEQ', 'PEEQVAVG', 'LE', 'U', 
    'V', 'A', 'RF', 'CSTRESS', 'DMICRT', 'EVF', 'STATUS'))

########## THIS SECTION DEFINES THE BOUNDARY CONDITIONS ###############################################################
### Define amplitude ###
mdb.models[MODEL_NAME].SmoothStepAmplitude(data=((0.0, 0.0), (PERIOD_TIME, 1.0)), 
    name='Amp-1', timeSpan=STEP)
### Define encastre, load and unload BCs ###
mdb.models[MODEL_NAME].rootAssembly.Set(name='Set-1', referencePoints=(
    mdb.models[MODEL_NAME].rootAssembly.instances['Support-1'].referencePoints[2], 
    ))
mdb.models[MODEL_NAME].EncastreBC(createStepName='Step-1', localCsys=None, 
    name='Fix', region=mdb.models[MODEL_NAME].rootAssembly.sets['Set-1'])
mdb.models[MODEL_NAME].rootAssembly.Set(name='Set-2', referencePoints=(
    mdb.models[MODEL_NAME].rootAssembly.instances['Indenter-1'].referencePoints[2], 
    ))
mdb.models[MODEL_NAME].DisplacementBC(amplitude='Amp-1', createStepName=
    'Step-1', distributionType=UNIFORM, fieldName='', fixed=OFF, localCsys=None
    , name='Load', region=mdb.models[MODEL_NAME].rootAssembly.sets['Set-2'], 
    u1=0.0, u2=-8.5, u3=0.0, ur1=0.0, ur2=0.0, ur3=0.0)
mdb.models[MODEL_NAME].boundaryConditions['Load'].deactivate('Step-2')
mdb.models[MODEL_NAME].rootAssembly.Set(name='Set-3', referencePoints=(
    mdb.models[MODEL_NAME].rootAssembly.instances['Indenter-1'].referencePoints[2], 
    ))
mdb.models[MODEL_NAME].DisplacementBC(amplitude='Amp-1', createStepName=
    'Step-2', distributionType=UNIFORM, fieldName='', fixed=OFF, localCsys=None
    , name='Unload', region=
    mdb.models[MODEL_NAME].rootAssembly.sets['Set-3'], u1=0.0, u2=8.5, u3=
    0.0, ur1=0.0, ur2=0.0, ur3=0.0)

### Define X_Symm and Z_Symm boundary conditions ###
LINER_Y_DIRECTION = LINER_IR + (LINER_THICKNESS/2)
COMPL1_Y_DIRECTION = COMPL1_IR + (COMPL1_THICKNESS/2)
COMPL2A_Y_DIRECTION = COMPL2A_IR + (COMPL2A_THICKNESS/2)
COMPL2B_Y_DIRECTION = COMPL2B_IR + (COMPL2B_THICKNESS/2)
COMPL3_Y_DIRECTION = COMPL3_IR + (COMPL3_THICKNESS/2)
COMPL4A_Y_DIRECTION = COMPL4A_IR + (COMPL4A_THICKNESS/2)
COMPL4B_Y_DIRECTION = COMPL4B_IR + (COMPL4B_THICKNESS/2)
COMPL5_Y_DIRECTION = COMPL5_IR + (COMPL5_THICKNESS/2)
COMPL6A_Y_DIRECTION = COMPL6A_IR + (COMPL6A_THICKNESS/2)
COMPL6B_Y_DIRECTION = COMPL6B_IR + (COMPL6B_THICKNESS/2)

mdb.models[MODEL_NAME].rootAssembly.Set(faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['Liner-1'].faces.findAt(
    ((0.0, LINER_Y_DIRECTION, PARTITION_XY + 1), ), ((0.0, LINER_Y_DIRECTION, PARTITION_XY - 1), ),
    ((0.0, -LINER_Y_DIRECTION, PARTITION_XY + 1), ), ((0.0, -LINER_Y_DIRECTION, PARTITION_XY - 1), ) ,)
    +\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL1-1'].faces.findAt(
    ((0.0, COMPL1_Y_DIRECTION, PARTITION_XY + 1), ), ((0.0, COMPL1_Y_DIRECTION, PARTITION_XY - 1), ),
    ((0.0, -COMPL1_Y_DIRECTION, PARTITION_XY + 1), ), ((0.0, -COMPL1_Y_DIRECTION, PARTITION_XY - 1), ) ,) 
    +\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL2A-1'].faces.findAt(
    ((0.0, COMPL2A_Y_DIRECTION, PARTITION_XY + 1), ), ((0.0, COMPL2A_Y_DIRECTION, PARTITION_XY - 1), ),
    ((0.0, -COMPL2A_Y_DIRECTION, PARTITION_XY + 1), ), ((0.0, -COMPL2A_Y_DIRECTION, PARTITION_XY - 1), ) ,) 
    +\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL2B-1'].faces.findAt(
    ((0.0, COMPL2B_Y_DIRECTION, PARTITION_XY + 1), ), ((0.0, COMPL2B_Y_DIRECTION, PARTITION_XY - 1), ),
    ((0.0, -COMPL2B_Y_DIRECTION, PARTITION_XY + 1), ), ((0.0, -COMPL2B_Y_DIRECTION, PARTITION_XY - 1), ) ,)
    +\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL3-1'].faces.findAt(
    ((0.0, COMPL3_Y_DIRECTION, PARTITION_XY + 1), ), ((0.0, COMPL3_Y_DIRECTION, PARTITION_XY - 1), ),
    ((0.0, -COMPL3_Y_DIRECTION, PARTITION_XY + 1), ), ((0.0, -COMPL3_Y_DIRECTION, PARTITION_XY - 1), ) ,)
    +\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL4A-1'].faces.findAt(
    ((0.0, COMPL4A_Y_DIRECTION, PARTITION_XY + 1), ), ((0.0, COMPL4A_Y_DIRECTION, PARTITION_XY - 1), ),
    ((0.0, -COMPL4A_Y_DIRECTION, PARTITION_XY + 1), ), ((0.0, -COMPL4A_Y_DIRECTION, PARTITION_XY - 1), ) ,)
    +\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL4B-1'].faces.findAt(
    ((0.0, COMPL4B_Y_DIRECTION, PARTITION_XY + 1), ), ((0.0, COMPL4B_Y_DIRECTION, PARTITION_XY - 1), ),
    ((0.0, -COMPL4B_Y_DIRECTION, PARTITION_XY + 1), ), ((0.0, -COMPL4B_Y_DIRECTION, PARTITION_XY - 1), ) ,)
    +\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL5-1'].faces.findAt(
    ((0.0, COMPL5_Y_DIRECTION, PARTITION_XY + 1), ), ((0.0, COMPL5_Y_DIRECTION, PARTITION_XY - 1), ),
    ((0.0, -COMPL5_Y_DIRECTION, PARTITION_XY + 1), ), ((0.0, -COMPL5_Y_DIRECTION, PARTITION_XY - 1), ) ,)
    +\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL6A-1'].faces.findAt(
    ((0.0, COMPL6A_Y_DIRECTION, PARTITION_XY + 1), ), ((0.0, COMPL6A_Y_DIRECTION, PARTITION_XY - 1), ),
    ((0.0, -COMPL6A_Y_DIRECTION, PARTITION_XY + 1), ), ((0.0, -COMPL6A_Y_DIRECTION, PARTITION_XY - 1), ) ,)
    +\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL6B-1'].faces.findAt(
    ((0.0, COMPL6B_Y_DIRECTION, PARTITION_XY + 1), ), ((0.0, COMPL6B_Y_DIRECTION, PARTITION_XY - 1), ),
    ((0.0, -COMPL6B_Y_DIRECTION, PARTITION_XY + 1), ), ((0.0, -COMPL6B_Y_DIRECTION, PARTITION_XY - 1), ) ,)
    , name='X_SYMM_SET')
mdb.models[MODEL_NAME].XsymmBC(createStepName='Step-1', localCsys=None, name=
    'X_Symm', region=mdb.models[MODEL_NAME].rootAssembly.sets['X_SYMM_SET'])
mdb.models[MODEL_NAME].rootAssembly.Set(faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['Liner-1'].faces.findAt(
    ((-0.01, LINER_Y_DIRECTION, CYL_LENGTH), ), ((-0.01, -LINER_Y_DIRECTION, CYL_LENGTH), ), )+\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL1-1'].faces.findAt(
    ((-0.01, COMPL1_Y_DIRECTION, CYL_LENGTH), ), ((-0.01, -COMPL1_Y_DIRECTION, CYL_LENGTH), ), )+\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL2A-1'].faces.findAt(
    ((-0.01, COMPL2A_Y_DIRECTION, CYL_LENGTH), ), ((-0.01, -COMPL2A_Y_DIRECTION, CYL_LENGTH), ), )+\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL2B-1'].faces.findAt(
    ((-0.01, COMPL2B_Y_DIRECTION, CYL_LENGTH), ), ((-0.01, -COMPL2B_Y_DIRECTION, CYL_LENGTH), ), )+\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL3-1'].faces.findAt(
    ((-0.01, COMPL3_Y_DIRECTION, CYL_LENGTH), ), ((-0.01, -COMPL3_Y_DIRECTION, CYL_LENGTH), ), )+\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL4A-1'].faces.findAt(
    ((-0.01, COMPL4A_Y_DIRECTION, CYL_LENGTH), ), ((-0.01, -COMPL4A_Y_DIRECTION, CYL_LENGTH), ), )+\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL4B-1'].faces.findAt(
    ((-0.01, COMPL4B_Y_DIRECTION, CYL_LENGTH), ), ((-0.01, -COMPL4B_Y_DIRECTION, CYL_LENGTH), ), )+\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL5-1'].faces.findAt(
    ((-0.01, COMPL5_Y_DIRECTION, CYL_LENGTH), ), ((-0.01, -COMPL5_Y_DIRECTION, CYL_LENGTH), ), )+\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL6A-1'].faces.findAt(
    ((-0.01, COMPL6A_Y_DIRECTION, CYL_LENGTH), ), ((-0.01, -COMPL6A_Y_DIRECTION, CYL_LENGTH), ), )+\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL6B-1'].faces.findAt(
    ((-0.01, COMPL6B_Y_DIRECTION, CYL_LENGTH), ), ((-0.01, -COMPL6B_Y_DIRECTION, CYL_LENGTH), ), )    
    , name='Z_SYMM_SET')   
mdb.models[MODEL_NAME].ZsymmBC(createStepName='Step-1', localCsys=None, name=
    'Z_Symm', region=mdb.models[MODEL_NAME].rootAssembly.sets['Z_SYMM_SET'])

########## THIS SECTION DEFINES CONTACTS ###################################################################################
### Define contact property and contacts ###
mdb.models[MODEL_NAME].ContactProperty('L2L')
mdb.models[MODEL_NAME].interactionProperties['L2L'].TangentialBehavior(
    dependencies=0, directionality=ISOTROPIC, elasticSlipStiffness=None, 
    formulation=PENALTY, fraction=0.005, maximumElasticSlip=FRACTION, 
    pressureDependency=OFF, shearStressLimit=None, slipRateDependency=OFF, 
    table=((0.2, ), ), temperatureDependency=OFF)
mdb.models[MODEL_NAME].interactionProperties['L2L'].NormalBehavior(
    allowSeparation=ON, constraintEnforcementMethod=DEFAULT, 
    pressureOverclosure=HARD)
mdb.models[MODEL_NAME].SurfaceToSurfaceContactExp(clearanceRegion=None, 
    createStepName='Step-1', datumAxis=None, initialClearance=OMIT, 
    interactionProperty='L2L', master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Indenter_Surf'], 
    mechanicalConstraint=KINEMATIC, name='indenter_to_ring', slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['W_CompL6B_top']
    , sliding=FINITE)
### Define surface and contact between support/indenter and ring ###
mdb.models[MODEL_NAME].rootAssembly.Surface(name='POWER_SURF', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL6B-1'].faces.findAt(
    ((MAX_OUTER_X, 0.0, MAX_OUTER_Z1), ), 
    ((MAX_OUTER_X, 0.0, MAX_OUTER_Z2), ), ))
mdb.models[MODEL_NAME].SurfaceToSurfaceContactExp(clearanceRegion=None, 
    createStepName='Step-1', datumAxis=None, initialClearance=OMIT, 
    interactionProperty='L2L', master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Support_Surf'], 
    mechanicalConstraint=KINEMATIC, name='support_to_ring', slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['POWER_SURF'], 
    sliding=FINITE)
    
### Contacts between 'W-region' layers ###
mdb.models[MODEL_NAME].SurfaceToSurfaceContactExp(clearanceRegion=None,
    createStepName='Step-1', datumAxis=None, initialClearance=OMIT, 
    interactionProperty='L2L', master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['W_Liner_top'], 
    mechanicalConstraint=KINEMATIC, name='AW_liner_to_compL1', slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['W_CompL1_bot'], sliding=
    FINITE)
mdb.models[MODEL_NAME].SurfaceToSurfaceContactExp(clearanceRegion=None,
    createStepName='Step-1', datumAxis=None, initialClearance=OMIT, 
    interactionProperty='L2L', master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['W_CompL1_top'], 
    mechanicalConstraint=KINEMATIC, name='BW_liner_to_compL1', slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['W_CompL2A_bot'], sliding=
    FINITE)
mdb.models[MODEL_NAME].SurfaceToSurfaceContactExp(clearanceRegion=None,
    createStepName='Step-1', datumAxis=None, initialClearance=OMIT, 
    interactionProperty='L2L', master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['W_CompL2B_top'], 
    mechanicalConstraint=KINEMATIC, name='DW_compL2B_to_compL3', slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['W_CompL3_bot'], sliding=
    FINITE)
mdb.models[MODEL_NAME].SurfaceToSurfaceContactExp(clearanceRegion=None,
    createStepName='Step-1', datumAxis=None, initialClearance=OMIT, 
    interactionProperty='L2L', master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['W_CompL3_top'], 
    mechanicalConstraint=KINEMATIC, name='EW_compL3_to_compL2B', slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['W_CompL4A_bot'], sliding=
    FINITE)
mdb.models[MODEL_NAME].SurfaceToSurfaceContactExp(clearanceRegion=None,
    createStepName='Step-1', datumAxis=None, initialClearance=OMIT, 
    interactionProperty='L2L', master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['W_CompL4B_top'], 
    mechanicalConstraint=KINEMATIC, name='GW_compL4B_to_compL5', slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['W_CompL5_bot'], sliding=
    FINITE)
mdb.models[MODEL_NAME].SurfaceToSurfaceContactExp(clearanceRegion=None,
    createStepName='Step-1', datumAxis=None, initialClearance=OMIT, 
    interactionProperty='L2L', master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['W_CompL5_top'], 
    mechanicalConstraint=KINEMATIC, name='HW_compL4B_to_compL5', slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['W_CompL6A_bot'], sliding=
    FINITE)

### Define TIED contacts ###
### A - Liner to CompL1 ###
mdb.models[MODEL_NAME].Tie(adjust=ON, master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['X_Liner_top'], name=
    'AX_liner_to_compL1', positionToleranceMethod=COMPUTED, slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['X_CompL1_bot']
    , thickness=ON, tieRotations=ON)
mdb.models[MODEL_NAME].Tie(adjust=ON, master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Y_Liner_top'], name=
    'AY_liner_to_compL1', positionToleranceMethod=COMPUTED, slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Y_CompL1_bot']
    , thickness=ON, tieRotations=ON)
mdb.models[MODEL_NAME].Tie(adjust=ON, master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Z_Liner_top'], name=
    'AZ_liner_to_compL1', positionToleranceMethod=COMPUTED, slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Z_CompL1_bot']
    , thickness=ON, tieRotations=ON)

### B - CompL1 to CompL2A ###
mdb.models[MODEL_NAME].Tie(adjust=ON, master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['X_CompL1_top'], name=
    'BX_compL1_to_compL2A', positionToleranceMethod=COMPUTED, slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['X_CompL2A_bot']
    , thickness=ON, tieRotations=ON)
mdb.models[MODEL_NAME].Tie(adjust=ON, master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Y_CompL1_top'], name=
    'BY_compL1_to_compL2A', positionToleranceMethod=COMPUTED, slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Y_CompL2A_bot']
    , thickness=ON, tieRotations=ON)
mdb.models[MODEL_NAME].Tie(adjust=ON, master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Z_CompL1_top'], name=
    'BZ_compL1_to_compL2A', positionToleranceMethod=COMPUTED, slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Z_CompL2A_bot']
    , thickness=ON, tieRotations=ON)

### C - CompL2A to CompL2B ###
mdb.models[MODEL_NAME].Tie(adjust=ON, master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['W_CompL2A_top'], name=
    'CW_compL2A_to_compL2B', positionToleranceMethod=COMPUTED, slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['W_CompL2B_bot']
    , thickness=ON, tieRotations=ON)
mdb.models[MODEL_NAME].Tie(adjust=ON, master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['X_CompL2A_top'], name=
    'CX_compL2A_to_compL2B', positionToleranceMethod=COMPUTED, slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['X_CompL2B_bot']
    , thickness=ON, tieRotations=ON)
mdb.models[MODEL_NAME].Tie(adjust=ON, master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Y_CompL2A_top'], name=
    'CY_compL2A_to_compL2B', positionToleranceMethod=COMPUTED, slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Y_CompL2B_bot']
    , thickness=ON, tieRotations=ON)
mdb.models[MODEL_NAME].Tie(adjust=ON, master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Z_CompL2A_top'], name=
    'CZ_compL2A_to_compL2B', positionToleranceMethod=COMPUTED, slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Z_CompL2B_bot']
    , thickness=ON, tieRotations=ON)

### D - CompL2B to CompL3 ###
mdb.models[MODEL_NAME].Tie(adjust=ON, master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['X_CompL2B_top'], name=
    'DX_compL2B_to_compL3', positionToleranceMethod=COMPUTED, slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['X_CompL3_bot']
    , thickness=ON, tieRotations=ON)
mdb.models[MODEL_NAME].Tie(adjust=ON, master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Y_CompL2B_top'], name=
    'DY_compL2B_to_compL3', positionToleranceMethod=COMPUTED, slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Y_CompL3_bot']
    , thickness=ON, tieRotations=ON)
mdb.models[MODEL_NAME].Tie(adjust=ON, master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Z_CompL2B_top'], name=
    'DZ_compL2B_to_compL3', positionToleranceMethod=COMPUTED, slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Z_CompL3_bot']
    , thickness=ON, tieRotations=ON)

### E - CompL3 to CompL4A ###
mdb.models[MODEL_NAME].Tie(adjust=ON, master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['X_CompL3_top'], name=
    'EX_compL3_to_compL4A', positionToleranceMethod=COMPUTED, slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['X_CompL4A_bot']
    , thickness=ON, tieRotations=ON)
mdb.models[MODEL_NAME].Tie(adjust=ON, master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Y_CompL3_top'], name=
    'EY_compL3_to_compL4A', positionToleranceMethod=COMPUTED, slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Y_CompL4A_bot']
    , thickness=ON, tieRotations=ON)
mdb.models[MODEL_NAME].Tie(adjust=ON, master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Z_CompL3_top'], name=
    'EZ_compL3_to_compL4A', positionToleranceMethod=COMPUTED, slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Z_CompL4A_bot']
    , thickness=ON, tieRotations=ON)

### F - CompL4A to CompL4B ###
mdb.models[MODEL_NAME].Tie(adjust=ON, master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['W_CompL4A_top'], name=
    'FW_compL4A_to_compL4B', positionToleranceMethod=COMPUTED, slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['W_CompL4B_bot']
    , thickness=ON, tieRotations=ON)
mdb.models[MODEL_NAME].Tie(adjust=ON, master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['X_CompL4A_top'], name=
    'FX_compL4A_to_compL4B', positionToleranceMethod=COMPUTED, slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['X_CompL4B_bot']
    , thickness=ON, tieRotations=ON)
mdb.models[MODEL_NAME].Tie(adjust=ON, master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Y_CompL4A_top'], name=
    'FY_compL4A_to_compL4B', positionToleranceMethod=COMPUTED, slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Y_CompL4B_bot']
    , thickness=ON, tieRotations=ON)
mdb.models[MODEL_NAME].Tie(adjust=ON, master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Z_CompL4A_top'], name=
    'FZ_compL4A_to_compL4B', positionToleranceMethod=COMPUTED, slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Z_CompL4B_bot']
    , thickness=ON, tieRotations=ON)

### G - CompL4B to CompL5 ###
mdb.models[MODEL_NAME].Tie(adjust=ON, master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['X_CompL4B_top'], name=
    'GX_compL4B_to_compL5', positionToleranceMethod=COMPUTED, slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['X_CompL5_bot']
    , thickness=ON, tieRotations=ON)
mdb.models[MODEL_NAME].Tie(adjust=ON, master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Y_CompL4B_top'], name=
    'GY_compL4B_to_compL5', positionToleranceMethod=COMPUTED, slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Y_CompL5_bot']
    , thickness=ON, tieRotations=ON)
mdb.models[MODEL_NAME].Tie(adjust=ON, master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Z_CompL4B_top'], name=
    'GZ_compL4B_to_compL5', positionToleranceMethod=COMPUTED, slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Z_CompL5_bot']
    , thickness=ON, tieRotations=ON)

### H - CompL5 to CompL6A ###
mdb.models[MODEL_NAME].Tie(adjust=ON, master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['X_CompL5_top'], name=
    'HX_compL5_to_compL6A', positionToleranceMethod=COMPUTED, slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['X_CompL6A_bot']
    , thickness=ON, tieRotations=ON)
mdb.models[MODEL_NAME].Tie(adjust=ON, master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Y_CompL5_top'], name=
    'HY_compL5_to_compL6A', positionToleranceMethod=COMPUTED, slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Y_CompL6A_bot']
    , thickness=ON, tieRotations=ON)
mdb.models[MODEL_NAME].Tie(adjust=ON, master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Z_CompL5_top'], name=
    'HZ_compL5_to_compL6A', positionToleranceMethod=COMPUTED, slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Z_CompL6A_bot']
    , thickness=ON, tieRotations=ON)

### I - CompL6A to CompL6B ###
mdb.models[MODEL_NAME].Tie(adjust=ON, master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['W_CompL6A_top'], name=
    'IW_compL6A_to_compL6B', positionToleranceMethod=COMPUTED, slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['W_CompL6B_bot']
    , thickness=ON, tieRotations=ON)
mdb.models[MODEL_NAME].Tie(adjust=ON, master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['X_CompL6A_top'], name=
    'IX_compL6A_to_compL6B', positionToleranceMethod=COMPUTED, slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['X_CompL6B_bot']
    , thickness=ON, tieRotations=ON)
mdb.models[MODEL_NAME].Tie(adjust=ON, master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Y_CompL6A_top'], name=
    'IY_compL6A_to_compL6B', positionToleranceMethod=COMPUTED, slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Y_CompL6B_bot']
    , thickness=ON, tieRotations=ON)
mdb.models[MODEL_NAME].Tie(adjust=ON, master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Z_CompL6A_top'], name=
    'IZ_compL6A_to_compL6B', positionToleranceMethod=COMPUTED, slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Z_CompL6B_bot']
    , thickness=ON, tieRotations=ON)
    
### J Plate to cylinder ###
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Cyl_faces_1', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL6B-1'].faces.findAt(
    ((-1.0, (((COMPL6B_OR**2)-(1**2))**0.5)-(COMPL6B_THICKNESS/2), 0.0), ), )+\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL6A-1'].faces.findAt(
    ((-1.0, (((COMPL6A_OR**2)-(1**2))**0.5)-(COMPL6A_THICKNESS/2), 0.0), ), )+\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL5-1'].faces.findAt(
    ((-1.0, (((COMPL5_OR**2)-(1**2))**0.5)-(COMPL5_THICKNESS/2), 0.0), ), )+\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL4B-1'].faces.findAt(
    ((-1.0, (((COMPL4B_OR**2)-(1**2))**0.5)-(COMPL4B_THICKNESS/2), 0.0), ), )+\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL4A-1'].faces.findAt(
    ((-1.0, (((COMPL4A_OR**2)-(1**2))**0.5)-(COMPL4A_THICKNESS/2), 0.0), ), )+\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL3-1'].faces.findAt((
    (-1.0, (((COMPL3_OR**2)-(1**2))**0.5)-(COMPL3_THICKNESS/2), 0.0), ), )+\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL2B-1'].faces.findAt(
    ((-1.0, (((COMPL2B_OR**2)-(1**2))**0.5)-(COMPL2B_THICKNESS/2), 0.0), ), )+\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL2A-1'].faces.findAt(
    ((-1.0, (((COMPL2A_OR**2)-(1**2))**0.5)-(COMPL2A_THICKNESS/2), 0.0), ), )+\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL1-1'].faces.findAt(
    ((-1.0, (((COMPL1_OR**2)-(1**2))**0.5)-(COMPL1_THICKNESS/2), 0.0), ), )+\
    mdb.models[MODEL_NAME].rootAssembly.instances['Liner-1'].faces.findAt(
    ((-1.0, (((LINER_OR**2)-(1**2))**0.5)-(LINER_THICKNESS/2), 0.0), ), ))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Plate_faces_1', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['Plate-1'].faces.findAt(
    ((-1.0, (((COMPL6B_OR**2)-(1**2))**0.5)-(COMPL6B_THICKNESS/2), 0.0), )))
mdb.models[MODEL_NAME].Tie(adjust=ON, master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Cyl_faces_1'], name=
    'J_plate_to_liner_top', positionToleranceMethod=COMPUTED, slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Plate_faces_1'], thickness=ON, 
    tieRotations=ON)    
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Cyl_faces_2', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL6B-1'].faces.findAt(
    ((-1.0, -(((COMPL6B_OR**2)-(1**2))**0.5)+(COMPL6B_THICKNESS/2), 0.0), ), )+\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL6A-1'].faces.findAt(
    ((-1.0, -(((COMPL6A_OR**2)-(1**2))**0.5)+(COMPL6A_THICKNESS/2), 0.0), ), )+\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL5-1'].faces.findAt(
    ((-1.0, -(((COMPL5_OR**2)-(1**2))**0.5)+(COMPL5_THICKNESS/2), 0.0), ), )+\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL4B-1'].faces.findAt(
    ((-1.0, -(((COMPL4B_OR**2)-(1**2))**0.5)+(COMPL4B_THICKNESS/2), 0.0), ), )+\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL4A-1'].faces.findAt(
    ((-1.0, -(((COMPL4A_OR**2)-(1**2))**0.5)+(COMPL4A_THICKNESS/2), 0.0), ), )+\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL3-1'].faces.findAt((
    (-1.0, -(((COMPL3_OR**2)-(1**2))**0.5)+(COMPL3_THICKNESS/2), 0.0), ), )+\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL2B-1'].faces.findAt(
    ((-1.0, -(((COMPL2B_OR**2)-(1**2))**0.5)+(COMPL2B_THICKNESS/2), 0.0), ), )+\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL2A-1'].faces.findAt(
    ((-1.0, -(((COMPL2A_OR**2)-(1**2))**0.5)+(COMPL2A_THICKNESS/2), 0.0), ), )+\
    mdb.models[MODEL_NAME].rootAssembly.instances['CompL1-1'].faces.findAt(
    ((-1.0, -(((COMPL1_OR**2)-(1**2))**0.5)+(COMPL1_THICKNESS/2), 0.0), ), )+\
    mdb.models[MODEL_NAME].rootAssembly.instances['Liner-1'].faces.findAt(
    ((-1.0, -(((LINER_OR**2)-(1**2))**0.5)+(LINER_THICKNESS/2), 0.0), ), ))
mdb.models[MODEL_NAME].rootAssembly.Surface(name='Plate_faces_2', side1Faces=
    mdb.models[MODEL_NAME].rootAssembly.instances['Plate-1'].faces.findAt(
    ((-1.0, -(((COMPL6B_OR**2)-(1**2))**0.5)+(COMPL6B_THICKNESS/2), 0.0), )))
mdb.models[MODEL_NAME].Tie(adjust=ON, master=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Cyl_faces_2'], name=
    'J_plate_to_liner_bot', positionToleranceMethod=COMPUTED, slave=
    mdb.models[MODEL_NAME].rootAssembly.surfaces['Plate_faces_2'], thickness=ON, 
    tieRotations=ON) 
    
########## THIS SECTION CREATES ALL THE MESHES ####################################################################   
mdb.models[MODEL_NAME].parts['Liner'].generateMesh()
mdb.models[MODEL_NAME].parts['Liner'].setElementType(elemTypes=(ElemType(
    elemCode=C3D8R, elemLibrary=EXPLICIT, secondOrderAccuracy=OFF, 
    kinematicSplit=AVERAGE_STRAIN, hourglassControl=ENHANCED, 
    distortionControl=DEFAULT), ElemType(elemCode=C3D6, elemLibrary=EXPLICIT), 
    ElemType(elemCode=C3D4, elemLibrary=EXPLICIT)), regions=(
    mdb.models[MODEL_NAME].parts['Liner'].cells.findAt(
    ((0.0, LINER_IR, CYL_LENGTH), ), 
    ((0.0, LINER_IR, 0.0), ), 
    ((0.0, -LINER_IR, CYL_LENGTH), ), 
    ((0.0, LINER_IR, 0.0), ), ), ))
mdb.models[MODEL_NAME].parts['CompL1'].generateMesh()
mdb.models[MODEL_NAME].parts['CompL1'].setElementType(elemTypes=(ElemType(
    elemCode=C3D8R, elemLibrary=EXPLICIT, secondOrderAccuracy=OFF, 
    kinematicSplit=AVERAGE_STRAIN, hourglassControl=ENHANCED, 
    distortionControl=DEFAULT), ElemType(elemCode=C3D6, elemLibrary=EXPLICIT), 
    ElemType(elemCode=C3D4, elemLibrary=EXPLICIT)), regions=(
    mdb.models[MODEL_NAME].parts['CompL1'].cells.findAt(
    ((0.0, COMPL1_OR, CYL_LENGTH), ), 
    ((0.0, COMPL1_OR, 0.0), ), 
    ((0.0, -COMPL1_OR, CYL_LENGTH), ), 
    ((0.0, -COMPL1_OR, 0.0), ), ), ))
mdb.models[MODEL_NAME].parts['CompL2A'].generateMesh()
mdb.models[MODEL_NAME].parts['CompL2A'].setElementType(elemTypes=(ElemType(
    elemCode=C3D8R, elemLibrary=EXPLICIT, secondOrderAccuracy=OFF, 
    kinematicSplit=AVERAGE_STRAIN, hourglassControl=ENHANCED, 
    distortionControl=DEFAULT), ElemType(elemCode=C3D6, elemLibrary=EXPLICIT), 
    ElemType(elemCode=C3D4, elemLibrary=EXPLICIT)), regions=(
    mdb.models[MODEL_NAME].parts['CompL2A'].cells.findAt(
    ((0.0, COMPL2A_OR, CYL_LENGTH), ), 
    ((0.0, COMPL2A_OR, 0.0), ), 
    ((0.0, -COMPL2A_OR, CYL_LENGTH), ), 
    ((0.0, -COMPL2A_OR, 0.0), ), ), ))
mdb.models[MODEL_NAME].parts['CompL2B'].generateMesh()
mdb.models[MODEL_NAME].parts['CompL2B'].setElementType(elemTypes=(ElemType(
    elemCode=C3D8R, elemLibrary=EXPLICIT, secondOrderAccuracy=OFF, 
    kinematicSplit=AVERAGE_STRAIN, hourglassControl=ENHANCED, 
    distortionControl=DEFAULT), ElemType(elemCode=C3D6, elemLibrary=EXPLICIT), 
    ElemType(elemCode=C3D4, elemLibrary=EXPLICIT)), regions=(
    mdb.models[MODEL_NAME].parts['CompL2B'].cells.findAt(
    ((0.0, COMPL2B_OR, CYL_LENGTH), ), 
    ((0.0, COMPL2B_OR, 0.0), ), 
    ((0.0, -COMPL2B_OR, CYL_LENGTH), ), 
    ((0.0, -COMPL2B_OR, 0.0), ), ), ))
mdb.models[MODEL_NAME].parts['CompL3'].generateMesh()
mdb.models[MODEL_NAME].parts['CompL3'].setElementType(elemTypes=(ElemType(
    elemCode=C3D8R, elemLibrary=EXPLICIT, secondOrderAccuracy=OFF, 
    kinematicSplit=AVERAGE_STRAIN, hourglassControl=ENHANCED, 
    distortionControl=DEFAULT), ElemType(elemCode=C3D6, elemLibrary=EXPLICIT), 
    ElemType(elemCode=C3D4, elemLibrary=EXPLICIT)), regions=(
    mdb.models[MODEL_NAME].parts['CompL3'].cells.findAt(
    ((0.0, COMPL3_OR, CYL_LENGTH), ), 
    ((0.0, COMPL3_OR, 0.0), ), 
    ((0.0, -COMPL3_OR, CYL_LENGTH), ), 
    ((0.0, -COMPL3_OR, 0.0), ), ), ))
mdb.models[MODEL_NAME].parts['CompL4A'].generateMesh()
mdb.models[MODEL_NAME].parts['CompL4A'].setElementType(elemTypes=(ElemType(
    elemCode=C3D8R, elemLibrary=EXPLICIT, secondOrderAccuracy=OFF, 
    kinematicSplit=AVERAGE_STRAIN, hourglassControl=ENHANCED, 
    distortionControl=DEFAULT), ElemType(elemCode=C3D6, elemLibrary=EXPLICIT), 
    ElemType(elemCode=C3D4, elemLibrary=EXPLICIT)), regions=(
    mdb.models[MODEL_NAME].parts['CompL4A'].cells.findAt(
    ((0.0, COMPL4A_OR, CYL_LENGTH), ), 
    ((0.0, COMPL4A_OR, 0.0), ), 
    ((0.0, -COMPL4A_OR, CYL_LENGTH), ), 
    ((0.0, -COMPL4A_OR, 0.0), ), ), ))
mdb.models[MODEL_NAME].parts['CompL4B'].generateMesh()
mdb.models[MODEL_NAME].parts['CompL4B'].setElementType(elemTypes=(ElemType(
    elemCode=C3D8R, elemLibrary=EXPLICIT, secondOrderAccuracy=OFF, 
    kinematicSplit=AVERAGE_STRAIN, hourglassControl=ENHANCED, 
    distortionControl=DEFAULT), ElemType(elemCode=C3D6, elemLibrary=EXPLICIT), 
    ElemType(elemCode=C3D4, elemLibrary=EXPLICIT)), regions=(
    mdb.models[MODEL_NAME].parts['CompL4B'].cells.findAt(
    ((0.0, COMPL4B_OR, CYL_LENGTH), ), 
    ((0.0, COMPL4B_OR, 0.0), ), 
    ((0.0, -COMPL4B_OR, CYL_LENGTH), ), 
    ((0.0, -COMPL4B_OR, 0.0), ), ), ))
mdb.models[MODEL_NAME].parts['CompL5'].generateMesh()
mdb.models[MODEL_NAME].parts['CompL5'].setElementType(elemTypes=(ElemType(
    elemCode=C3D8R, elemLibrary=EXPLICIT, secondOrderAccuracy=OFF, 
    kinematicSplit=AVERAGE_STRAIN, hourglassControl=ENHANCED, 
    distortionControl=DEFAULT), ElemType(elemCode=C3D6, elemLibrary=EXPLICIT), 
    ElemType(elemCode=C3D4, elemLibrary=EXPLICIT)), regions=(
    mdb.models[MODEL_NAME].parts['CompL5'].cells.findAt(
    ((0.0, COMPL5_OR, CYL_LENGTH), ), 
    ((0.0, COMPL5_OR, 0.0), ), 
    ((0.0, -COMPL5_OR, CYL_LENGTH), ), 
    ((0.0, -COMPL5_OR, 0.0), ), ), ))
mdb.models[MODEL_NAME].parts['CompL6A'].generateMesh()
mdb.models[MODEL_NAME].parts['CompL6A'].setElementType(elemTypes=(ElemType(
    elemCode=C3D8R, elemLibrary=EXPLICIT, secondOrderAccuracy=OFF, 
    kinematicSplit=AVERAGE_STRAIN, hourglassControl=ENHANCED, 
    distortionControl=DEFAULT), ElemType(elemCode=C3D6, elemLibrary=EXPLICIT), 
    ElemType(elemCode=C3D4, elemLibrary=EXPLICIT)), regions=(
    mdb.models[MODEL_NAME].parts['CompL6A'].cells.findAt(
    ((0.0, COMPL6A_OR, CYL_LENGTH), ), 
    ((0.0, COMPL6A_OR, 0.0), ), 
    ((0.0, -COMPL6A_OR, CYL_LENGTH), ), 
    ((0.0, -COMPL6A_OR, 0.0), ), ), ))
mdb.models[MODEL_NAME].parts['CompL6B'].generateMesh()
mdb.models[MODEL_NAME].parts['CompL6B'].setElementType(elemTypes=(ElemType(
    elemCode=C3D8R, elemLibrary=EXPLICIT, secondOrderAccuracy=OFF, 
    kinematicSplit=AVERAGE_STRAIN, hourglassControl=ENHANCED, 
    distortionControl=DEFAULT), ElemType(elemCode=C3D6, elemLibrary=EXPLICIT), 
    ElemType(elemCode=C3D4, elemLibrary=EXPLICIT)), regions=(
    mdb.models[MODEL_NAME].parts['CompL6B'].cells.findAt(
    ((0.0, COMPL6B_OR, CYL_LENGTH), ), 
    ((0.0, COMPL6B_OR, 0.0), ), 
    ((0.0, -COMPL6B_OR, CYL_LENGTH), ), 
    ((0.0, -COMPL6B_OR, 0.0), ), ), ))
    
########## THIS SECTION CREATES COHESIVE PROPERTIES ###############################################################
mdb.models[MODEL_NAME].CohesiveSection(material='Cohesive_MetalComp', name=
    'Cohesive_MetalComp', outOfPlaneThickness=None, response=TRACTION_SEPARATION)
mdb.models[MODEL_NAME].CohesiveSection(material='Cohesive_CFRP', name=
    'Cohesive_CFRP', outOfPlaneThickness=None, response=
    TRACTION_SEPARATION)

########## THIS SECTION CREATES THE JOB ###########################################################################
mdb.Job(activateLoadBalancing=False, atTime=None, contactPrint=OFF, 
    description='', echoPrint=OFF, explicitPrecision=SINGLE, historyPrint=OFF, 
    memory=90, memoryUnits=PERCENTAGE, model=MODEL_NAME, modelPrint=OFF, 
    multiprocessingMode=DEFAULT, name='Run_' + MODEL_NAME, nodalOutputPrecision=SINGLE, 
    numCpus=8, numDomains=8, parallelizationMethodExplicit=DOMAIN, queue=None, 
    resultsFormat=ODB, scratch='', type=ANALYSIS, userSubroutine='', waitHours=
    0, waitMinutes=0)