コード例 #1
0
def info(ctx, **kwargs):
    vlog(ctx, 'Starting info')
    pushChain(ctx, 'info', **kwargs)
    data = ctx.obj['data']
    if kwargs['allsets']:
        onlyActive = False
    else:
        onlyActive = True
    #end

    for i, dat in data.iterator(kwargs['use'], enum=True, onlyActive=onlyActive):
        if dat.getStatus():
            color = 'green'
            bold = True
        else:
            color = None
            bold = False
        #end
        click.echo(click.style("Set {:s} ({:s}#{:d})".format(dat.getLabel(), dat.getTag(), i,),
                               fg=color, bold=bold))
        if not kwargs['compact']:
            click.echo(dat.info() + "\n")
        #end
    #end

    vlog(ctx, 'Finishing info')
コード例 #2
0
ファイル: recovery.py プロジェクト: ammarhakim/postgkyl
def recovery(ctx, **kwargs):
    vlog(ctx, 'Starting recovery')
    pushChain(ctx, 'recovery', **kwargs)
    data = ctx.obj['data']

    if kwargs['basistype'] is not None:
        if kwargs['basistype'] == 'ms' or kwargs['basistype'] == 'ns':
            basisType = 'serendipity'
        elif kwargs['basistype'] == 'mo':
            basisType = 'maximal-order'
    else:
        basisType = None
    #end

    for dat in data.iterator(kwargs['use']):
        dg = GInterpModal(dat, kwargs['polyorder'], basisType,
                          kwargs['interp'], kwargs['periodic'])
        numNodes = dg.numNodes
        numComps = int(dat.getNumComps() / numNodes)

        #vlog(ctx, 'interplolate: interpolating dataset #{:d}'.format(s))
        #dg.recovery(tuple(range(numComps)), stack=True)
        if kwargs['tag']:
            out = Data(tag=kwargs['tag'],
                       label=kwargs['label'],
                       compgrid=ctx.obj['compgrid'],
                       meta=dat.meta)
            grid, values = dg.recovery(0, kwargs['c1'])
            out.push(grid, values)
            data.add(out)
        else:
            dg.recovery(0, kwargs['c1'], overwrite=True)
        #end
    #end
    vlog(ctx, 'Finishing recovery')
コード例 #3
0
def log(ctx):
    vlog(ctx, 'Calculating the natural log')
    pushChain(ctx, 'temp.log')
    for s in ctx.obj['sets']:
        values = ctx.obj['dataSets'][s].getValues()
        values = np.log(values)
        ctx.obj['dataSets'][s].push(values)
コード例 #4
0
def abs(ctx):
    vlog(ctx, 'Calculating the absolute value')
    pushChain(ctx, 'transform.log')
    for s in ctx.obj['sets']:
        values = ctx.obj['dataSets'][s].getValues()
        values = np.abs(values)
        ctx.obj['dataSets'][s].push(values)
コード例 #5
0
def mult(ctx, **kwargs):
    vlog(ctx, 'Multiplying by {:f}'.format(kwargs['factor']))
    pushChain(ctx, 'temp.mult', **kwargs)
    for s in ctx.obj['sets']:
        values = ctx.obj['dataSets'][s].getValues()
        values = values * kwargs['factor']
        ctx.obj['dataSets'][s].push(values)
コード例 #6
0
def pow(ctx, **kwargs):
    vlog(ctx, 'Calculating the power of {:f}'.format(kwargs['power']))
    pushChain(ctx, 'temp.pow', **kwargs)
    for s in ctx.obj['sets']:
        values = ctx.obj['dataSets'][s].getValues()
        values = values**kwargs['power']
        ctx.obj['dataSets'][s].push(values)
