Esempio n. 1
0
def save(path='/home/cryosphere/BOUT/examples/Q3/data_short'): 
    print 'in post_bout.save'
    boutpath = path

    print path
    print sys.path
  
    meta = metadata(path=path)
   
    print 'ok got meta'
    output = OrderedDict()
    data = OrderedDict()

    con = sql.connect('test.db')
   
    all_modes = []
    print meta['evolved']['v'] #evolved fields for the given run

    for i,active in enumerate(meta['evolved']['v']): #loop over the fields
        print path, active
        data[active] = boutdata.collect(active,path=path)
        modes,ave = basic_info(data[active],meta)
Esempio n. 2
0
import os


path=sys.argv[1]
key=sys.argv[2]


cache='/scratch/01523/meyerson/'+key

if os.path.exists(cache):
    os.rmdir(cache)
    
os.makedirs(cache)

print path
meta = metadata(path=path)

from boutdata import collect
from boututils import savemovie
gamma = collect("Gammax",yind=[5,5],path=path)
ni = collect("Ni",yind=[5,5],path=path)
rho = collect("rho",yind=[5,5],path=path)

#one movie per cpu
print ni.shape, gamma.shape
savemovie(gamma[:,:,0,:],ni[:,:,0,:],moviename='movie_'+key+'.avi',
          meta=meta,cache=cache+"/",overcontour=True)

savemovie(rho[:,:,0,:],ni[:,:,0,:],moviename='movie_phi_ni'+key+'.avi',
          meta=meta,cache=cache+"/",overcontour=True)
