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:
parent
282e4a0360
commit
56ce779f57
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue