Commit 27095072 authored by cianciosa's avatar cianciosa
Browse files

Add more post processing. Change convergence to check for stalled minimization.

parent 0e2ff9c2
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -99,7 +99,7 @@ void trace_ray(const size_t num_times,
                    kz->set(j, static_cast<T> (norm_dist4(engine)));
                }
            }
            kx->set(static_cast<T> (-700));
            kx->set(static_cast<T> (-700.0));

            auto eq = equilibrium::make_efit<T, SAFE_MATH> (NC_FILE);
            //auto eq = equilibrium::make_slab_density<T, SAFE_MATH> ();
+3 −0
Original line number Diff line number Diff line
@@ -123,8 +123,11 @@ namespace workflow {
        virtual void run() {
            size_t iterations = 0;
            T max_residule = max_kernel();
            T last_max = std::numeric_limits<T>::max();
            while (std::abs(max_residule) > std::abs(tolarance) &&
                   std::abs(last_max - max_residule) > 0.0      &&
                   iterations++ < max_iterations) {
                last_max = max_residule;
                max_residule = max_kernel();
            }

+34 −3
Original line number Diff line number Diff line
@@ -2,10 +2,41 @@ import netCDF4
import argparse
import numpy

#-------------------------------------------------------------------------------
#  Clean up k imaginary and calculate the power absorbed.
def main(**args):
    with netCDF4.Dataset('{}/bins.nc'.format(args['directory']), 'w') as bin_ref:
        nr = bin_ref.createDimension('nr', 64)
        nz = bin_ref.createDimension('nz', 128)

        bins = bin_ref.createVariable('bins', 'f8', ('nr','nz'))
        bins[:,:] = 0

        for i in range(0, 12):
            with netCDF4.Dataset('{}/result{}.nc'.format(args['directory'], i), 'r+') as result:
                result.variables['kamp'][:] = numpy.where(numpy.isnan(result.variables['kamp'][:]), 0.0, result.variables['kamp'][:])
                result.variables['kamp'][:-1] = numpy.where(numpy.abs(result.variables['kamp'][1:] - result.variables['kamp'][:-1]) > 2.0, 0.0, result.variables['kamp'][:-1])
                kampim = result.variables['kamp'][:,:,1]

                x = result.variables['x'][:,:,0]
                y = result.variables['y'][:,:,0]
                z = result.variables['z'][:,:,0]

                kdl = kampim[1:,:]*numpy.sqrt(numpy.power(x[1:] - x[:-1], 2) + numpy.power(y[1:] - y[:-1], 2) + numpy.power(z[1:] - z[:-1], 2));
                power = numpy.append(numpy.ones((1, len(x[1]))), numpy.exp(-2*numpy.cumsum(kdl, axis=0)), axis=0)
                dpower = numpy.abs(power[1:,:] - power[:-1,:])

                r = numpy.sqrt(x*x + y*y)
                rbin = numpy.linspace(0.84, 2.5, 65)
                zbin = numpy.linspace(-1.6, 1.6, 129)
                for j in range(64):
                    print(i, j)
                    for k in range(128) :
                        bin_power = numpy.sum(numpy.extract(numpy.logical_and(numpy.greater(r[1:], rbin[j]),
                                                            numpy.logical_and(numpy.less(r[1:], rbin[j + 1]),
                                                                              numpy.logical_and(numpy.greater(z[1:], zbin[k]),
                                                                                                numpy.less(z[1:], zbin[k + 1])))), dpower), axis=0)
                        bins[j, k] += numpy.where(numpy.isnan(bin_power), 0.0, bin_power)

if __name__ == '__main__':
    command_line_parser = argparse.ArgumentParser()