Esempio n. 3
0
def save(path='/home/cryosphere/BOUT/examples/Q3/data_short',
         savemovie=False,IConly=0,transform=False,fast = False,
         debug = False): 
    #lets collect the data
    print 'path :', path
    print 'in post_bout/post_bout.save'
    boutpath = path

    print path
    #print sys.path
 
    
    meta = metadata(path=path)
    
    #ICmodes = 
    print 'ok got meta'
    #return meta
    output = OrderedDict()
    data = OrderedDict()
    data_r = OrderedDict()

   
    all_modes = []
    print meta['evolved']['v']

    for i,active in enumerate(meta['evolved']['v']): #loop over the fields
        print path, active
        data[active] = collect(active,path=path)
        if savemovie:
            movie(data,meta)
        if transform:
            #if you take the time to rotate the data go ahead and save it
            cpydata = data[active]
            data_r[active] = rotate(cpydata,meta) # keep it simple for now
            
        if debug:
            return data[active],data_r[active]

    minIC = np.array([np.max(data[x][0,:,:,:]) for x in meta['evolved']['v']])
    minIC = min(minIC[np.array(meta['IC']).nonzero()])  
    ICmodes =[]

    if(meta['ys_opt']['v']==2 and  meta['zs_opt']['v']==2): #if BOUT.inp IC indicates a single mode
        ICmodes.append([meta['ys_mode']['v'],meta['zs_mode']['v']])
    elif (meta['ys_opt']['v']==3 and meta['zs_opt']['v']==2): 
        [ICmodes.append([p+1,meta['zs_mode']['v']]) for p in range(5)]
    elif(meta['ys_opt']['v']==2 and meta['zs_opt']['v']==3):
        [ICmodes.append([meta['ys_mode']['v'],p+1]) for p in range(8)]
    elif(meta['ys_opt']['v']==3 and meta['zs_opt']['v']==3):
        [ICmodes.append([p+1,q+1]) for p in range(7) for q in range(8)]          
    elif(meta['ys_opt']['v']==0 and meta['zs_opt']['v']==3):
        [ICmodes.append([0,p+1]) for p in range(4)]   
  
    #some attemps to automate peak finding
    for i,active in enumerate(meta['evolved']['v']):
        modes_db,ave = basic_info(data[active],meta) #basic_info does not  correct for incomplete runs
       #print modes[0]['gamma']
        output[active] = {'ave':ave}
        #for x in output[active]['modes']: #keep track of relevant harmonics
        print 'debug:', len(modes_db),type(modes_db),len(modes_db)
        for x in modes_db: 
            print x['mn'],all_modes
            if x['mn'] not in  all_modes: 
                #don't append if the mode is weak . .
                ##minIC = np.array(meta['IC'])
                #minIC = min(minIC[minIC.nonzero()])
                print 'minIC: ',minIC, x['amp'][-10:,:].max()
                #if x['amp'][-10:,:].max()>=(minIC/1.0):
                all_modes.append(x['mn'])

    if IConly or len(all_modes)==0:
        all_modes = ICmodes
    else:
        z = []
        [z.append(x) for x in all_modes]
        [z.append(x) for x in ICmodes]
        all_modes = z
        print 'len(all_modes):',len(all_modes)
        
        
    #rebuild with all the relevant modes
    output = OrderedDict()

    output['meta'] = meta
    output['ave'] = {}
    allmodes_db =[]


    
    for i,active in enumerate(meta['evolved']['v']): 
        print 'once again', active
        print all_modes
        print meta['ys_opt']['v'], meta['zs_opt']['v']
        modes_db,ave = basic_info(data[active],meta,
                                  user_peak = all_modes)   

        if transform:
            print all_modes
            modes_db_r,ave_r = basic_info(data_r[active],meta,
                                      user_peak = all_modes) #for now data_r must maintain same shape as data
        
        # if debug:
        #     return modes_db_r,modes_db
        #print modes_db_r.__class__,len(modes_db_r)
        # if transform:
        #     for j,x in enumerate(modes_db_r):
        #         x['amp_r'] = modes_db_r[j]['amp']
        #         x['phase_r'] = modes_db_r[j]['phase']
        #         x['k_r']= modes_db_r[j]['k']
        #         x['freq_r']= modes_db_r[j]['freq']
        #         x['gamma_r'] =modes_db_r[j]['gamma']
        #     allmodes_db.append(modes_db_r)
        for j,x in enumerate(modes_db):
            print 'j: ',j
            x['field'] = active
            x['dz']=meta['dz']
            x['IC']=meta['IC']
            x['L']=meta['L']
            x['Rxy']= meta['Rxy']['v']
            x['nfields'] = len(meta['evolved']['v'])
            x['meta'] = meta
            x['nx']= meta['nx']
            x['ny'] = meta['ny']
            x['nz'] = meta['MZ']['v']-1
            x['dt'] = meta['dt']['v']
            x['Rxynorm'] = 100*x['Rxy']/meta['rho_s']['v']
            x['rho_s'] = meta['rho_s']['v']
            #for now if there was rotation just loop a few keys
            x['transform'] = transform
            if transform:
                try:
                    x['amp_r'] = modes_db_r[j]['amp']
                    x['phase_r'] = modes_db_r[j]['phase']
                    x['k_r']= modes_db_r[j]['k']
                    x['freq_r']= modes_db_r[j]['freq']
                    x['gamma_r'] =modes_db_r[j]['gamma']
                except:
                    print "FAIL TO ADD TRANSFORMED VALUES"
                
            ntt = x['nt'] #actual number of steps
            nt = meta['NOUT']['v'] #requested number of steps
            print j,' out of ',len(modes_db)
            print nt,ntt
    #for incomplete runs    
            if nt > ntt: #if the run did not finish then rescale to keep data dims the same
                
                xx = np.array(range(0,ntt)) #dep var to interp FROM
                xxnew = np.linspace(0,ntt-1,nt+1) #new dep var grid, nt points up to ntt-1
                
                print ntt/nt,x['dt']*float(ntt/nt),nt,ntt
                x['dt'] = x['dt']*float(ntt/nt) #smaller dt if we are interp tp more points . . 
                
                print x['dt']
                x['nt'] = nt
                amp = x['amp'] #2d array ntt x nx
                phase = x['phase']
                ampnew=[] #will be a nx x nt 2d array
                phasenew =[]
                for mode_r in np.transpose(amp):
                    f = interp1d(xx,mode_r)
                    ampnew.append(f(xxnew))
                
                for mode_r in np.transpose(phase):
                    f = interp1d(xx,mode_r)
                    phasenew.append(f(xxnew))
                 
                x['amp'] = np.transpose(ampnew)
                x['phase'] = np.transpose(phasenew)
                print x['phase'].shape

        output['ave'][active] = {'ave':ave}
        allmodes_db.append(modes_db)
 

    allmodes_db = sum(allmodes_db,[])

    filename_db = path+'/post_bout.db'
    
    
    pickle_db = open(filename_db,'wb')

    pickle.dump(allmodes_db,pickle_db)

    pickle_db.close()

    
    # let pickle the results
    # filename = path+'/post_bout.jsn'
    # json_out = open(filename,'wb')
    # pickle.dump(output,json_out)
    # json_out.close()

    print filename_db
