Source code for model_package.DNS_Abaqus.extract_frames
from part import *
from material import *
from section import *
from assembly import *
from step import *
from interaction import *
from load import *
from mesh import *
from optimization import *
from job import *
from sketch import *
#from visualization import *
import visualization
#from connectorBehavior import *
import numpy as np
import argparse
#import visualization
from abaqus import session
from odbAccess import *
#session.viewports
import inspect
import re
import os
[docs]
def extract_frames(input_file, output_file, field, viewVec, camVec, fram=None, refine_seq=None):
'''Extracts 3D field output from a completed Abaqus simulation to save as 2D image
:param str input_file: Relative or absolute path to the output database (odb)
to operate on.
:param str output_file: Relative or absolute path the output png file.
:param str field: Field output to collect (e.g. 'S' for stress)
:param tuple viewVec: tuple of vector components that define the camera view.
:param tuple camVec: tuple of vector components that define the vertical view
orientation.
:param int fram: Simulation frame number to extract field output. Final frame will be plotted if nothing is specified.
:param tuple refine_seq: additional options required by some fields to
further define what field quantity is extracted.
:returns: ``output_file``
'''
odb = input_file
out_name = output_file
print('input file = {}'.format(input_file))
print('output file = {}'.format(output_file))
# initialize odb session
myViewport = session.Viewport(name='output', width=300, height=200, border=OFF)
session.journalOptions.setValues(replayGeometry=COORDINATE, recoverGeometry=COORDINATE)
myOdb = visualization.openOdb(path=odb, readOnly=TRUE)
myViewport.setValues(displayedObject=myOdb)
# set frame and define field
if fram:
frame = myOdb.steps['load'].frames[fram]
else:
frame = myOdb.steps['load'].frames[-1]
plotField = frame.fieldOutputs[field]
# set viewpoint
myViewport.view.setViewpoint(viewVector=viewVec, cameraUpVector=camVec)
# set background color --> doesn't work yet :(
#session.graphicsOptions.setValues(backgroundStyle=SOLID, backgroundColor='White')
#session.graphicsOptions.setValues()
# set annotation options
myViewport.viewportAnnotationOptions.setValues(
triad=ON, compass=OFF, title=OFF, state=OFF,
legendBackgroundStyle=OTHER, legendBackgroundColor='White')
# set primary variable
if refine_seq:
myViewport.odbDisplay.setPrimaryVariable(
field=plotField, outputPosition=INTEGRATION_POINT, refinement=refine_seq)
else:
myViewport.odbDisplay.setPrimaryVariable(
field=plotField, outputPosition=INTEGRATION_POINT)
# display and output
myViewport.odbDisplay.display.setValues(plotState=(CONTOURS_ON_DEF,))
session.printToFile(fileName=out_name, format=PNG, canvasObjects=(myViewport, ))
# close odb
myOdb.close()
return 0
def get_parser():
# The global '__file__' variable doesn't appear to be set when executing from Abaqus CAE
filename = inspect.getfile(lambda: None)
basename = os.path.basename(filename)
prog = "abaqus cae -noGui {} -- ".format(basename)
cli_description = "Extracts 3D field output from a completed Abaqus simulation to save as 2D image"
parser = argparse.ArgumentParser(description=cli_description,
prog=prog)
parser.add_argument('-i', '--input-file', type=str, required=True,
help="The Abaqus input file created by ``build_model.py``. ")
parser.add_argument('-o', '--output-file', type=str, required=True,
help="The modified Abaqus input file")
parser.add_argument('--frame', type=int, required=False, default=None,
help="Simulation frame number to extract field output. Final frame will be plotted if nothing is specified.")
parser.add_argument('--field', type=str, required=True,
help='Field to extract')
return parser
if __name__ == '__main__':
parser = get_parser()
# set view options
viewVec = (5,4,2.5)
camVec = (0,0,1)
# set field and refinement seqeuence
#field = 'S'
refine_seq = (INVARIANT, 'Mises')
args, unknown = parser.parse_known_args()
sys.exit(extract_frames(input_file=args.input_file,
output_file=args.output_file,
field=args.field,
viewVec=viewVec,
camVec=camVec,
fram=args.frame,
refine_seq=refine_seq,
))