예제 #1
0
    def ConvergenceGMRes(params, outkeys, keyinteg):
        
        Inform.Display(params['nodes'], params['itera'], 'ConvergenceGMRes')
        bar = progressbar.ProgressBar(widgets=[progressbar.Bar(), ' (', progressbar.ETA(), ') '])
        outnames = {key: DataOut(   name = outkeys[key], method = 'gm', nd = params['nodes'], 
                                    it = params['itera'], pic = params['picit']) for key in outkeys}

        type      = 'lobatto'
        integrate = True
        bfield = False
        n = Stepsize()
        omdt = np.zeros(n.st)
        xpos = np.zeros([n.st, 3])
        xvel = np.zeros([n.st, 3])

        for u in range(n.st):
            
            step = params['tend']/n.step[u]
            p = Particle(params['nodes'], n.step[u])
            
            gmres = gmres_sdc(dt = step, nodes = params['nodes'], kiter = params['itera'], pic = params['picit'], 
            nsteps = int(n.step[u]), type=type, integrate=integrate)
            x_gm, v_gm, stats = gmres.run(bfield = bfield, outnames = outnames, params = params)
            xpos[u, :] = x_gm[:, int(n.step[u])]
            xvel[u, :] = v_gm[:, int(n.step[u])]
            omdt[u] = step*p.P.om_c
        
        Inform.storePositions(outnames['positions'].fullname, n.st, xpos, omdt)
        Inform.storeConverg(outnames['convergence'].fullname, n.st - 1, xpos, omdt)
예제 #2
0
    def EnergyGMRes(params, outkeys, keyinteg, numsteps):

        Inform.Display(params['nodes'], params['itera'], 'EnergyGMRes')
        lastpnt = 0
        bar = progressbar.ProgressBar(
            widgets=[progressbar.Bar(), ' (',
                     progressbar.ETA(), ') '])
        outnames = {
            key: DataOut(name=outkeys[key],
                         method='gm',
                         nd=params['nodes'],
                         it=params['itera'],
                         pic=params['picit'])
            for key in outkeys
        }

        type = 'lobatto'
        integrate = True
        bfield = False
        step = params['tend'] / numsteps
        p = Particle(params['nodes'], numsteps)

        gmres = gmres_sdc(dt=step,
                          nodes=params['nodes'],
                          kiter=params['itera'],
                          pic=params['picit'],
                          nsteps=numsteps,
                          type=type,
                          integrate=integrate)
        x_gm, v_gm, stats = gmres.run(bfield=bfield,
                                      outnames=outnames,
                                      params=params)

        Inform.storeEnergy(outnames['totalenergy'].fullname, numsteps,
                           stats['energy_errors'])
예제 #3
0
    def BrefGMRes(params, outkeys, keyinteg):
        
        Inform.Display(params['nodes'], params['itera'], 'BrefGMRes')
        bar = progressbar.ProgressBar(widgets=[progressbar.Bar(), ' (', progressbar.ETA(), ') '])
        outnames = {key: DataOut(   name = outkeys[key], method = 'gm', nd = params['nodes'], 
                                    it = params['itera'], pic = params['picit']) for key in outkeys}

        type      = 'lobatto'
        integrate = True
        bfield    = True
        n = Stepsize()

        for u in range(n.st):
            
            step = params['tend']/n.step[u]
            p = Particle(params['nodes'], n.step[u])
            
            gmres = gmres_sdc(dt = step, nodes = params['nodes'], kiter = params['itera'], pic = params['picit'], 
            nsteps = int(n.step[u]), type=type, integrate=integrate)
            x_gm, v_gm, stats = gmres.run(bfield = bfield, outnames = outnames, params = params)
            
        p.RHSeval(params, outnames['deviation'].fullname, 'BrefGMRes')