Source code for omfit_classes.omfit_tsc

try:
    # framework is running
    from .startup_choice import *
except ImportError as _excp:
    # class is imported by itself
    if (
        'attempted relative import with no known parent package' in str(_excp)
        or 'No module named \'omfit_classes\'' in str(_excp)
        or "No module named '__main__.startup_choice'" in str(_excp)
    ):
        from startup_choice import *
    else:
        raise

from omfit_classes.omfit_ascii import OMFITascii

__all__ = ['OMFITtsc']


[docs]class OMFITtsc(SortedDict, OMFITascii): r""" OMFIT class used to interface with TSC input files :param filename: filename passed to OMFITascii class :param \**kw: keyword dictionary passed to OMFITascii class """ naming = r''' 00 & Control & IRST1 & IRST2 & IPEST & NCYCLE & NSKIPR & NSKIPL & IMOVIE 01 & Dimensions & NX & NZ & ALX & ALZ & ISYM & CCON & IDATA 02 & Time step & DTMINS & DTMAXS & DTFAC & LRSWTCH & IDENS & IPRES & IFUNC 03 & Numerical & XLIM & ZLIM & XLIM2 & FFAC & NDIV & ICIRC & ISVD 04 & Surf. Ave. & ISURF & NPSI & NSKIPSF & TFMULT & ALPHAR & BETAR & ITRMOD 05 & Limiter & I & XLIMA(I) & ZLIMA(I) & XLIMA(I+1) & ZLIMA(I+1) & XLIMA(I+2) & ZLIM(I+2) 06 & Divertor & IDIV & PSIRAT & X1SEP & X2SEP & Z1SEP & Z2SEP & NSEPMAX 07 & Impurities & IIMP & ILTE & IMPBND & IMPPEL & AMGAS & ZGAS & NTHE 08 & Obs. pairs & J & XOBS(2J-1) & ZOBS(2J-1) & XOBS(2J) & ZOBS(2J) & NPLOTOBS 09 & Ext. coils & N & XCOIL(N) & ZCOIL(N) & IGROUPC(N) & ATURNSC(N) & RSCOILS(N) & AINDC(N) 10 & Int. coils & M & XWIRE(M) & ZWIRE(M) & IGROUPW(M) & ATURNSW(M) & RSWIRES(M) & CWICS(M) 11 & ACOEF & ICO & NCO & ACOEF(ICO) & $\ldots$(ICO+1) & $\ldots$ & $\ldots$ & $\ldots$(ICO+4) 12 & Tranport & TEVV & DCGS & QSAW & ZEFF & IALPHA & IBALSW & ISAW 13 & Init. cond-1 & ALPHAG & ALPHAP & NEQMAX & XPLAS & ZPLAS & GZERO & QZERO 14 & Init. cond-2 & ISTART & XZERIC & AXIC & ZZERIC & BZIC 15 & Coil groups & IGROUP & GCUR(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & GCUR(6) 16 & Plasma curr. & - & PCUR(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & PCUR(6) 17 & Plasma press. & - & PPRES(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & PPRES(6) 18 & Timing & - & TPRO(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & TPRO(6) 19 & Feedback-1 & L & NRFB(L) & NFEEDO(L) & FBFAC(L) & FBCON(L) & IDELAY(L) & FBFACI(L) 20 & Feedback-2 & L & TFBONS(L) & TFBOFS(L) & FBFAC1(L) & FBFACD(L) & IPEXT(L) 21 & Contour plot & ICPLET & ICPLGF & ICPLWF & ICPLPR & ICPLBV & ICPLUV & ICPLXP 22 & Vector plot & IVPLBP & IVPLVI & IVPLFR & IVPLJP & IVPLVC & IVPLVT & - 23 & Aux. heat & - & BEAMP(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & BEAMP(6) 24 & Density & - & RNORM(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & RNORM(6) 25 & Dep. prof. & ABEAM & DBEAM & NEBEAM & EBEAMKEV & AMBEAM & FRACPAR & IBOOTST 26 & Anom. trans. & - & FBCHIA(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & FBCHIA(6) 27 & Tor. field & - & GZEROV(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & GZEROV(6) 28 & Loop volt. & - & VLOOPV(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & VLOOPV(6) 29 & PEST output& - & TPEST(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & TPEST(6) 30 & Mag. Axis(x) & - & XMAGO(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & XMAGO(6) 31 & Mag. Axis(z) & - & ZMAGO(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & ZMAGO(6) 32 & Divertor & N & XLPLATE(N) & ZLPLATE(N) & XRPLATE(N) & ZRPLATE(N) & FPLATE(N,1) & FPLATE(N,2) 33 & Coil grp-2 & IGROUP & RESGS( ) 34 & TEVV(t) & - & TEVVO(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & TEVVO(6) 35 & FFAC(t) & - & FFACO(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & FFACO(6) 36 & ZEFF(t) & - & ZEFFV(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & ZEFFV(6) 37 & Volt group & IGROUP & GVOLT(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & GVOLT(6) 38 & LHDEP & ILHCD & VILIM & FREQLH & AION & ZION & CPROF & IFK 39 & Ext. coil-2 & N & DXCOIL(N) & DZCOIL(N) & FCU(N) & FSS(N) & TEMPC(N) & CCICS(N) 40 & Noplot & NOPLOT(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & NOPLOT(7) 41 & Ripple & IRIPPL & NTFCOIL & RIPMAX & RTFCOIL & NPITCH & RIPMULT & IRIPMOD 42 & Major rad. & - & RZERV(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & RZERV(6) 43 & Minor rad. & - & AZERV(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & AZERV(6) 44 & Ellipticity & - & EZERV(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & EZERV(6) 45 & Triangularity & - & DZERV(1)& $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & DZERV(6) 46 & LH heating & - & PLHAMP(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & PLHAMP(6) 47 & Dens. exp-1 & - & ALPHARV(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & ALPHARV(6) 48 & Dens. exp-2 & - & BETARV(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & BETARV(6) 49 & Multipole & N & MULTN(N) & ROMULT(N) & IGROUPM(N) & ATURNSM(N) 50 & CD & - & FRACPAR(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & FRACPAR(6) 51 & alh & -& A(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & A(6) 52 & dlh & -& D(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & D(6) 53 & a1lh & -& A1(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & A1(6) 54 & a2lh & -& A2(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & A2(6) 55 & ac & -& AC(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & AC(6) 56 & dc & -& DC(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & DC(6) 57 & ac1 & -& AC1(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & AC1(6) 58 & ac2 & -& AC2(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & AC2(6) 59 & ICRH & -& PICRH(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & PICRH(6) 60 & Halo Temp & - & TH(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & TH(6) 61 & Halo Width & - & AH(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & AH(6) 62 & X-Shape point & - & XCON0(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & XCON0(6) 63 & Z-Shape point & - & ZCON0(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & ZCON0(6) 64 & Fast Wave J & - & FWCD(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & FWCD(6) 65 & ICRH power profile & & A(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & A(6) 66 & ICRH power profile & & D(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & D(6) 67 & ICRH power profile & & A1(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & A1(6) 68 & ICRH power profile & & A2(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & A2(6) 69 & ICRH current profile & & A(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & A(6) 70 & ICRH current profile & & D(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & D(6) 71 & ICRH current profile & & A1(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & A1(6) 72 & ICRH current profile & & A2(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & A2(6) 73 & He conf. time & - & HEACT(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & HEACT(6) 74 & UFILE output & - & TUFILE(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & TUFILE(6) 75 & Sawtooth time & - & SAWTIME(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & SAWTIME(6) 76 & Anom. ion trans. & - & FBCHIIA(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & FBCHIIA(6) 77 & acoef(123) & - & qadd(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & qadd(6) 78 & acoef(3003) & - & fhmodei(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & fhmodei(6) 79 & acoef(3011) & - & pwidthc(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & pwidthc(6) 80 & acoef(3006) & - & chiped(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & chiped(6) 81 & acoef(3102) & - & tped(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & tped(6) 82 & impurity fraction & imptype & frac(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & frac(6) 83 & acoef(3012) & - & nflag(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & nflag(6) 84 & acoef(3013) & - & expn1(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & expn1(6) 85 & acoef(3014) & - & expn2(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & expn2(6) 86 & acoef(3004) & - & firitb(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & firitb(6) 87 & acoef(3005) & - & secitb(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & secitb(6) 88 & acoef(881) & - & fracno(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & fracno(6) 89 & acoef(889) & - & newden(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & newden(6) 90 & ECRH Power (MW) & & PECRH(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & PECRH(6) 91 & ECCD Toroidal Current (MA) & & ECCD(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & ECCD(6) 92 & Sh. Par. "a" (ECCD H CD) & & AECD(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & AECD(6) 93 & Sh. Par. "d" (ECCD H CD) & & DECD(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & DECD(6) 94 & Sh. Par. "a1" (ECCD H CD) & & A1ECD(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & A1ECD(6) 95 & Sh. Par. "a2" (ECCD H CD) & & A2ECD(1) & $\ldots$ & $\ldots$ & $\ldots$ & $\ldots$ & A2ECD(6) 99 & ''' def __init__(self, filename, **kw): SortedDict.__init__(self, sorted=True) OMFITascii.__init__(self, filename, **kw) self.dynaLoad = True self.naming = [[x.strip().strip('$\\') for x in x.split('&')] for x in [_f for _f in self.naming.split('\n') if _f]] self.naming = dict(list(zip([int(x[0]) for x in self.naming], [x[1:] for x in self.naming])))
[docs] @dynaLoad def load(self): lines = list(map(lambda x: str(x).strip(), open(self.filename, 'r').readlines())) fmt = 'i2,a8,a10,a10,a10,a10,a10,a10,a10' for k, line in list(enumerate(lines))[1:]: if line.startswith('c'): pass else: id = int(line[:2]) if id not in self: self[id] = [] self[id].append(fortranformat.FortranRecordReader(fmt).read(line)) for item in list(self.keys()): if not is_int(item): continue tmp = np.atleast_2d(self[item]) for k, name in list(enumerate(['card'] + self.naming[item])): try: if k == 1: card = '%02d' % item + '-' + re.sub(r'[\."]', '', re.sub(' ', '_', name)) self.setdefault(card, {}) continue if name.strip() in ['-', '', 'ldots', 'card']: continue if item == 11: if not name.startswith('ACOEF'): continue for row in self[item]: name = name.split('(')[0] + '(%d)' % int(eval(row[2])) self[card][name] = np.array(list(map(float, [_f for _f in [x.strip() for x in row[4:]] if _f]))) if len(self[card][name]) == 1: self[card][name] = self[card][name][0] else: tmp0 = np.array([_f for _f in [x.strip() for x in tmp[:, k:].flatten().tolist()] if _f]) if '(' in name: self[card][name.split('(')[0]] = tmp0.astype(float) break else: try: self[card][name] = tmp0[:1].astype(float) except Exception as _excp: self[card][name] = tmp0[:1] if len(self[card][name]) == 1: self[card][name] = self[card][name][0] elif not len(self[card][name]): self[card][name] = None except Exception: printe('Error at punchcard %s with name %s\n' % (item, name)) raise del self[item]
[docs] @dynaSave def save(self): text = [] for item in self: card = int(item[:2]) n = np.sum([np.atleast_1d(self[item][key]).size for key in self[item]]) if n == 0: continue if card == 11: for line in sorted(list(self[item].keys()), key=lambda line: int(line.split('(')[1][:-1])): data = np.atleast_1d(self[item][line]) ltxt = ( ['%10d' % int(line.split('(')[1][:-1]), '%10d' % len(data)] + ['%10g' % x for x in data.tolist()] + [' ' * 10] * (5 - len(data)) ) text.append(''.join([str(card).ljust(10)] + ltxt)) continue for line in range(int(n // 7)): ltxt = [] for key in self.naming[card][1:]: if key in ['-', '']: txt = ' ' * 10 ltxt.append(txt) elif '(' in key: data = ['%10g' % x for x in self[item][key.split('(')[0]]] txt = data[line * 7 : (line + 1) * 7 + 1] ltxt.extend(txt) break else: data = self[item][key] if data is not None: txt = '%10g' % data else: txt = ' ' * 10 ltxt.append(txt) text.append(''.join([str(card).ljust(10)] + ltxt)) with open(self.filename, 'w') as f: f.write('\n'.join(text))