generalized slip system idea of Christoph to field data of "special" dimension (i.e. not 3 or 9).

dropped "norm"-suffix from input names of norms.
ASCIItable output is now called "normType" with type being Abs, Frobenius, or Max...
This commit is contained in:
Philip Eisenlohr 2012-02-08 12:00:31 +00:00
parent 282e4a0360
commit 56ce779f57
1 changed files with 21 additions and 19 deletions

View File

@ -26,15 +26,15 @@ class extendableOption(Option):
# definition of element-wise p-norms for matrices # definition of element-wise p-norms for matrices
# p = 1 # p = 1
def absnorm(object): def normAbs(object):
return sum(map(abs, object)) return sum(map(abs, object))
# p = 2 # p = 2
def frobeniusnorm(object): def normFrobenius(object):
return math.sqrt(sum([x*x for x in object])) return math.sqrt(sum([x*x for x in object]))
# p = infinity # p = infinity
def maxnorm(object): def normMax(object):
return max(map(abs, object)) return max(map(abs, object))
@ -48,27 +48,28 @@ Add column(s) containing norm of requested column(s) being either vectors or ten
""" + string.replace('$Id$','\n','\\n') """ + string.replace('$Id$','\n','\\n')
) )
normChoices = ['abs','frobenius','max']
parser.add_option('-n','--norm', dest='norm', action='store', type='choice', choices=('absnorm','frobeniusnorm','maxnorm'), \ parser.add_option('-n','--norm', dest='norm', action='store', type='choice', choices=normChoices, \
help='used p-norm, choose either absnorm, frobeniusnorm, or maxnorm [DEFAULT=%default]') help='type of element-wise p-norm (%s) [2]'%(','.join(map(str,normChoices))))
parser.add_option('-v','--vector', dest='vector', action='extend', type='string', \ parser.add_option('-v','--vector', dest='vector', action='extend', type='string', \
help='heading of columns containing vector field values') help='heading of columns containing vector field values')
parser.add_option('-t','--tensor', dest='tensor', action='extend', type='string', \ parser.add_option('-t','--tensor', dest='tensor', action='extend', type='string', \
help='heading of columns containing tensor field values') help='heading of columns containing tensor field values')
parser.add_option('-s','--slipsystem ', dest='slipsystem', action='extend', type='string', \ parser.add_option('-s','--special', dest='special', action='extend', type='string', \
help='heading of columns containing values per slipsystem') help='heading of columns containing field values of special dimension')
parser.add_option('-i','--nslipsystems',dest='Nslipsystems', action='store', type='int', \ parser.add_option('-d','--dimension', dest='N', action='store', type='int', \
help='number of slip systems [DEFAULT=%default]') help='dimension of special field values [%default]')
parser.set_defaults(norm = 'frobeniusnorm') parser.set_defaults(norm = 'frobenius')
parser.set_defaults(vector = []) parser.set_defaults(vector = [])
parser.set_defaults(tensor = []) parser.set_defaults(tensor = [])
parser.set_defaults(slipsystem = []) parser.set_defaults(special = [])
parser.set_defaults(Nslipsystems = 12) parser.set_defaults(N = 12)
(options,filenames) = parser.parse_args() (options,filenames) = parser.parse_args()
if len(options.vector) + len(options.tensor) + len(options.slipsystem)== 0: if len(options.vector) + len(options.tensor) + len(options.special)== 0:
parser.error('no data column specified...') parser.error('no data column specified...')
datainfo = { # list of requested labels per datatype datainfo = { # list of requested labels per datatype
@ -76,14 +77,14 @@ datainfo = { # lis
'label':[]}, 'label':[]},
'tensor': {'len':9, 'tensor': {'len':9,
'label':[]}, 'label':[]},
'slipsystem': {'len':options.Nslipsystems, 'special': {'len':options.N,
'label':[]}, 'label':[]},
} }
if options.vector != None: datainfo['vector']['label'] += options.vector if options.vector != None: datainfo['vector']['label'] += options.vector
if options.tensor != None: datainfo['tensor']['label'] += options.tensor if options.tensor != None: datainfo['tensor']['label'] += options.tensor
if options.slipsystem != None:datainfo['slipsystem']['label'] += options.slipsystem if options.special != None: datainfo['special']['label'] += options.special
# ------------------------------------------ setup file handles --------------------------------------- # ------------------------------------------ setup file handles ---------------------------------------
@ -106,6 +107,7 @@ for file in files:
table.info_append(string.replace('$Id$','\n','\\n') + \ table.info_append(string.replace('$Id$','\n','\\n') + \
'\t' + ' '.join(sys.argv[1:])) '\t' + ' '.join(sys.argv[1:]))
# --------------- figure out columns to process
active = {} active = {}
column = {} column = {}
head = [] head = []
@ -121,7 +123,7 @@ for file in files:
if datatype not in column: column[datatype] = {} if datatype not in column: column[datatype] = {}
active[datatype].append(label) active[datatype].append(label)
column[datatype][label] = table.labels.index(key) # remember columns of requested data column[datatype][label] = table.labels.index(key) # remember columns of requested data
table.labels_append('%s(%s)'%(options.norm,label)) # extend ASCII header with new labels table.labels_append('norm%s(%s)'%(options.norm.capitalize(),label)) # extend ASCII header with new labels
# ------------------------------------------ assemble header --------------------------------------- # ------------------------------------------ assemble header ---------------------------------------
@ -133,7 +135,7 @@ for file in files:
for datatype,labels in active.items(): # loop over vector,tensor for datatype,labels in active.items(): # loop over vector,tensor
for label in labels: # loop over all requested norms for label in labels: # loop over all requested norms
eval("table.data_append(%s(map(float,table.data[column[datatype][label]:column[datatype][label]+datainfo[datatype]['len']])))"%options.norm) eval("table.data_append(norm%s(map(float,table.data[column[datatype][label]:column[datatype][label]+datainfo[datatype]['len']])))"%options.norm.capitalize())
table.data_write() # output processed line table.data_write() # output processed line