Пример #1
0
def set_plate_property(Stack, Metal_name, polymer_name):
    print("in set plate property")

    p = mdb.models['Model-1'].parts['Plate']
    c = p.cells

    layup = []
    num = 1
    for _ in Stack:
        if (_[0] != _[1]):
            if _[0]:
                layup.append(
                    section.SectionLayer(material=Metal_name,
                                         thickness=_[2],
                                         orientAngle=_[3],
                                         numIntPts=3,
                                         plyName="p%d" % num))
            else:
                layup.append(
                    section.SectionLayer(material=polymer_name,
                                         thickness=_[2],
                                         orientAngle=_[3],
                                         numIntPts=3,
                                         plyName="p%d" % num))
        num += 1

    mdb.models['Model-1'].CompositeShellSection(name='Section-1',
                                                preIntegrate=OFF,
                                                idealization=NO_IDEALIZATION,
                                                symmetric=False,
                                                thicknessType=UNIFORM,
                                                poissonDefinition=DEFAULT,
                                                thicknessModulus=None,
                                                temperature=GRADIENT,
                                                useDensity=OFF,
                                                integrationRule=SIMPSON,
                                                layup=tuple(layup, ))
    p = mdb.models['Model-1'].parts['Plate']
    c = p.cells
    cells = c.getSequenceFromMask(mask=('[#3 ]', ), )
    region = regionToolset.Region(cells=cells)
    p = mdb.models['Model-1'].parts['Plate']
    p.SectionAssignment(region=region,
                        sectionName='Section-1',
                        offset=0.0,
                        offsetType=MIDDLE_SURFACE,
                        offsetField='',
                        thicknessAssignment=FROM_SECTION)
    mdb.models['Model-1'].parts['Plate'].MaterialOrientation(
        region=region,
        orientationType=SYSTEM,
        axis=AXIS_3,
        localCsys=None,
        fieldName='',
        additionalRotationType=ROTATION_ANGLE,
        additionalRotationField='',
        angle=0.0,
        stackDirection=STACK_3)
Пример #2
0
    def _define_ply(self, ply_name, i, orientation, ply_thickness):
        sec = section.SectionLayer(material=self.material.name,
                                   thickness=ply_thickness,
                                   orientAngle=orientation,
                                   numIntPts=3,
                                   plyName='%s_%i' % (ply_name, i))

        return sec
Пример #3
0
def Create_section(obj_lst, name, metal_text, frp_text):
    layup = []
    num = 1
    for _ in obj_lst:
        if _[0]:
            layup.append(section.SectionLayer(material=metal_text,
                                              thickness=_[2], orientAngle=_[3], numIntPts=3, plyName="p%d"%num))
        else:
            layup.append(section.SectionLayer(material=frp_text,
                                              thickness=_[2], orientAngle=_[3], numIntPts=3, plyName="p%d"%num))
        num += 1
    mdb.models['Model-1'].CompositeShellSection(name='Section-1', preIntegrate=OFF, idealization=NO_IDEALIZATION, symmetric=False, thicknessType=UNIFORM, poissonDefinition=DEFAULT, thicknessModulus=None,
                                                temperature=GRADIENT, useDensity=OFF, integrationRule=SIMPSON, layup=tuple(layup, ))
    p = mdb.models['Model-1'].parts[name]
    c = p.cells
    cells = c.getSequenceFromMask(mask=('[#1f ]', ), )
    region = regionToolset.Region(cells=cells)
    p = mdb.models['Model-1'].parts[name]
    p.SectionAssignment(region=region, sectionName='Section-1', offset=0.0, 
        offsetType=MIDDLE_SURFACE, offsetField='', 
        thicknessAssignment=FROM_SECTION)
Пример #4
0
def fastGenerate(model_name, material_name, section_name, layup,
                 ply_thickness):

    #### get reduced string without '2s'
    model = mdb.models[model_name]

    mid = layup.find(']')
    rr = layup[:mid]  ## truncated string rr

    rr = rr.replace('[', ' ')
    rr = rr.replace('/', ' ')
    rr = rr.replace('\\', ' ')
    #--------------

    layup_s = rr.split()  ## list of angles

    #### get reduced string without '2s'
    qq = layup[mid + 1:].lower()
    s_exist = qq.find('s')

    if s_exist != -1:
        symm = True  #symmetric
        try:
            times = int(qq[:s_exist])
        except ValueError:
            times = 1
    else:
        symm = False
        try:
            times = int(qq)
        except ValueError:
            times = 1

    #### get the complete layup
    layup_ori = []

    if symm:
        half0 = layup_s * times
        half1 = half0[:]
        half1.reverse()
        layup_ori = half0 + half1
    else:
        layup_ori = layup_s * times

    section_layer = []
    for a in layup_ori:
        sl = section.SectionLayer(material=material_name,
                                  thickness=ply_thickness,
                                  orientAngle=float(a))
        section_layer.append(sl)
    model.CompositeSolidSection(name=section_name, layup=tuple(section_layer))

    return 1
