def lamellarRectangleDisp(odbName): keysToWrite = [ 'resForce', 'topInitCoord', 'topU1', 'topU2', 'botInitCoord', 'botU1', 'botU2', 'time' ] valuesToWrite = dict.fromkeys(keysToWrite, None) run = False for data in range(len(valuesToWrite)): file = valuesToWrite.keys()[data] + '.ascii' if (not os.path.isfile(file))\ or (os.path.getmtime(file) < os.path.getmtime('exeCalls.txt'))\ or (os.path.getmtime(file) < os.path.getmtime(__file__)): run = True break if run: print "running postPro on %s" % (odbName) myOdb = odbTools.openOdb(odbName) time = ext.getTime(myOdb) resForce = ext.getResF2D(myOdb, 'left') resTopForce = ext.getResF2D(myOdb, 'top') rightInitCoord = ext.getNCoord(myOdb, 'right') rightU1 = ext.getU_1(myOdb, 'right') rightU2 = ext.getU_2(myOdb, 'right') leftInitCoord = ext.getNCoord(myOdb, 'left') leftU1 = ext.getU_1(myOdb, 'left') leftU2 = ext.getU_2(myOdb, 'left') topInitCoord = ext.getNCoord(myOdb, 'top') topU1 = ext.getU_1(myOdb, 'top') topU2 = ext.getU_2(myOdb, 'top') botInitCoord = ext.getNCoord(myOdb, 'bottom') botU1 = ext.getU_1(myOdb, 'bottom') botU2 = ext.getU_2(myOdb, 'bottom') valuesToWrite = dict(rightInitCoord=rightInitCoord, rightU1=rightU1, rightU2=rightU2, leftInitCoord=leftInitCoord, leftU1=leftU1, leftU2=leftU2, resForce=resForce, resTopForce=resTopForce, topInitCoord=topInitCoord, topU1=topU1, topU2=topU2, botInitCoord=botInitCoord, botU1=botU1, botU2=botU2, time=time) odbTools.writeValues(valuesToWrite) myOdb.close()
def optiStiffnessExtractors(odbName): myOdb = odbTools.openOdb(odbName) time = ext.getTime(myOdb) extDispl = ext.getFinalU_3(myOdb, 'outerFace') outForce = ext.getFinalResF_3(myOdb, 'outerFace') stiffness = 0. if abs(outForce) > 1e-8 and abs(outForce) < 1e8: stiffness = outForce / extDispl[0] odbTools.writeValuesOpti(stiffness) myOdb.close()
def materialField(odbFile,notWantedParts=[],notWantedEleSets=[]): # Extract ABAQUS ODB into VTK unstructured grid data format nbNodes = 0 nbElements = 0 nodeCoord = list() eleConnection = list() cellType = list() cellField = list() # Open the odb myOdb = odbTools.openOdb(odbFile) stepName = myOdb.steps.keys()[-1] frames = myOdb.steps[stepName].frames # Isolate the instances, get the number of nodes and elements for instanceName in myOdb.rootAssembly.instances.keys(): if instanceName not in notWantedParts: myInstance = myOdb.rootAssembly.instances[instanceName] numNodes = len(myInstance.nodes) #Get the initial nodal coordinates initialCoords = list() nodes = myInstance.nodes for node in nodes: coord0 = node.coordinates initialCoords.append((coord0[0], coord0[1], coord0[2])) #Isolate the displacement field displacements = frames[-1].fieldOutputs['U'].getSubset(region=myInstance).values #Add displacements to the initial coordinates for nd in range(numNodes): x = initialCoords[nd][0]+displacements[nd].data[0] y = initialCoords[nd][1]+displacements[nd].data[1] z = initialCoords[nd][2]+displacements[nd].data[2] nodeCoord.append((x, y, z)) print "read %d nodes coordinates"%(numNodes) offset = nbNodes for setName in myInstance.elementSets.keys(): if setName not in notWantedEleSets: elSet = myInstance.elementSets[setName] sectionName = 'Section-ASSEMBLY_'+instanceName+'_'+setName #default scanIP Name materialName = myOdb.sections[sectionName].material young = myOdb.materials[materialName].elastic.table[0][0] numElements = 0 for el in elSet.elements: ##Get the element connectivity connectivity = el.connectivity eleConnection.append([offset-1+i for i in connectivity]) if len(connectivity) == 8: cellType.append(12) elif len(connectivity) == 4: cellType.append(10) else: raise Exception('unknown element %d of connectivity %d'%(el.label,len(connectivity))) ##Isolate the field cellField.append(young) numElements += 1 print "read %d element connexion and young's modulus"%(numElements) nbElements += numElements nbNodes += numNodes myOdb.close() return nodeCoord,eleConnection,cellType,cellField
def dataField(odbFile,fieldName,notWantedParts=[],notWantedEleSets=[]): # Extract ABAQUS ODB into VTK unstructured grid data format nbNodes = 0 nbElements = 0 nodeCoord = list() eleConnection = list() cellType = list() cellField = list() # Open the odb myOdb = odbTools.openOdb(odbFile) stepName = myOdb.steps.keys()[-1] frames = myOdb.steps[stepName].frames theField = frames[-1].fieldOutputs['S'].getScalarField(invariant=fieldName) # Isolate the instances, get the number of nodes and elements for instanceName in myOdb.rootAssembly.instances.keys(): if instanceName not in notWantedParts: myInstance = myOdb.rootAssembly.instances[instanceName] numNodes = len(myInstance.nodes) #Get the initial nodal coordinates initialCoords = list() nodes = myInstance.nodes for node in nodes: coord0 = node.coordinates initialCoords.append((coord0[0], coord0[1], coord0[2])) #Isolate the displacement field displacements = frames[-1].fieldOutputs['U'].getSubset(region=myInstance).values #Add displacements to the initial coordinates for nd in range(numNodes): x = initialCoords[nd][0]+displacements[nd].data[0] y = initialCoords[nd][1]+displacements[nd].data[1] z = initialCoords[nd][2]+displacements[nd].data[2] nodeCoord.append((x, y, z)) print "read %d nodes coordinates"%(numNodes) offset = nbNodes for setName in [myInstance.elementSets.keys(),' ALL ELEMENTS']: if setName not in notWantedEleSets: elSet = myInstance.elementSets[setName] numElements = 0 for el in elSet.elements: ##Get the element connectivity print el.faces connectivity = el.connectivity eleConnection.append([offset-1+i for i in connectivity]) if len(connectivity) == 8: cellType.append(12) elif len(connectivity) == 4: cellType.append(10) else: raise Exception('unknown element %d of connectivity %d'%(el.label,len(connectivity))) ##Isolate the field theElField = theField.getSubset(region=el).values cellField.append(theElField[0].data) numElements += 1 print "read %d element connexion and scalar field"%(numElements) nbElements += numElements nbNodes += numNodes myOdb.close() return nodeCoord,eleConnection,cellType,cellField
def displ2OptiTt02(odbName): print "running postPro on %s" % (odbName) import math myOdb = odbTools.openOdb(odbName) myAssembly = myOdb.rootAssembly # PRODUCE NODE SET ON THE NODES I EXTRACT COORDINATES FROM. newSet = 'extractedDisplacement'.upper() myInstances = [ myAssembly.instances['SECTIONED2_INSTANCE'], myAssembly.instances['SECTIONED3_INSTANCE'], myAssembly.instances['SECTIONED4_INSTANCE'], myAssembly.instances['INPLANE2_INSTANCE'], myAssembly.instances['INPLANE3_INSTANCE'], myAssembly.instances['INPLANE4_INSTANCE'] ] #points order ([J],[A,B,C,D],[E,F,G,H,I],[J,A,B],[G,H],[C,D,E,F,I]) A = (0.501, 1.693) B = (0.492, 0.) C = (0.67, 1.758) D = (0.727, 0.) E = (0.798, 1.795) F = (0.869, 0.) G = (0.9, 1.791) H = (0.894, 0.) I = (0.890, 0.812) J = (0.321, 0.552) expPointsCoord = [[J], [A, B, C, D], [E, F, G, H, I], [J, A, B], [G, H], [C, D, E, F, I]] if newSet not in myAssembly.nodeSets.keys(): nodeList = list() for ins, instance in enumerate(myInstances): points = {} for node in instance.nodes: points[node.label] = list(node.coordinates) for ptNo in range(len(expPointsCoord[ins])): shortList = list() for key, value in points.iteritems(): if (0.9 * expPointsCoord[ins][ptNo][0] <= value[0] <= 1.1 * expPointsCoord[ins][ptNo][0]) and ( 0.9 * expPointsCoord[ins][ptNo][1] <= value[1] <= 1.1 * expPointsCoord[ins][ptNo][1]): shortList.append( (instance.name.replace('instance', 'Geo'), (key, ))) nodeList.append(shortList[0]) myNodes = tuple(nodeList) myAssembly.NodeSetFromNodeLabels(name=newSet, nodeLabels=myNodes) displ = ext.getFinalU(myOdb, newSet) odbTools.writeValuesOpti(displ) myOdb.close()
def postPro(odbName): odbToolbox = r"D:\myWork\procedures\postPro4Abq_VC" import sys sys.path.append(odbToolbox) import postProTools.odbTools as odbTools import postProTools.extractors as ext import math myOdb = odbTools.openOdb(odbName) myAssembly = myOdb.rootAssembly # PRODUCE NODE SET ON THE NODES I EXTRACT COORDINATES FROM. newSet = 'extractedDisplacement'.upper() myInstances = [ myAssembly.instances['SECTIONED3_INSTANCE'], myAssembly.instances['SECTIONED4_INSTANCE'], myAssembly.instances['SECTIONED5_INSTANCE'], myAssembly.instances['INPLANE3_INSTANCE'], myAssembly.instances['INPLANE4_INSTANCE'] ] expPointsCoord = [[(0.606, 1.0208), (0.6956, 0.5452), (0.6975, 0.10976)], [(0.7466, 0.8459), (0.71216, 0.4332), (0.7911, 0.3266), (0.99157, 0.1497)], [(1.1335, 0.17328)], [(0.606, 1.0208), (0.6956, 0.5452), (0.6975, 0.10976), (0.7466, 0.8459), (0.71216, 0.4332), (0.7911, 0.3266), (0.99157, 0.1497)], [(1.1335, 0.17328)]] if newSet not in myAssembly.nodeSets.keys(): nodeList = list() for i, instance in enumerate(myInstances): points = {} for node in instance.nodes: points[node.label] = list(node.coordinates) for ptNo in range(len(expPointsCoord[i])): shortList = list() for key, value in points.iteritems(): if (0.95 * expPointsCoord[i][ptNo][0] < value[0] < 1.05 * expPointsCoord[i][ptNo][0]) and ( 0.95 * expPointsCoord[i][ptNo][1] < value[1] < 1.05 * expPointsCoord[i][ptNo][1]): shortList.append( (instance.name.replace('instance', 'Geo'), (key, ))) nodeList.append(shortList[0]) myNodes = tuple(nodeList) myAssembly.NodeSetFromNodeLabels(name=newSet, nodeLabels=myNodes) displ = ext.getFinalU_1(myOdb, newSet) odbTools.writeValuesOpti(displ) myOdb.close()
def postPro(odbName): odbToolbox = r"D:\myWork\procedures\postPro4Abq_VC" import sys sys.path.append(odbToolbox) import postProTools.odbTools as odbTools import postProTools.extractors as ext myOdb = odbTools.openOdb(odbName) refPoint = 'REFERENCE_POINT_PART-2-1 1' extDispl = ext.getU_3(myOdb, refPoint) extDiplsList = [displ[0] for displ in extDispl] outForce = ext.getRF_3(myOdb, refPoint) extForceList = [force[0] for force in outForce] stiffness = extForceList[-1] / extDiplsList[-1] * 1000. odbTools.writeValuesOpti(stiffness) myOdb.close()
def displ2OptiTt01(odbName): print "running postPro on %s" % (odbName) import math myOdb = odbTools.openOdb(odbName) myAssembly = myOdb.rootAssembly # PRODUCE NODE SET ON THE NODES I EXTRACT COORDINATES FROM. newSet = 'extractedDisplacement'.upper() myInstances = [ myAssembly.instances['SECTIONED3_INSTANCE'], myAssembly.instances['SECTIONED4_INSTANCE'], myAssembly.instances['SECTIONED5_INSTANCE'], myAssembly.instances['INPLANE3_INSTANCE'], myAssembly.instances['INPLANE4_INSTANCE'] ] #myInstances = [myAssembly.instances['SECTIONED2_INSTANCE'],myAssembly.instances['SECTIONED3_INSTANCE'],myAssembly.instances['SECTIONED4_INSTANCE'],myAssembly.instances['SECTIONED5_INSTANCE'], #myAssembly.instances['INPLANE1_INSTANCE'],myAssembly.instances['INPLANE3_INSTANCE'],myAssembly.instances['INPLANE4_INSTANCE']]#points #points order (I,J,A,B,C,D,E,F,G,H)x2 expPointsCoord = [[(0.606, 1.0208), (0.6956, 0.5452), (0.6975, 0.10976)], [(0.7466, 0.8459), (0.71216, 0.4332), (0.7911, 0.3266), (0.99157, 0.1497)], [(1.1335, 0.17328)], [(0.606, 1.0208), (0.6956, 0.5452), (0.6975, 0.10976), (0.7466, 0.8459), (0.71216, 0.4332), (0.7911, 0.3266), (0.99157, 0.1497)], [(1.1335, 0.17328)]] # expPointsCoord = [[(0.3802,0.0808),(0.2947,1.2368)],[(0.606,1.0208),(0.6956,0.5452),(0.6975,0.10976)],[(0.7466,0.8459),(0.71216,0.4332),(0.7911,0.3266),(0.99157,0.1497)],[(1.1335,0.17328)], # [(0.3802,0.0808),(0.2947,1.2368)],[(0.606,1.0208),(0.6956,0.5452),(0.6975,0.10976),(0.7466,0.8459),(0.71216,0.4332),(0.7911,0.3266),(0.99157,0.1497)],[(1.1335,0.17328)]] if newSet not in myAssembly.nodeSets.keys(): nodeList = list() for i, instance in enumerate(myInstances): points = {} for node in instance.nodes: points[node.label] = list(node.coordinates) for ptNo in range(len(expPointsCoord[i])): shortList = list() for key, value in points.iteritems(): if (0.95 * expPointsCoord[i][ptNo][0] < value[0] < 1.05 * expPointsCoord[i][ptNo][0]) and ( 0.95 * expPointsCoord[i][ptNo][1] < value[1] < 1.05 * expPointsCoord[i][ptNo][1]): shortList.append( (instance.name.replace('instance', 'Geo'), (key, ))) nodeList.append(shortList[0]) myNodes = tuple(nodeList) myAssembly.NodeSetFromNodeLabels(name=newSet, nodeLabels=myNodes) displ = ext.getFinalU(myOdb, newSet) odbTools.writeValuesOpti(displ) myOdb.close()
def matrixStiffnessExtractor(odbName): keysToWrite = ['matrixStiffness'] valuesToWrite = dict.fromkeys(keysToWrite, None) run = False for data in range(len(valuesToWrite)): file = valuesToWrite.keys()[data] + '.ascii' if (not os.path.isfile(file))\ or (os.path.getmtime(file) < os.path.getmtime('exeCalls.txt'))\ or (os.path.getmtime(file) < os.path.getmtime(__file__)): run = True break if run: print "running postPro on %s" % (odbName) myOdb = odbTools.openOdb(odbName) thisNb = len(myOdb.parts.keys()) totalCoheOpen = 0 slip1 = [0.] slip2 = [0.] for i in range(thisNb - 1): masterName = 'MASTER%d' % (i + 1) slaveName = 'SLAVE%d' % (i + 1) masterSurface = myOdb.rootAssembly.surfaces[masterName] copen = cExt.getFinalCOpening(myOdb, masterName, slaveName) slip1.append( max( ext.getFinalU_1( myOdb, odbTools.getNodeSetFromSurface(myOdb, masterSurface)))) slip2.append( max( ext.getFinalU_2( myOdb, odbTools.getNodeSetFromSurface(myOdb, masterSurface)))) totalCoheOpen += max(copen) extDispl = np.mean(ext.getFinalU_3(myOdb, 'outerFace')) surfStress13 = max(ext.getFinalS_13(myOdb, 'outerFace')) surfStress23 = max(ext.getFinalS_23(myOdb, 'outerFace')) surfStress33 = np.mean(ext.getFinalS_33(myOdb, 'outerFace')) slip1.append(max(ext.getFinalU_1(myOdb, 'outerFace'))) slip2.append(max(ext.getFinalU_2(myOdb, 'outerFace'))) matrixOpen = (extDispl - totalCoheOpen ) / thisNb #elongation of each part if it is uniform valuesToWrite = dict(matrixStiffness=[ surfStress33 / matrixOpen, surfStress13 / max(np.diff(slip1)), surfStress23 / max(np.diff(slip2)) ]) odbTools.writeValues(valuesToWrite) myOdb.close()
def appliedDisplExtractors(odbName): sets = [ 'edgeXMax', 'edgeXMaxInt', 'edgeXMin', 'edgeXMinInt', 'edgeYMax', 'edgeYMaxInt', 'edgeYMin', 'edgeYMinInt' ] keysToWrite = ['time', 'topResForce', 'bottomResForce'] for set in sets: keysToWrite.append('initCoord_%s' % set) keysToWrite.append('radialDisp_%s' % set) keysToWrite.append('axialDisp_%s' % set) keysToWrite.append('tgtDisp_%s' % set) valuesToWrite = dict.fromkeys(keysToWrite, None) run = False for data in valuesToWrite.keys(): file = data + '.ascii' if (not os.path.isfile(file))\ or (os.path.getmtime(file) < os.path.getmtime('exeCalls.txt'))\ or (os.path.getmtime(file) < os.path.getmtime(__file__)): run = True break if run: print "running postPro on %s" % (odbName) myOdb = odbTools.openOdb(odbName) sysCyl = geometricTools.cylXYCoordSystem(myOdb.rootAssembly) valuesToWrite['time'] = ext.getTime(myOdb) valuesToWrite['topResForce'] = ext.getResF(myOdb, 'zMax', sysC=sysCyl) valuesToWrite['bottomResForce'] = ext.getResF(myOdb, 'zMin', sysC=sysCyl) for set in sets: valuesToWrite['initCoord_%s' % set] = ext.getNCoord(myOdb, set, sysC=sysCyl) valuesToWrite['radialDisp_%s' % set] = ext.getU_1(myOdb, set, sysC=sysCyl) valuesToWrite['tgtDisp_%s' % set] = ext.getU_2(myOdb, set, sysC=sysCyl) valuesToWrite['axialDisp_%s' % set] = ext.getU_3(myOdb, set, sysC=sysCyl) odbTools.writeValues(valuesToWrite) myOdb.close()
def postPro(odbName): odbToolbox = r"D:\myWork\procedures\postPro4Abq_VC" import sys sys.path.append(odbToolbox) print 'running postPro on ', odbName import postProTools.odbTools as odbTools import postProTools.extractors as ext myOdb = odbTools.openOdb(odbName) forceExt = ext.getRF_3(myOdb, 'TOPRP') displExt = ext.getU_3(myOdb, 'TOPRP') extDiplsList = [abs(displ[0] - displExt[0][0]) for displ in displExt] extForceList = [abs(force[0] - forceExt[0][0]) for force in forceExt] idx = [n for n, i in enumerate(extDiplsList) if i > 0.2] try: idx = idx[0] #disregard first .2 mm ie about 0.5% except: idx = -1 # if no displacement is higher than 0.2, then output is 0 odbTools.writeValuesOpti(zip(extDiplsList[idx:], extForceList[idx:])) myOdb.close()
def appliedDisplacementForceExtractor(odbName): keysToWrite = ['totalForce_pinnedFace', 'totalForce_movingFace', 'time'] valuesToWrite = dict.fromkeys(keysToWrite, None) run = False for data in range(len(valuesToWrite)): file = valuesToWrite.keys()[data] + '.ascii' if (not os.path.isfile(file))\ or (os.path.getmtime(file) < os.path.getmtime('exeCalls.txt'))\ or (os.path.getmtime(file) < os.path.getmtime(__file__)): run = True break if run: print "running postPro on %s" % (odbName) myOdb = odbTools.openOdb(odbName) mySets = myOdb.rootAssembly.nodeSets pinnedNodeSetName = list() movingNodeSetName = list() for nodeSet in mySets.keys(): zMin = '_WITH_ZMIN' if nodeSet.endswith(zMin): pinnedNodeSetName.append(nodeSet) zMax = '_WITH_ZMAX' if nodeSet.endswith(zMax): movingNodeSetName.append(nodeSet) time = ext.getTime(myOdb) resultantForce_pin = [0] * len(time) for setName in pinnedNodeSetName: resForce = ext.getResF_3(myOdb, setName) for t in range(len(resultantForce_pin)): resultantForce_pin[t] += resForce[t] resultantForce_mov = [0] * len(time) for setName in movingNodeSetName: resForce = ext.getResF_3(myOdb, setName) for t in range(len(resultantForce_mov)): resultantForce_mov[t] += resForce[t] valuesToWrite = dict(totalForce_pinnedFace=resultantForce_pin, totalForce_movingFace=resultantForce_mov, time=time) odbTools.writeValues(valuesToWrite) myOdb.close()
def postPro(odbName): print 'running postPro on ', odbName import postProTools.odbTools as odbTools import postProTools.extractors as ext import postProTools.contactExtractors as cExt valuesToWrite = dict() myOdb = odbTools.openOdb(odbName) fileName = odbName.split('.')[0] valuesToWrite['axialDispl_%s' % fileName] = ext.getU_3(myOdb, 'TOPPLATE') valuesToWrite['force_%s' % fileName] = ext.getRF_3(myOdb, 'TOPPLATE') try: masterName = 'CP-2-bot' slaveName = 'CP-2-PART-1-1' valuesToWrite['cForce1_%s' % fileName] = cExt.getCNormalForce_Magnitude( myOdb, masterName, slaveName) masterName = 'CP-3-bot' slaveName = 'CP-3-PART-1-1' valuesToWrite['cForce2_%s' % fileName] = cExt.getCNormalForce_Magnitude( myOdb, masterName, slaveName) except: masterName = 'topCartilage1' slaveName = 'botCartilage1' valuesToWrite['cForce1_%s' % fileName] = cExt.getCNormalForce_Magnitude( myOdb, masterName, slaveName) masterName = 'topCartilage2' slaveName = 'botCartilage2' valuesToWrite['cForce2_%s' % fileName] = cExt.getCNormalForce_Magnitude( myOdb, masterName, slaveName) odbTools.writeValues(valuesToWrite) print 'postPro on ', odbName, ': DONE' myOdb.close()