From fb96358ed994904e9d498fbe52390d2eaf4021ea Mon Sep 17 00:00:00 2001 From: Niki Zadeh Date: Tue, 18 Aug 2015 14:52:09 -0400 Subject: [PATCH] Fix and Combine the existing refineDiag scripts --- tools/analysis/MOM6_refineDiag.csh | 7 +- tools/analysis/refineDiag_data_stager.csh | 263 --------- .../refineDiag_data_stager_globalAve.csh | 548 ++++++++++++++++++ 3 files changed, 553 insertions(+), 265 deletions(-) delete mode 100755 tools/analysis/refineDiag_data_stager.csh create mode 100755 tools/analysis/refineDiag_data_stager_globalAve.csh diff --git a/tools/analysis/MOM6_refineDiag.csh b/tools/analysis/MOM6_refineDiag.csh index fbce1a34c1..67250436da 100755 --- a/tools/analysis/MOM6_refineDiag.csh +++ b/tools/analysis/MOM6_refineDiag.csh @@ -91,13 +91,16 @@ ls -l set script_dir=${out_dir}/mom6/tools/analysis -echo '==Run some example annual scripts. These are not reviewed by scientists.' +echo '==Run annual scripts. ' echo '====annual mean Eddy Kinetic Energy======' mkdir -p $out_dir/refineDiag_ocean_annual/ocean_${yr1}/EddyKineticEnergy $script_dir/EddyKineticEnergy.py -g $yr1.ocean_static.nc -o $out_dir/refineDiag_ocean_annual/ocean_${yr1}/EddyKineticEnergy -l ${yr1} $yr1.ocean_daily.nc -$script_dir/calc_variance.py ssh $$yr1.ocean_daily.nc $refineDiagDir/$yr1.ocean_month_refined.nc +$script_dir/calc_variance.py ssh $yr1.ocean_daily.nc $refineDiagDir/$yr1.ocean_month_refined.nc + +#Global Average data stager script to generate the Global Diagnostics web pages (Mason & Krasting) +source $script_dir/refineDiag_data_stager_globalAve.csh echo " ---------- end yearly analysis ---------- " diff --git a/tools/analysis/refineDiag_data_stager.csh b/tools/analysis/refineDiag_data_stager.csh deleted file mode 100755 index f0bff69598..0000000000 --- a/tools/analysis/refineDiag_data_stager.csh +++ /dev/null @@ -1,263 +0,0 @@ -#------------------------------------------------------------------------------ -# refineDiag_data_stager_globalAve.csh -# -# 2014/05/07 JPK -# -# DESCRIPTION: -# This script serves two primary functions: -# -# 1. It unpacks the history tar file to the /ptmp file system. It allows -# for more efficient post-processing when individual components are -# called by frepp. (i.e. when the frepp "atmos_month" post-processing -# script runs, frepp will copy only the unpacked "*atmos_month*" .nc -# files from /ptmp to the $work directory rather than the entire history -# tar file. -# -# 2. It performs a global annual average of all 3D variables (time, lat, lon) -# and stores the values in a sqlite database that resides in a parallel -# directory to the frepp scripts and stdout -# -#------------------------------------------------------------------------------ - -echo "" -echo "" -echo "" -echo " ---------- begin refineDiag_data_stager.csh ---------- " - -cd $work/$hsmdate -pwd - -#-- Unload any previous versions of Python and load the system default -module unload python -module unload cdat -module load python - -#-- Unpack gridSpec file. Right now this hardcoded and this is bad practice. -# It would be much better to have the refineDiag script know about the gridSpec location -# through an already populated FRE variable. Will talk to Amy L. about alternatives. -#set gridSpecFile = "/archive/cjg/mdt/awg/input/grid/c96_GIS_025_grid_v20140327.tar" -#set gsArchRoot = `echo ${gridSpecFile} | rev | cut -f 2-100 -d '/' | rev` -#set gsBaseName = `basename ${gridSpecFile} | cut -f 1 -d '.'` -#hsmget -v -a ${gsArchRoot} -p /ptmp/$USER/${gsArchRoot} -w `pwd` ${gsBaseName}/\* - -#-- Create a directory to house the sqlite database (if it does not already exist) -set localRoot = `echo $scriptName | rev | cut -f 4-100 -d '/' | rev` -if (! -d ${localRoot}/db) then - mkdir -p ${localRoot}/db -endif - -#-- If db exists, copy it for safe keeping and prevent file locks in the -foreach reg (global nh sh tropics) - cp -f ${localRoot}/db/${reg}AveAtmos.db ${localRoot}/db/.${reg}AveAtmos.db - cp -f ${localRoot}/db/${reg}AveOcean.db ${localRoot}/db/.${reg}AveOcean.db -end - -#-- Cat a Python script that performs the averages and writes to a copy of the DB -# in case it is locked by another user -cat > global_atmos_ave.py < 30.),var) - cellArea = MV2.masked_where(MV2.logical_or(geoLat < -30., geoLat > 30.),cellArea) - elif (region == 'nh'): - var = MV2.masked_where(MV2.less_equal(geoLat,30.),var) - cellArea = MV2.masked_where(MV2.less_equal(geoLat,30.),cellArea) - elif (region == 'sh'): - var = MV2.masked_where(MV2.greater_equal(geoLat,-30.),var) - cellArea = MV2.masked_where(MV2.greater_equal(geoLat,-30.),cellArea) - elif (region == 'global'): - var = var - cellArea = cellArea - res = MV2.array(var*cellArea).sum()/cellArea.sum() - return res - -varDict = fdata1.variables -globalMeanDic={} -tropicsMeanDic={} -nhMeanDic={} -shMeanDic={} -for varName in varDict: - if (len(varDict[varName].shape) == 3): - - conn = sqlite3.connect("${localRoot}/db/.globalAveAtmos.db") - c = conn.cursor() - globalMeanDic[varName] = areaMean(varName,cellArea,geoLat,geoLon,region='global') - sql = 'create table if not exists ' + varName + ' (year integer primary key, value float)' - sqlres = c.execute(sql) - sql = 'insert or replace into ' + varName + ' values(' + fYear[:4] + ',' + str(globalMeanDic[varName]) + ')' - sqlres = c.execute(sql) - conn.commit() - c.close() - conn.close() - - conn = sqlite3.connect("${localRoot}/db/.tropicsAveAtmos.db") - c = conn.cursor() - globalMeanDic[varName] = areaMean(varName,cellArea,geoLat,geoLon,region='tropics') - sql = 'create table if not exists ' + varName + ' (year integer primary key, value float)' - sqlres = c.execute(sql) - sql = 'insert or replace into ' + varName + ' values(' + fYear[:4] + ',' + str(globalMeanDic[varName]) + ')' - sqlres = c.execute(sql) - conn.commit() - c.close() - conn.close() - - conn = sqlite3.connect("${localRoot}/db/.nhAveAtmos.db") - c = conn.cursor() - globalMeanDic[varName] = areaMean(varName,cellArea,geoLat,geoLon,region='nh') - sql = 'create table if not exists ' + varName + ' (year integer primary key, value float)' - sqlres = c.execute(sql) - sql = 'insert or replace into ' + varName + ' values(' + fYear[:4] + ',' + str(globalMeanDic[varName]) + ')' - sqlres = c.execute(sql) - conn.commit() - c.close() - conn.close() - - conn = sqlite3.connect("${localRoot}/db/.shAveAtmos.db") - c = conn.cursor() - globalMeanDic[varName] = areaMean(varName,cellArea,geoLat,geoLon,region='sh') - sql = 'create table if not exists ' + varName + ' (year integer primary key, value float)' - sqlres = c.execute(sql) - sql = 'insert or replace into ' + varName + ' values(' + fYear[:4] + ',' + str(globalMeanDic[varName]) + ')' - sqlres = c.execute(sql) - conn.commit() - c.close() - conn.close() - -EOF - -cat > global_ocean_ave.py < 30.),var) - cellArea = MV2.masked_where(MV2.logical_or(geoLat < -30., geoLat > 30.),cellArea) - elif (region == 'nh'): - var = MV2.masked_where(MV2.less_equal(geoLat,30.),var) - cellArea = MV2.masked_where(MV2.less_equal(geoLat,30.),cellArea) - elif (region == 'sh'): - var = MV2.masked_where(MV2.greater_equal(geoLat,-30.),var) - cellArea = MV2.masked_where(MV2.greater_equal(geoLat,-30.),cellArea) - elif (region == 'global'): - var = var - cellArea = cellArea - res = MV2.array(var*cellArea).sum()/cellArea.sum() - return res - -varDict = fdata.variables -globalMeanDic={} -tropicsMeanDic={} -nhMeanDic={} -shMeanDic={} -for varName in varDict: - if (len(varDict[varName].shape) == 3): - if (fdata(varName).getAxis(1).id == 'yh' and fdata(varName).getAxis(2).id == 'xh'): - - conn = sqlite3.connect("${localRoot}/db/.globalAveOcean.db") - c = conn.cursor() - globalMeanDic[varName] = areaMean(varName,cellArea,geoLat,geoLon,region='global') - sql = 'create table if not exists ' + varName + ' (year integer primary key, value float)' - sqlres = c.execute(sql) - sql = 'insert or replace into ' + varName + ' values(' + fYear[:4] + ',' + str(globalMeanDic[varName]) + ')' - sqlres = c.execute(sql) - conn.commit() - c.close() - conn.close() - - conn = sqlite3.connect("${localRoot}/db/.tropicsAveOcean.db") - c = conn.cursor() - globalMeanDic[varName] = areaMean(varName,cellArea,geoLat,geoLon,region='tropics') - sql = 'create table if not exists ' + varName + ' (year integer primary key, value float)' - sqlres = c.execute(sql) - sql = 'insert or replace into ' + varName + ' values(' + fYear[:4] + ',' + str(globalMeanDic[varName]) + ')' - sqlres = c.execute(sql) - conn.commit() - c.close() - conn.close() - - conn = sqlite3.connect("${localRoot}/db/.nhAveOcean.db") - c = conn.cursor() - globalMeanDic[varName] = areaMean(varName,cellArea,geoLat,geoLon,region='nh') - sql = 'create table if not exists ' + varName + ' (year integer primary key, value float)' - sqlres = c.execute(sql) - sql = 'insert or replace into ' + varName + ' values(' + fYear[:4] + ',' + str(globalMeanDic[varName]) + ')' - sqlres = c.execute(sql) - conn.commit() - c.close() - conn.close() - - conn = sqlite3.connect("${localRoot}/db/.shAveOcean.db") - c = conn.cursor() - globalMeanDic[varName] = areaMean(varName,cellArea,geoLat,geoLon,region='sh') - sql = 'create table if not exists ' + varName + ' (year integer primary key, value float)' - sqlres = c.execute(sql) - sql = 'insert or replace into ' + varName + ' values(' + fYear[:4] + ',' + str(globalMeanDic[varName]) + ')' - sqlres = c.execute(sql) - conn.commit() - c.close() - conn.close() - -EOF - -#-- Run the averager script -python global_atmos_ave.py -python global_ocean_ave.py - -#-- Copy the database back to its original location -foreach reg (global nh sh tropics) - cp -f ${localRoot}/db/.${reg}AveAtmos.db ${localRoot}/db/${reg}AveAtmos.db - cp -f ${localRoot}/db/.${reg}AveOcean.db ${localRoot}/db/${reg}AveOcean.db -end - -echo " ---------- end refineDiag_data_stager.csh ---------- " -echo "" -echo "" -echo "" - -exit diff --git a/tools/analysis/refineDiag_data_stager_globalAve.csh b/tools/analysis/refineDiag_data_stager_globalAve.csh new file mode 100755 index 0000000000..4862e06c69 --- /dev/null +++ b/tools/analysis/refineDiag_data_stager_globalAve.csh @@ -0,0 +1,548 @@ +#------------------------------------------------------------------------------ +# refineDiag_data_stager_globalAve.csh +# +# 2014/05/07 JPK +# +# DESCRIPTION: +# This script serves two primary functions: +# +# 1. It unpacks the history tar file to the /ptmp file system. It allows +# for more efficient post-processing when individual components are +# called by frepp. (i.e. when the frepp "atmos_month" post-processing +# script runs, frepp will copy only the unpacked "*atmos_month*" .nc +# files from /ptmp to the $work directory rather than the entire history +# tar file. +# +# 2. It performs a global annual average of all 3D variables (time, lat, lon) +# and stores the values in a sqlite database that resides in a parallel +# directory to the frepp scripts and stdout +# +#------------------------------------------------------------------------------ + +echo "" +echo "" +echo "" +echo " ---------- begin refineDiag_data_stager.csh ---------- " + +cd $work/$hsmdate +pwd + +#-- Unload any previous versions of Python and load the system default +module unload python +module unload cdat +module load python + +#-- Unpack gridSpec file. Right now this hardcoded and this is bad practice. +# It would be much better to have the refineDiag script know about the gridSpec location +# through an already populated FRE variable. Will talk to Amy L. about alternatives. +#set gridSpecFile = "/archive/cjg/mdt/awg/input/grid/c96_GIS_025_grid_v20140327.tar" +#set gsArchRoot = `echo ${gridSpecFile} | rev | cut -f 2-100 -d '/' | rev` +#set gsBaseName = `basename ${gridSpecFile} | cut -f 1 -d '.'` +#hsmget -v -a ${gsArchRoot} -p /ptmp/$USER/${gsArchRoot} -w `pwd` ${gsBaseName}/\* + +#-- Create a directory to house the sqlite database (if it does not already exist) +set localRoot = `echo $scriptName | rev | cut -f 4-100 -d '/' | rev` +if (! -d ${localRoot}/db) then + mkdir -p ${localRoot}/db +endif +set user = `whoami` +#-- Create the website entry for the experiment (if it does not already exist). +if ( ! -d /home/mdteam/internal_html/cm4/${user}/${name} ) then + mkdir -p /home/mdteam/internal_html/cm4/${user}/${name}/ + gcp -v /home/mdteam/internal_html/cm4/.webTemplates/* /home/mdteam/internal_html/cm4/${user}/${name} + ln -s /home/mdteam/internal_html/cm4/${user}/${name}/global.php /home/mdteam/internal_html/cm4/${user}/${name}/index.php + mv -f /home/mdteam/internal_html/cm4/${user}/${name}/setup.php /home/mdteam/internal_html/cm4/${user}/${name}/setup.php.bak + cat /home/mdteam/internal_html/cm4/${user}/${name}/setup.php.bak | sed "s|output_dir|${localRoot}|g" >> /home/mdteam/internal_html/cm4/${user}/${name}/setup.php + sleep 2 + mv -f /home/mdteam/internal_html/cm4/${user}/${name}/setup.php /home/mdteam/internal_html/cm4/${user}/${name}/setup.php.bak + cat /home/mdteam/internal_html/cm4/${user}/${name}/setup.php.bak | sed "s|experiment_name|${name}|g" >> /home/mdteam/internal_html/cm4/${user}/${name}/setup.php + sqlite3 /home/Oar.Gfdl.Mdteam/internal_html/cm4/experiments.db "INSERT INTO experiments (user, experiment) VALUES ('${user}','${name}')" +endif + +#-- If db exists, copy it for safe keeping and prevent file locks in the +foreach reg (global nh sh tropics) + cp -f ${localRoot}/db/${reg}AveAtmos.db ${localRoot}/db/.${reg}AveAtmos.db + cp -f ${localRoot}/db/${reg}AveOcean.db ${localRoot}/db/.${reg}AveOcean.db + cp -f ${localRoot}/db/${reg}AveLand.db ${localRoot}/db/.${reg}AveLand.db +end + +#-- Cat a Python script that performs the averages and writes to a copy of the DB +# in case it is locked by another user +cat > global_atmos_ave.py < 30.),var) + cellArea = MV2.masked_where(MV2.logical_or(geoLat < -30., geoLat > 30.),cellArea) + elif (region == 'nh'): + var = MV2.masked_where(MV2.less_equal(geoLat,30.),var) + cellArea = MV2.masked_where(MV2.less_equal(geoLat,30.),cellArea) + elif (region == 'sh'): + var = MV2.masked_where(MV2.greater_equal(geoLat,-30.),var) + cellArea = MV2.masked_where(MV2.greater_equal(geoLat,-30.),cellArea) + elif (region == 'global'): + var = var + cellArea = cellArea + res = MV2.array(var*cellArea).sum()/cellArea.sum() + return res + +varDict = fdata1.variables +globalMeanDic={} +tropicsMeanDic={} +nhMeanDic={} +shMeanDic={} +for varName in varDict: + if (len(varDict[varName].shape) == 3): + + conn = sqlite3.connect("${localRoot}/db/.globalAveAtmos.db") + c = conn.cursor() + globalMeanDic[varName] = areaMean(varName,cellArea,geoLat,geoLon,region='global') + sql = 'create table if not exists ' + varName + ' (year integer primary key, value float)' + sqlres = c.execute(sql) + sql = 'insert or replace into ' + varName + ' values(' + fYear[:4] + ',' + str(globalMeanDic[varName]) + ')' + try: + sqlres = c.execute(sql) + conn.commit() + except: + pass + c.close() + conn.close() + + conn = sqlite3.connect("${localRoot}/db/.tropicsAveAtmos.db") + c = conn.cursor() + globalMeanDic[varName] = areaMean(varName,cellArea,geoLat,geoLon,region='tropics') + sql = 'create table if not exists ' + varName + ' (year integer primary key, value float)' + sqlres = c.execute(sql) + sql = 'insert or replace into ' + varName + ' values(' + fYear[:4] + ',' + str(globalMeanDic[varName]) + ')' + try: + sqlres = c.execute(sql) + conn.commit() + except: + pass + c.close() + conn.close() + + conn = sqlite3.connect("${localRoot}/db/.nhAveAtmos.db") + c = conn.cursor() + globalMeanDic[varName] = areaMean(varName,cellArea,geoLat,geoLon,region='nh') + sql = 'create table if not exists ' + varName + ' (year integer primary key, value float)' + sqlres = c.execute(sql) + sql = 'insert or replace into ' + varName + ' values(' + fYear[:4] + ',' + str(globalMeanDic[varName]) + ')' + try: + sqlres = c.execute(sql) + conn.commit() + except: + pass + c.close() + conn.close() + + conn = sqlite3.connect("${localRoot}/db/.shAveAtmos.db") + c = conn.cursor() + globalMeanDic[varName] = areaMean(varName,cellArea,geoLat,geoLon,region='sh') + sql = 'create table if not exists ' + varName + ' (year integer primary key, value float)' + sqlres = c.execute(sql) + sql = 'insert or replace into ' + varName + ' values(' + fYear[:4] + ',' + str(globalMeanDic[varName]) + ')' + try: + sqlres = c.execute(sql) + conn.commit() + except: + pass + c.close() + conn.close() + +EOF + +cat > global_land_ave.py < 30.),var) + cellArea = MV2.masked_where(MV2.logical_or(geoLat < -30., geoLat > 30.),cellArea) + cellFrac = MV2.masked_where(MV2.logical_or(geoLat < -30., geoLat > 30.),cellFrac) + soilFrac = MV2.masked_where(MV2.logical_or(geoLat < -30., geoLat > 30.),soilFrac) + elif (region == 'nh'): + var = MV2.masked_where(MV2.less_equal(geoLat,30.),var) + cellArea = MV2.masked_where(MV2.less_equal(geoLat,30.),cellArea) + cellFrac = MV2.masked_where(MV2.less_equal(geoLat,30.),cellFrac) + soilFrac = MV2.masked_where(MV2.less_equal(geoLat,30.),soilFrac) + elif ( region == 'sh'): + var = MV2.masked_where(MV2.greater_equal(geoLat,-30.),var) + cellArea = MV2.masked_where(MV2.greater_equal(geoLat,-30.),cellArea) + cellFrac = MV2.masked_where(MV2.greater_equal(geoLat,-30.),cellFrac) + soilFrac = MV2.masked_where(MV2.greater_equal(geoLat,-30.),soilFrac) + elif (region == 'global'): + var = var + cellArea = cellArea + cellFrac = cellFrac + soilFrac = soilFrac + if module != 'vegn': + varSum = MV2.array(var*cellArea*cellFrac).sum() + varAvg = varSum/(cellArea*cellFrac).sum() + elif module == 'vegn': + varSum = MV2.array(var*cellArea*cellFrac*soilFrac).sum() + varAvg = varSum/(cellArea*cellFrac*soilFrac).sum() + return varSum, varAvg + +def areaMean3D(varName,cellArea,cellFrac,cellDepth,soilFrac,geoLat,geoLon,region='global'): + var = MV2.concatenate((MV2.array(fdata1(varName)), MV2.array(fdata2(varName)), MV2.array(fdata3(varName)), MV2.array(fdata4(varName)), MV2.array(fdata5(varName)), MV2.array(fdata6(varName))),axis=2) + soilFrac = cdutil.YEAR(soilFrac).squeeze() + moduleDic = getWebsiteVariablesDic() + try: + module = moduleDic[varName] + except: + try: + module = moduleDic[varName.lower()] + except: + return None + if (var.getAxis(1).id == 'zfull_soil'): + var = cdutil.YEAR(var).squeeze() + sums = [] + avgs = [] + for i in range(0,len(cellDepth)): + if (region == 'tropics'): + cellArea = MV2.masked_where(MV2.logical_or(geoLat < -30., geoLat > 30.),cellArea) + cellFrac = MV2.masked_where(MV2.logical_or(geoLat < -30., geoLat > 30.),cellFrac) + soilFrac = MV2.masked_where(MV2.logical_or(geoLat < -30., geoLat > 30.),soilFrac) + varSlice = MV2.masked_where(MV2.logical_or(geoLat < -30., geoLat > 30.),var[i,:,:]) + elif (region == 'nh'): + cellArea = MV2.masked_where(MV2.less_equal(geoLat,30.),cellArea) + cellFrac = MV2.masked_where(MV2.less_equal(geoLat,30.),cellFrac) + soiLFrac = MV2.masked_where(MV2.less_equal(geoLat,30.),soilFrac) + varSlice = MV2.masked_where(MV2.less_equal(geoLat,30.),var[i,:,:]) + elif (region == 'sh'): + cellArea = MV2.masked_where(MV2.greater_equal(geoLat,-30.),cellArea) + cellFrac = MV2.masked_where(MV2.greater_equal(geoLat,-30.),cellFrac) + soilFrac = MV2.masked_where(MV2.greater_equal(geoLat,-30.),soilFrac) + varSlice = MV2.masked_where(MV2.greater_equal(geoLat,-30.),var[i,:,:]) + elif (region == 'global'): + cellArea = cellArea + cellFrac = cellFrac + soilFrac = soilFrac + varSlice = var[i,:,:] + if ('m3' in fdata1(varName).units): + varSum = MV2.array(varSlice*cellArea*cellFrac*cellDepth[i]).sum() + varAvg = varSum/(cellArea*cellFrac*cellDepth[i]).sum() + else: + varSum = MV2.array(varSlice*cellArea*cellFrac).sum() + varAvg = varSum/(cellArea*cellFrac).sum() + sums.append(varSum) + avgs.append(varAvg) + return numpy.sum(sums), numpy.average(avgs) + + elif (var.getAxis(1).id == 'band'): + var = cdutil.YEAR(var).squeeze() + for i in range(0,1): + if (region == 'tropics'): + cellArea = MV2.masked_where(MV2.logical_or(geoLat < -30., geoLat > 30.),cellArea) + cellFrac = MV2.masked_where(MV2.logical_or(geoLat < -30., geoLat > 30.),cellFrac) + soilFrac = MV2.masked_where(MV2.logical_or(geoLat < -30., geoLat > 30.),soilFrac) + var[i,:,:] = MV2.masked_where(MV2.logical_or(geoLat < -30., geoLat > 30.),var[i,:,:]) + elif (region == 'nh'): + cellArea = MV2.masked_where(MV2.less_equal(geoLat,30.),cellArea) + cellFrac = MV2.masked_where(MV2.less_equal(geoLat,30.),cellFrac) + soilFrac = MV2.masked_where(MV2.less_equal(geoLat,30.),soilFrac) + var[i,:,:] = MV2.masked_where(MV2.less_equal(geoLat,30.),var[i,:,:]) + elif (region == 'sh'): + cellArea = MV2.masked_where(MV2.greater_equal(geoLat,-30.),cellArea) + cellFrac = MV2.masked_where(MV2.greater_equal(geoLat,-30.),cellFrac) + soilFrac = MV2.masked_where(MV2.greater_equal(geoLat,-30.),soilFrac) + var[i,:,:] = MV2.masked_where(MV2.greater_equal(geoLat,-30.),var[i,:,:]) + elif (region == 'global'): + cellArea = cellArea + cellFrac = cellFrac + soilFrac = soilFrac + var[i,:,:] = var[i,:,:] + if (module != 'vegn'): + topSum = MV2.array(var[0,:,:]*cellArea*cellFrac).sum() + topAvg = topSum/(cellArea*cellFrac).sum() + botSum = MV2.array(var[1,:,:]*cellArea*cellFrac).sum() + botAvg = botSum/(cellArea*cellFrac).sum() + elif (module == 'vegn'): + topSum = MV2.array(var[0,:,:]*cellArea*cellFrac*soilFrac).sum() + topAvg = topSum/(cellArea*cellFrac*soilFrac).sum() + botSum = MV2.array(var[1,:,:]*cellArea*cellFrac*soilFrac).sum() + botAvg = botSum/(cellarea*cellFrac*soilFrac).sum() + return topSum, topAvg, botSum, botAvg + + else: + return None + + +varDict = fdata1.variables +globalMeanDic={} +tropicsMeanDic={} +nhMeanDic={} +shMeanDic={} +for varName in varDict: + if (len(varDict[varName].shape) == 3): + + globalMeanDic[varName] = areaMean(varName,cellArea,cellFrac,soilFrac,geoLat,geoLon,region='global') + if globalMeanDic[varName] != None: + dbEntry("${localRoot}/db/.globalAveLand.db",varName,globalMeanDic[varName][0], globalMeanDic[varName][1],fYear) + + globalMeanDic[varName] = areaMean(varName,cellArea,cellFrac,soilFrac,geoLat,geoLon,region='tropics') + if globalMeanDic[varName] != None: + dbEntry("${localRoot}/db/.tropicsAveLand.db",varName,globalMeanDic[varName][0], globalMeanDic[varName][1],fYear) + + globalMeanDic[varName] = areaMean(varName,cellArea,cellFrac,soilFrac,geoLat,geoLon,region='nh') + if globalMeanDic[varName] != None: + dbEntry("${localRoot}/db/.nhAveLand.db",varName,globalMeanDic[varName][0], globalMeanDic[varName][1],fYear) + + globalMeanDic[varName] = areaMean(varName,cellArea,cellFrac,soilFrac,geoLat,geoLon,region='sh') + if globalMeanDic[varName] != None: + dbEntry("${localRoot}/db/.shAveLand.db",varName,globalMeanDic[varName][0], globalMeanDic[varName][1],fYear) + + if (len(varDict[varName].shape) == 4): + globalMeanDic[varName] = areaMean3D(varName,cellArea,cellFrac,cellDepth,soilFrac,geoLat,geoLon,region='global') + if globalMeanDic[varName] != None: + if len(globalMeanDic[varName]) == 2: + dbEntry("${localRoot}/db/.globalAveLand.db",varName, globalMeanDic[varName][0], globalMeanDic[varName][1], fYear) + elif len(globalMeanDic[varName]) == 4: + dbEntry("${localRoot}/db/.globalAveLand.db","%s0" % varName, globalMeanDic[varName][0], globalMeanDic[varName][1], fYear) + dbEntry("${localRoot}/db/.globalAveLand.db","%s1" % varName, globalMeanDic[varName][2], globalMeanDic[varName][3], fYear) + + globalMeanDic[varName] = areaMean3D(varName,cellArea,cellFrac,cellDepth,soilFrac,geoLat,geoLon,region='tropics') + if globalMeanDic[varName] != None: + if len(globalMeanDic[varName]) == 2: + dbEntry("${localRoot}/db/.tropicsAveLand.db",varName, globalMeanDic[varName][0], globalMeanDic[varName][1], fYear) + elif len(globalMeanDic[varName]) == 4: + dbEntry("${localRoot}/db/.tropicsAveLand.db", "%s0" % varName, globalMeanDic[varName][0], globalMeanDic[varName][1], fYear) + dbEntry("${localRoot}/db/.tropicsAveLand.db", "%s1" % varName, globalMeanDic[varName][2], globalMeanDic[varName][3], fYear) + + globalMeanDic[varName] = areaMean3D(varName,cellArea,cellFrac,cellDepth,soilFrac,geoLat,geoLon,region='nh') + if globalMeanDic[varName] != None: + if len(globalMeanDic[varName]) == 2: + dbEntry("${localRoot}/db/.nhAveLand.db",varName, globalMeanDic[varName][0], globalMeanDic[varName][1], fYear) + elif len(globalMeanDic[varName]) == 4: + dbEntry("${localRoot}/db/.nhAveLand.db", "%s0" % varName, globalMeanDic[varName][0], globalMeanDic[varName][1], fYear) + dbEntry("${localRoot}/db/.nhAveLand.db", "%s1" % varName, globalMeanDic[varName][2], globalMeanDic[varName][3], fYear) + + globalMeanDic[varName] = areaMean3D(varName,cellArea,cellFrac,cellDepth,soilFrac,geoLat,geoLon,region='sh') + if globalMeanDic[varName] != None: + if len(globalMeanDic[varName]) == 2: + dbEntry("${localRoot}/db/.shAveLand.db",varName,globalMeanDic[varName][0], globalMeanDic[varName][1],fYear) + elif len(globalMeanDic[varName]) == 4: + dbEntry("${localRoot}/db/.shAveLand.db", "%s0" % varName, globalMeanDic[varName][0], globalMeanDic[varName][1], fYear) + dbEntry("${localRoot}/db/.shAveLand.db", "%s1" % varName, globalMeanDic[varName][2], globalMeanDic[varName][3], fYear) + +EOF + +cat > global_ocean_ave.py < 30.),var) + cellArea = MV2.masked_where(MV2.logical_or(geoLat < -30., geoLat > 30.),cellArea) + elif (region == 'nh'): + var = MV2.masked_where(MV2.less_equal(geoLat,30.),var) + cellArea = MV2.masked_where(MV2.less_equal(geoLat,30.),cellArea) + elif (region == 'sh'): + var = MV2.masked_where(MV2.greater_equal(geoLat,-30.),var) + cellArea = MV2.masked_where(MV2.greater_equal(geoLat,-30.),cellArea) + elif (region == 'global'): + var = var + cellArea = cellArea + res = MV2.array(var*cellArea).sum()/cellArea.sum() + return res + +varDict = fdata.variables +globalMeanDic={} +tropicsMeanDic={} +nhMeanDic={} +shMeanDic={} +for varName in varDict: + if (len(varDict[varName].shape) == 3): + if (fdata(varName).getAxis(1).id == 'yh' and fdata(varName).getAxis(2).id == 'xh'): + + conn = sqlite3.connect("${localRoot}/db/.globalAveOcean.db") + c = conn.cursor() + globalMeanDic[varName] = areaMean(varName,cellArea,geoLat,geoLon,region='global') + sql = 'create table if not exists ' + varName + ' (year integer primary key, value float)' + sqlres = c.execute(sql) + sql = 'insert or replace into ' + varName + ' values(' + fYear[:4] + ',' + str(globalMeanDic[varName]) + ')' + try: + sqlres = c.execute(sql) + conn.commit() + except: + pass + c.close() + conn.close() + + conn = sqlite3.connect("${localRoot}/db/.tropicsAveOcean.db") + c = conn.cursor() + globalMeanDic[varName] = areaMean(varName,cellArea,geoLat,geoLon,region='tropics') + sql = 'create table if not exists ' + varName + ' (year integer primary key, value float)' + sqlres = c.execute(sql) + sql = 'insert or replace into ' + varName + ' values(' + fYear[:4] + ',' + str(globalMeanDic[varName]) + ')' + try: + sqlres = c.execute(sql) + conn.commit() + except: + pass + c.close() + conn.close() + + conn = sqlite3.connect("${localRoot}/db/.nhAveOcean.db") + c = conn.cursor() + globalMeanDic[varName] = areaMean(varName,cellArea,geoLat,geoLon,region='nh') + sql = 'create table if not exists ' + varName + ' (year integer primary key, value float)' + sqlres = c.execute(sql) + sql = 'insert or replace into ' + varName + ' values(' + fYear[:4] + ',' + str(globalMeanDic[varName]) + ')' + try: + sqlres = c.execute(sql) + conn.commit() + except: + pass + c.close() + conn.close() + + conn = sqlite3.connect("${localRoot}/db/.shAveOcean.db") + c = conn.cursor() + globalMeanDic[varName] = areaMean(varName,cellArea,geoLat,geoLon,region='sh') + sql = 'create table if not exists ' + varName + ' (year integer primary key, value float)' + sqlres = c.execute(sql) + sql = 'insert or replace into ' + varName + ' values(' + fYear[:4] + ',' + str(globalMeanDic[varName]) + ')' + try: + sqlres = c.execute(sql) + conn.commit() + except: + pass + c.close() + conn.close() + +EOF + +#-- Run the averager script +python global_atmos_ave.py +python global_ocean_ave.py +python global_land_ave.py + +#-- Copy the database back to its original location +foreach reg (global nh sh tropics) + cp -f ${localRoot}/db/.${reg}AveAtmos.db ${localRoot}/db/${reg}AveAtmos.db + cp -f ${localRoot}/db/.${reg}AveOcean.db ${localRoot}/db/${reg}AveOcean.db + cp -f ${localRoot}/db/.${reg}AveLand.db ${localRoot}/db/${reg}AveLand.db +end + +echo " ---------- end refineDiag_data_stager.csh ---------- " +echo "" +echo "" +echo "" + +exit