コード例 #7
0
ファイル: energetics.py プロジェクト: ammarhakim/postgkyl
def energetics(ctx, **kwargs):
    vlog(ctx, 'Starting energetics decomposition')
    pushChain(ctx, 'energetics', **kwargs)

    data = ctx.obj['data']  # shortcut

    for elc, ion, em in zip(data.iterator(kwargs['elc']),
                            data.iterator(kwargs['ion']),
                            data.iterator(kwargs['field'])):
        grid = em.getGrid()
        outEnergetics = np.zeros(em.getValues()[..., 0:7].shape)
        out = Data(tag=kwargs['tag'],
                   compgrid=ctx.obj['compgrid'],
                   label=kwargs['label'],
                   meta=em.meta)
        grid, outEnergetics = diag.energetics(elc, ion, em)
        out.push(grid, outEnergetics)
        data.add(out)
    #end

    data.deactivateAll(tag=kwargs['elc'])
    data.deactivateAll(tag=kwargs['ion'])
    data.deactivateAll(tag=kwargs['field'])

    vlog(ctx, 'Finishing energetics decomposition')


#end
コード例 #8
0
ファイル: agyro.py プロジェクト: ammarhakim/postgkyl
def agyro(ctx, **kwargs):
    """Compute a measure of agyrotropy. Default measure is taken from
    Swisdak 2015. Optionally computes agyrotropy as Frobenius norm of
    agyrotropic pressure tensor. Pressure-tensor must be the first
    dataset and magnetic field the second dataset.

    """
    vlog(ctx, 'Starting agyro')
    pushChain(ctx, 'agyro', **kwargs)

    grid = ctx.obj['dataSets'][ctx.obj['sets'][0]].getGrid()
    lo, up = ctx.obj['dataSets'][ctx.obj['sets'][0]].getBounds()

    pij = ctx.obj['dataSets'][ctx.obj['sets'][0]].getValues()
    B = ctx.obj['dataSets'][ctx.obj['sets'][1]].getValues()

    if kwargs['forb']:
        tmp = getForb(pij, B)
    else:
        tmp = getSwisdak(pij, B)

    tmp = tmp[..., np.newaxis]

    ctx.obj['dataSets'].append(GData())
    idx = len(ctx.obj['dataSets']) - 1
    ctx.obj['dataSets'][idx].push(tmp, grid)
    ctx.obj['sets'] = [idx]

    vlog(ctx, 'Finishing agyro')
コード例 #9
0
ファイル: bparrotate.py プロジェクト: ammarhakim/postgkyl
def bparrotate(ctx, **kwargs):
    """Rotate an array parallel to the unit vectors of the magnetic field.
    For two arrays u and b, where b is the unit vector in the direction of the magnetic field, 
    the operation is (u dot b_hat) b_hat. Note that the magnetic field is a three-component field, 
    so the output is a new vector whose components are (u_{b_x}, u_{b_y}, u_{b_z}), i.e.,
    the x, y, and z components of the vector u parallel to the magnetic field. 
    """
    vlog(ctx, 'Starting rotation parallel to magnetic field')
    pushChain(ctx, 'arrayBpar', **kwargs)

    data = ctx.obj['data']  # shortcut

    for a, rot in zip(data.iterator(kwargs['array']),
                      data.iterator(kwargs['field'])):
        # Magnetic field is components 3, 4, & 5 in field array
        grid, outrot = diag.parrotate(a, rot, '3:6')
        # Create new GData structure with appropriate outtag and labels to store output.
        out = Data(tag=kwargs['tag'],
                   compgrid=ctx.obj['compgrid'],
                   label=kwargs['label'],
                   meta=a.meta)
        out.push(grid, outrot)
        data.add(out)
    #end

    data.deactivateAll(tag=kwargs['array'])
    data.deactivateAll(tag=kwargs['field'])

    vlog(ctx, 'Finishing rotation parallel to magnetic field')
コード例 #10
0
ファイル: mask.py プロジェクト: ammarhakim/postgkyl
def mask(ctx, **kwargs):
    vlog(ctx, 'Starting mask')
    pushChain(ctx, 'mask', **kwargs)
    data = ctx.obj('data')

    if kwargs['filename']:
        maskFld = Data(kwargs['filename']).getValues()
    #end

    for dat in data.interator(kwargs['use']):
        values = dat.getValues()

        if kwargs['filename']:
            maskFldRep = np.repeat(maskFld, dat.getNumComps(), axis=-1)
            data.push(np.ma.masked_where(maskFldRep < 0.0, values))
        elif kwargs['lower'] is not None and kwargs['upper'] is not None:
            dat.push(
                np.ma.masked_outside(values, kwargs['lower'], kwargs['upper']),
                grid)
        elif kwargs['lower'] is not None:
            dat.push(np.ma.masked_less(values, kwargs['lower']))
        elif kwargs['upper'] is not None:
            dat.push(np.ma.masked_greater(values, kwargs['upper']))
        else:
            data.push(values, grid)
            click.echo(
                click.style(
                    "WARNING in 'mask': No masking information specified.",
                    fg='yellow'))
        #end
    #end

    vlog(ctx, 'Finishing mask')
