def __init__(self):
        file2read = netcdf.NetCDFFile("/scratch/general/am8e13/results36km/grid.nc",'r')
        bathy = file2read.variables['HFacC']
        self.bathy = bathy[:]*1
        Z = file2read.variables['Z']
        Z = Z[:]*1
        self.Z = Z
        lat = file2read.variables['XC']
        self.lat = lat[:]*1
        lon = file2read.variables['YC']
        self.lon = lon[:]*1
        file1 = '/hpcdata/scratch/am8e13/cs_36km_tutorial/run_input/theta.phc_210_192_50_12'
        self.T = komod.mitbin(file1,xdim=192,ydim=210,zdim=50,datatype='float32')
        self.T = np.squeeze(self.T,axis=0)
        self.T[self.bathy == 0] = np.nan
        file1 = '/hpcdata/scratch/am8e13/cs_36km_tutorial/run_input/salt.phc_210_192_50_12'
        self.S = komod.mitbin(file1,xdim=192,ydim=210,zdim=50,datatype='float32')
        self.S = np.squeeze(self.S,axis=0)
        self.S[self.bathy == 0] = np.nan
        self.rho = rho(self.S,self.T)
        self.rhop = rhop(self.S,self.T)
        self.depth = Z
        # calculate jmd 95 density                                                                                                                                       
        self.rho_jmd = np.zeros_like(self.rho)
        for z in range(len(self.Z)):
            self.rho_jmd[z,:,:] = densjmd95(self.S[z,:,:],self.T[z,:,:],-9.81*self.Z[z]*1025)

        self.title = 'PHC'
        self.dataDyn = {}
        temp_lv = np.nanmean(np.nanmean(self.T,axis=1),axis=1)
        self.dataDyn['theta_lv_mean'] = (np.ones((400,1))*temp_lv)
        temp_lv = np.nanmean(np.nanmean(self.S,axis=1),axis=1)
        self.dataDyn['salt_lv_mean'] = (np.ones((400,1))*temp_lv)
        self.dataDyn['rho_lv_mean'] = rhop(self.dataDyn['salt_lv_mean'],self.dataDyn['theta_lv_mean'])
