// condense_ncom.i: Condense CSM ocean model data // Case name case_name= "b003"; // Run name run_name= "b003.03"; // Starting years for consolidated archives // (the last year on the list need not have data associated with it) yearlist= 30 + 5*(indgen( 5)-1); yearlist(0)= 51; // b003.01 yearlist= 50 + 5*(indgen(11)-1); yearlist(1)= 51; // b003.02 yearlist= 100 + 5*(indgen(11)-1); // b003.03a yearlist= 150 + 5*(indgen(11)-1); // b003.03b yearlist= 200 + 5*(indgen(11)-1); // b003.03c yearlist= 250 + 5*(indgen(11)-1); // b003.03d // List of region names (use null string for global domain) regnames= ["pacific", "atlantic"]; // Vertical extent limz1= [0., 500.]; // Retention period in days (for MSS output files) rtpd= 1100; // Number of regions nreg= numberof(regnames); // Days per month daymon= [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // Cumulative days per month cumdaymon= (daymon(cum))(1:-1); // Number of months nmon= numberof(daymon); // Input/output user names inuser= "BRYAN"; outuser= "SVN"; // Input directory name indir= "GLOBAL/D02L45T2/csm-"+run_name+"/ncdf"; // Output directory name outdir= "csm/"+case_name+"/ncom/ncdf"; // Temporary directory tmpdir= get_env("TMPDIR"); if (strlen(tmpdir) == 0) tmpdir="."; tmpdir= "/tmp/svn"; write, "TMPDIR="+tmpdir; // Directory prefixes inprefix= inuser+"/"+indir; outprefix= outuser+"/"+outdir; // Temporary disk directories for input/output files oscommand, "mkdir -p "+tmpdir+"/"+inprefix; oscommand, "mkdir -p "+tmpdir+"/"+outprefix; for (iperiod=1; iperiod <= numberof(yearlist)-1; iperiod++) { write, format="iperiod=%4d\n", iperiod; // Staring/ending years startyear= yearlist(iperiod); endyear= yearlist(iperiod+1)-1; nyears= endyear-startyear+1; // Output file names outfiles= array(string,nreg); for (ireg=1; ireg<=nreg; ireg++) { if (regnames(ireg) == "") { outfiles(ireg)= "glo"+strnum(startyear)+"-"+strnum(endyear)+".nc"; } else { outfiles(ireg)= strmid(regnames(ireg),0,3)+strnum(startyear)+"-"+strnum(endyear)+".nc"; } } // Output file structures outstrucs= array(pointer,nreg); outstrucs(*)= &([]); for (iyear=startyear; iyear <= endyear; iyear++) { // List of monthly filenames dfile= array(string,nmon); pfile= array(string,nmon); for (imon=1; imon <= nmon; imon++) { if (imon < nmon) { iyear2= iyear; iday2= cumdaymon(imon+1); } else { iyear2= iyear+1; iday2= cumdaymon(1); } prefix= "y"+strmid(strnum(10000+iyear2,format="%5d"),1,4)+ ".d"+strmid(strnum(1000+iday2,format="%4d"),1,3)+".00"; dfile(imon)= "ocndiag_mean_"+prefix+".nc"; pfile(imon)= "ocnprog_mean_"+prefix+".nc"; } // cd to temporary working directory cd, tmpdir; // Pre-read history files from MSS /// oscommand, "msreadlist "+strcombine(inprefix+"/"+dfile(*)+".gz"," "); oscommand, "msreadlist "+strcombine(inprefix+"/"+pfile(*)+".gz"," "); for (imon=1; imon <= nmon; imon++) { // Open prognostics file hopen, inprefix+"/"+pfile(imon), scratch=1, command="gunzip "+inprefix+"/%.nc.gz"; for (ireg=1; ireg<=nreg; ireg++) { // For each region, read selected data if (regnames(ireg) == "") { hregion1= []; mask1= 0; rotx1= []; } else { hregion1= regnames(ireg); mask1= 1; if (hregion1 == "atlantic") rotx1= 180.; else rotx1= []; } VARXY= hget(["psi","smfx","smfy","Tflx","Sflx"], rotx=rotx1,hregion=hregion1,mask=mask1,shrink=1); VARXYZ= hget(["T","S","U","V","W"], limz=limz1, rotx=rotx1,hregion=hregion1,mask=mask1,shrink=1); // Save/append to output file temstruc= deref(outstrucs(ireg)); happend, temstruc, create=outprefix+"/"+outfiles(ireg), VARXY, VARXYZ; outstrucs(ireg)= &temstruc; temstruc= NULL; } // Close prognostics file hclose; } } for (ireg=1; ireg<=nreg; ireg++) { // For each region, close output file and save to mass store temstruc= *(outstrucs(ireg)); hclose, temstruc, command="gzip "+outprefix+"/"+outfiles(ireg)+"; cd "+tmpdir+"/"+outuser+ "; mssput -rtpd "+strnum(rtpd)+" "+outdir+"/"+outfiles(ireg)+".gz"; outstrucs(ireg)= &([]); write, "Output file /"+outprefix+"/"+outfiles(ireg)+" saved to mass store"; } } write, "Quitting..."; quit;