#!/usr/bin/python #======================================================================================== # name: tsclm_djf.py # # category: Python script # # description # This script constructs time series of DJF mean from each year (different from # sequential DJF time series) for specified variables of MIROC output. The resulting # files may be useful when testing the statistical significance for the climatological # difference of two experiments. # # input: individual year output = yYYYY (e.g., y0300, y0301,...) # # call: ngt commands (ngtavr, ngtcf) and CDO commands (settaxis, invertlat) # # usage # ./tsclm_djf.py: to create an executable file, "tsclm_djf.csh" # ./tsclm_djf.csh: to execute # # note: works on denali@EES # # history # 2017.11.20: originally written # # author # m.yoshimori (myoshimo AT ees.hokudai.ac.jp) #======================================================================================== import os import mydigit # my module to change digit (e.g., 100 to 0100) #------------------- # user defined block #------------------- # C-shell script to be created by this Python script fcsh = 'tsdjf.csh' #--------- # settings #--------- # input path datapathi = '/mnt/clm12/masakazu/test' # output path datapatho = '/mnt/clm12/masakazu/test2' # netCDF output (1: Yes, 0: No) netcdf = 1 # gtool output (1: Yes, 0: No) gtool = 1 # sub-directories #subdir = '' subdir = 'L20' # variables #variable_list = ['T2','prcp'] variable_list = ['T'] #--------------------------------------- # specify parameters for each experiment #--------------------------------------- class Experiment: pass #-------------------- # list of experiments #-------------------- # exp. 0 EXP0 = Experiment() EXP0.inp = datapathi + '/ContASGCMo' EXP0.year_start = 431 EXP0.year_end = 460 EXP0.out = datapatho + '/ContASGCMo' # exp. 1 EXP1 = Experiment() EXP1.inp = datapathi + '/ASGCM2xCO2o' EXP1.year_start = 411 EXP1.year_end = 440 EXP1.out = datapatho + '/ASGCM2xCO2o' exp_list = [EXP0,EXP1] #----------------------- # do not edit below here #----------------------- # number of years in one file year_step = 1 f = open(fcsh,'w') f.write('#!/bin/csh \n') for exp in exp_list: inp = exp.inp year_start = exp.year_start year_end = exp.year_end out = exp.out + '/' + subdir nstep = (year_end - year_start + 1)/year_step # number of iterations yyyys = mydigit.year2yyyy(year_start) yyyye = mydigit.year2yyyy(year_end) f.write('\n') f.write('# Create output directory if not exist\n') f.write('mkdir -p '+out+'\n') f.write('\n') # combine data over files for var in variable_list: fout = out +'/ts_'+var+'_y'+str(yyyys)+'-y'+str(yyyye)+'_djf' # calculate seasonal average f.write('# Calculate seasonal average\n') i=0 # initialize counter while i < nstep: tmp = year_start + year_step*(i) yyyy1 = mydigit.year2yyyy(tmp) tmp = year_start + year_step*(i+1) - 1 yyyy2 = mydigit.year2yyyy(tmp) if year_step == 1: dir = inp+'/y'+str(yyyy1)+'/'+subdir else: dir = inp+'/y'+str(yyyy1)+'-y'+str(yyyy2)+'/'+subdir f.write('ngtavr -o tmp'+str(i)+' -t 1:2,12:12 '+dir+'/'+var+'\n') i += 1 f.write('\n') # combine seasonally averaged files f.write('# Combine seasonally averaged files\n') f.write('ngtcat -o '+fout+' ') i=0 # initialize counter while i < nstep: f.write('tmp'+str(i)+' ') i += 1 f.write('\n') # delete intermediate files f.write('/bin/rm ') i=0 # initialize counter while i < nstep: f.write('tmp'+str(i)+' ') i += 1 f.write('\n') f.write('\n') if netcdf == 1: # netCDF output f.write('# Convert Gtool to netCDF\n') f.write('ngtcf '+fout+' tmp1.nc\n') f.write('cdo settaxis,1850-01-16,12:00,1year tmp1.nc tmp2.nc\n') #f.write('cdo invertlat tmp2.nc '+fout+'.nc\n') f.write('/bin/mv tmp2.nc '+fout+'.nc\n') #f.write('/bin/mv tmp1.nc '+fout+'.nc\n') f.write('/bin/rm tmp?.nc\n') f.write('\n') if gtool == 0: # no gtool output f.write('# Delete the Gtool file\n') f.write('/bin/rm '+fout+'\n') f.write('\n') f.write('exit\n') os.chmod(fcsh, 0755)