def read_core(path):
    # This function is meant to read and store the forcing fields
    # Load adata files
    xdim = 320
    ydim = 160
    
    data_ave = {'v10m': np.zeros(366*4) , 'u10m' : np.zeros(366*4), 'rain': np.zeros(366), \
                'dlw' : np.zeros(366) , 'dsw' : np.zeros(366) , 'tmp2m_degC' : np.zeros(366*4) , \
                'spfh2m' : np.zeros(366*4), 'rain': np.zeros(12),}
    tdim_v = {'v10m': 366*4 , 'u10m' : 366*4, 'rain': 366, 'dlw' : 366 , 'dsw' : 366 , 'tmp2m_degC' : 366*4 , \
                'spfh2m' : 366*4, 'rain': 12,}
    
    time_core = {'v10m': 366*4 , 'u10m' : 366*4, 'rain': 366, 'dlw' : 366 , 'dsw' : 366 , 'tmp2m_degC' : 366*4 , \
                'spfh2m' : 366*4, 'rain': 12,}
    for var in data_ave: 
        name = path+'CORE2_'+str(var)
        data_read = komod.mitbin(name,xdim=192,ydim=94,tdim=tdim_v[var],datatype='float32')
        data_av = np.mean(np.mean(data_read,axis = 3),axis = 2).squeeze(axis = 1)
        
        if var == 'dlw' or var == 'dsw':
            data_ave[var] = -data_av
        else: 
            data_ave[var] = data_av
        
        time_core[var] = np.array(range(len(data_av)))/float(tdim_v[var])

    clim = {'data_ave' : data_ave}  
    print 'read CORE2'
    return clim,time_core
    def read_nemo(self,res):
        if res == '83':
            xdim = 3059
            ydim = 4322
            zdim = 75
            ycut = 2000
            self.title = 'Nemo 1/12'
        elif res == '25':
            xdim = 1021
            ydim = 1442
            zdim = 64
            ycut = 700
            self.title = 'Nemo 1/4'

        path = '/scratch/general/am8e13/NEMO_data/'
        mask_nemo = komod.mitbin(path+'NEMO'+res+'_mask',xdim=xdim,ydim=ydim,zdim=zdim,datatype='float32')
        lat_nemo = komod.mitbin(path+'NEMO'+res+'_lat',xdim=xdim,ydim=ydim,datatype='float32')
        lon_nemo = komod.mitbin(path+'NEMO'+res+'_lon',xdim=xdim,ydim=ydim,datatype='float32')
        depth_nemo = komod.mitbin(path+'NEMO'+res+'_depth',xdim=1,ydim=1,zdim=zdim,datatype='float32')
        T_nemo = komod.mitbin(path+'NEMO'+res+'_temp',xdim=xdim,ydim=ydim,zdim=zdim,datatype='float32')
        S_nemo = komod.mitbin(path+'NEMO'+res+'_salt',xdim=xdim,ydim=ydim,zdim=zdim,datatype='float32')
        ice_nemo = komod.mitbin(path+'NEMO'+res+'_ice',xdim=xdim,ydim=ydim,datatype='float32')

        T_nemo[mask_nemo == 0] = np.nan
        T_nemo = T_nemo.squeeze(axis=0)
        T_nemo = T_nemo[:,ycut:,:]

        S_nemo[mask_nemo == 0] = np.nan
        S_nemo = S_nemo.squeeze(axis=0)
        S_nemo = S_nemo[:,ycut:,:]

        ice_nemo[0,0,mask_nemo[0,0,:,:]==0] = np.nan
        ice_nemo = ice_nemo.squeeze(axis=0)
        ice_nemo = ice_nemo.squeeze(axis=0)
        ice_nemo = ice_nemo[ycut:,:]

        lat_nemo = lat_nemo.squeeze(axis=0)
        lat_nemo = lat_nemo.squeeze(axis=0)
        lat_nemo = np.array(lat_nemo[ycut:,:])
        lon_nemo = lon_nemo.squeeze(axis=0)
        lon_nemo = lon_nemo.squeeze(axis=0)
        lon_nemo = np.array(lon_nemo[ycut:,:])

        self.lat = lat_nemo
        self.lon = lon_nemo
        self.T = T_nemo
        self.S = S_nemo
        self.mask = mask_nemo
        self.ice = ice_nemo

        self.depth = np.zeros(zdim)
        for j in range(zdim):
            self.depth[j] = -depth_nemo[0,j,0,0]
    def __init__(self):
        file2read = netcdf.NetCDFFile("/scratch/general/am8e13/results36km/grid.nc",'r')
        bathy = file2read.variables['HFacC']
        self.bathy = bathy[:]*1
        self.res = 36
        Z = file2read.variables['Z']
        Z = Z[:]*1
        self.Z = Z
        lat = file2read.variables['YC']
        self.lat = lat[:]*1
        lon = file2read.variables['XC']
        self.lon = lon[:]*1
        file1 = '/scratch/general/am8e13/WOA/WOA05_THETA_210x192x50_arctic'
        self.T = komod.mitbin(file1,xdim=192,ydim=210,zdim=50,datatype='float32')
        self.T = np.squeeze(self.T,axis=0)
        self.T[self.bathy == 0] = np.nan
        file1 = '/scratch/general/am8e13/WOA/WOA05_SALT_210x192x50_arctic'
        self.S = komod.mitbin(file1,xdim=192,ydim=210,zdim=50,datatype='float32')
        self.S = np.squeeze(self.S,axis=0)
        self.S[self.bathy == 0] = np.nan
        self.rho = rho(self.S,self.T)
        self.rhop = rhop(self.S,self.T)
        self.depth = Z
        # calculate jmd 95 density                                                                                                                
        
        # 18 km files                                                                                                                             
        file1 = '/scratch/general/am8e13/WOA/WOA05_THETA_420x384x50_arctic'
        self.T18 = komod.mitbin(file1,xdim=384,ydim=420,zdim=50,datatype='float32')
        self.T18 = np.squeeze(self.T18,axis=0)
        file1 = '/scratch/general/am8e13/WOA/WOA05_SALT_420x384x50_arctic'
        self.S18 = komod.mitbin(file1,xdim=384,ydim=420,zdim=50,datatype='float32')
        self.S18 = np.squeeze(self.S18,axis=0)

        file2read = netcdf.NetCDFFile("/scratch/general/am8e13/results18km/grid.nc",'r')
        bathy = file2read.variables['HFacC']
        self.bathy = bathy[:]*1
        self.T18[self.bathy == 0] = np.nan
        self.S18[self.bathy == 0] = np.nan

        self.rho18 = rho(self.S18,self.T18)
        self.rhop18 = rhop(self.S18,self.T18)

        # 9 km files                                                                                                                              
        file1 = '/scratch/general/am8e13/WOA/WOA05_THETA_840x768x50_arctic'
        self.T9 = komod.mitbin(file1,xdim=768,ydim=840,zdim=50,datatype='float32')
        self.T9 = np.squeeze(self.T9,axis=0)
        file1 = '/scratch/general/am8e13/WOA/WOA05_SALT_840x768x50_arctic'
        self.S9 = komod.mitbin(file1,xdim=768,ydim=840,zdim=50,datatype='float32')
        self.S9 = np.squeeze(self.S9,axis=0)

        file2read = netcdf.NetCDFFile("/scratch/general/am8e13/results9km/grid.nc",'r')
        bathy = file2read.variables['HFacC']
        self.bathy = bathy[:]*1
        self.T9[self.bathy == 0] = np.nan
        self.S9[self.bathy == 0] = np.nan

        self.rho9 = rho(self.S9,self.T9)
        self.rhop9 = rhop(self.S9,self.T9)


        self.rho_jmd = np.zeros_like(self.rho)
        for z in range(len(self.Z)):
            self.rho_jmd[z,:,:] = densjmd95(self.S[z,:,:],self.T[z,:,:],-9.81*self.Z[z]*1025)

        self.title = 'Woa'
        self.dataDyn = {}
        temp_lv = np.nanmean(np.nanmean(self.T,axis=1),axis=1)
        self.dataDyn['theta_lv_mean'] = (np.ones((400,1))*temp_lv)
        temp_lv = np.nanmean(np.nanmean(self.S,axis=1),axis=1)
        self.dataDyn['salt_lv_mean'] = (np.ones((400,1))*temp_lv)
        self.dataDyn['rho_lv_mean'] = rhop(self.dataDyn['salt_lv_mean'],self.dataDyn['theta_lv_mean'])