Пример #5
0
def Create_section(obj_lst, name, metal_text, frp_text):
    layup = []
    num = 1
    for _ in obj_lst:
        if _[0]:
            layup.append(section.SectionLayer(material=metal_text,
                                              thickness=_[2], orientAngle=_[3], numIntPts=3, plyName="p%d"%num))
        else:
            layup.append(section.SectionLayer(material=frp_text,
                                              thickness=_[2], orientAngle=_[3], numIntPts=3, plyName="p%d"%num))
        num += 1
    mdb.models['Model-1'].CompositeShellSection(name='Section-1', preIntegrate=OFF, idealization=NO_IDEALIZATION, symmetric=False, thicknessType=UNIFORM, poissonDefinition=DEFAULT, thicknessModulus=None,
                                                temperature=GRADIENT, useDensity=OFF, integrationRule=SIMPSON, layup=tuple(layup, ))
    p = mdb.models['Model-1'].parts[name]
    c = p.cells
    cells = c.getSequenceFromMask(mask=('[#1f ]', ), )
    region = regionToolset.Region(cells=cells)
    p = mdb.models['Model-1'].parts[name]
    p.SectionAssignment(region=region, sectionName='Section-1', offset=0.0, 
        offsetType=MIDDLE_SURFACE, offsetField='', 
        thicknessAssignment=FROM_SECTION)
    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
    # assign orientation
    p = mdb.models['Model-1'].parts[name]
    p.DatumCsysByThreePoints(name='Datum csys-4', coordSysType=CARTESIAN, origin=(
        0.0, 0.0, 0.0), point1=(0.0, 1.0, 0.0), point2=(1.0, 0.0, 0.0))
    p = mdb.models['Model-1'].parts[name]
    c = p.cells
    cells = c.getSequenceFromMask(mask=('[#1f ]',), )
    region = regionToolset.Region(cells=cells)
    orientation = mdb.models['Model-1'].parts[name].datums[8]
    mdb.models['Model-1'].parts[name].MaterialOrientation(region=region,
                                                              orientationType=SYSTEM, axis=AXIS_1,
                                                              localCsys=orientation,
                                                              fieldName='',
                                                              additionalRotationType=ROTATION_NONE, angle=0.0,
                                                              additionalRotationField='', stackDirection=STACK_3)
Пример #6
0
def readLayupFile(model_name, file_name, mid_name):

    model = mdb.models[model_name]

    tree_layup = et.parse(file_name)
    root_layup = tree_layup.getroot()

    for layup in root_layup:
        section_layer = []
        lyp_name = layup.find('name').text
        lyp_data = layup.find('data').text
        lyp_data = lyp_data.strip().split('\n')
        for l in lyp_data:
            l = l.split()
            [thk, mid, ora] = [float(l[0]), int(l[1]), float(l[2])]
            mname = mid_name[mid]
            sl = section.SectionLayer(material=mname,
                                      thickness=thk,
                                      orientAngle=ora)
            section_layer.append(sl)
        model.CompositeSolidSection(name=lyp_name, layup=tuple(section_layer))
Пример #7
0
print(theta)
###
Flip_theta=theta[::-1] # Flipping the theta1
theta.extend(Flip_theta)
#print(theta1)
for i in range(NS):    
    myOrientationsList[i].extend([0,theta[i],90,-theta[i],-theta[i],90,theta[i],0])
print(myOrientationsList)

##################################

nLayers=8 # Number of layers in each segments
sectionLayer = [ [] for i in range(NS) ]
for i in range(NS): 
	for j in range(nLayers): 
                sectionLayer[i].extend([ section.SectionLayer(material='Material_1', thickness=0.127, 
                orientAngle=myOrientationsList[i][j], numIntPts=3, plyName='Ply-%d'%(j+1))] )