Esempio n. 4
0
def read(path='.',filename='post_bout.pkl',trysave=True,
         gamma_updt=False):
    print 'in post_bout.read()'

    filepath = path+'/'+filename
    filepath_db = path+'/post_bout.db'
    datafile = path+'/BOUT.dmp.0.nc'


    print 'is file present: ', os.path.isfile(filepath_db)
    if trysave and not(os.path.isfile
                       (filepath_db)) and os.path.isfile(datafile):
        save(path=path)
  
        
        
    if os.path.isfile(filepath_db):
        #pkl_file = open(filepath, 'rb')
        pkl_file_db = open(filepath_db, 'rb')
        #output = pickle.load(pkl_file)
        output_db = pickle.load(pkl_file_db)
        
        meta = metadata(path=path)
        #update the meta data incase read_inp was altered . . .
        for i,x in enumerate(output_db):
            x['dz']=meta['dz'] 
            x['IC']=meta['IC']
            x['L']=meta['L']
            x['Rxy']= meta['Rxy']['v']
            x['nfields'] = len(meta['evolved']['v'])
            x['meta'] = meta
            x['nx'] = meta['nx']
            x['ny'] = meta['ny']
            x['nz'] = meta['MZ']['v']-1
            x['path'] = path
            #print x['mn']
            x['MN'] = list([1,2])
            x['MN'][0] = x['mn'][0]
            x['MN'][1] = x['mn'][1]/x['dz']
            x['modeid'] = [x['dz'],x['modeid'],x['mn'][1]]
           # print x['mn']
            
            #x['MN'] = x['mn']
            #x['MN'][1] = x['MN'][1]/x['dz']
            
            x['Rxynorm'] = 100*x['Rxy']/meta['rho_s']['v']
            if 'dt' not in x:
                x['dt'] = meta['dt']['v'] #this one gets modified no read . 
            if gamma_updt: #experimental, recalculates gamma from amp, but for a while amp was 
                #wrong for incomplete runs s0 . . . dont' run for now
                lnamp = np.log(x['amp']) #nt x nx
                t = x['dt']*np.array(range(int(x['nt']))) 
                r = np.polyfit(t[x['nt']/2:],lnamp[x['nt']/2:,2:-2],1,full=True)
                gamma_est = r[0][0] #nx
                f0 = np.exp(r[0][1]) #nx
                res = r[1]
                pad =[0,0]       
                gamma_est = np.concatenate([pad,gamma_est,pad])
                f0 = np.concatenate([pad,f0,pad])
                res = np.concatenate([pad,res,pad])
               
                #sig = res/np.sqrt((x['nt']-2))
                sig = np.sqrt(res/(x['nt']-2))
                #sig0 = sig*np.sqrt(1/(x['nt'])+ ) # who cares
                sig1 = sig*np.sqrt(1.0/(x['nt'] * t.var()))
                res = 1 - res/(x['nt']*lnamp.var(0)) #nx 
                res[0:2] = 0
                res[-2:] = 0

                x['gamma'] = [gamma_est,f0,sig1,res]
    
        pkl_file_db.close()
        return output_db
    else:
        return 0