def read_forcing(path,dataset,init_year,tot_years):
    # This function is meant to read and store the forcing fields
    # Load adata files
    xdim = 320
    ydim = 160
    tdim = [365*4,366*4]

    data = {'v10m': np.zeros(360*tot_years) , 'u10m' : np.zeros(360*tot_years), \
            'rain': np.zeros(360*tot_years) , 'dlw' : np.zeros(360*tot_years) , \
            'dsw' : np.zeros(360*tot_years) , 'tmp2m_degC' : np.zeros(360*tot_years) , \
            'spfh2m' : np.zeros(360*tot_years), 'rain': np.zeros(360*tot_years)}

    data_all = {'v10m': np.zeros(360*tot_years*4) , 'u10m' : np.zeros(360*tot_years*4), \
                'rain': np.zeros(360*tot_years*4) , 'dlw' : np.zeros(360*tot_years*4) , \
                'dsw' : np.zeros(360*tot_years*4) , 'tmp2m_degC' : np.zeros(360*tot_years*4) , \
                'spfh2m' : np.zeros(360*tot_years*4), 'rain': np.zeros(360*tot_years*4)}


    data_ave = {'v10m': np.zeros(360) , 'u10m' : np.zeros(360), 'rain': np.zeros(360), \
                'dlw' : np.zeros(360) , 'dsw' : np.zeros(360) , 'tmp2m_degC' : np.zeros(360) , \
                'spfh2m' : np.zeros(360), 'rain': np.zeros(360*33),}

    data_ave_all = {'v10m': np.zeros(360*4) , 'u10m' : np.zeros(360*4), 'rain': np.zeros(360*4), \
                'dlw' : np.zeros(360*4) , 'dsw' : np.zeros(360*4) , 'tmp2m_degC' : np.zeros(360*4) , \
                'spfh2m' : np.zeros(360*4), 'rain': np.zeros(360*4),}

    for var in data:
        data_av = []
        #print "Now reading:"+str(var)
        for year in range(tot_years):
            if calendar.isleap(init_year+year):
                tdim_ly = 1
                n_pop = 6
            else:
                tdim_ly = 0
                n_pop = 5

            name = path+dataset+str(var)+'_'+str(init_year+year)
            data_read = komod.mitbin(name,xdim=xdim,ydim=ydim,zdim=1,tdim=tdim[tdim_ly],datatype='float32')
            data_av_temp = np.mean(np.mean(data_read,axis = 3),axis = 2).squeeze(axis = 1)        
            to_pop = random.sample(range(len(data_av_temp)), 4*n_pop)
            data_av_temp = np.delete(data_av_temp,to_pop,0) 
            data_all[var]=data_av_temp
            # Daily average for plotting purpose
            data_av_temp_daily = np.zeros(360)
            for day in range(360):
                data_av_temp_daily[day] = np.mean(data_av_temp[day*4 : day*4 +4])
                
            data_av = np.concatenate([data_av,data_av_temp_daily])
            data[var] = data_av

        name = path+dataset+str(var)+'_average'
        data_read = komod.mitbin(name,xdim=xdim,ydim=ydim,zdim=1,tdim=360*4,datatype='float32')
        data_climy_av = np.mean(np.mean(data_read,axis = 3),axis = 2).squeeze(axis = 1)
        data_ave_all[var]=data_climy_av  
        data_climy_av_daily = np.zeros(360)
        for day in range(360):
            data_climy_av_daily[day] = np.mean(data_climy_av[day*4 : day*4 +4])

        data_climy_33_years = []
        for year in range(tot_years):
            data_climy_33_years = np.concatenate([data_climy_33_years, data_climy_av_daily])

        data_ave[var] = data_climy_33_years
        
    clim = {'data' : data , 'data_all' : data_all , 'data_ave' : data_ave , 'data_ave_all' : data_ave_all}
    
    print 'read '+dataset
        
    return clim