コード例 #1
0
ファイル: post_bout2.py プロジェクト: meyerson/BOUT
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)
コード例 #2
0
ファイル: post_bout.py プロジェクト: meyerson/BOUT
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