Temporary solution (multl) for sub-TMatrix multipliers

Former-commit-id: 18d0cd4c62a5290dfe52882413502118311b647e
This commit is contained in:
Marek Nečada 2017-02-16 00:18:48 +00:00
parent d54ff96aaf
commit a3dec16ee3
1 changed files with 29 additions and 11 deletions

View File

@ -1,7 +1,7 @@
#!/usr/bin/env python3
import argparse, re, random
import argparse, re, random, string
from scipy.constants import hbar, e as eV, pi, c
def make_action_sharedlist(opname, listname):
@ -13,6 +13,7 @@ def make_action_sharedlist(opname, listname):
return opAction
parser = argparse.ArgumentParser()
#TODO? použít type=argparse.FileType('r') ?
parser.add_argument('--TMatrix', action='store', required=True, help='Path to TMatrix file')
parser.add_argument('--griddir', action='store', required=True, help='Path to the directory with precalculated translation operators')
#sizepar = parser.add_mutually_exclusive_group(required=True)
@ -25,15 +26,19 @@ parser.add_argument('--eVmin', action='store', help='Skip frequencies below this
parser.add_argument('--kdensity', action='store', type=int, default=66, help='Number of k-points per x-axis segment')
#TODO some more sophisticated x axis definitions
parser.add_argument('--gaussian', action='store', type=float, metavar='σ', help='Use a gaussian envelope for weighting the interaction matrix contributions (depending on the distance), measured in unit cell lengths (?) FIxME).')
parser.add_argument('--tr', dest='ops', action=make_action_sharedlist('tr', 'ops'))
parser.add_argument('--tr0', dest='ops', action=make_action_sharedlist('tr0', 'ops'))
parser.add_argument('--tr1', dest='ops', action=make_action_sharedlist('tr1', 'ops'))
parser.add_argument('--sym', dest='ops', action=make_action_sharedlist('sym', 'ops'))
parser.add_argument('--sym0', dest='ops', action=make_action_sharedlist('sym0', 'ops'))
parser.add_argument('--sym1', dest='ops', action=make_action_sharedlist('sym1', 'ops'))
#parser.add_argument('--mult', dest='ops', nargs='2', action=make_action_sharedlist('mult', 'ops'))
#parser.add_argument('--mult0', dest='ops', nargs='2', action=make_action_sharedlist('mult0', 'ops'))
#parser.add_argument('--mult1', dest='ops', nargs='2', action=make_action_sharedlist('mult1', 'ops'))
popgrp=parser.add_argument_group(title='Operations')
popgrp.add_argument('--tr', dest='ops', action=make_action_sharedlist('tr', 'ops'), default=list()) # the default value for dest can be set once
popgrp.add_argument('--tr0', dest='ops', action=make_action_sharedlist('tr0', 'ops'))
popgrp.add_argument('--tr1', dest='ops', action=make_action_sharedlist('tr1', 'ops'))
popgrp.add_argument('--sym', dest='ops', action=make_action_sharedlist('sym', 'ops'))
popgrp.add_argument('--sym0', dest='ops', action=make_action_sharedlist('sym0', 'ops'))
popgrp.add_argument('--sym1', dest='ops', action=make_action_sharedlist('sym1', 'ops'))
#popgrp.add_argument('--mult', dest='ops', nargs=3, metavar=('INCSPEC', 'SCATSPEC', 'MULTIPLIER'), action=make_action_sharedlist('mult', 'ops'))
#popgrp.add_argument('--mult0', dest='ops', nargs=3, metavar=('INCSPEC', 'SCATSPEC', 'MULTIPLIER'), action=make_action_sharedlist('mult0', 'ops'))
#popgrp.add_argument('--mult1', dest='ops', nargs=3, metavar=('INCSPEC', 'SCATSPEC', 'MULTIPLIER'), action=make_action_sharedlist('mult1', 'ops'))
popgrp.add_argument('--multl', dest='ops', nargs=3, metavar=('INCL[,INCL,...]', 'SCATL[,SCATL,...]', 'MULTIPLIER'), action=make_action_sharedlist('multl', 'ops'))
popgrp.add_argument('--multl0', dest='ops', nargs=3, metavar=('INCL[,INCL,...]', 'SCATL[,SCATL,...]', 'MULTIPLIER'), action=make_action_sharedlist('multl0', 'ops'))
popgrp.add_argument('--multl1', dest='ops', nargs=3, metavar=('INCL[,INCL,...]', 'SCATL[,SCATL,...]', 'MULTIPLIER'), action=make_action_sharedlist('multl1', 'ops'))
parser.add_argument('--frequency_multiplier', action='store', type=float, default=1., help='Multiplies the frequencies in the TMatrix file by a given factor.')
# TODO enable more flexible per-sublattice specification
pargs=parser.parse_args()
@ -59,7 +64,7 @@ skipfreq = pargs.sparse if pargs.sparse else None
#factor13scat=10
ops = list()
opre = re.compile('(tr|sym|copy|mult)(\d*)')
opre = re.compile('(tr|sym|copy|multl|mult)(\d*)')
for oparg in pargs.ops:
opm = opre.match(oparg[0])
if opm:
@ -196,6 +201,19 @@ for op in ops:
raise
elif op[1] == 'copy':
raise # not implemented
elif op[1] == 'mult':
raise # not implemented
elif op[1] == 'multl':
incy = np.full((nelem,), False, dtype=bool)
for incl in op[2][0].split(','):
l = int(incl)
incy += (l == ny)
scaty = np.full((nelem,), False, dtype=bool)
for scatl in op[2][1].split(','):
l = int(scatl)
scaty += (l == ny)
for t in targets:
TMatrices[:,t,:,scaty,:,incy] *= float(op[2][2])
else:
raise #unknown operation; should not happen