def get_latlon_array_descriptor(self): configPath = str(self.datadir.join('config.analysis')) config = MpasAnalysisConfigParser() config.read(configPath) lat = numpy.array(config.getExpression('interpolate', 'lat', usenumpyfunc=True)) lon = numpy.array(config.getExpression('interpolate', 'lon', usenumpyfunc=True)) descriptor = LatLonGridDescriptor() descriptor.create(lat, lon, units='degrees') return descriptor
def remap_v(prefix, inGridName, inGridFileName, inDir, inVPrefix): cacheVFileName = '{}_merid_vel_{}.nc'.format(prefix, inGridName) config = MpasAnalysisConfigParser() config.read('mpas_analysis/config.default') matGrid = loadmat(inGridFileName) # lat/lon is a tensor grid so we can use 1-D arrays lon = matGrid['XC'][:, 0] lat = matGrid['YG'][0, :] z = matGrid['RC'][:, 0] cellFraction = matGrid['hFacS'] botIndices = get_bottom_indices(cellFraction) with sose_v_to_nc('{}/{}'.format(inDir, inVPrefix), cacheVFileName, lon, lat, z, cellFraction, botIndices) \ as dsV: inDescriptor = LatLonGridDescriptor() inDescriptor = LatLonGridDescriptor.read(cacheVFileName, latVarName='lat', lonVarName='lon') outDescriptor = get_comparison_descriptor(config, 'antarctic') outGridName = outDescriptor.meshName outVFileName = '{}_merid_vel_{}.nc'.format(prefix, outGridName) mappingFileName = '{}/map_V_{}_to_{}.nc'.format( inDir, inGridName, outGridName) remapper = Remapper(inDescriptor, outDescriptor, mappingFileName) remapper.build_mapping_file(method='bilinear') if not os.path.exists(outVFileName): print('Remapping meridional velocity...') with remapper.remap(dsV, renormalizationThreshold=0.01) \ as remappedV: print('Done.') remappedV.attrs['history'] = ' '.join(sys.argv) write_netcdf(remappedV, outVFileName)
def setup_obs_remapper(self, config, fieldName): gridFileName = '{}/obsGrid.nc'.format(self.datadir) comparisonDescriptor = \ get_lat_lon_comparison_descriptor(config) obsDescriptor = LatLonGridDescriptor() obsDescriptor.read(fileName=gridFileName, latVarName='lat', lonVarName='lon') remapper = \ get_remapper( config=config, sourceDescriptor=obsDescriptor, comparisonDescriptor=comparisonDescriptor, mappingFileSection='oceanObservations', mappingFileOption='sstClimatologyMappingFile', mappingFilePrefix='map_obs_{}'.format(fieldName), method=config.get('oceanObservations', 'interpolationMethod')) return remapper
def remap(inDir, outDir): inGridName = 'SouthernOcean_0.25x0.125degree' inFileName = '{}/Schmidtko_et_al_2014_bottom_PT_S_PD_{}.nc'.format( inDir, inGridName) config = MpasAnalysisConfigParser() config.read('mpas_analysis/config.default') inDescriptor = LatLonGridDescriptor() inDescriptor = LatLonGridDescriptor.read(inFileName, latVarName='lat', lonVarName='lon') outDescriptor = get_comparison_descriptor(config, 'antarctic') outGridName = outDescriptor.meshName outFileName = '{}/Schmidtko_et_al_2014_bottom_PT_S_PD_{}.nc'.format( outDir, outGridName) mappingFileName = '{}/map_{}_to_{}.nc'.format(inDir, inGridName, outGridName) remapper = Remapper(inDescriptor, outDescriptor, mappingFileName) remapper.build_mapping_file(method='bilinear') if not os.path.exists(outFileName): print('Remapping...') with xarray.open_dataset(inFileName) as dsIn: with remapper.remap(dsIn, renormalizationThreshold=0.01) \ as remappedMLD: print('Done.') remappedMLD.attrs['history'] = ' '.join(sys.argv) write_netcdf(remappedMLD, outFileName)
def remap_pt_s(prefix, inGridName, inGridFileName, inDir, inTPrefix, inSPrefix, inGammaNPrefix): cacheTFileName = '{}_pot_temp_{}.nc'.format(prefix, inGridName) cacheSFileName = '{}_salinity_{}.nc'.format(prefix, inGridName) cacheGammaNFileName = '{}_neut_den_{}.nc'.format(prefix, inGridName) config = MpasAnalysisConfigParser() config.read('mpas_analysis/config.default') matGrid = loadmat(inGridFileName) # lat/lon is a tensor grid so we can use 1-D arrays lon = matGrid['XC'][:, 0] lat = matGrid['YC'][0, :] z = matGrid['RC'][:, 0] cellFraction = matGrid['hFacC'] botIndices = get_bottom_indices(cellFraction) with sose_pt_to_nc('{}/{}'.format(inDir, inTPrefix), cacheTFileName, lon, lat, z, cellFraction, botIndices) \ as dsT: inDescriptor = LatLonGridDescriptor() inDescriptor = LatLonGridDescriptor.read(cacheTFileName, latVarName='lat', lonVarName='lon') outDescriptor = get_comparison_descriptor(config, 'antarctic') outGridName = outDescriptor.meshName outTFileName = '{}_pot_temp_{}.nc'.format(prefix, outGridName) outSFileName = '{}_salinity_{}.nc'.format(prefix, outGridName) outGammaNFileName = '{}_neut_den_{}.nc'.format(prefix, outGridName) mappingFileName = '{}/map_C_{}_to_{}.nc'.format( inDir, inGridName, outGridName) remapper = Remapper(inDescriptor, outDescriptor, mappingFileName) remapper.build_mapping_file(method='bilinear') if not os.path.exists(outTFileName): dsT.reset_coords(names='zBot', inplace=True) print('Remapping potential temperature...') with remapper.remap(dsT, renormalizationThreshold=0.01) \ as remappedT: print('Done.') remappedT.attrs['history'] = ' '.join(sys.argv) remappedT.set_coords(names='zBot', inplace=True) write_netcdf(remappedT, outTFileName) with sose_s_to_nc('{}/{}'.format(inDir, inSPrefix), cacheSFileName, lon, lat, z, cellFraction, botIndices) \ as dsS: if not os.path.exists(outSFileName): dsS.reset_coords(names='zBot', inplace=True) print('Remapping salinity...') with remapper.remap(dsS, renormalizationThreshold=0.01) \ as remappedS: print('Done.') remappedS.attrs['history'] = ' '.join(sys.argv) remappedS.set_coords(names='zBot', inplace=True) write_netcdf(remappedS, outSFileName) with sose_gammaN_to_nc('{}/{}'.format(inDir, inGammaNPrefix), cacheGammaNFileName, lon, lat, z, cellFraction, botIndices) \ as dsGammaN: if not os.path.exists(outGammaNFileName): dsGammaN.reset_coords(names='zBot', inplace=True) print('Remapping neutral density...') with remapper.remap(dsGammaN, renormalizationThreshold=0.01) \ as remappedGammaN: print('Done.') remappedGammaN.attrs['history'] = ' '.join(sys.argv) remappedGammaN.set_coords(names='zBot', inplace=True) write_netcdf(remappedGammaN, outGammaNFileName)
'SouthernOcean/SOSE/monthly/SALT_mnthlyBar.0000000100' inGridFileName = '/media/xylar/extra_data/data_overflow/observations/' \ 'SouthernOcean/SOSE/grid.mat' prefix = 'SOSE_2005-2010_monthly_' cacheTFileName = '{}_pot_temp_{}.nc'.format(prefix, inGridName) cacheSFileName = '{}_salinity_{}.nc'.format(prefix, inGridName) outTFileName = '{}_pot_temp_{}.nc'.format(prefix, outGridName) outSFileName = '{}_salinity_{}.nc'.format(prefix, outGridName) config = MpasAnalysisConfigParser() config.read('config.default') inDescriptor = LatLonGridDescriptor() if not os.path.exists(cacheTFileName) or not os.path.exists(cacheSFileName): matGrid = loadmat(inGridFileName) # lat/lon is a tensor grid so we can use 1-D arrays lon = matGrid['XC'][:, 0] lat = matGrid['YC'][0, :] z = matGrid['RC'][:, 0] cellFraction = matGrid['hFacC'] botIndices = get_bottom_indices(cellFraction) if os.path.exists(cacheTFileName): dsT = xarray.open_dataset(cacheTFileName) else: field, botField = get_monthly_average(inTFileName)
def get_latlon_file_descriptor(self): latLonGridFileName = str(self.datadir.join('SST_annual_1870-1900.nc')) descriptor = LatLonGridDescriptor() descriptor.read(latLonGridFileName, latVarName='lat', lonVarName='lon') return (descriptor, latLonGridFileName)