想象一下,您有一个程序 X,它需要用户输入以下内容:
fy = 355. #Yield stress (MPa)
fu = 552. #Tensile stress resistance (MPa), 460 MPa in engineering stress
E = 210.E3 #Young modulus (MPa)
F = -100.E3 #vertical force (N)
k2_2=70.82e6 #stiffness 2nd segment 2L, strong axis (N.mm/rad)
loos=0.0055 #looseness 2L (rad), strong axis
bmax=3.5e6 #maximum moment 2L, strong axis (N.mm)
然后用户还想添加一个最初未确定数量的变量,一个由 开始的组imp_local+str()
和另一个由 开始的组imp_global+str()
。
要生成的变量数量取决于读取 txt 文件的结果。
用户知道程序无法处理这些生成的变量,但是查看程序创建的宏可能有机会引入它们。
程序生成的宏如下所示:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# import modules
from math import *
from openturns import *
from phiboot import *
# define the physical model
class TP1_Simply_supported_beam_class( OpenTURNSPythonFunction ):
def __init__( self ):
OpenTURNSPythonFunction.__init__( self, 9, 1)
self.logUser = LogUser()
self.callsNumber = 0
self.pad = 21
def padVar(self, var):
if type(var) == str:
return var.ljust(self.pad)
else:
return str('%+.11e' % var).ljust(self.pad)
def setLogFile(self, filename):
self.callsNumber = 0
self.logUser.setFile(filename)
def closeLogFile(self):
self.logUser.closeFile()
# define OpenTURNS function
def TP1_Simply_supported_beam( self, fy, fu, E, F, k2_2, loos, bmax ):
# log header
if self.callsNumber == 0:
self.logUser.level1( ''.join(map(self.padVar, ['N', 'fy', 'fu', 'E', 'F', 'k2_2', 'loos', 'bmax', 'g'])) + '\n' )
# log input vars
self.logUser.level1( str(self.callsNumber).ljust(self.pad) + ''.join(map(self.padVar, [fy, fu, E, F, k2_2, loos, bmax]))
生成变量组的代码是:
fileData = [] #array with the input file
inputFile = open("C:/Abaqus_JOBS/Job-M1-3_4.inp", "r") #CAE INPUT FILE
#fileData = variable with all the lines of the inp file
for line in inputFile:
fileData.append([x.strip() for x in line.split(',')])
fgenerate1=0
nTop=[]
for row,data in enumerate(fileData):
if data[0]=="*Nset" and data[1]=="nset=TOP":
row_Top = row
if len(data)==3 and data[0]=="*Nset" and data[1]=="nset=TOP" and data[2]=="generate":
fgenerate1=1
if row_Top!=0:
for data in fileData[row_Top+1:]: # skip first row elements
try:
int(data[0])
except ValueError:
break # found bottom_row, stop iterating
if fgenerate1==0:
nTop.append(data)
else:
iniN=data[0]
finN=int(data[1])+1
inc=data[2]
for n in range(int(iniN), int(finN), int(inc)):
data=n
nTop.append([str(data)])
loc=locals()
for k,val in enumerate(nTop) : loc["imp_local"+str(k)]
for k,val in enumerate(nTop) : loc["imp_global"+str(k)]
现在用户已经生成了imp_local
和imp_global
变量,他想将它们添加到程序宏中的相应行中。他怎么能做到?