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)
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
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)
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
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)
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))
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,
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
#------- 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 ]', ), )