コード例 #11
0
ファイル: perprotate.py プロジェクト: ammarhakim/postgkyl
def perprotate(ctx, **kwargs):
    """Rotate an array perpendicular to the unit vectors of a second array.
    For two arrays u and v, where v is the rotator, operation is u - (u dot v_hat) v_hat.
    """
    vlog(ctx, 'Starting rotation perpendicular to rotator array')
    pushChain(ctx, 'rotarraypar', **kwargs)

    data = ctx.obj['data']  # shortcut

    for a, rot in zip(data.iterator(kwargs['array']),
                      data.iterator(kwargs['rotator'])):
        grid, outrot = diag.perprotate(a, rot)
        # Create new GData structure with appropriate outtag and labels to store output.
        out = Data(tag=kwargs['tag'],
                   compgrid=ctx.obj['compgrid'],
                   label=kwargs['label'],
                   meta=a.meta)
        out.push(outrot, grid)
        data.add(out)
    #end

    data.deactivateAll(tag=kwargs['array'])
    data.deactivateAll(tag=kwargs['rotator'])

    vlog(ctx, 'Finishing rotation perpendicular to rotator array')
コード例 #12
0
def deactivate(ctx, **kwargs):
    """Select datasets(s) to pass further down the command
    chain. Datasets are indexed starting 0. Multiple datasets can be
    selected using a comma separated list or a range specifier. Unless
    '--focused' is selected, all unselected datasets will be
    activated.

    '--tag' and '--index' allow to specify tags and indices. The not
    specified, 'deactivate' applies to all. Both parameters support
    comma-separated values. '--index' also supports slices following
    the Python conventions, e.g., '3:7' or ':-5:2'.

    'info' command (especially with the '-ac' flags) can be helpful
    when activating/deactivating multiple datasets.

    """
    vlog(ctx, 'Starting deactivate')
    pushChain(ctx, 'deactivate', **kwargs)
    data = ctx.obj['data']

    if kwargs['focused']:
        data.activateAll()
    #end

    for dat in data.iterator(tag=kwargs['tag'],
                             onlyActive=False,
                             select=kwargs['index']):
        dat.deactivate()
    #end

    vlog(ctx, 'Finishing deactivate')
コード例 #13
0
def bperprotate(ctx, **kwargs):
    """Rotate an array perpendicular to the unit vectors of the magnetic field.
    For two arrays u and b, where b is the unit vector in the direction of the magnetic field, 
    the operation is u - (u dot b_hat) b_hat.
    """
    vlog(ctx, 'Starting rotation perpendicular to magnetic field')
    pushChain(ctx, 'arrayBpar', **kwargs)

    data = ctx.obj['data']  # shortcut

    for a, rot in zip(data.iterator(kwargs['array']),
                      data.iterator(kwargs['field'])):
        # Magnetic field is components 3, 4, & 5 in field array
        grid, outrot = diag.perprotate(a, rot, '3:6')
        # Create new GData structure with appropriate outtag and labels to store output.
        out = Data(tag=kwargs['tag'],
                   compgrid=ctx.obj['compgrid'],
                   label=kwargs['label'],
                   meta=a.meta)
        out.push(grid, outrot)
        data.add(out)
    #end

    data.deactivateAll(tag=kwargs['array'])
    data.deactivateAll(tag=kwargs['field'])

    vlog(ctx, 'Finishing rotation perpendicular to magnetic field')
コード例 #14
0
def interpolate(ctx, **kwargs):
    vlog(ctx, 'Starting interpolate')
    pushChain(ctx, 'interpolate', **kwargs)
    data = ctx.obj['data']

    basisType = None
    isModal = None
    if kwargs['basistype'] is not None:
        if kwargs['basistype'] == 'ms':
            basisType = 'serendipity'
            isModal = True
        elif kwargs['basistype'] == 'ns':
            basisType = 'serendipity'
            isModal = False
        elif kwargs['basistype'] == 'mo':
            basisType = 'maximal-order'
            isModal = True
        elif kwargs['basistype'] == 'mt':
            basisType = 'tensor'
            isModal = True
        #end
    #end
    
    for dat in data.iterator(kwargs['use']):
        if kwargs['basistype'] is None and dat.meta['basisType'] is None:
            ctx.fail(click.style("ERROR in interpolate: no 'basistype' was specified and dataset {:s} does not have required metadata".format(dat.getLabel()), fg='red'))
        #end
        
        if isModal or dat.meta['isModal']:
            dg = GInterpModal(dat,
                              kwargs['polyorder'], kwargs['basistype'], 
                              kwargs['interp'], kwargs['read'])
        else:
            dg = GInterpNodal(dat,
                              kwargs['polyorder'], basisType,
                              kwargs['interp'], kwargs['read'])
        #end
            
        numNodes = dg.numNodes
        numComps = int(dat.getNumComps() / numNodes)
        
        if not kwargs['new']:
            if kwargs['tag']:
                out = Data(tag=kwargs['tag'],
                           label=kwargs['label'],
                           compgrid=ctx.obj['compgrid'],
                           meta=dat.meta)
                grid, values = dg.interpolate(tuple(range(numComps)))
                out.push(grid, values)
                data.add(out)
            else:
                dg.interpolate(tuple(range(numComps)), overwrite=True)
            #end
        else:
            interpFn(dat, kwargs['polyorder'])
        #end
    #end
    vlog(ctx, 'Finishing interpolate')
コード例 #15
0
ファイル: trajectory.py プロジェクト: ammarhakim/postgkyl
def trajectory(ctx, **kwargs):
    vlog(ctx, 'Starting trajectory')
    pushChain(ctx, 'trajectory', **kwargs)
    data = ctx.obj['data']

    tags = list(data.tagIterator(kwargs['use']))
    if len(tags) > 1:
        ctx.fail(
            click.echo(
                "'trajectory' supports only one 'tag', was provided {:d}".
                format(len(tags)),
                fg='red'))
    else:
        tag = tags[0]
    #end

    numSets = len(ctx.obj['sets'])
    fig = plt.figure()
    ax = Axes3D(fig)
    kwargs['figure'] = fig
    kwargs['legend'] = False

    dat = ctx.obj['data'].getDataset(tag, 0)
    numPos = dat.getNumCells()[0]

    jump = 1
    if kwargs['numframes'] is not None:
        jump = int(math.floor(numPos / kwargs['numframes']))
        numPos = int(kwargs['numframes'])
    #end

    anim = FuncAnimation(fig,
                         update,
                         numPos,
                         fargs=(ax, ctx, jump, kwargs['velocity'],
                                kwargs['xmin'], kwargs['xmax'], kwargs['ymin'],
                                kwargs['ymax'], kwargs['zmin'], kwargs['zmax'],
                                tag),
                         interval=kwargs['interval'])

    ax.view_init(elev=kwargs['elevation'], azim=kwargs['azimuth'])

    if kwargs['fixaspect']:
        plt.setp(ax, aspect=1.0)

    fName = 'anim.mp4'
    if kwargs['saveas']:
        fName = str(kwargs['saveas'])
    #end
    if kwargs['save'] or kwargs['saveas']:
        anim.save(fName, writer='ffmpeg')
    #end

    if kwargs['show']:
        plt.show()
    #end
    vlog(ctx, 'Finishing trajectory')
