Temporary solution (multl) for sub-TMatrix multipliers
Former-commit-id: 18d0cd4c62a5290dfe52882413502118311b647e
This commit is contained in:
parent
d54ff96aaf
commit
a3dec16ee3
|
@ -1,7 +1,7 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
|
||||||
import argparse, re, random
|
import argparse, re, random, string
|
||||||
from scipy.constants import hbar, e as eV, pi, c
|
from scipy.constants import hbar, e as eV, pi, c
|
||||||
|
|
||||||
def make_action_sharedlist(opname, listname):
|
def make_action_sharedlist(opname, listname):
|
||||||
|
@ -13,6 +13,7 @@ def make_action_sharedlist(opname, listname):
|
||||||
return opAction
|
return opAction
|
||||||
|
|
||||||
parser = argparse.ArgumentParser()
|
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('--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')
|
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)
|
#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')
|
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
|
#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('--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'))
|
popgrp=parser.add_argument_group(title='Operations')
|
||||||
parser.add_argument('--tr0', dest='ops', action=make_action_sharedlist('tr0', 'ops'))
|
popgrp.add_argument('--tr', dest='ops', action=make_action_sharedlist('tr', 'ops'), default=list()) # the default value for dest can be set once
|
||||||
parser.add_argument('--tr1', dest='ops', action=make_action_sharedlist('tr1', 'ops'))
|
popgrp.add_argument('--tr0', dest='ops', action=make_action_sharedlist('tr0', 'ops'))
|
||||||
parser.add_argument('--sym', dest='ops', action=make_action_sharedlist('sym', 'ops'))
|
popgrp.add_argument('--tr1', dest='ops', action=make_action_sharedlist('tr1', 'ops'))
|
||||||
parser.add_argument('--sym0', dest='ops', action=make_action_sharedlist('sym0', 'ops'))
|
popgrp.add_argument('--sym', dest='ops', action=make_action_sharedlist('sym', 'ops'))
|
||||||
parser.add_argument('--sym1', dest='ops', action=make_action_sharedlist('sym1', 'ops'))
|
popgrp.add_argument('--sym0', dest='ops', action=make_action_sharedlist('sym0', 'ops'))
|
||||||
#parser.add_argument('--mult', dest='ops', nargs='2', action=make_action_sharedlist('mult', 'ops'))
|
popgrp.add_argument('--sym1', dest='ops', action=make_action_sharedlist('sym1', 'ops'))
|
||||||
#parser.add_argument('--mult0', dest='ops', nargs='2', action=make_action_sharedlist('mult0', 'ops'))
|
#popgrp.add_argument('--mult', dest='ops', nargs=3, metavar=('INCSPEC', 'SCATSPEC', 'MULTIPLIER'), action=make_action_sharedlist('mult', 'ops'))
|
||||||
#parser.add_argument('--mult1', dest='ops', nargs='2', action=make_action_sharedlist('mult1', '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.')
|
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
|
# TODO enable more flexible per-sublattice specification
|
||||||
pargs=parser.parse_args()
|
pargs=parser.parse_args()
|
||||||
|
@ -59,7 +64,7 @@ skipfreq = pargs.sparse if pargs.sparse else None
|
||||||
#factor13scat=10
|
#factor13scat=10
|
||||||
|
|
||||||
ops = list()
|
ops = list()
|
||||||
opre = re.compile('(tr|sym|copy|mult)(\d*)')
|
opre = re.compile('(tr|sym|copy|multl|mult)(\d*)')
|
||||||
for oparg in pargs.ops:
|
for oparg in pargs.ops:
|
||||||
opm = opre.match(oparg[0])
|
opm = opre.match(oparg[0])
|
||||||
if opm:
|
if opm:
|
||||||
|
@ -196,6 +201,19 @@ for op in ops:
|
||||||
raise
|
raise
|
||||||
elif op[1] == 'copy':
|
elif op[1] == 'copy':
|
||||||
raise # not implemented
|
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:
|
else:
|
||||||
raise #unknown operation; should not happen
|
raise #unknown operation; should not happen
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue