#!/usr/bin/env python # -*- coding: UTF-8 no BOM -*- import os,sys,math,string import numpy as np from optparse import OptionParser import damask scriptID = string.replace('$Id$','\n','\\n') scriptName = os.path.splitext(scriptID.split()[1])[0] #-------------------------------------------------------------------------------------------------- # MAIN #-------------------------------------------------------------------------------------------------- parser = OptionParser(option_class=damask.extendableOption, usage='%prog options [file[s]]', description = """ Generate geometry description and material configuration from input files used by R.A. Lebensohn """, version = scriptID) parser.add_option('--column', dest='column', type='int', metavar = 'int', \ help='data column to discriminate phase 1 from 2 [%default]') parser.add_option('-t','--treshold', dest='threshold', type='float', metavar = 'float', \ help='threshold value to discriminate phase 1 from 2 [%default]') parser.add_option('--homogenization', dest='homogenization', type='int', metavar = 'int', \ help='homogenization index to be used [%default]') parser.add_option('--phase', dest='phase', type='int', nargs = 2, metavar = 'int int', \ help='two phase indices to be used %default') parser.add_option('--crystallite', dest='crystallite', type='int', metavar = 'int', \ help='crystallite index to be used [%default]') parser.add_option('-c', '--configuration', dest='config', action='store_true', \ help='output material configuration [%default]') parser.set_defaults(column = 7) parser.set_defaults(threshold = 1.0) parser.set_defaults(homogenization = 1) parser.set_defaults(phase = [1,2]) parser.set_defaults(crystallite = 1) parser.set_defaults(config = False) (options,filenames) = parser.parse_args() #--- setup file handles --------------------------------------------------------------------------- files = [] if filenames == []: files.append({'name':'STDIN', 'input':sys.stdin, 'output':sys.stdout, 'croak':sys.stderr, }) else: for name in filenames: if os.path.exists(name): files.append({'name':name, 'input':open(name), 'output':open(name+'_tmp','w'), 'croak':sys.stdout, }) #--- loop over input files ------------------------------------------------------------------------ for file in files: file['croak'].write('\033[1m' + scriptName + '\033[0m: ' + (file['name'] if file['name'] != 'STDIN' else '') + '\n') info = { 'grid': np.zeros(3,'i'), 'size': np.zeros(3,'d'), 'origin': np.zeros(3,'d'), 'microstructures': 0, 'homogenization': options.homogenization } needInfo = [True,True,True] microstructure = [''] texture = [''] point = 0 for line in file['input']: if line.strip(): point += 1 words = line.split() currPos = map(float,words[3:6]) for i in xrange(3): if currPos[i] > info['grid'][i]: info['size'][i] = currPos[i] info['grid'][i]+=1 if options.config: # write configuration (line by line) me = str(point) microstructure += ['[Grain%s]\n'%me + \ 'crystallite\t%i\n'%options.crystallite + \ '(constituent)\tphase %s\ttexture %s\tfraction 1.0\n'%(options.phase[{True:0,False:1}[float(words[options.column-1])