Соединение Abaqus с циклом For ⇐ Python
-
Anonymous
Соединение Abaqus с циклом For
Я студент-строитель, и в рамках своей магистерской диссертации мне нужно провести анализ устойчивости колонн из многослойного стекла в Абакусе. Для этого я написал скрипт на Python.
Я создаю деталь глубиной суммы стекол и прослоек. Я создаю несколько базовых плоскостей и создаю перегородку, поэтому у меня есть n слоев стекла и n-1 слоев промежуточных слоев. Для проникновения нагрузки мне нужны перегородки сверху и снизу посередине слоев стекла. Я создаю несколько опорных точек для нагрузки и граничных условий.
Теперь мне нужно создать ограничения через узлы связи между опорными точками и гранями раздела. Я делаю это для того, чтобы концы не скользили.
Я понятия не имею, почему цикл for не работает. Ребята, вы знаете, где я делаю ошибку, или у вас есть идея, как мне написать цикл for, чтобы связь работала?
Вот мой код:
##################################### # Параметры Knickstab VSG# ##################################### """ Скрипт Диес... ... modelliert einen Stab ... führt eine Buckling Анализ прочного ... verschiebt eine Ecke aus der Ebene heraus ... и опционально грузит собственным весом """ высота = 2000,0 #x экстент ширина = 250,0 #y экстент dglas = [8, 12, 14] #z расширительное стекло dfoil = [1.52, 0.76] #z расширяющаяся фольга толщина = sum(dglas) + sum(dfilm) #z общее расширение размер сетки = 50 NumberElemThicknessFoil = 2 #Orient Langosch позже проведет исследование консервации числоЭлемТолщинаСтекла = 1 эмодулГлас = 70000 мюГласс = 0,23 Модуль сдвига фольги = 1 # Langosch G[0;1;10;∞] мюфойл = 0,39 эмодулФойл = 2*(1+мьюФойл)*ШармодульФойл mInc = 0,05 #максимальный размер приращения initInc = 0.05 #Начальный размер приращения рабочая область = 'C:' beElemType = 'C3D8R' #Buckle Шаг связан eZero = высота/400 #амплитуда несовершенства numEigForm = 4 #Количество запрошенных собственных форм eigForm = 1 #выбранная собственная форма ################################################ ################################################ ##################################### ########################## ТЕЛО СКРИПТА ##################### ################################################ ########################### ################################################ ################################################ ##################################### modelname = 'Stuetze_'+str(dglas[0]) для меня в диапазоне (1,len(dglas)): имя модели = имя модели + '-' + str(int(dfilm[i-1]/0.38))+'f' имя_модели=имя_модели + '-' + str(int(dglas)) имя модели = имя модели + '_G'+str (фольга модуля сдвига) имя детали = название модели delta = толщина/anzElemThicknessGlass/10 # Не удаляйте следующие строки импорта из импорта abaqus * из импорта abaqusConstants * импортировать __main__ раздел импорта импорт регионаToolset импортировать displayGroupMdbToolset как dgm импортная часть импортный материал импортная сборка шаг импорта импорт взаимодействия импортная нагрузка импортировать сетку оптимизация импорта импортировать задание импортировать эскиз импортировать визуализацию импортировать xyPlot импортировать displayGroupOdbToolset как dgo импортный соединительПоведение импортировать ОС из импорта odbAccess * импортировать numpy как np ################################################ ########################## #!!!!!!!!!!!!!!ВИИИИАЙТ!!!!!!!!!!!!!!!!!!!! # | # | #В #Настраиваем рабочий каталог os.chdir(r"C")# # Создание модели mdb.Model(имя=имя модели, тип модели=STANDARD_EXPLICIT) a = mdb.models[имя модели].rootAssembly # Создание детали s1 = mdb.models[имя модели].ConstrainedSketch(name='__profile__', размер листа = 200,0) s1.rectangle(point1=(0, 0), point2=(ширина, высота)) p = mdb.models[имя модели].Part(имя=имя детали, размерность=THREE_D, тип=DEFORMABLE_BODY) p.BaseSolidExtrume(эскиз=s1, глубина=толщина) p = mdb.models[имя модели].parts[имя детали] del mdb.models[имя модели].sketches['__profile__'] # Создайте опорные плоскости относительно поверхностей с учетом толщины f = p.faces.findAt((дельта,дельта,0),) # создаем вектор с координатами толщины, в котором создаются плоскости даты датаТикнесс = [] dateDicken.append(dglas[0]) для меня в диапазоне (1,len(dglas)): если я%2 != 0: dateThickness.append(dateThickness[i-1]+dfoil[i-1]) еще: datumDicken.append(datumDicken[i-1]+dglas[i-1]) dateThickness.append(dateThickness[-1]+dfoil[-1]) datumDicken.append(datumDicken[-1]+dglas[-1]) для меня в диапазоне (len(dateThickness)-1): p.DatumPlaneByOffset(plane=f, переворот=SIDE2, смещение=float(datumThickness)) # Создайте раздел на основе ранее созданных уровней дат для меня в диапазоне (len(dateThickness)-1): c = p.клетки # Разделение ячеек с первым уровнем даты (f[4]) PickCells = c.findAt((0,0,dateThickness-0.01),) d1 = p.datums p.PartitionCellByDatumPlane(datumPlane=d1[i+2], ячейки=pickedCells) #Создайте перегородку в центре тяжести стеклянных панелей, чтобы передать нагрузку в случае препятствия на скользящих концах. для меня в диапазоне (len(dglas)): j=я*2 #Разделы внизу f = p.faces PickFaces = f.findAt((width/2.0,(dateThickness[j]-0.01)),) v, e, d = p.вершины, p.ребра, p.базы p.PartitionFaceByShortestPath(faces=pickedFaces, point1=p.InterestingPoint( Edge=e.findAt((0,0,datumThickness[j]-0.01), rule=MIDDLE), point2=p.InterestingPoint(edge=e.findAt((width,0,datumThickness[j]-0.01) ,), правило=СРЕДНЕЕ)) #Разделы сверху PickFaces = f.findAt((ширина/2,высота,(dateThickness[j]-0.01)),) v, e, d = p.вершины, p.ребра, p.базы p.PartitionFaceByShortestPath(faces=pickedFaces, point1=p.InterestingPoint( Edge=e.findAt((0,height,datumThickness[j]-0.01), rule=MIDDLE), point2=p.InterestingPoint(edge=e.findAt((width,height,datumThickness[j]-0.01) ,), правило=СРЕДНЕЕ)) # Создаем материал стекла mdb.models[имя модели].Материал(имя='Стекло') mdb.models[имя модели].materials['Glas'].Elastic(table=((emodulGlas, mueGlas), )) # Материал: Folie elastischer Schubmodul. mdb.models[имя модели].Material(name='Folie') mdb.models[имя модели].materials['Folie'].Elastic(table=((emodulFolie, mueFolie), )) #Раздел Эрстеллунг mdb.models[имя модели].HomogeneousSolidSection(name='GlasSection', материал='Стекло', толщина=Нет) mdb.models[имя модели].HomogeneousSolidSection(name='FolieSection', материал = 'Фоли', толщина = нет) #Раздел Цувайсунг #Zuweisung der Glasssection для меня в диапазоне (len(dglas)): j=я*2 c = p.клетки c1 = c.findAt((0,0,datumDicken[j]-0.01), ) q = c1.индекс ячейки = c[q:q+1] регион = p.Set(cells=cells, name='Scheibe-'+str(i)) p.SectionAssignment(region=region,sectionName='GlasSection', offset=0.0, offsetType=MIDDLE_SURFACE, offsetField='', ThicknessAssignment=FROM_SECTION) #Zuweisung der Foliensection для меня в диапазоне (len(dfolie)): j=я*2 c = p.клетки c1 = c.findAt((0,0,datumDicken[j]+0.01), ) q = c1.индекс ячейки = c[q:q+1] регион = p.Set(cells=cells, name='Folie-'+str(i)) p.SectionAssignment(region=region,sectionName='FolieSection', offset=0.0, offsetType=MIDDLE_SURFACE, offsetField='', ThicknessAssignment=FROM_SECTION) #Экземпляр Эрстеллен a.DatumCsysByDefault(ДАРТЕЗИАНСКИЙ) a.Instance(имя=имя детали, часть=p, зависимый=ON) #Reference Point erstellen und auslesen der ID zur Ansprache in Coupling a.ReferencePoint(point=(breite/2, hoehe+100, dicke/2)) idRF1 = mdb.models[имя модели].rootAssembly.referencePoints.values()[0] a.ReferencePoint(point=(breite/2, -100, dicke/2)) idRF2 = mdb.models[имя модели].rootAssembly.referencePoints.values()[0] #Refpoint умбененнен mdb.models[имя модели].rootAssembly.features.changeKey(fromName='RP-1', toName='Loslager+Lastpunkt') mdb.models[имя модели].rootAssembly.features.changeKey(fromName='RP-2', toName='Фестлагер') #Coupling Reference Point с защитным покрытием refPoints1=(idRF1, ) Region1=a.Set(referencePoints=refPoints1, name='Loslager+Lastpunkt') EdgesTop1 = a.instances[имя модели].edges.findAt((breite/2,hoehe,dglas[0]/2),) для меня в диапазоне (1,len(dglas)): j=я*2 p = mdb.models[имя модели].parts[имя детали] s = p.edges EdgeCurr = s.getByBoundingBox(-1,hoehe-1,datumDicken[j]-dglas/2-1,breite+1,hoehe+1,datumDicken[j]-dglas/2+1) печать (edgeCurr) a.Set(edges=edgeCurr, name='slaveTop'+str(i+1)) регион2 = a.Set(edges=edgesTop1, name='slaveTop') mdb.models[имя модели].Coupling(name='Loslager+Last', controlPoint=region1, поверхность=region2, effectRadius=WHOLE_SURFACE, тип связи=КИНЕМАТИЧЕСКИЙ, localCsys=Нет, u1=ВКЛ, u2=ВКЛ, u3=ВКЛ, ur1=ВКЛ, ur2=ВКЛ, ur3=ВКЛ) mdb.models[имя модели].Coupling(name='Loslager+Last', controlPoint=region1, поверхность=regiono, effectRadius=WHOLE_SURFACE, тип связи=КИНЕМАТИЧЕСКИЙ, localCsys=Нет, u1=ВКЛ, u2=ВКЛ, u3=ВКЛ, ur1=ВКЛ, ur2=ВКЛ, ur3=ВКЛ) ''' #Coupling Reference Point с Glasmitte unten r1 = a.referencePoints refPoints1=(r1[5], ) регион1=a.Set(referencePoints=refPoints1, name='m_Set-5') e1 = a.instances[имя модели].edges Edge1 = e1.getByBoundingBox(-1, -1, (dicke-(dglas[0]/2)-1), breite+1, 1, (dicke-(dglas[0]/2)+1)) e2 = a.instances[имя модели].edges Edge2 = e2.getByBoundingBox(-1, -1, (dglas[1]/2)-1, breite+1, 1, (dglas[1]/2)+1 ) Region2=a.Set(edges=edges1+edges2, name='s_Set-8') mdb.models[имя модели].Coupling(name='Festlager', controlPoint=region1, поверхность=region2, effectRadius=WHOLE_SURFACE, тип связи=КИНЕМАТИЧЕСКИЙ, localCsys=Нет, u1=ВКЛ, u2=ВКЛ, u3=ВКЛ, ur1=ВКЛ, ur2=ВКЛ, ur3=ВКЛ) ''' #BC Erstellen (Падение Эйлера II) #БК Фестлагер mdb.models[имя модели].rootAssembly.Set(name='Set-2', referencePoints=( mdb.models[имя модели].rootAssembly.referencePoints[5], )) mdb.models[имя модели].DisplacementBC(amplitude=UNSET, createStepName= «Начальный», тип распределения = UNIFORM, имя поля = '', localCsys = нет, имя = 'Festlager', регион=mdb.models[имя модели].rootAssembly.sets['Set-2'] , u1=УСТАНОВИТЬ, u2=УСТАНОВИТЬ, u3=УСТАНОВИТЬ, ur1=УСТАНОВИТЬ, ur2=УСТАНОВИТЬ, ur3=УСТАНОВИТЬ) #БК Лослагер mdb.models[имя модели].rootAssembly.Set(name='Set-3', referencePoints=( mdb.models[имя модели].rootAssembly.referencePoints[4], )) mdb.models[имя модели].DisplacementBC(amplitude=UNSET, createStepName= «Начальный», тип распределения = UNIFORM, имя поля = '', localCsys = нет, имя = 'Loslager', регион=mdb.models[имя модели].rootAssembly.sets['Set-3'], u1=УСТАНОВИТЬ, u2=ВЫКЛЮЧИТЬ, u3=УСТАНОВИТЬ, ur1=ВЫКЛЮЧИТЬ, ur2=УСТАНОВИТЬ, ur3=ВЫКЛЮЧИТЬ) ################################################ ################################################ ################################################ ################################################ ### # Сетчатая сетка регион = (p.cells,) elemType = сетка.ElemType( элементКод=C3D20R, elemLibrary=СТАНДАРТ, kinematicSplit=AVERAGE_STRAIN, SecondOrderAccuracy=ВЫКЛ, Песочные часыControl=УЛУЧШЕНО, искажениеControl=ПО УМОЛЧАНИЮ ) p.setElementType(regions=region, elemTypes=(elemType,)) p.seedPart(size=meshgroesse, DeviationFactor=0.1, минСизеФактор = 0,1) # Операции посева для кромок на основе различной толщины ребра = e.findAt(((0, 0, float(dfoil[0]/2)), ((height, 0, float(dfoil[0]/2)),), ((высота, ширина, float(dfoil[0]/2)), ((0, ширина, float(dfoil[0]/2)))) p.seedEdgeByNumber(edges=edges, number=anzElemThickFoil, ограничение=FINER) для d в dglas: ребра = e.findAt(((0, 0, float(d/2)), ((height, 0, float(d/2)),), ((высота, ширина, float(d/2)), ((0, ширина, float(d/2)))) p.seedEdgeByNumber(edges=edges, number=anzElemThickGlass, ограничение=FINER) ребра = e.findAt(((0, 0, float(толщина - dfoil[0]/2)), ((height, 0, float(толщина - dfoil[0]/2)),), ((высота, ширина, float(толщина - dfoil[0]/2)), ((0, ширина, float(толщина - dfoil[0]/2)))) p.seedEdgeByNumber(edges=edges, number=anzElemThickGlass, ограничение=FINER) # Создать сетку p.generateMesh() а.регенерировать() ################################################ ################################################ ################################################ ################################################ ### #Копировать модель для выпучивания modelnamebuckle=имя модели+'_buckle' mdb.Model(name=имямоделипряжка, objectToCopy=mdb.models[имя модели]) a2 = mdb.models[имямоделипряжка].rootAssembly #CreateBucklingStep numEigVectors=numEigForm*2 mdb.models[modelnamebuckle].BuckleStep(name='Buckle', previous='Initial', numEigen=numEigForm, векторы=numEigVectors, maxIterations=10000) #Последний на этапе пряжки mdb.models[modelnamebuckle].rootAssembly.Set(name='Set-4', эталонные точки=( mdb.models[имямоделиbuckle].rootAssembly.referencePoints[4], )) mdb.models[modelnamebuckle].ConcentratedForce(cf2=-1.0, createStepName= «Пряжка», тип распределения = UNIFORM, поле = '', localCsys = None, name = '1-Last' , регион=mdb.models[имямоделипряжка].rootAssembly.sets['Set-4']) ################################################ ################################################ ################################################ ################################################ ############## #Изменить ключевые слова в модели пряжки #Найти и отредактировать строку на предмет несовершенства modelkwb = mdb.models[имямоделипряжка].keywordBlock сборка = mdb.models[имямоделипряжка].rootAssembly modelkwb.synchVersions(storeNodesAndElements=False) номер_линии = 0 п=0 для n строка в перечислении (modelkwb.sieBlocks): если линия.replace(" ","").lower() == "*EndStep".lower(): номер_строки = п перерыв Зейле=line_num-1 mdb.models[modelnamebuckle].keywordBlock.synchVersions(storeNodesAndElements=False) mdb.models[имямоделипряжка].keywordBlock.insert(Zeile, """*ФАЙЛ УЗЛА""") mdb.models[имямоделипряжка].keywordBlock.insert(Zeile+1, """ты""") print(имямоделипряжка+'завершено изменение ключевого слова') ################################################ ################################################ ####################### ################################## Анализ устойчивости ############# ####################################### ################################################ ################################################ ####################### # Создание работы jobNameBuckle = str(имямоделипряжка) job = mdb.Job(name=jobNameBuckle, model = modelnamebuckle) задание.submit() задание.waitForCompletion() ################################################ ################################################ ################################## #собственное значение ausgeben r = session.openOdb(name=имямоделипряжка+'.odb') frame = r.steps['Buckle'].frames[1] # Den ersten Frame auswählen (Начало индекса равно 1) собственное значение_описание = кадр.описание собственные значения = eigenvalue_description.split() EigenValue = float(собственные значения[-1]) печать (собственное значение) ################################################ ################################################ ############## #Belastungsstep erstellen mdb.models[имя модели].StaticRiksStep(name='Belastungsstep', previous='Initial', maxLPF=1.0, maxNumInc=1000, InitialArcInc=0.01, nlgeom=ON) #Druckkraft im Belastungsstep mdb.models[имя модели].rootAssembly.Set(name='Set-4', эталонные точки=( mdb.models[имя модели].rootAssembly.referencePoints[4], )) mdb.models[имя модели].ConcentratedForce(cf2=-EigenValue, createStepName= «Belastungsstep», тип распределения = UNIFORM, поле = '', localCsys = None, name = 'Druckkraft' , регион=mdb.models[имя модели].rootAssembly.sets['Set-4']) ################################################ ################################################ ########## ############# ВЫВОД ИСТОРИИ ################################## ########################################### ################################################ ################################################ ########## #HistoryOutput в Mitte Schebenober- und-unterseite n1 = a.instances[partname].nodes nodes1 = n1.getByBoundingBox(breite-delta,hoehe/2-delta,dicke-delta,breite+delta,hoehe/2+delta,dicke+delta) a.Set(nodes=nodes1, name='ScheibeOben1') RegionDef=a.sets['ScheibeOben1'] mdb.models[modelname].HistoryOutputRequest(name='ScheibeOben1', createStepName='Belastungsstep', переменные =('U3','S22',), частота=1, регион=regionDef,sectionPoints=DEFAULT, rebar=EXCLUDE, ) n1 = a.instances[partname].nodes nodes2 = n1.getByBoundingBox(0-дельта,хохе/2-дельта,дике-дельта,0+дельта,хохе/2+дельта,дике+дельта) a.Set(nodes=nodes2, name='ScheibeOben2') RegionDef=a.sets['ScheibeOben2'] mdb.models[modelname].HistoryOutputRequest(name='ScheibeOben2', createStepName='Belastungsstep', переменные =('U3','S22',), частота=1, регион=regionDef,sectionPoints=DEFAULT, rebar=EXCLUDE, ) n1 = a.instances[partname].nodes nodes3 = n1.getByBoundingBox(breite-delta,hoehe/2-delta,0-delta,breite+delta,hoehe/2+delta,0+delta) a.Set(nodes=nodes3, name='ScheibeUnten1') RegionDef=a.sets['ScheibeUnten1'] mdb.models[modelname].HistoryOutputRequest(name='ScheibeUnten1', createStepName='Belastungsstep', переменные=('U3','S22',), частота=1, регион=regionDef,sectionPoints=DEFAULT, rebar=EXCLUDE, ) n1 = a.instances[partname].nodes nodes4 = n1.getByBoundingBox(0-дельта, хохе/2-дельта, 0-дельта, 0+дельта, хохе/2+дельта, 0+дельта) a.Set(nodes=nodes4, name='ScheibeUnten2') RegionDef=a.sets['ScheibeUnten2'] mdb.models[modelname].HistoryOutputRequest(name='ScheibeUnten2', createStepName='Belastungsstep', переменные=('U3','S22',), частота=1, регион=regionDef,sectionPoints=DEFAULT, rebar=EXCLUDE, ) #Set for Paths erstellen pathNodes1 = n1.getByBoundingBox(breite-delta,hoehe/2-delta,dicke-delta,breite+delta,hoehe/2+delta,dicke+delta) pathNodes2 = n1.getByBoundingBox(0-дельта,хохе/2-дельта,дике-дельта,0+дельта,хохе/2+дельта,дике+дельта) pathNodes3 = n1.getByBoundingBox(breite-delta,hoehe/2-delta,0-delta,breite+delta,hoehe/2+delta,0+delta) pathNodes4 = n1.getByBoundingBox(0-дельта, хохе/2-дельта, 0-дельта, 0+дельта, хохе/2+дельта, 0+дельта) a.Set(nodes = pathNodes1, name = 'PathsScheibeOben1') a.Set(nodes = pathNodes2, name = 'PathsScheibeOben2') a.Set(nodes = pathNodes3, name = 'PathsScheibeUnten1') a.Set(nodes = pathNodes4, name = 'PathsScheibeUnten2') """ #Findet Node с findAt nicht #HistoryOutput и Mitte Schebenober- und-unterseite n1 = a.instances[partname].nodes nodes1 = n1.findAt((breite,hoehe/2,dicke),) a.Set(узлы=узлы1, name='DiscTop1') RegionDef=a.sets['SliceTop1'] mdb.models[имя модели].HistoryOutputRequest(name='ScheibeOben1', createStepName='Шаг загрузки', переменные=('U3','S22',), частота=1, регион=regionDef,sectionPoints=DEFAULT, rebar=EXCLUDE , ) n1 = a.instances[partname].nodes nodes2 = n1.findAt((0,высота/2,толщина),) a.Set(nodes=nodes2, name='ScheibeOben2') RegionDef=a.sets['SliceTop2'] mdb.models[имя модели].HistoryOutputRequest(name='ScheibeOben2', createStepName='Шаг загрузки', переменные=('U3','S22',), частота=1, регион=regionDef,sectionPoints=DEFAULT, rebar=EXCLUDE , ) n1 = a.instances[partname].nodes nodes3 = n1.findAt((ширина,высота/2.0),) a.Set(nodes=nodes3, name='DiskDown1') RegionDef=a.sets['DiscBottom1'] mdb.models[имя модели].HistoryOutputRequest(name='ScheibeUnten1', createStepName='Шаг загрузки', переменные=('U3','S22',), частота=1, регион=regionDef,sectionPoints=DEFAULT, rebar=EXCLUDE , ) n1 = a.instances[partname].nodes nodes4 = n1.findAt((0,height/2,0),) a.Set(nodes=nodes4, name='ScheibeUnterten2') RegionDef=a.sets['DiscBottom2'] mdb.models[имя модели].HistoryOutputRequest(name='ScheibeUnten2', createStepName='Шаг загрузки', переменные=('U3','S22',), частота=1, регион=regionDef,sectionPoints=DEFAULT, rebar=EXCLUDE , ) #Создаем набор путей pathNodes1 = n1.findAt((ширина,высота/2,толщина),) pathNodes2 = n1.findAt((0,высота/2,толщина),) pathNodes3 = n1.findAt((ширина,высота/2.0),) pathNodes4 = n1.findAt((0,height/2,0),) a.Set(nodes = pathNodes1, name = 'PathsScheibeOben1') a.Set(nodes = pathNodes2, name = 'PathsScheibeOben2') a.Set(nodes = pathNodes3, name = 'PathsScheibeUnten1') a.Set(nodes = pathNodes4, name = 'PathsScheibeUnten2') """ ################################################ ################################################ ################################## #Изменяем ключевые слова в модели загрузки #keywords ноль mdb.models[имя модели].keywordBlock.synchVersions(storeNodesAndElements=False) mdb.models[имя модели].keywordBlock.setValues(отредактировано = 0) mdb.models[имя модели].keywordBlock.synchVersions(storeNodesAndElements=False) #Найти и отредактировать строку на предмет несовершенства modelkwb = mdb.models[имя модели].keywordBlock сборка = mdb.models[имя модели].rootAssembly modelkwb.synchVersions(storeNodesAndElements=False) номер_линии = 0 п=0 для n строка в перечислении (modelkwb.sieBlocks): if line.replace(" ","").lower() == "*Step,name=loadstep,nlgeom=YES,inc=1000".lower(): номер_строки = п перерыв Линия=line_num-1 mdb.models[имя модели].keywordBlock.synchVersions(storeNodesAndElements=False) mdb.models[имя модели].keywordBlock.insert(строка-1, """ *НЕСОВЕРШЕНСТВО, File="""+jobNameBuckle+""", Step=1 """+str(eigForm)+""","""+str(eNull)) print(имя модели+'завершено изменение ключевого слова') ################################################ ################################################ ############################## # Создание работы имя_задания = str(имя модели) job = mdb.Job(name=jobName, model = modelname) задание.submit() задание.waitForCompletion() ################################################ ########################################### #XY-Data U3 и S22 в середине поля вверху и внизу панели. odb = session.openOdb(name = str(workspace+'/'+jobName+'.odb')) session.viewports['Viewport: 1'].setValues(displayedObject=odb) сеанс.mdbData.summary() xyList = xyPlot.xyDataListFromField(odb=odb, outputPosition=NODAL, переменная=(( 'U', NODAL, ((КОМПОНЕНТ, 'U3'), )), ('S', INTEGRATION_POINT, (( COMPONENT, 'S22'), )), ), nodeSets=('PATHSLICETOP1', 'PATHSLICEUP2', 'PATHSLIDEDOWN1', 'PATHSLIDEBOTTOM2', )) xyp = session.XYPlot('XYPlot-1') имя_чарта = xyp.charts.keys()[0] диаграмма = xyp.charts[имя диаграммы] CurveList = session.curveSet(xyData=xyList) chart.setValues(curvesToPlot=curveList) печать (собственное значение) Теперь я отредактировал весь сценарий.
Я студент-строитель, и в рамках своей магистерской диссертации мне нужно провести анализ устойчивости колонн из многослойного стекла в Абакусе. Для этого я написал скрипт на Python.
Я создаю деталь глубиной суммы стекол и прослоек. Я создаю несколько базовых плоскостей и создаю перегородку, поэтому у меня есть n слоев стекла и n-1 слоев промежуточных слоев. Для проникновения нагрузки мне нужны перегородки сверху и снизу посередине слоев стекла. Я создаю несколько опорных точек для нагрузки и граничных условий.
Теперь мне нужно создать ограничения через узлы связи между опорными точками и гранями раздела. Я делаю это для того, чтобы концы не скользили.
Я понятия не имею, почему цикл for не работает. Ребята, вы знаете, где я делаю ошибку, или у вас есть идея, как мне написать цикл for, чтобы связь работала?
Вот мой код:
##################################### # Параметры Knickstab VSG# ##################################### """ Скрипт Диес... ... modelliert einen Stab ... führt eine Buckling Анализ прочного ... verschiebt eine Ecke aus der Ebene heraus ... и опционально грузит собственным весом """ высота = 2000,0 #x экстент ширина = 250,0 #y экстент dglas = [8, 12, 14] #z расширительное стекло dfoil = [1.52, 0.76] #z расширяющаяся фольга толщина = sum(dglas) + sum(dfilm) #z общее расширение размер сетки = 50 NumberElemThicknessFoil = 2 #Orient Langosch позже проведет исследование консервации числоЭлемТолщинаСтекла = 1 эмодулГлас = 70000 мюГласс = 0,23 Модуль сдвига фольги = 1 # Langosch G[0;1;10;∞] мюфойл = 0,39 эмодулФойл = 2*(1+мьюФойл)*ШармодульФойл mInc = 0,05 #максимальный размер приращения initInc = 0.05 #Начальный размер приращения рабочая область = 'C:' beElemType = 'C3D8R' #Buckle Шаг связан eZero = высота/400 #амплитуда несовершенства numEigForm = 4 #Количество запрошенных собственных форм eigForm = 1 #выбранная собственная форма ################################################ ################################################ ##################################### ########################## ТЕЛО СКРИПТА ##################### ################################################ ########################### ################################################ ################################################ ##################################### modelname = 'Stuetze_'+str(dglas[0]) для меня в диапазоне (1,len(dglas)): имя модели = имя модели + '-' + str(int(dfilm[i-1]/0.38))+'f' имя_модели=имя_модели + '-' + str(int(dglas)) имя модели = имя модели + '_G'+str (фольга модуля сдвига) имя детали = название модели delta = толщина/anzElemThicknessGlass/10 # Не удаляйте следующие строки импорта из импорта abaqus * из импорта abaqusConstants * импортировать __main__ раздел импорта импорт регионаToolset импортировать displayGroupMdbToolset как dgm импортная часть импортный материал импортная сборка шаг импорта импорт взаимодействия импортная нагрузка импортировать сетку оптимизация импорта импортировать задание импортировать эскиз импортировать визуализацию импортировать xyPlot импортировать displayGroupOdbToolset как dgo импортный соединительПоведение импортировать ОС из импорта odbAccess * импортировать numpy как np ################################################ ########################## #!!!!!!!!!!!!!!ВИИИИАЙТ!!!!!!!!!!!!!!!!!!!! # | # | #В #Настраиваем рабочий каталог os.chdir(r"C")# # Создание модели mdb.Model(имя=имя модели, тип модели=STANDARD_EXPLICIT) a = mdb.models[имя модели].rootAssembly # Создание детали s1 = mdb.models[имя модели].ConstrainedSketch(name='__profile__', размер листа = 200,0) s1.rectangle(point1=(0, 0), point2=(ширина, высота)) p = mdb.models[имя модели].Part(имя=имя детали, размерность=THREE_D, тип=DEFORMABLE_BODY) p.BaseSolidExtrume(эскиз=s1, глубина=толщина) p = mdb.models[имя модели].parts[имя детали] del mdb.models[имя модели].sketches['__profile__'] # Создайте опорные плоскости относительно поверхностей с учетом толщины f = p.faces.findAt((дельта,дельта,0),) # создаем вектор с координатами толщины, в котором создаются плоскости даты датаТикнесс = [] dateDicken.append(dglas[0]) для меня в диапазоне (1,len(dglas)): если я%2 != 0: dateThickness.append(dateThickness[i-1]+dfoil[i-1]) еще: datumDicken.append(datumDicken[i-1]+dglas[i-1]) dateThickness.append(dateThickness[-1]+dfoil[-1]) datumDicken.append(datumDicken[-1]+dglas[-1]) для меня в диапазоне (len(dateThickness)-1): p.DatumPlaneByOffset(plane=f, переворот=SIDE2, смещение=float(datumThickness)) # Создайте раздел на основе ранее созданных уровней дат для меня в диапазоне (len(dateThickness)-1): c = p.клетки # Разделение ячеек с первым уровнем даты (f[4]) PickCells = c.findAt((0,0,dateThickness-0.01),) d1 = p.datums p.PartitionCellByDatumPlane(datumPlane=d1[i+2], ячейки=pickedCells) #Создайте перегородку в центре тяжести стеклянных панелей, чтобы передать нагрузку в случае препятствия на скользящих концах. для меня в диапазоне (len(dglas)): j=я*2 #Разделы внизу f = p.faces PickFaces = f.findAt((width/2.0,(dateThickness[j]-0.01)),) v, e, d = p.вершины, p.ребра, p.базы p.PartitionFaceByShortestPath(faces=pickedFaces, point1=p.InterestingPoint( Edge=e.findAt((0,0,datumThickness[j]-0.01), rule=MIDDLE), point2=p.InterestingPoint(edge=e.findAt((width,0,datumThickness[j]-0.01) ,), правило=СРЕДНЕЕ)) #Разделы сверху PickFaces = f.findAt((ширина/2,высота,(dateThickness[j]-0.01)),) v, e, d = p.вершины, p.ребра, p.базы p.PartitionFaceByShortestPath(faces=pickedFaces, point1=p.InterestingPoint( Edge=e.findAt((0,height,datumThickness[j]-0.01), rule=MIDDLE), point2=p.InterestingPoint(edge=e.findAt((width,height,datumThickness[j]-0.01) ,), правило=СРЕДНЕЕ)) # Создаем материал стекла mdb.models[имя модели].Материал(имя='Стекло') mdb.models[имя модели].materials['Glas'].Elastic(table=((emodulGlas, mueGlas), )) # Материал: Folie elastischer Schubmodul. mdb.models[имя модели].Material(name='Folie') mdb.models[имя модели].materials['Folie'].Elastic(table=((emodulFolie, mueFolie), )) #Раздел Эрстеллунг mdb.models[имя модели].HomogeneousSolidSection(name='GlasSection', материал='Стекло', толщина=Нет) mdb.models[имя модели].HomogeneousSolidSection(name='FolieSection', материал = 'Фоли', толщина = нет) #Раздел Цувайсунг #Zuweisung der Glasssection для меня в диапазоне (len(dglas)): j=я*2 c = p.клетки c1 = c.findAt((0,0,datumDicken[j]-0.01), ) q = c1.индекс ячейки = c[q:q+1] регион = p.Set(cells=cells, name='Scheibe-'+str(i)) p.SectionAssignment(region=region,sectionName='GlasSection', offset=0.0, offsetType=MIDDLE_SURFACE, offsetField='', ThicknessAssignment=FROM_SECTION) #Zuweisung der Foliensection для меня в диапазоне (len(dfolie)): j=я*2 c = p.клетки c1 = c.findAt((0,0,datumDicken[j]+0.01), ) q = c1.индекс ячейки = c[q:q+1] регион = p.Set(cells=cells, name='Folie-'+str(i)) p.SectionAssignment(region=region,sectionName='FolieSection', offset=0.0, offsetType=MIDDLE_SURFACE, offsetField='', ThicknessAssignment=FROM_SECTION) #Экземпляр Эрстеллен a.DatumCsysByDefault(ДАРТЕЗИАНСКИЙ) a.Instance(имя=имя детали, часть=p, зависимый=ON) #Reference Point erstellen und auslesen der ID zur Ansprache in Coupling a.ReferencePoint(point=(breite/2, hoehe+100, dicke/2)) idRF1 = mdb.models[имя модели].rootAssembly.referencePoints.values()[0] a.ReferencePoint(point=(breite/2, -100, dicke/2)) idRF2 = mdb.models[имя модели].rootAssembly.referencePoints.values()[0] #Refpoint умбененнен mdb.models[имя модели].rootAssembly.features.changeKey(fromName='RP-1', toName='Loslager+Lastpunkt') mdb.models[имя модели].rootAssembly.features.changeKey(fromName='RP-2', toName='Фестлагер') #Coupling Reference Point с защитным покрытием refPoints1=(idRF1, ) Region1=a.Set(referencePoints=refPoints1, name='Loslager+Lastpunkt') EdgesTop1 = a.instances[имя модели].edges.findAt((breite/2,hoehe,dglas[0]/2),) для меня в диапазоне (1,len(dglas)): j=я*2 p = mdb.models[имя модели].parts[имя детали] s = p.edges EdgeCurr = s.getByBoundingBox(-1,hoehe-1,datumDicken[j]-dglas/2-1,breite+1,hoehe+1,datumDicken[j]-dglas/2+1) печать (edgeCurr) a.Set(edges=edgeCurr, name='slaveTop'+str(i+1)) регион2 = a.Set(edges=edgesTop1, name='slaveTop') mdb.models[имя модели].Coupling(name='Loslager+Last', controlPoint=region1, поверхность=region2, effectRadius=WHOLE_SURFACE, тип связи=КИНЕМАТИЧЕСКИЙ, localCsys=Нет, u1=ВКЛ, u2=ВКЛ, u3=ВКЛ, ur1=ВКЛ, ur2=ВКЛ, ur3=ВКЛ) mdb.models[имя модели].Coupling(name='Loslager+Last', controlPoint=region1, поверхность=regiono, effectRadius=WHOLE_SURFACE, тип связи=КИНЕМАТИЧЕСКИЙ, localCsys=Нет, u1=ВКЛ, u2=ВКЛ, u3=ВКЛ, ur1=ВКЛ, ur2=ВКЛ, ur3=ВКЛ) ''' #Coupling Reference Point с Glasmitte unten r1 = a.referencePoints refPoints1=(r1[5], ) регион1=a.Set(referencePoints=refPoints1, name='m_Set-5') e1 = a.instances[имя модели].edges Edge1 = e1.getByBoundingBox(-1, -1, (dicke-(dglas[0]/2)-1), breite+1, 1, (dicke-(dglas[0]/2)+1)) e2 = a.instances[имя модели].edges Edge2 = e2.getByBoundingBox(-1, -1, (dglas[1]/2)-1, breite+1, 1, (dglas[1]/2)+1 ) Region2=a.Set(edges=edges1+edges2, name='s_Set-8') mdb.models[имя модели].Coupling(name='Festlager', controlPoint=region1, поверхность=region2, effectRadius=WHOLE_SURFACE, тип связи=КИНЕМАТИЧЕСКИЙ, localCsys=Нет, u1=ВКЛ, u2=ВКЛ, u3=ВКЛ, ur1=ВКЛ, ur2=ВКЛ, ur3=ВКЛ) ''' #BC Erstellen (Падение Эйлера II) #БК Фестлагер mdb.models[имя модели].rootAssembly.Set(name='Set-2', referencePoints=( mdb.models[имя модели].rootAssembly.referencePoints[5], )) mdb.models[имя модели].DisplacementBC(amplitude=UNSET, createStepName= «Начальный», тип распределения = UNIFORM, имя поля = '', localCsys = нет, имя = 'Festlager', регион=mdb.models[имя модели].rootAssembly.sets['Set-2'] , u1=УСТАНОВИТЬ, u2=УСТАНОВИТЬ, u3=УСТАНОВИТЬ, ur1=УСТАНОВИТЬ, ur2=УСТАНОВИТЬ, ur3=УСТАНОВИТЬ) #БК Лослагер mdb.models[имя модели].rootAssembly.Set(name='Set-3', referencePoints=( mdb.models[имя модели].rootAssembly.referencePoints[4], )) mdb.models[имя модели].DisplacementBC(amplitude=UNSET, createStepName= «Начальный», тип распределения = UNIFORM, имя поля = '', localCsys = нет, имя = 'Loslager', регион=mdb.models[имя модели].rootAssembly.sets['Set-3'], u1=УСТАНОВИТЬ, u2=ВЫКЛЮЧИТЬ, u3=УСТАНОВИТЬ, ur1=ВЫКЛЮЧИТЬ, ur2=УСТАНОВИТЬ, ur3=ВЫКЛЮЧИТЬ) ################################################ ################################################ ################################################ ################################################ ### # Сетчатая сетка регион = (p.cells,) elemType = сетка.ElemType( элементКод=C3D20R, elemLibrary=СТАНДАРТ, kinematicSplit=AVERAGE_STRAIN, SecondOrderAccuracy=ВЫКЛ, Песочные часыControl=УЛУЧШЕНО, искажениеControl=ПО УМОЛЧАНИЮ ) p.setElementType(regions=region, elemTypes=(elemType,)) p.seedPart(size=meshgroesse, DeviationFactor=0.1, минСизеФактор = 0,1) # Операции посева для кромок на основе различной толщины ребра = e.findAt(((0, 0, float(dfoil[0]/2)), ((height, 0, float(dfoil[0]/2)),), ((высота, ширина, float(dfoil[0]/2)), ((0, ширина, float(dfoil[0]/2)))) p.seedEdgeByNumber(edges=edges, number=anzElemThickFoil, ограничение=FINER) для d в dglas: ребра = e.findAt(((0, 0, float(d/2)), ((height, 0, float(d/2)),), ((высота, ширина, float(d/2)), ((0, ширина, float(d/2)))) p.seedEdgeByNumber(edges=edges, number=anzElemThickGlass, ограничение=FINER) ребра = e.findAt(((0, 0, float(толщина - dfoil[0]/2)), ((height, 0, float(толщина - dfoil[0]/2)),), ((высота, ширина, float(толщина - dfoil[0]/2)), ((0, ширина, float(толщина - dfoil[0]/2)))) p.seedEdgeByNumber(edges=edges, number=anzElemThickGlass, ограничение=FINER) # Создать сетку p.generateMesh() а.регенерировать() ################################################ ################################################ ################################################ ################################################ ### #Копировать модель для выпучивания modelnamebuckle=имя модели+'_buckle' mdb.Model(name=имямоделипряжка, objectToCopy=mdb.models[имя модели]) a2 = mdb.models[имямоделипряжка].rootAssembly #CreateBucklingStep numEigVectors=numEigForm*2 mdb.models[modelnamebuckle].BuckleStep(name='Buckle', previous='Initial', numEigen=numEigForm, векторы=numEigVectors, maxIterations=10000) #Последний на этапе пряжки mdb.models[modelnamebuckle].rootAssembly.Set(name='Set-4', эталонные точки=( mdb.models[имямоделиbuckle].rootAssembly.referencePoints[4], )) mdb.models[modelnamebuckle].ConcentratedForce(cf2=-1.0, createStepName= «Пряжка», тип распределения = UNIFORM, поле = '', localCsys = None, name = '1-Last' , регион=mdb.models[имямоделипряжка].rootAssembly.sets['Set-4']) ################################################ ################################################ ################################################ ################################################ ############## #Изменить ключевые слова в модели пряжки #Найти и отредактировать строку на предмет несовершенства modelkwb = mdb.models[имямоделипряжка].keywordBlock сборка = mdb.models[имямоделипряжка].rootAssembly modelkwb.synchVersions(storeNodesAndElements=False) номер_линии = 0 п=0 для n строка в перечислении (modelkwb.sieBlocks): если линия.replace(" ","").lower() == "*EndStep".lower(): номер_строки = п перерыв Зейле=line_num-1 mdb.models[modelnamebuckle].keywordBlock.synchVersions(storeNodesAndElements=False) mdb.models[имямоделипряжка].keywordBlock.insert(Zeile, """*ФАЙЛ УЗЛА""") mdb.models[имямоделипряжка].keywordBlock.insert(Zeile+1, """ты""") print(имямоделипряжка+'завершено изменение ключевого слова') ################################################ ################################################ ####################### ################################## Анализ устойчивости ############# ####################################### ################################################ ################################################ ####################### # Создание работы jobNameBuckle = str(имямоделипряжка) job = mdb.Job(name=jobNameBuckle, model = modelnamebuckle) задание.submit() задание.waitForCompletion() ################################################ ################################################ ################################## #собственное значение ausgeben r = session.openOdb(name=имямоделипряжка+'.odb') frame = r.steps['Buckle'].frames[1] # Den ersten Frame auswählen (Начало индекса равно 1) собственное значение_описание = кадр.описание собственные значения = eigenvalue_description.split() EigenValue = float(собственные значения[-1]) печать (собственное значение) ################################################ ################################################ ############## #Belastungsstep erstellen mdb.models[имя модели].StaticRiksStep(name='Belastungsstep', previous='Initial', maxLPF=1.0, maxNumInc=1000, InitialArcInc=0.01, nlgeom=ON) #Druckkraft im Belastungsstep mdb.models[имя модели].rootAssembly.Set(name='Set-4', эталонные точки=( mdb.models[имя модели].rootAssembly.referencePoints[4], )) mdb.models[имя модели].ConcentratedForce(cf2=-EigenValue, createStepName= «Belastungsstep», тип распределения = UNIFORM, поле = '', localCsys = None, name = 'Druckkraft' , регион=mdb.models[имя модели].rootAssembly.sets['Set-4']) ################################################ ################################################ ########## ############# ВЫВОД ИСТОРИИ ################################## ########################################### ################################################ ################################################ ########## #HistoryOutput в Mitte Schebenober- und-unterseite n1 = a.instances[partname].nodes nodes1 = n1.getByBoundingBox(breite-delta,hoehe/2-delta,dicke-delta,breite+delta,hoehe/2+delta,dicke+delta) a.Set(nodes=nodes1, name='ScheibeOben1') RegionDef=a.sets['ScheibeOben1'] mdb.models[modelname].HistoryOutputRequest(name='ScheibeOben1', createStepName='Belastungsstep', переменные =('U3','S22',), частота=1, регион=regionDef,sectionPoints=DEFAULT, rebar=EXCLUDE, ) n1 = a.instances[partname].nodes nodes2 = n1.getByBoundingBox(0-дельта,хохе/2-дельта,дике-дельта,0+дельта,хохе/2+дельта,дике+дельта) a.Set(nodes=nodes2, name='ScheibeOben2') RegionDef=a.sets['ScheibeOben2'] mdb.models[modelname].HistoryOutputRequest(name='ScheibeOben2', createStepName='Belastungsstep', переменные =('U3','S22',), частота=1, регион=regionDef,sectionPoints=DEFAULT, rebar=EXCLUDE, ) n1 = a.instances[partname].nodes nodes3 = n1.getByBoundingBox(breite-delta,hoehe/2-delta,0-delta,breite+delta,hoehe/2+delta,0+delta) a.Set(nodes=nodes3, name='ScheibeUnten1') RegionDef=a.sets['ScheibeUnten1'] mdb.models[modelname].HistoryOutputRequest(name='ScheibeUnten1', createStepName='Belastungsstep', переменные=('U3','S22',), частота=1, регион=regionDef,sectionPoints=DEFAULT, rebar=EXCLUDE, ) n1 = a.instances[partname].nodes nodes4 = n1.getByBoundingBox(0-дельта, хохе/2-дельта, 0-дельта, 0+дельта, хохе/2+дельта, 0+дельта) a.Set(nodes=nodes4, name='ScheibeUnten2') RegionDef=a.sets['ScheibeUnten2'] mdb.models[modelname].HistoryOutputRequest(name='ScheibeUnten2', createStepName='Belastungsstep', переменные=('U3','S22',), частота=1, регион=regionDef,sectionPoints=DEFAULT, rebar=EXCLUDE, ) #Set for Paths erstellen pathNodes1 = n1.getByBoundingBox(breite-delta,hoehe/2-delta,dicke-delta,breite+delta,hoehe/2+delta,dicke+delta) pathNodes2 = n1.getByBoundingBox(0-дельта,хохе/2-дельта,дике-дельта,0+дельта,хохе/2+дельта,дике+дельта) pathNodes3 = n1.getByBoundingBox(breite-delta,hoehe/2-delta,0-delta,breite+delta,hoehe/2+delta,0+delta) pathNodes4 = n1.getByBoundingBox(0-дельта, хохе/2-дельта, 0-дельта, 0+дельта, хохе/2+дельта, 0+дельта) a.Set(nodes = pathNodes1, name = 'PathsScheibeOben1') a.Set(nodes = pathNodes2, name = 'PathsScheibeOben2') a.Set(nodes = pathNodes3, name = 'PathsScheibeUnten1') a.Set(nodes = pathNodes4, name = 'PathsScheibeUnten2') """ #Findet Node с findAt nicht #HistoryOutput и Mitte Schebenober- und-unterseite n1 = a.instances[partname].nodes nodes1 = n1.findAt((breite,hoehe/2,dicke),) a.Set(узлы=узлы1, name='DiscTop1') RegionDef=a.sets['SliceTop1'] mdb.models[имя модели].HistoryOutputRequest(name='ScheibeOben1', createStepName='Шаг загрузки', переменные=('U3','S22',), частота=1, регион=regionDef,sectionPoints=DEFAULT, rebar=EXCLUDE , ) n1 = a.instances[partname].nodes nodes2 = n1.findAt((0,высота/2,толщина),) a.Set(nodes=nodes2, name='ScheibeOben2') RegionDef=a.sets['SliceTop2'] mdb.models[имя модели].HistoryOutputRequest(name='ScheibeOben2', createStepName='Шаг загрузки', переменные=('U3','S22',), частота=1, регион=regionDef,sectionPoints=DEFAULT, rebar=EXCLUDE , ) n1 = a.instances[partname].nodes nodes3 = n1.findAt((ширина,высота/2.0),) a.Set(nodes=nodes3, name='DiskDown1') RegionDef=a.sets['DiscBottom1'] mdb.models[имя модели].HistoryOutputRequest(name='ScheibeUnten1', createStepName='Шаг загрузки', переменные=('U3','S22',), частота=1, регион=regionDef,sectionPoints=DEFAULT, rebar=EXCLUDE , ) n1 = a.instances[partname].nodes nodes4 = n1.findAt((0,height/2,0),) a.Set(nodes=nodes4, name='ScheibeUnterten2') RegionDef=a.sets['DiscBottom2'] mdb.models[имя модели].HistoryOutputRequest(name='ScheibeUnten2', createStepName='Шаг загрузки', переменные=('U3','S22',), частота=1, регион=regionDef,sectionPoints=DEFAULT, rebar=EXCLUDE , ) #Создаем набор путей pathNodes1 = n1.findAt((ширина,высота/2,толщина),) pathNodes2 = n1.findAt((0,высота/2,толщина),) pathNodes3 = n1.findAt((ширина,высота/2.0),) pathNodes4 = n1.findAt((0,height/2,0),) a.Set(nodes = pathNodes1, name = 'PathsScheibeOben1') a.Set(nodes = pathNodes2, name = 'PathsScheibeOben2') a.Set(nodes = pathNodes3, name = 'PathsScheibeUnten1') a.Set(nodes = pathNodes4, name = 'PathsScheibeUnten2') """ ################################################ ################################################ ################################## #Изменяем ключевые слова в модели загрузки #keywords ноль mdb.models[имя модели].keywordBlock.synchVersions(storeNodesAndElements=False) mdb.models[имя модели].keywordBlock.setValues(отредактировано = 0) mdb.models[имя модели].keywordBlock.synchVersions(storeNodesAndElements=False) #Найти и отредактировать строку на предмет несовершенства modelkwb = mdb.models[имя модели].keywordBlock сборка = mdb.models[имя модели].rootAssembly modelkwb.synchVersions(storeNodesAndElements=False) номер_линии = 0 п=0 для n строка в перечислении (modelkwb.sieBlocks): if line.replace(" ","").lower() == "*Step,name=loadstep,nlgeom=YES,inc=1000".lower(): номер_строки = п перерыв Линия=line_num-1 mdb.models[имя модели].keywordBlock.synchVersions(storeNodesAndElements=False) mdb.models[имя модели].keywordBlock.insert(строка-1, """ *НЕСОВЕРШЕНСТВО, File="""+jobNameBuckle+""", Step=1 """+str(eigForm)+""","""+str(eNull)) print(имя модели+'завершено изменение ключевого слова') ################################################ ################################################ ############################## # Создание работы имя_задания = str(имя модели) job = mdb.Job(name=jobName, model = modelname) задание.submit() задание.waitForCompletion() ################################################ ########################################### #XY-Data U3 и S22 в середине поля вверху и внизу панели. odb = session.openOdb(name = str(workspace+'/'+jobName+'.odb')) session.viewports['Viewport: 1'].setValues(displayedObject=odb) сеанс.mdbData.summary() xyList = xyPlot.xyDataListFromField(odb=odb, outputPosition=NODAL, переменная=(( 'U', NODAL, ((КОМПОНЕНТ, 'U3'), )), ('S', INTEGRATION_POINT, (( COMPONENT, 'S22'), )), ), nodeSets=('PATHSLICETOP1', 'PATHSLICEUP2', 'PATHSLIDEDOWN1', 'PATHSLIDEBOTTOM2', )) xyp = session.XYPlot('XYPlot-1') имя_чарта = xyp.charts.keys()[0] диаграмма = xyp.charts[имя диаграммы] CurveList = session.curveSet(xyData=xyList) chart.setValues(curvesToPlot=curveList) печать (собственное значение) Теперь я отредактировал весь сценарий.