2

ユーザーによる次の入力が必要なプログラム 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変数を生成したので、それらをプログラム マクロの対応する行に追加したいと考えています。彼はどうやってそれをすることができますか?

4

2 に答える 2

0

くだらないテキスト ファイルの代わりに、Yamlまたは XML を入力として使用します。入力を構造化し、検証されるXSD スキーマを作成することをお勧めします。次に、Yaml を使用して、Python 内で必要なものを構築します。抽象化をコーディングし、データ/メタデータを検証済みのパラメーター ファイルに移動します。ほとんどいつも。

于 2013-05-03T19:18:20.413 に答える