# odbReadNodes.py # Script to extract node and element information. # from odbAccess import * from sys import argv,exit def usageInfo(mes): if mes: print print mes print print ' USAGE: getVeloNode.py -o -n -u/v -x -y -z' print # first, check options odbName = None ndName = None forcDir = '' dofType = "u" argList = argv argc = len(argList) # check options i=0 check=False while (i < argc): if (argList[i][:2] == "-o"): # odb-file defined? i += 1 name = argList[i] odbName = name elif (argList[i][:2] == "-n"): # node defined? i += 1 ndName = argList[i] elif (argList[i][:2] == "-u"): # print displacements dofType = "u" elif (argList[i][:2] == "-v"): # print velocities dofType = "v" elif (argList[i][:2] == "-v"): # print accelerations dofType = "a" elif (argList[i][:2] == "-x"): # force direction x forcDir = forcDir+"x" elif (argList[i][:2] == "-y"): # force direction y forcDir = forcDir+"y" elif (argList[i][:2] == "-z"): # force direction z forcDir = forcDir+"z" elif (argList[i][:6] == "-check"): check=True i += 1 # check whether odb file is defined if not (odbName): usageInfo('') exit(1) # Open the output database. odb = openOdb(path=odbName) assembly = odb.rootAssembly instance = assembly.instances['PART-1-1'] # check whether node set is defined if not ndName: usageInfo('ERROR, no node defined') exit(1) # get local node number from solution database i=-1 fram=odb.steps['Step-1'].frames[-1].fieldOutputs['V'] i=-1 for no in fram.values: i=i+1 if (int(no.nodeLabel)==int(ndName)): break if check: print print "local node number is ",i,": ",\ fram.values[i].nodeLabel," <-> ",ndName print "dofType = ",dofType print "forcDir = ",forcDir if (dofType=="v"): print "evaluating velocities" elif (dofType=="a"): print "evaluating accelerations" else: print "evaluating displacements" # loop all frames and print data for fram in odb.steps['Step-1'].frames: if (dofType=="v"): velo = fram.fieldOutputs['V'].values elif (dofType=="a"): velo = fram.fieldOutputs['A'].values else: velo = fram.fieldOutputs['U'].values ndVelo=velo[i].data vx = ndVelo[0] vy = ndVelo[1] vz = ndVelo[2] mag = velo[i].magnitude if (forcDir == "x"): print "%20.10f %20.10f" % (fram.frameValue,vx) elif (forcDir == "y"): print "%20.10f %20.10f" % (fram.frameValue,vy) elif (forcDir == "z"): print "%20.10f %20.10f" % (fram.frameValue,vz) elif (forcDir == "xy" or forcDir == "yx"): print "%20.10f %20.10f %20.10f" % (fram.frameValue,vx,vy) elif (forcDir == "yz" or forcDir == "zy"): print "%20.10f %20.10f %20.10f" % (fram.frameValue,vy,vz) elif (forcDir == "xz" or forcDir == "zx"): print "%20.10f %20.10f %20.10f" % (fram.frameValue,vx,vz) elif (forcDir == "xyz" or forcDir == "xzy" or forcDir == "yxz" or \ forcDir == "yzx" or forcDir == "zyx" or forcDir == "zxy"): print "%20.10f %20.10f %20.10f %20.10f" % \ (fram.frameValue,vx,vy,vz) else: print "%20.10f %20.10f %20.10f %20.10f %20.10f" % \ (fram.frameValue,vx,vy,vz,mag) exit(0)