コード例 #16
0
ファイル: val2coord.py プロジェクト: ammarhakim/postgkyl
def val2coord(ctx, **kwargs):
    """Given a dataset (typically a DynVector) selects columns from it to
    create new datasets. For example, you can choose say column 1 to
    be the X-axis of the new dataset and column 2 to be the
    Y-axis. Multiple columns can be choosen using range specifiers and
    as many datasets are then created.

    """
    vlog(ctx, 'Starting val2coord')
    pushChain(ctx, 'val2coord', **kwargs)
    data = ctx.obj['data']

    activeSets = []
    colors = ['C0', 'C1', 'C2', 'C3', 'C4', 'C5', 'C6', 'C7', 'C8', 'C9']

    tags = list(data.tagIterator())
    outTag = kwargs['tag']
    if outTag is None:
        if len(tags) == 1:
            outTag = tags[0]
        else:
            outTag = 'val2coord'
        #end
    #end
    
    for setIdx, dat in data.iterator(kwargs['use'], enum=True):
        values = dat.getValues()
        xComps = _getRange(kwargs['x'], len(values[0, :]))
        yComps = _getRange(kwargs['y'], len(values[0, :]))

        if len(xComps) > 1 and len(xComps) != len(yComps):
            click.echo(click.style("ERROR 'val2coord': Length of the x-components ({:d}) is greater than 1 and not equal to the y-components ({:d}).".format(len(xComps), len(yComps)), fg='red'))
            ctx.exit()
        #end
        
        for i, yc in enumerate(yComps):
            if len(xComps) > 1:
                xc = xComps[i]
            else:
                xc = xComps[0]
            #end

            x = values[..., xc]
            y = values[..., yc, np.newaxis]

            out = Data(tag=outTag,
                       label=kwargs['label'],
                       compgrid=ctx.obj['compgrid'],
                       meta=dat.meta)
            out.push([x], y)
            out.color = 'C0'
            data.add(out)
        #end
        dat.deactivate()
    #end
    vlog(ctx, 'Finishing val2coord')
コード例 #17
0
ファイル: blot.py プロジェクト: ammarhakim/postgkyl
def blot(ctx, **kwargs):
    vlog(ctx, 'Starting blot')
    pushChain(ctx, 'blot', **kwargs)

    # if kwargs['group'] is not None:
    #     kwargs['group'] = int(kwargs['group'])
    #end

    fName = ""
    for dat in ctx.obj['data'].iterator(kwargs['use']):
        # if len(ctx.obj['sets']) > 1 or kwargs['forcelegend']:
        #     label = ctx.obj['labels'][s]
        # else:
        #     label = ''
        #end
        # if kwargs['arg'] is not None:
        #     gplot(dat, kwargs['arg'], labelPrefix=label,
        #          **kwargs)
        # else:
        #     gplot(dat, labelPrefix=label,
        #          **kwargs)
        # #end
        fig = postgkyl.output.blot(dat, **kwargs)

        # if (kwargs['save'] or kwargs['saveas']):
        #     if kwargs['saveas']:
        #         fName = kwargs['saveas']
        #     else:
        #         if fName != "":
        #             fName = fName + "_"
        #             #end
        #         if dat.fName:
        #             fName = fName + dat.fName.split('.')[0]
        #         else:
        #             fName = fName + 'ev_'+ctx.obj['labels'][s].replace(' ', '_')
        #         #end
        #     #end
        # #end
        # if (kwargs['save'] or kwargs['saveas']) and kwargs['figure'] is None:
        #     fName = str(fName) + '.png'
        #     plt.savefig(fName, dpi=kwargs['dpi'])
        #     fName = ""
        # #end
    #end
    #if (kwargs['save'] or kwargs['saveas']) and kwargs['figure'] is not None:
    #    fName = str(fName) + '.png'
    #    plt.savefig(fName, dpi=kwargs['dpi'])
    #end

    if kwargs['show']:
        blt.show(fig)
    #end
    vlog(ctx, 'Finishing blot')
