62 lines
2.0 KiB
Python
62 lines
2.0 KiB
Python
|
#!/usr/bin/env python2.7
|
||
|
# -*- coding: UTF-8 no BOM -*-
|
||
|
|
||
|
import os
|
||
|
import damask
|
||
|
import numpy as np
|
||
|
from optparse import OptionParser
|
||
|
|
||
|
scriptName = os.path.splitext(os.path.basename(__file__))[0]
|
||
|
scriptID = ' '.join([scriptName, damask.version])
|
||
|
|
||
|
|
||
|
def getCauchy(f, p):
|
||
|
"""return Cauchy stress for given f and p"""
|
||
|
# [Cauchy] = (1/det(F)) * [P].[F_transpose]
|
||
|
f = f.reshape((3, 3))
|
||
|
p = p.reshape((3, 3))
|
||
|
return 1.0/np.linalg.det(f)*np.dot(p, f.T).reshape(9)
|
||
|
|
||
|
|
||
|
# --------------------------------------------------------------------
|
||
|
# MAIN
|
||
|
# --------------------------------------------------------------------
|
||
|
desp = "Add column(s) containing Cauchy stress based on given column(s)"
|
||
|
desp += "of deformation gradient and first Piola--Kirchhoff stress."
|
||
|
parser = OptionParser(option_class=damask.extendableOption,
|
||
|
usage='%prog options [file[s]]',
|
||
|
description=desp,
|
||
|
version=scriptID)
|
||
|
parser.add_option('-f', '--defgrad',
|
||
|
dest='defgrad',
|
||
|
type='string', metavar='string',
|
||
|
help='heading for deformation gradient [%default]')
|
||
|
parser.add_option('-p', '--stress',
|
||
|
dest='stress',
|
||
|
type='string', metavar='string',
|
||
|
help='heading for first Piola--Kirchhoff stress [%default]')
|
||
|
|
||
|
parser.set_defaults(defgrad='f',
|
||
|
stress='p')
|
||
|
|
||
|
(options, filenames) = parser.parse_args()
|
||
|
|
||
|
# ----- loop over input H5 files ----- #
|
||
|
for name in filenames:
|
||
|
try:
|
||
|
h5f = damask.H5Table(name, new_file=False)
|
||
|
except:
|
||
|
continue
|
||
|
damask.util.report(scriptName, name)
|
||
|
|
||
|
# ----- read in data ----- #
|
||
|
f = h5f.get_data("f")
|
||
|
p = h5f.get_data("p")
|
||
|
|
||
|
# ----- calculate Cauchy stress ----- #
|
||
|
cauchy = [getCauchy(f_i, p_i) for f_i, p_i in zip(f, p)]
|
||
|
|
||
|
# ----- write to HDF5 file ----- #
|
||
|
cmd_log = " ".join([scriptID, name])
|
||
|
h5f.add_data('Cauchy', np.array(cauchy), cmd_log=cmd_log)
|