Ejemplo n.º 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')
Ejemplo n.º 2
0
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')
Ejemplo n.º 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)
Ejemplo n.º 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)
Ejemplo n.º 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)
Ejemplo n.º 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)
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
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')
Ejemplo n.º 9
0
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')
Ejemplo n.º 10
0
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')
Ejemplo n.º 11
0
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')
Ejemplo n.º 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')
Ejemplo n.º 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')
Ejemplo n.º 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')
Ejemplo n.º 15
0
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')
Ejemplo n.º 16
0
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')
Ejemplo n.º 17
0
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')
Ejemplo n.º 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')
Ejemplo n.º 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')
Ejemplo n.º 20
0
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')
Ejemplo n.º 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)
Ejemplo n.º 22
0
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')
Ejemplo n.º 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')
Ejemplo n.º 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')
Ejemplo n.º 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')
Ejemplo n.º 26
0
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')
Ejemplo n.º 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')
Ejemplo n.º 28
0
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')
Ejemplo n.º 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')
Ejemplo n.º 30
0
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')