コード例 #18
0
def growth(ctx, **kwargs):
    """Attempts to compute growth rate (i.e. fit e^(2x)) from DynVector
    data, typically an integrated quantity like electric or magnetic
    field energy.
    """
    vlog(ctx, 'Starting growth')
    pushChain( ctx, 'growth', **kwargs) 
    data = ctx.obj['data']
    
    for dat in data.iterator(kwargs['use']):
        time = dat.getGrid()
        values = dat.getValues()
        numDims = dat.getNumDims()
        if numDims > 1:
            click.fail(click.style("'growth' is available only for 1D data (used on {:d}D data)".format(numDims), fg='red'))
        #end
        
        bestParams, bestR2, bestN = fitGrowth(time[0], values[..., 0],
                                              minN=kwargs['minn'],
                                              maxN=kwargs['maxn'],
                                              p0=kwargs['guess'])

        if kwargs['plot'] is True:
            vlog(ctx, 'growth: Plotting data and fit')
            plt.style.use(os.path.dirname(os.path.realpath(__file__)) \
                      + "/../output/postgkyl.mplstyle")
            fig, ax = plt.subplots()
            ax.plot(time[0], values[..., 0], '.')
            ax.set_autoscale_on(False)
            ax.plot(time[0], exp2(time[0], *bestParams))
            ax.grid(True)
            plt.show()
        #end

        if kwargs['instantaneous'] is True:
            vlog(ctx, 'growth: Plotting instantaneous growth rate')
            gammas = []
            for i in range(1,len(time[0])-1):
                gamma = (values[i+1,0] - values[i-1,0])/(2*values[i,0]*(time[0][i+1] - time[0][i-1]))
                gammas.append(gamma)
            
            plt.style.use(os.path.dirname(os.path.realpath(__file__)) \
                      + "/../output/postgkyl.mplstyle")
            fig, ax = plt.subplots()
            ax.plot(time[0][1:-1], gammas)
            #ax.set_autoscale_on(False)
            ax.grid(True)
            plt.show()
        #end
    #end
    vlog(ctx, 'Finishing growth')
コード例 #19
0
def extractinput(ctx, **kwargs):
    vlog(ctx, 'Starting ')
    pushChain(ctx, 'extractinput', **kwargs)
    data = ctx.obj['data']

    for dat in data.iterator(kwargs['use']):
        encInp = dat.getInputFile()
        if encInp:
            inpfile = base64.decodebytes(
                encInp.encode('utf-8')).decode('utf-8')
            click.echo(inpfile)
        else:
            click.echo("No embedded input file!")
        #end
    #end
    vlog(ctx, 'Finishing extractinput')
コード例 #20
0
ファイル: write.py プロジェクト: ammarhakim/postgkyl
def write(ctx, **kwargs):
    """Write active dataset to a file. The output file format can be set 
    with ``--mode``, and is ADIOS BP by default. If data is
    saved as BP file it can be later loaded back into pgkyl to further
    manipulate or plot it.

    """
    vlog(ctx, 'Starting write')
    pushChain(ctx, 'write', **kwargs)
    data = ctx.obj['data']

    for dat in data.iterator(kwargs['use']):
        dat.write(outName=kwargs['filename'],
                  mode=kwargs['mode'],
                  bufferSize=kwargs['buffersize'])
    #end
    vlog(ctx, 'Finishing write')
コード例 #21
0
def norm(ctx, **kwargs):
    vlog(ctx, 'Normalizing data')
    pushChain(ctx, 'temp.norm', **kwargs)
    for s in ctx.obj['sets']:
        values = ctx.obj['dataSets'][s].getValues()
        numComps = ctx.obj['dataSets'][s].getNumComps()
        valuesOut = values.copy()
        for comp in range(numComps):
            if kwargs['shift']:
                valuesOut[..., comp] -= valuesOut[..., comp].min()
            if kwargs["usefirst"]:
                valuesOut[..., comp] /= valuesOut[..., comp].item(0)
            else:
                valuesOut[..., comp] /= np.abs(valuesOut[..., comp]).max()
            #end
        #end
        ctx.obj['dataSets'][s].push(valuesOut)
コード例 #22
0
ファイル: pr.py プロジェクト: ammarhakim/postgkyl
def pr(ctx, **kwargs):
    vlog(ctx, 'Starting pr')
    pushChain(ctx, 'pr', **kwargs)
    data = ctx.obj['data']

    for dat in data.iterator(kwargs['use']):
        if kwargs['grid']:
            grid = dat.getGrid()
            for g in grid:
                click.echo(g)
            #end
        else:
            click.echo(dat.getValues().squeeze())
        #end
    #end

    vlog(ctx, 'Finishing pr')