for i in range(NS): 
	for j in range(nLayers): 
                mdb.models['Model-1'].CompositeShellSection(name='narrowSegment_%d'%(i+1), 
                preIntegrate=OFF, idealization=NO_IDEALIZATION, symmetric=True, 
                thicknessType=UNIFORM, poissonDefinition=DEFAULT, 
                thicknessModulus=None, temperature=GRADIENT, useDensity=OFF, 
                integrationRule=SIMPSON, layup=(sectionLayer[i][0], sectionLayer[i][1], 
                sectionLayer[i][2], sectionLayer[i][3], sectionLayer[i][4], sectionLayer[i][5], 
                sectionLayer[i][6], sectionLayer[i][7], ))
                ###


p = mdb.models['Model-1'].parts['Part-1']
for i in range(NS):
        region = p.sets['narrowSegment_%d'%(i+1)]
    mdb.models[modelname].materials['GFRP_UMAT'].userMaterial.setValues(
        mechanicalConstants=(101000, 0.0, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0,
                             34092.0, 11000.0, 3070.0, 0.3, 0.096796902, 39.0,
                             42.0, 0.277, 0.788, 1.634, 112.0, 0.925, 11000.0,
                             1000.0, 3070.0, 0.3, 0.0, 0.0, 4.412e-10, 5.934,
                             755.15, 0.5, 133.3, 0.5, 365.65, 0.5, 47.5, 0.5))

    Mat = 'GFRP'
    if UMAT:
        Mat = 'GFRP_UMAT'

    #------ Make Section -------

    sectionLayer1 = section.SectionLayer(material=Mat,
                                         thickness=1.0,
                                         orientAngle=90.0,
                                         numIntPts=1,
                                         plyName='Ply_1')
    sectionLayer2 = section.SectionLayer(material=Mat,
                                         thickness=1.0,
                                         orientAngle=90.0,
                                         numIntPts=1,
                                         plyName='Ply_2')
    sectionLayer3 = section.SectionLayer(material=Mat,
                                         thickness=1.0,
                                         orientAngle=90.0,
                                         numIntPts=1,
                                         plyName='Ply_3')
    sectionLayer4 = section.SectionLayer(material=Mat,
                                         thickness=1.0,
                                         orientAngle=90.0,
Пример #9
0
    def all_over(self, angles, thickness, input_file_location):
        os.chdir(input_file_location)
        input_folder_name = getInput('Enter name for folder containing input files: ')
        if not os.path.exists(input_folder_name):
            os.mkdir(input_folder_name)
            print("Directory " , input_folder_name ,  " Created ")
            os.chdir(input_folder_name)
        else:
            print("Directory " , input_folder_name ,  " already exists")
            os.chdir(input_folder_name)
            return

        for angle in angles:
            try:
                openMdb(pathName=self.cae_file_path)
                p = mdb.models['Model-1'].parts['HW']

                #--------------- Materials -------------------------------------
                mdb.models['Model-1'].Material(name='CF')
                mdb.models['Model-1'].Material(name='Foam')
                mdb.models['Model-1'].materials['CF'].Elastic(type=ENGINEERING_CONSTANTS,
                        table=((130000.0, 10000.0, 10000.0, 0.2, 0.2, 0.4, 4000.0, 4000.0,
                        3000.0), ))
                mdb.models['Model-1'].materials['Foam'].Elastic(type=ISOTROPIC,
                        table=((300,0.3), ))


                #---------------- Section ----------------------------------------
                sectionLayer1 = section.SectionLayer(material='CF', thickness=thickness,
                    orientAngle=angle, numIntPts=3, plyName='')
                mdb.models['Model-1'].CompositeShellSection(name='CF', preIntegrate=OFF,
                    idealization=NO_IDEALIZATION, symmetric=False, thicknessType=UNIFORM,
                    poissonDefinition=DEFAULT, thicknessModulus=None, temperature=GRADIENT,
                    useDensity=OFF, integrationRule=SIMPSON, layup=(sectionLayer1, ))

                mdb.models['Model-1'].HomogeneousSolidSection(name='Foam',
                    material='Foam', thickness=None)

                # --------------- Assignment ----------------------------------------
                cells = p.cells
                region = p.Set(cells=cells, name='Set-1')
                p.SectionAssignment(region=region, sectionName='Foam', offset=0.0,
                    offsetType=MIDDLE_SURFACE, offsetField='',
                    thicknessAssignment=FROM_SECTION)
                faces = p.faces
                p.Skin(faces=faces, name='Skin-1')
                region = p.Set(skinFaces=(('Skin-1', faces), ), name='Set-4')
                p.SectionAssignment(region=region, sectionName='CF', offset=0.0,
                    offsetType=MIDDLE_SURFACE, offsetField='',
                    thicknessAssignment=FROM_SECTION)


                # ----------------- Orientation -------------------------------------
                s = p.faces
                edge = p.edges.getByBoundingBox(-1000,-1000,249,1000,1000,251)
                normalAxisRegion = p.Surface(side1Faces=s, name='Normal_Axis_Region')
                primaryAxisRegion = p.Set(edges=edge, name='Primary_Axis_Region')
                mdb.models['Model-1'].parts['HW'].MaterialOrientation(region=region,
                    orientationType=GLOBAL, axis=AXIS_1,
                    additionalRotationType=ROTATION_NONE, localCsys=None, fieldName='')

                """
                mdb.models['Model-1'].parts['HW'].MaterialOrientation(region=region,
                    orientationType=DISCRETE, axis=AXIS_3, normalAxisDefinition=SURFACE,
                    normalAxisRegion=normalAxisRegion, flipNormalDirection=False,
                    normalAxisDirection=AXIS_3, primaryAxisDefinition=EDGE,
                    primaryAxisRegion=primaryAxisRegion, primaryAxisDirection=AXIS_2,
                    flipPrimaryDirection=False, additionalRotationType=ROTATION_NONE,
                    angle=0.0, additionalRotationField='')
                """

                # ----------------- Skin Mesh ----------------------------------------

                elemType1 = mesh.ElemType(elemCode=S8R, elemLibrary=STANDARD)
                elemType2 = mesh.ElemType(elemCode=STRI65, elemLibrary=STANDARD)
                a = mdb.models['Model-1'].rootAssembly
                f1 = a.instances['HW-1'].faces
                pickedRegions = regionToolset.Region(skinFaces=(('Skin-1', f1), ))
                a.setElementType(regions=pickedRegions, elemTypes=(elemType1, elemType2))

                # ------------------ Job ----------------------------------------------
                name = 'HWAllOver_' + str(int(angle))
                print(name)
                mdb.Job(name=name, model='Model-1', description='', type=ANALYSIS,
                    atTime=None, waitMinutes=0, waitHours=0, queue=None, memory=90,
                    memoryUnits=PERCENTAGE, getMemoryFromAnalysis=True,
                    explicitPrecision=SINGLE, nodalOutputPrecision=SINGLE, echoPrint=OFF,
                    modelPrint=OFF, contactPrint=OFF, historyPrint=OFF, userSubroutine='',
                    scratch='', resultsFormat=ODB, multiprocessingMode=DEFAULT, numCpus=1,
                    numGPUs=0)
                mdb.jobs[name].writeInput(consistencyChecking=OFF)
                mdb.close()
            except:
                pass
Пример #10
0
 #------- Remove edges ---------
 
 e = p.edges
 RemoveWireEdges = e.getSequenceFromMask(mask=('[#3ff ]', ), )
 p.RemoveWireEdges(wireEdgeList=RemoveWireEdges)
 
 #------ Make Material ------
 
 mdb.models[modelname].Material(name='GFRP')
 mdb.models[modelname].materials['GFRP'].Elastic(
     type=ENGINEERING_CONSTANTS, table=((44800.0, 12100.0, 12100.0, 0.3, 0.0879, 
     0.3, 3400.0, 3400.0, 3400.0), ))
 
 #------ Make Section -------
 
 sectionLayer1 = section.SectionLayer(material='GFRP', thickness=1.0, 
     orientAngle=0.0, numIntPts=1, plyName='Layer')
 mdb.models[modelname].CompositeSolidSection(name='Sect_VacInf', 
     layupName='', symmetric=False, layup=(sectionLayer1, ))
 
 #----- Make material orientations and assign sections -----
 
 p = mdb.models[modelname].parts['Part-1']
 c = p.cells
 cells = c.getSequenceFromMask(mask=('[#1820011 ]', ), )
 region = p.Set(cells=cells, name='Set_Layer_1')
 p = mdb.models[modelname].parts['Part-1']
 p.SectionAssignment(region=region, sectionName='Sect_VacInf', offset=0.0, 
     offsetType=MIDDLE_SURFACE, offsetField='', 
     thicknessAssignment=FROM_SECTION)
 
 cells = c.getSequenceFromMask(mask=('[#442300 ]', ), )