SSSnemo_JAS = nmp.zeros((nj,ni)) SSSnemo_JAS[:,:] = nmp.mean(SSSnemo[6:9,:,:], axis=0) # Can release some memory! del Snemo, Sobs, SSSnemo if l_do_monthly_3d or l_3df_are_annual: jk100 = bt.find_index_from_value(100. , vdepth) ; print 'jk100 = ', jk100, '=> ', vdepth[jk100] jk1000 = bt.find_index_from_value(1000. , vdepth) ; print 'jk1000 = ', jk1000, '=> ', vdepth[jk1000] jk3000 = bt.find_index_from_value(3000. , vdepth) ; print 'jk3000 = ', jk3000, '=> ', vdepth[jk3000] tdj = [ jk100, jk1000, jk3000 ] tdd_true = [ str(int(round(vdepth[jk100])))+'m' , str(int(round(vdepth[jk1000])))+'m' , str(int(round(vdepth[jk3000])))+'m' ] tdd = [ '100m', '1000m', '3000m' ] print '\n', tdd_true[:], '\n' # Creating 1D long. and lat.: vlon = nmp.zeros(ni) ; vlon[:] = xlon[0,:] ji_lat0 = nmp.argmax(xlat[nj-1,:]) vlat = nmp.zeros(nj) ; vlat[:] = xlat[:,ji_lat0]
#JAS: Tnemo_JAS = nmp.zeros((nk, nj, ni)) Tnemo_JAS[:, :, :] = nmp.mean(Tnemo[6:9, :, :, :], axis=0) Snemo_JAS = nmp.zeros((nk, nj, ni)) Snemo_JAS[:, :, :] = nmp.mean(Snemo[6:9, :, :, :], axis=0) SSTnemo_JAS = nmp.zeros((nj, ni)) SSTnemo_JAS[:, :] = nmp.mean(SSTnemo[6:9, :, :], axis=0) Tclim_JAS = nmp.zeros((nk, nj, ni)) Tclim_JAS[:, :, :] = nmp.mean(Tclim[6:9, :, :, :], axis=0) Sclim_JAS = nmp.zeros((nk, nj, ni)) Sclim_JAS[:, :, :] = nmp.mean(Sclim[6:9, :, :, :], axis=0) SSTclim_JAS = nmp.zeros((nj, ni)) SSTclim_JAS[:, :] = nmp.mean(SSTclim[6:9, :, :], axis=0) jk100 = bt.find_index_from_value(100., vdepth) print 'jk100 = ', jk100, '=> ', vdepth[jk100] jk1000 = bt.find_index_from_value(1000., vdepth) print 'jk1000 = ', jk1000, '=> ', vdepth[jk1000] jk3000 = bt.find_index_from_value(3000., vdepth) print 'jk3000 = ', jk3000, '=> ', vdepth[jk3000] tdj = [jk100, jk1000, jk3000] tdd_true = [ str(int(round(vdepth[jk100]))) + 'm', str(int(round(vdepth[jk1000]))) + 'm', str(int(round(vdepth[jk3000]))) + 'm' ] tdd = ['100m', '1000m', '3000m']
# Getting NEMO mean monthly climatology of MLD coverage: cf_nemo_moc = vdic['DIAG_D']+'/clim/aclim_'+CONFRUN+'_'+cy1+'-'+cy2+'_MOC.nc4' bt.chck4f(cf_nemo_moc) id_nemo = Dataset(cf_nemo_moc) vz = id_nemo.variables['depthw'][:] amoc = id_nemo.variables[cv_moc][0,:,:] id_nemo.close() [ nk, nj ] = amoc.shape ; print ' Shape of AMOC :', nk, nj, '\n' # Building a latitude vector: vlat = nmp.zeros(nj) ji_lat_mid_atlantic = bt.find_index_from_value( -28., xlon[0,:] ) vlat[:] = xlat[:,ji_lat_mid_atlantic] # Building the vertical mask: msk_vert = nmp.zeros((nk,nj)) msk_vert[:,:] = nmp.sum(Xmask[:,:,:],axis=2) idxm = nmp.where(msk_vert[:,:] > 0.); msk_vert[idxm] = 1. bp.plot("amoc_lat_depth")(vlat[:], -vz[:], amoc[:,:], msk_vert[:,:], -3., 20., 1., \ cfig_type=fig_type, lkcont=True, cpal='amoc', ymin=0., ymax=70., cfignm='AMOC_annual_'+CONFRUN, cbunit='Sv', cxunit=r'Latitude ($^{\circ}$N)', zmin = 5000., zmax = 0., l_zlog=False, czunit='Depth (m)', ctitle='AMOC, '+CONFRUN+' ('+cy1+'-'+cy2+')',
id_mask = Dataset(cf_mask) mask = id_mask.variables['tmask'][0, :, :, :] xlon = id_mask.variables['nav_lon'][:, :] xlat = id_mask.variables['nav_lat'][:, :] id_mask.close() [nk, nj, ni] = nmp.shape(mask) # Getting basin mask: cf_basin_mask = BM_FILE bt.chck4f(cf_basin_mask) id_bm = Dataset(cf_basin_mask) Xmask_atl = id_bm.variables['tmaskatl'][:, :, :] id_bm.close() ji_lat_mid_atlantic = bt.find_index_from_value(-28., xlon[0, :]) # Creating 1D long. and lat.: vlon = nmp.zeros(ni) vlon.shape = [ni] vlon[:] = xlon[0, :] vlat = nmp.zeros(nj) vlat.shape = [nj] vlat[:] = xlat[:, ji_lat_mid_atlantic] # Getting first and last year of NEMO clim from "last_clim" files: ccf1 = DIAG_DIR + '/' + CONFRUN1 + '/last_clim' bt.chck4f(ccf1) ccf2 = DIAG_DIR + '/' + CONFRUN2 + '/last_clim' bt.chck4f(ccf2) f = open(ccf1, 'r')
xlon = id_mask.variables['nav_lon'][:,:] ; xlat = id_mask.variables['nav_lat'][:,:] id_mask.close() [ nk, nj, ni ] = nmp.shape(mask) # Getting basin mask: cf_basin_mask = BM_FILE bt.chck4f(cf_basin_mask) id_bm = Dataset(cf_basin_mask) Xmask_atl = id_bm.variables['tmaskatl'][:,:,:] id_bm.close() ji_lat_mid_atlantic = bt.find_index_from_value( -28., xlon[0,:] ) # Creating 1D long. and lat.: vlon = nmp.zeros(ni) ; vlon.shape = [ ni ] ; vlon[:] = xlon[0,:] vlat = nmp.zeros(nj) ; vlat.shape = [ nj ] ; vlat[:] = xlat[:,ji_lat_mid_atlantic] # Getting first and last year of NEMO clim from "last_clim" files: ccf1 = DIAG_DIR+'/'+CONFRUN1+'/last_clim' ; bt.chck4f(ccf1) ccf2 = DIAG_DIR+'/'+CONFRUN2+'/last_clim' ; bt.chck4f(ccf2) f = open(ccf1, 'r'); cread_lines = f.readlines() ; f.close() cy1_1, cy2_1 = cread_lines[0].split("-") ; cy2_1, ca = cy2_1.split("\n") f = open(ccf2, 'r'); cread_lines = f.readlines() ; f.close() cy1_2, cy2_2 = cread_lines[0].split("-") ; cy2_2, ca = cy2_2.split("\n") #print cy1_1, cy2_1, cy1_2, cy2_2
Tnemo_JAS[:,:,:] = nmp.mean(Tnemo[6:9,:,:,:], axis=0) Snemo_JAS = nmp.zeros(nk*nj*ni) ; Snemo_JAS.shape = [nk,nj,ni] Snemo_JAS[:,:,:] = nmp.mean(Snemo[6:9,:,:,:], axis=0) SSTnemo_JAS = nmp.zeros(nj*ni) ; SSTnemo_JAS.shape = [nj,ni] SSTnemo_JAS[:,:] = nmp.mean(SSTnemo[6:9,:,:], axis=0) Tclim_JAS = nmp.zeros(nk*nj*ni) ; Tclim_JAS.shape = [nk,nj,ni] Tclim_JAS[:,:,:] = nmp.mean(Tclim[6:9,:,:,:], axis=0) Sclim_JAS = nmp.zeros(nk*nj*ni) ; Sclim_JAS.shape = [nk,nj,ni] Sclim_JAS[:,:,:] = nmp.mean(Sclim[6:9,:,:,:], axis=0) SSTclim_JAS = nmp.zeros(nj*ni) ; SSTclim_JAS.shape = [nj,ni] SSTclim_JAS[:,:] = nmp.mean(SSTclim[6:9,:,:], axis=0) jk100 = bt.find_index_from_value(100. , vdepth) ; print 'jk100 = ', jk100, '=> ', vdepth[jk100] jk1000 = bt.find_index_from_value(1000. , vdepth) ; print 'jk1000 = ', jk1000, '=> ', vdepth[jk1000] jk3000 = bt.find_index_from_value(3000. , vdepth) ; print 'jk3000 = ', jk3000, '=> ', vdepth[jk3000] tdj = [ jk100, jk1000, jk3000 ] tdd_true = [ str(int(round(vdepth[jk100])))+'m' , str(int(round(vdepth[jk1000])))+'m' , str(int(round(vdepth[jk3000])))+'m' ] tdd = [ '100m', '1000m', '3000m' ] print '\n', tdd_true[:], '\n' if 'ORCA2' in ORCA: ji_lat0 = 132
if vdic['ANNUAL_3D'] == '1y': cf_T_in = replace(cf_T_in, vdic['TSTAMP'], vdic['ANNUAL_3D']) print ' ==> USING '+vdic['ANNUAL_3D']+' file !!! =>', cf_T_in print ' ==> variable '+cvar # DATA: id_in = Dataset(cf_T_in) vdepth = id_in.variables['olevel'][:] Xd_m = id_in.variables[cvar][:,:,:,:] id_in.close() print ' ==> variable '+cvar+' read !' j100m = bt.find_index_from_value(100. , vdepth) ; print 'j100m = ', j100m, '=> ', vdepth[j100m] j1000m = bt.find_index_from_value(1000. , vdepth) ; print 'j1000m = ', j1000m, '=> ', vdepth[j1000m] ( nt, nk0, nj0, ni0 ) = Xd_m.shape if nt != 12 and nt != 1 : print 'ERROR: '+cnexec+' => only treating monthly or annual data so far...'; sys.exit(0) if ( nk0, nj0, ni0 ) != ( nk, nj, ni ): print 'ERROR: '+cnexec+' => Field and metrics do not agree in size!' print ' ==> nk0, nj0, ni0 / nk, nj, ni = ', nk0, nj0, ni0, '/', nk, nj, ni sys.exit(0) vtime = nmp.zeros(nt) for jt in range(nt): vtime[jt] = float(jyear) + (float(jt)+0.5)*1./float(nt) print ' * Calendar: ', vtime[:]
for ib in range(nb_boxes): cbox = cname_b[ib] ; print ' *** treating '+cvar+' for '+cbox+', ('+bo.clgnm_mld_boxes[ib]+')' i1 = 0 ; j1 = 0 ; i2 = ni-1 ; j2 = nj-1 rx1 = bo.r_lon_p1_mld[ib] ; rx2 = bo.r_lon_p2_mld[ib] ; ry1 = bo.r_lat_p1_mld[ib] ; ry2 = bo.r_lat_p2_mld[ib] # Need to itterate because ORCA grid disytorded in the North... vold = [ -999, -999, -999, -999 ] ; itt = 0 while [ i1, i2, j1, j2 ] != vold and itt < 10 : itt = itt+1 #print ' .... itt =', itt vold = [ i1, i2, j1, j2 ] #print 'seraching for rx1, rx2, ry1, ry2 = ', rx1, rx2, ry1, ry2 if rx1 > -900.: i1 = bt.find_index_from_value( rx1, rlon[j1,:] ) if rx2 > -900.: i2 = bt.find_index_from_value( rx2, rlon[j2,:] ) if ry1 > -900.: j1 = bt.find_index_from_value( ry1, rlat[:,i1] ) if ry2 > -900.: j2 = bt.find_index_from_value( ry2, rlat[:,i2] ) #print ' => i1, i2, j1, j2 =>', i1, i2, j1, j2, '\n' mask2d[:,:] = 0. mask2d[j1:j2,i1:i2] = mask[0,0,j1:j2,i1:i2] Vts = bo.mean_2d(MLD_m, mask2d[:,:], Xe1t[0,:,:], Xe2t[0,:,:]) # NETCDF: cf_out = vdic['DIAG_D']+'/mean_'+cvar+'_'+CONFRUN+'_'+cbox+'.nc' ; cv1 = cvar
if vdic['ANNUAL_3D'] == '1y': cf_T_in = replace(cf_T_in, vdic['TSTAMP'], vdic['ANNUAL_3D']) print ' ==> USING ' + vdic['ANNUAL_3D'] + ' file !!! =>', cf_T_in print ' ==> variable ' + cvar # DATA: id_in = Dataset(cf_T_in) vdepth = id_in.variables['deptht'][:] Xd_m = id_in.variables[cvar][:, :, :, :] id_in.close() print ' ==> variable ' + cvar + ' read !' j100m = bt.find_index_from_value(100., vdepth) print 'j100m = ', j100m, '=> ', vdepth[j100m] j1000m = bt.find_index_from_value(1000., vdepth) print 'j1000m = ', j1000m, '=> ', vdepth[j1000m] (nt, nk0, nj0, ni0) = Xd_m.shape if nt != 12 and nt != 1: print 'ERROR: ' + cnexec + ' => only treating monthly or annual data so far...' sys.exit(0) if (nk0, nj0, ni0) != (nk, nj, ni): print 'ERROR: ' + cnexec + ' => Field and metrics do not agree in size!' print ' ==> nk0, nj0, ni0 / nk, nj, ni = ', nk0, nj0, ni0, '/', nk, nj, ni sys.exit(0)
j2 = nj - 1 rx1 = bo.r_lon_p1_mld[ib] rx2 = bo.r_lon_p2_mld[ib] ry1 = bo.r_lat_p1_mld[ib] ry2 = bo.r_lat_p2_mld[ib] # Need to itterate because ORCA grid disytorded in the North... vold = [-999, -999, -999, -999] itt = 0 while [i1, i2, j1, j2] != vold and itt < 10: itt = itt + 1 #print ' .... itt =', itt vold = [i1, i2, j1, j2] #print 'seraching for rx1, rx2, ry1, ry2 = ', rx1, rx2, ry1, ry2 if rx1 > -900.: i1 = bt.find_index_from_value(rx1, rlon[j1, :]) if rx2 > -900.: i2 = bt.find_index_from_value(rx2, rlon[j2, :]) if ry1 > -900.: j1 = bt.find_index_from_value(ry1, rlat[:, i1]) if ry2 > -900.: j2 = bt.find_index_from_value(ry2, rlat[:, i2]) #print ' => i1, i2, j1, j2 =>', i1, i2, j1, j2, '\n' mask2d[:, :] = 0. mask2d[j1:j2, i1:i2] = mask[0, 0, j1:j2, i1:i2] Vts = bo.mean_2d(MLD_m, mask2d[:, :], Xe1t[0, :, :], Xe2t[0, :, :]) # NETCDF: cf_out = vdic[ 'DIAG_D'] + '/mean_' + cvar + '_' + CONFRUN + '_' + cbox + '.nc' cv1 = cvar