コード例 #23
0
def current(ctx, **kwargs):
    vlog(ctx, 'Starting current accumulation')
    pushChain(ctx, 'current', **kwargs)
    data = ctx.obj['data']

    for dat in data.iterator(kwargs['use']):
        grid = dat.getGrid()
        outcurrent = np.zeros(dat.getValues().shape)
        grid, outcurrent = diag.accumulate_current(dat, kwargs['qbym'])
        dat.deactivate()
        out = Data(tag=kwargs['tag'],
                   compgrid=ctx.obj['compgrid'],
                   label=kwargs['label'],
                   meta=dat.meta)
        out.push(grid, outcurrent)
        data.add(out)
    #end
    vlog(ctx, 'Finishing current accumulation')
コード例 #24
0
def integrate(ctx, **kwargs):
    vlog(ctx, 'Starting integrate')
    pushChain(ctx, 'integrate', **kwargs)
    data = ctx.obj['data']
    
    for dat in data.iterator(kwargs['use']):
        if kwargs['tag']:
            grid, values = diag.integrate(dat, kwargs['axis'])
            out = Data(tag=kwargs['tag'],
                       label=kwargs['label'],
                       compgrid=ctx.obj['compgrid'],
                       meta=dat.meta)
            out.push(grid, values)
            data.add(out)
        else:
            diag.integrate(dat, kwargs['axis'], overwrite=True)
        #en
    #end
        
    vlog(ctx, 'Finishing integrate')
コード例 #25
0
def tenmoment(ctx, **kwargs):
    """Extract ten-moment primitive variables from ten-moment conserved
    variables.

    """
    vlog(ctx, 'Starting tenmoment')
    pushChain(ctx, 'tenmoment', **kwargs)
    data = ctx.obj['data']

    v = kwargs['variable_name']
    for dat in data.iterator(kwargs['use']):
        vlog(ctx,
             'tenmoment: Extracting {:s} from data set #{:d}'.format(v, s))
        if v == "density":
            diag.getDensity(dat, stack=True)
        elif v == "xvel":
            diag.getVx(dat, stack=True)
        elif v == "yvel":
            diag.getVy(dat, stack=True)
        elif v == "zvel":
            diag.getVz(dat, stack=True)
        elif v == "vel":
            diag.getVi(dat, stack=True)
        elif v == "pxx":
            diag.getPxx(dat, stack=True)
        elif v == "pxy":
            diag.getPxy(dat, stack=True)
        elif v == "pxz":
            diag.getPxz(dat, stack=True)
        elif v == "pyy":
            diag.getPyy(dat, stack=True)
        elif v == "pyz":
            diag.getPyz(dat, stack=True)
        elif v == "pzz":
            diag.getPzz(dat, stack=True)
        elif v == "pressure":
            diag.getP(dat, numMoms=10, stack=True)
        elif v == "pressureTensor":
            diag.getPij(dat, stack=True)
        #end
    vlog(ctx, 'Finishing tenmoment')
コード例 #26
0
ファイル: magsq.py プロジェクト: ammarhakim/postgkyl
def magsq(ctx, **kwargs):
    """Calculate the magnitude squared of an input array
    """
    vlog(ctx, 'Starting magnitude squared computation')
    pushChain(ctx, 'magsq', **kwargs)
    data = ctx.obj['data']

    for dat in data.iterator(kwargs['use']):
        if kwargs['tag']:
            out = Data(tag=kwargs['tag'],
                       label=kwargs['label'],
                       compgrid=ctx.obj['compgrid'],
                       meta=dat.meta)
            grid, values = diag.magsq(dat)
            out.push(grid, values)
            data.add(out)
        else:
            diag.magsq(dat, overwrite=True)
        #end
    #end

    vlog(ctx, 'Finishing magnitude squared computation')
コード例 #27
0
def euler(ctx, **kwargs):
    """Compute Euler (five-moment) primitive and some derived variables
    from fluid conserved variables.

    """
    vlog(ctx, 'Starting euler')
    pushChain(ctx, 'euler', **kwargs)
    data = ctx.obj['data']

    v = kwargs['variable_name']
    for dat in data.iterator(kwargs['use']):
        vlog(ctx, 'euler: Extracting {:s} from data set'.format(v))
        if v == "density":
            diag.getDensity(dat, overwrite=True)
        elif v == "xvel":
            diag.getVx(dat, overwrite=True)
        elif v == "yvel":
            diag.getVy(dat, overwrite=True)
        elif v == "zvel":
            diag.getVz(dat, overwrite=True)
        elif v == "vel":
            diag.getVi(dat, overwrite=True)
        elif v == "pressure":
            diag.getP(dat,
                      gasGamma=kwargs['gas_gamma'],
                      numMom=5,
                      overwrite=True)
        elif v == "ke":
            diag.getKE(dat,
                       gasGamma=kwargs['gas_gamma'],
                       numMom=5,
                       overwrite=True)
        elif v == "mach":
            diag.getMach(dat,
                         gasGamma=kwargs['gas_gamma'],
                         numMom=5,
                         overwrite=True)
        #end
    vlog(ctx, 'Finishing euler')
コード例 #28
0
ファイル: fft.py プロジェクト: ammarhakim/postgkyl
def fft(ctx, **kwargs):
    """Calculate the Fourier Transform or the power-spectral density of
    input data. Only works on 1D data at present.
    """
    vlog(ctx, 'Starting FFT')
    pushChain(ctx, 'fft', **kwargs)
    data = ctx.obj['data']

    for dat in data.iterator(kwargs['use']):
        if kwargs['tag']:
            out = Data(tag=kwargs['tag'],
                       label=kwargs['label'],
                       compgrid=ctx.obj['compgrid'],
                       meta=dat.meta)
            grid, values = diag.fft(dat, kwargs['psd'], kwargs['iso'])
            out.push(grid, values)
            data.add(out)
        else:
            diag.fft(dat, kwargs['psd'], kwargs['iso'], overwrite=True)
        #end
    #end

    vlog(ctx, 'Finishing FFT')
コード例 #29
0
def velocity(ctx, **kwargs):
    vlog(ctx, 'Starting velocity')
    pushChain(ctx, 'velocity', **kwargs)

    data = ctx.obj['data']  # shortcut

    for m0, m1 in zip(data.iterator(kwargs['density']),
                      data.iterator(kwargs['momentum'])):
        grid = m0.getGrid()
        valsM0 = m0.getValues()
        valsM1 = m1.getValues()

        out = Data(tag=kwargs['tag'],
                   compgrid=ctx.obj['compgrid'],
                   label=kwargs['label'],
                   meta=m0.meta)
        out.push(grid, valsM1 / valsM0)
        data.add(out)
    #end

    data.deactivateAll(tag=kwargs['density'])
    data.deactivateAll(tag=kwargs['momentum'])

    vlog(ctx, 'Finishing velocity')
コード例 #30
0
ファイル: select.py プロジェクト: ammarhakim/postgkyl
def select(ctx, **kwargs):
    r"""Subselect data from the active dataset(s). This command allows, for
    example, to choose a specific component of a multi-component
    dataset, select a index or coordinate range. Index ranges can also
    be specified using python slice notation (start:end:stride).

    """
    vlog(ctx, 'Starting select')
    pushChain(ctx, 'select', **kwargs)
    data = ctx.obj['data']
    
    for dat in data.iterator(kwargs['use']):
        if kwargs['tag']:
            out = Data(tag=kwargs['tag'],
                       label=kwargs['label'],
                       compgrid=ctx.obj['compgrid'],
                       meta=dat.meta)
            grid, values = postgkyl.data.select(dat,
                                                z0=kwargs['z0'],
                                                z1=kwargs['z1'],
                                                z2=kwargs['z2'],
                                                z3=kwargs['z3'],
                                                z4=kwargs['z4'],
                                                z5=kwargs['z5'],
                                                comp=kwargs['comp'])
            out.push(grid, values)
            data.add(out)
        else:
            postgkyl.data.select(dat, overwrite=True,
                                 z0=kwargs['z0'], z1=kwargs['z1'],
                                 z2=kwargs['z2'], z3=kwargs['z3'],
                                 z4=kwargs['z4'], z5=kwargs['z5'],
                                 comp=kwargs['comp'])
        #end
    #end
    vlog(ctx, 'Finishing select')