; NCL script ; SpinupStability_SP_v9.ncl ; Script to examine stability of SP spinup simulation. ; This version operates on either monthly mean or multi-annual mean multi-variable history files ; Keith Oleson, Sep 2018 load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" load "~oleson/lnd_diag/run/contributed.ncl" load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/shea_util.ncl" begin print ("=========================================") print ("Start Time: "+systemfunc("date") ) print ("=========================================") ;=======================================================================; ; This script produces a page of plots of various variables that are evaluated ; as to whether they are spunup or not. A summary of variables in equilibrium ; and/or in disequilibrium is also produced to standard out. The postscript output ; is $caseid_spinup.ps in the pwd. ; The variables examined are FSH,EFLX_LH_TOT,FPSN,TWS,H2OSOI,TSOI. ; The percentage of land area in TSOI disequilibrium is also examined. ; Thresholds are defined below (i.e., global_thresh_*) and can be changed for individual ; variables. ; To run this script, just enter in your case name and username below. ; AND set the annual_hist flag to "True" if your case has annual mean history files or set ; annual_hist flag to "False" if your case has monthly mean history files. ; The script ; assumes that your history files are in /glade/scratch/$username/archive/$caseid/lnd/hist ;=======================================================================; caseid = "cesm20exp10j_1deg_CPLHST_nndep_1850pAD" username = "oleson" annual_hist = "False" cplot = "Global" subper = 20 h2osoi_layer = 8 ; Desired soil layer (layer 8 is about 1m) tsoi_layer = 10 ; Desired soil layer (layer 10 is about 3m) do_plot = "True" ;=======================================================================; data_dir = "/glade/scratch/"+username+"/archive/"+caseid+"/lnd/hist/" ; Thresholds glob_thresh_fsh = 0.02 ; global threshold for FSH equilibrium (delta W m-2 / yr) glob_thresh_lh = 0.02 ; global threshold for EFLX_LH_TOT equilibrium (delta W m-2 / yr) glob_thresh_gpp = 0.02 ; global threshold for FPSN equilibrium (delta PgC / yr) glob_thresh_tws = 0.001 ; global threshold for TWS equilibrium (delta m / yr) glob_thresh_h2osoi = 0.01 ; global threshold for H2OSOI equilibrium (delta mm mm-3 / yr) glob_thresh_tsoi = 0.02 ; global threshold for TSOI equilibrium (delta K / yr) glob_thresh_area = 3.0 ; global threshold percent area with TWS disequilibrium gt 0.01 m tws_thresh = 0.001 ; disequilibrium threshold for individual gridcells (m) if (annual_hist .eq. "True") then fls = systemfunc("ls " + data_dir + caseid+".clm2.h0.*-*-*-*"+".nc") else fls = systemfunc("ls " + data_dir + caseid+".clm2.h0.*-*"+".nc") end if flsdims = dimsizes(fls) if (annual_hist .eq. "True") then lstfile = addfile(fls(flsdims-1),"r") else lstfile = addfile(fls(flsdims-12),"r") ;last month (DEC) of any year has mdate for next year ;so grab JAN of last year end if if (annual_hist .eq. "True") then lstyrdim = dimsizes(lstfile->mcdate) mcdate_lst = lstfile->mcdate(lstyrdim-1) else mcdate_lst = lstfile->mcdate end if lstyr = toint(mcdate_lst)/10000 fstfile = addfile(fls(0),"r") if (annual_hist .eq. "True") then mcdate_fst = fstfile->mcdate(0) else mcdate_fst = fstfile->mcdate end if fstyr = toint(mcdate_fst)/10000 yearplt = ispan(fstyr,lstyr,subper) yearpltrev = yearplt(::-1) year = ispan(fstyr,lstyr,subper) - fstyr nyrs = dimsizes(year) if (subper .eq. 1) then yearpltmid = ispan(fstyr+subper/2,yearplt(nyrs-2),subper) else yearpltmid = ispan(fstyr+subper/2,yearplt(nyrs-1),subper) end if ; Build an array of monthly indices monstr = new(nyrs*12,"integer") do i = 0,nyrs-1 monstr(i*12:i*12+11) = ispan(year(i)*12,year(i)*12+11,1) end do ; Add the data files together if (annual_hist .eq. "True") then data = addfiles(fls, "r") ListSetType (data, "cat") else data = addfiles(fls(monstr), "r") end if ; Convert to annual means if (annual_hist .eq. "True") then fsh = data[:]->FSH(year,:,:) lh = data[:]->EFLX_LH_TOT(year,:,:) gpp = data[:]->FPSN(year,:,:) tws = data[:]->TWS(year,:,:) h2osoi = data[:]->H2OSOI(year,h2osoi_layer-1,:,:) tsoi = data[:]->TSOI(year,tsoi_layer-1,:,:) else fsh = month_to_annual(data[:]->FSH,1) if (isfilevar(data[0],"EFLX_LH_TOT")) then lh = month_to_annual(data[:]->EFLX_LH_TOT,1) else tmp1 = data[:]->FCTR tmp2 = data[:]->FCEV tmp3 = data[:]->FGEV tot = tmp1+tmp2+tmp3 copy_VarCoords(tmp1,tot) lh = month_to_annual(tot,1) delete(tmp1) delete(tmp2) delete(tmp3) delete(tot) end if gpp = month_to_annual(data[:]->FPSN,1) if (isfilevar(data[0],"TWS")) then tws = month_to_annual(data[:]->TWS,1) else tmp1 = data[:]->H2OCAN tmp2 = data[:]->H2OSNO tmp3 = data[:]->WA tmp4 = data[:]->SOILLIQ tmp4s = dim_sum_n(tmp4,1) tmp5 = data[:]->SOILICE tmp5s = dim_sum_n(tmp5,1) tot = tmp1+tmp2+tmp3+tmp4s+tmp5s copy_VarCoords(tmp1,tot) tws = month_to_annual(tot,1) delete(tmp1) delete(tmp2) delete(tmp3) delete(tmp4) delete(tmp4s) delete(tmp5) delete(tmp5s) end if h2osoi = month_to_annual(data[:]->H2OSOI(:,h2osoi_layer-1,:,:),1) tsoi = month_to_annual(data[:]->TSOI(:,tsoi_layer-1,:,:),1) end if lat = data[0]->lat nlat = dimsizes(lat) lon = data[0]->lon nlon = dimsizes(lon) landfrac = data[0]->landfrac area = data[0]->area ; nbedrock = data[0]->nbedrock aream = area*1.e6 landarea = landfrac*aream gtoPg = 1e-15 secinyr = 60.*60.*24.*365. umoleCO2tomoleCO2 = 1./1.e6 moleCO2togCO2 = 44./1. gCO2togC = 12./44. ; FSH if (isfilevar(data[0],"FSH")) then areasum = sum(area*landfrac) areaL = area*landfrac landareaL = conform_dims(dimsizes(fsh),areaL,(/1,2/)) ; conforming dimensions of areaL to tlai fsh_glob = dim_sum_n(fsh*landareaL/areasum,(/1,2/)) ; weighted global fsh (W m-2) fsh_glob!0 = "year" fsh_glob&year = yearplt fsh_glob_del = new(nyrs-1,"float") do i = 0,nyrs-2 fsh_glob_del(i) = (fsh_glob(i+1) - fsh_glob(i))/subper end do fsh_glob_del!0 = "year" fsh_glob_del&year = yearpltmid indx = where(abs(fsh_glob_del) .lt. glob_thresh_fsh,1,0) if (all(indx .eq. 1)) then fsh_glob_equil = yearplt(0) else if (.not.(all(indx .eq. 0)) .and. indx(dimsizes(indx)-1) .ne. 0) then indxrev = indx(::-1) do i = 0,dimsizes(indxrev)-1 if (indxrev(i) .eq. 0) then fsh_glob_equil = yearpltrev(i-1) break end if end do delete(indxrev) else fsh_glob_equil = -999 end if end if fsh_glob_equil@_FillValue = -999 delete(indx) else fsh_glob_equil = new(1,typeof(yearplt),-999) fsh_glob_equil = -999 fsh_glob = new(dimsizes(dim_sum_n(fsh,(/1,2/))),typeof(fsh),-999) fsh_glob = -999 fsh_glob_del = new(nyrs-1,"float",-999.) fsh_glob_del = -999. end if ; EFLX_LH_TOT ; if (isfilevar(data[0],"EFLX_LH_TOT")) then lh_glob = dim_sum_n(lh*landareaL/areasum,(/1,2/)) ; weighted global lh (W m-2) lh_glob!0 = "year" lh_glob&year = yearplt lh_glob_del = new(nyrs-1,"float") do i = 0,nyrs-2 lh_glob_del(i) = (lh_glob(i+1) - lh_glob(i))/subper end do lh_glob_del!0 = "year" lh_glob_del&year = yearpltmid indx = where(abs(lh_glob_del) .lt. glob_thresh_lh,1,0) if (all(indx .eq. 1)) then lh_glob_equil = yearplt(0) else if (.not.(all(indx .eq. 0)) .and. indx(dimsizes(indx)-1) .ne. 0) then indxrev = indx(::-1) do i = 0,dimsizes(indxrev)-1 if (indxrev(i) .eq. 0) then lh_glob_equil = yearpltrev(i-1) break end if end do delete(indxrev) else lh_glob_equil = -999 end if end if lh_glob_equil@_FillValue = -999 delete(indx) ; else ; lh_glob_equil = new(1,typeof(yearplt),-999) ; lh_glob_equil = -999 ; lh_glob = new(dimsizes(dim_sum_n(lh,(/1,2/))),typeof(lh),-999) ; lh_glob = -999 ; lh_glob_del = new(nyrs-1,"float",-999.) ; lh_glob_del = -999. ; end if ; GPP landareaC = conform_dims(dimsizes(gpp),landarea,(/1,2/)) ; conforming dimensions of landarea to gpp gpp_area = gpp*landareaC ; correcting gpp for total land area gpp_pg = gpp_area*gtoPg*secinyr*umoleCO2tomoleCO2*moleCO2togCO2*gCO2togC ; umole CO2/s->Pg Carbon gpp_glob = dim_sum_n(gpp_pg, (/1,2/)) ; sums over all latitudes gpp_glob!0 = "year" gpp_glob&year = yearplt gpp_glob_del = new(nyrs-1,"float") do i = 0,nyrs-2 gpp_glob_del(i) = (gpp_glob(i+1) - gpp_glob(i))/subper end do gpp_glob_del!0 = "year" gpp_glob_del&year = yearpltmid indx = where(abs(gpp_glob_del) .lt. glob_thresh_gpp,1,0) if (all(indx .eq. 1)) then gpp_glob_equil = yearplt(0) else if (.not.(all(indx .eq. 0)) .and. indx(dimsizes(indx)-1) .ne. 0) then indxrev = indx(::-1) do i = 0,dimsizes(indxrev)-1 if (indxrev(i) .eq. 0) then gpp_glob_equil = yearpltrev(i-1) break end if end do delete(indxrev) else gpp_glob_equil = -999 end if end if gpp_glob_equil@_FillValue = -999 delete(indx) ; TWS tws_glob = (dim_sum_n(tws*landareaL/areasum,(/1,2/)))/1.e3 ; weighted global tws (meters) tws_glob!0 = "year" tws_glob&year = yearplt tws_glob_del = new(nyrs-1,"float") do i = 0,nyrs-2 tws_glob_del(i) = (tws_glob(i+1) - tws_glob(i))/subper end do tws_glob_del!0 = "year" tws_glob_del&year = yearpltmid indx = where(abs(tws_glob_del) .lt. glob_thresh_tws,1,0) if (all(indx .eq. 1)) then tws_glob_equil = yearplt(0) else if (.not.(all(indx .eq. 0)) .and. indx(dimsizes(indx)-1) .ne. 0) then indxrev = indx(::-1) do i = 0,dimsizes(indxrev)-1 if (indxrev(i) .eq. 0) then tws_glob_equil = yearpltrev(i-1) break end if end do delete(indxrev) else tws_glob_equil = -999 end if end if tws_glob_equil@_FillValue = -999 delete(indx) ; H2OSOI if (isfilevar(data[0],"H2OSOI")) then h2osoi_glob = dim_sum_n(h2osoi*landareaL/areasum,(/1,2/)) ; weighted global h2osoi (mm) h2osoi_glob!0 = "year" h2osoi_glob&year = yearplt h2osoi_glob_del = new(nyrs-1,"float") do i = 0,nyrs-2 h2osoi_glob_del(i) = (h2osoi_glob(i+1) - h2osoi_glob(i))/subper end do h2osoi_glob_del!0 = "year" h2osoi_glob_del&year = yearpltmid indx = where(abs(h2osoi_glob_del) .lt. glob_thresh_h2osoi,1,0) if (all(indx .eq. 1)) then h2osoi_glob_equil = yearplt(0) else if (.not.(all(indx .eq. 0)) .and. indx(dimsizes(indx)-1) .ne. 0) then indxrev = indx(::-1) do i = 0,dimsizes(indxrev)-1 if (indxrev(i) .eq. 0) then h2osoi_glob_equil = yearpltrev(i-1) break end if end do delete(indxrev) else h2osoi_glob_equil = -999 end if end if h2osoi_glob_equil@_FillValue = -999 delete(indx) else h2osoi_glob_equil = -999 h2osoi_glob_equil = new(1,typeof(yearplt),-999) h2osoi_glob_equil = -999 h2osoi_glob = new(dimsizes(dim_sum_n(h2osoi,(/1,2/))),typeof(h2osoi),-999) h2osoi_glob = -999 h2osoi_glob_del = new(nyrs-1,"float",-999.) h2osoi_glob_del = -999. end if ; TSOI if (isfilevar(data[0],"TSOI")) then tsoi_glob = dim_sum_n(tsoi*landareaL/areasum,(/1,2/)) ; weighted global tsoi (mm) tsoi_glob!0 = "year" tsoi_glob&year = yearplt tsoi_glob_del = new(nyrs-1,"float") do i = 0,nyrs-2 tsoi_glob_del(i) = (tsoi_glob(i+1) - tsoi_glob(i))/subper end do tsoi_glob_del!0 = "year" tsoi_glob_del&year = yearpltmid indx = where(abs(tsoi_glob_del) .lt. glob_thresh_tsoi,1,0) if (all(indx .eq. 1)) then tsoi_glob_equil = yearplt(0) else if (.not.(all(indx .eq. 0)) .and. indx(dimsizes(indx)-1) .ne. 0) then indxrev = indx(::-1) do i = 0,dimsizes(indxrev)-1 if (indxrev(i) .eq. 0) then tsoi_glob_equil = yearpltrev(i-1) break end if end do delete(indxrev) else tsoi_glob_equil = -999 end if end if tsoi_glob_equil@_FillValue = -999 delete(indx) else h2osno_glob_equil = -999 h2osno_glob_equil = new(1,typeof(yearplt),-999) h2osno_glob_equil = -999 h2osno_glob = new(dimsizes(dim_sum_n(h2osno,(/1,2/))),typeof(h2osno),-999) h2osno_glob = -999 h2osno_glob_del = new(nyrs-1,"float",-999.) h2osno_glob_del = -999. end if ; Land area not in TWS equilibrium landarea_noequil = new((/nyrs-1,nlat,nlon/),"float") do i = 0,nyrs-2 landarea_noequil(i,:,:) = where(abs(tws(i+1,:,:)/1.e3 - tws(i,:,:)/1.e3)/subper .gt. tws_thresh, landarea, 0.) end do perc_landarea_noequil = 100.*(dim_sum_n(landarea_noequil,(/1,2/))/sum(landarea)) indx = where(abs(perc_landarea_noequil) .lt. glob_thresh_area,1,0) if (all(indx .eq. 1)) then perc_landarea_glob_noequil = yearplt(0) else if (.not.(all(indx .eq. 0)) .and. indx(dimsizes(indx)-1) .ne. 0) then indxrev = indx(::-1) do i = 0,dimsizes(indxrev)-1 if (indxrev(i) .eq. 0) then perc_landarea_glob_noequil = yearpltrev(i-1) break end if end do delete(indxrev) else perc_landarea_glob_noequil = -999 end if end if perc_landarea_glob_noequil@_FillValue = -999 delete(indx) tws_1_map = where(landarea_noequil(nyrs-2,:,:) .ne. 0.,(tws(nyrs-1,:,:)/1.e3-tws(nyrs-2,:,:)/1.e3)/subper,tws@_FillValue) tws_1_map!0 = "lat" tws_1_map&lat = lat tws_1_map!1 = "lon" tws_1_map&lon = lon tws_2_map = where(landarea_noequil(nyrs-3,:,:) .ne. 0.,(tws(nyrs-2,:,:)/1.e3-tws(nyrs-3,:,:)/1.e3)/subper,tws@_FillValue) copy_VarCoords(tws_1_map,tws_2_map) ;===============================Plotting====================================; if (do_plot .eq. "True") then ; wks_type = "png" ; wks_type@wkWidth = 2500 ; wks_type@wkHeight = 2500 ; wks_type = "x11" wks_type = "ps" ; wks_type = "pdf" wks = gsn_open_wks (wks_type, caseid+"_SP_Spinup") gsn_define_colormap(wks, "ViBlGrWhYeOrRe") plot = new(13,"graphic") resP = True ; resP@gsnMaximize = True resP@gsnPaperOrientation = "portrait" resP@gsnFrame = False resP@gsnDraw = True resP@txString = caseid + " Annual Mean " resP@gsnPanelXWhiteSpacePercent = 2. resP@gsnPanelCenter = False ; resP@gsnPanelDebug = True res = True res@gsnFrame = False res@gsnDraw = False res@xyLineThicknessF = 2 polyres1 = True polyres1@gsLineDashPattern = 16 polyres2 = True polyres2@gsLineDashPattern = 2 res@tiXAxisString = " " res@tiYAxisString = "W m~S~-2~N~" res@tiMainString = "FSH" plot(0) = gsn_csm_xy(wks,yearplt,fsh_glob,res) res@tiYAxisString = "W m~S~-2~N~" res@tiMainString = "Delta FSH " + "EqYr: "+fsh_glob_equil res@trYMaxF = 0.2 res@trYMinF = -0.2 plot(1) = gsn_csm_xy(wks,yearpltmid,fsh_glob_del,res) prim1 = gsn_add_polyline(wks,plot(1),(/0.,yearpltmid(nyrs-2)/),(/0.,0./),polyres1) prim2 = gsn_add_polyline(wks,plot(1),(/0.,yearpltmid(nyrs-2)/),(/-glob_thresh_fsh,-glob_thresh_fsh/),polyres2) prim3 = gsn_add_polyline(wks,plot(1),(/0.,yearpltmid(nyrs-2)/),(/glob_thresh_fsh,glob_thresh_fsh/),polyres2) delete(res@trYMaxF) delete(res@trYMinF) res@tiYAxisString = "W m~S~-2~N~" res@tiMainString = "EFLX_LH_TOT" plot(2) = gsn_csm_xy(wks,yearplt,lh_glob,res) res@tiYAxisString = "W m~S~-2~N~" res@tiMainString = "Delta EFLX_LH_TOT " + "EqYr: "+lh_glob_equil res@trYMaxF = 0.2 res@trYMinF = -0.2 plot(3) = gsn_csm_xy(wks,yearpltmid,lh_glob_del,res) prim4 = gsn_add_polyline(wks,plot(3),(/0.,yearpltmid(nyrs-2)/),(/0.,0./),polyres1) prim5 = gsn_add_polyline(wks,plot(3),(/0.,yearpltmid(nyrs-2)/),(/-glob_thresh_lh,-glob_thresh_lh/),polyres2) prim6 = gsn_add_polyline(wks,plot(3),(/0.,yearpltmid(nyrs-2)/),(/glob_thresh_lh,glob_thresh_lh/),polyres2) delete(res@trYMaxF) delete(res@trYMinF) res@tiYAxisString = "Pg C yr~S~-1~N~" res@tiMainString = "GPP" plot(4) = gsn_csm_xy(wks,yearplt,gpp_glob,res) res@tiYAxisString = "Pg C yr~S~-1~N~" res@tiXAxisString = "Spinup Year" res@tiMainString = "Delta GPP " + "EqYr: "+gpp_glob_equil res@trYMaxF = 0.2 res@trYMinF = -0.2 plot(5) = gsn_csm_xy(wks,yearpltmid,gpp_glob_del,res) prim7 = gsn_add_polyline(wks,plot(5),(/0.,yearpltmid(nyrs-2)/),(/0.,0./),polyres1) prim8 = gsn_add_polyline(wks,plot(5),(/0.,yearpltmid(nyrs-2)/),(/-glob_thresh_gpp,-glob_thresh_gpp/),polyres2) prim9 = gsn_add_polyline(wks,plot(5),(/0.,yearpltmid(nyrs-2)/),(/glob_thresh_gpp,glob_thresh_gpp/),polyres2) delete(res@trYMaxF) delete(res@trYMinF) res@tiYAxisString = "m" res@tiMainString = "TWS" plot(6) = gsn_csm_xy(wks,yearplt,tws_glob,res) res@tiYAxisString = "m" res@tiMainString = "Delta TWS " + "EqYr: "+tws_glob_equil res@trYMaxF = 0.05 res@trYMinF = -0.05 plot(7) = gsn_csm_xy(wks,yearpltmid,tws_glob_del,res) prim10 = gsn_add_polyline(wks,plot(7),(/0.,yearpltmid(nyrs-2)/),(/0.,0./),polyres1) prim11 = gsn_add_polyline(wks,plot(7),(/0.,yearpltmid(nyrs-2)/),(/-glob_thresh_tws,-glob_thresh_tws/),polyres2) prim12 = gsn_add_polyline(wks,plot(7),(/0.,yearpltmid(nyrs-2)/),(/glob_thresh_tws,glob_thresh_tws/),polyres2) delete(res@trYMaxF) delete(res@trYMinF) res@tiYAxisString = "mm~S~3~N~ mm~S~3~N~" res@tiMainString = "H2OSOI (layer "+h2osoi_layer+")" plot(8) = gsn_csm_xy(wks,yearplt,h2osoi_glob,res) res@tiYAxisString = "mm~S~3~N~ mm~S~3~N~" res@tiXAxisString = "Spinup Year" res@tiMainString = "Delta H2OSOI " + "EqYr: "+h2osoi_glob_equil res@trYMaxF = 0.2 res@trYMinF = -0.2 plot(9) = gsn_csm_xy(wks,yearpltmid,h2osoi_glob_del,res) prim13 = gsn_add_polyline(wks,plot(9),(/0.,yearpltmid(nyrs-2)/),(/0.,0./),polyres1) prim14 = gsn_add_polyline(wks,plot(9),(/0.,yearpltmid(nyrs-2)/),(/-glob_thresh_h2osoi,-glob_thresh_h2osoi/),polyres2) prim15 = gsn_add_polyline(wks,plot(9),(/0.,yearpltmid(nyrs-2)/),(/glob_thresh_h2osoi,glob_thresh_h2osoi/),polyres2) delete(res@trYMaxF) delete(res@trYMinF) res@tiYAxisString = "K" res@tiMainString = "TSOI (layer "+tsoi_layer+")" plot(10) = gsn_csm_xy(wks,yearplt,tsoi_glob,res) res@tiYAxisString = "K" res@tiXAxisString = "Spinup Year" res@tiMainString = "Delta TSOI " + "EqYr: "+tsoi_glob_equil res@trYMaxF = 0.2 res@trYMinF = -0.2 plot(11) = gsn_csm_xy(wks,yearpltmid,tsoi_glob_del,res) prim16 = gsn_add_polyline(wks,plot(11),(/0.,yearpltmid(nyrs-2)/),(/0.,0./),polyres1) prim17 = gsn_add_polyline(wks,plot(11),(/0.,yearpltmid(nyrs-2)/),(/-glob_thresh_tsoi,-glob_thresh_tsoi/),polyres2) prim18 = gsn_add_polyline(wks,plot(11),(/0.,yearpltmid(nyrs-2)/),(/glob_thresh_tsoi,glob_thresh_tsoi/),polyres2) res@tiYAxisString = "%" res@tiMainString = "% Land Area in TWS Disequil " + "EqYr: "+perc_landarea_glob_noequil res@trYMaxF = 80.0 res@trYMinF = 0.0 plot(12) = gsn_csm_xy(wks,yearpltmid,perc_landarea_noequil,res) prim19 = gsn_add_polyline(wks,plot(12),(/0.,yearpltmid(nyrs-2)/),(/glob_thresh_area,glob_thresh_area/),polyres2) gsn_panel(wks,plot,(/4,4/),resP) delete(plot) resc = True ; turn on plotting options resc@gsnSpreadColors = True ; spans all colors in colormap resc@cnFillMode = "RasterFill" ; raster mode resc@cnFillOn = True ; turn on color fill resc@cnLinesOn = False ; turn off contour lines resc@cnLineLabelsOn = False ; turn off contour line labels resc@cnLevelSelectionMode = "ExplicitLevels" resc@mpProjection = "robinson" ; Robinson grid projection if (cplot .eq. "Arctic") then resc@mpLimitMode = "LatLon" resc@mpMinLatF = 50. resc@mpMaxLatF = 85. resc@mpMinLonF = -180. resc@mpMaxLonF = -95. resc@gsnAddCyclic = False resc@mpProjection = "CylindricalEquidistant" end if resc@gsnDraw = True resc@gsnFrame = False resc@lbAutoManage = False resc@lbLabelFontHeightF = 0.010 resc@txFontHeightF = 0.008 resc@cnLevels = (/-0.005,-0.004,-0.003,-0.002,-0.001,0.0,0.001,0.002,0.003,0.004,0.005/) resc@gsnLeftString = "m" resc@gsnRightString = "" resc@vpXF = 0.30 ; position and sizes resc@vpYF = 0.28 ; for XY plot resc@vpWidthF = 0.30 resc@vpHeightF = 0.30 resc@gsnCenterString = "TWS Disequil Yr " + yearplt(nyrs-1) + " - " + yearplt(nyrs-2) plot = gsn_csm_contour_map(wks,tws_1_map,resc) resc@vpXF = 0.65 ; position and sizes resc@vpYF = 0.28 ; for XY plot resc@vpWidthF = 0.30 resc@vpHeightF = 0.30 resc@gsnCenterString = "TWS Disequil Yr " + yearplt(nyrs-2) + " - " + yearplt(nyrs-3) plot = gsn_csm_contour_map(wks,tws_2_map,resc) frame(wks) end if ; end do_plot ; Equilibrium summary print((/"======================================================================="/)) print((/"======================================================================="/)) print((/"EQUILIBRIUM SUMMARY"/)) print((/"======================================================================="/)) if (.not.(ismissing(fsh_glob_equil))) then print((/"FSH is in equilibrium. Eq. Yr. = "+fsh_glob_equil/)) else print((/"FATAL: FSH is NOT in equilibrium"/)) end if if (.not.(ismissing(lh_glob_equil))) then print((/"EFLX_LH_TOT is in equilibrium. Eq. Yr. = "+lh_glob_equil/)) else print((/"FATAL: EFLX_LH_TOT is NOT in equilibrium"/)) end if if (.not.(ismissing(gpp_glob_equil))) then print((/"GPP is in equilibrium. Eq. Yr. = "+gpp_glob_equil/)) else print((/"FATAL: GPP is NOT in equilibrium"/)) end if if (.not.(ismissing(tws_glob_equil))) then print((/"TWS is in equilibrium. Eq. Yr. = "+tws_glob_equil/)) else print((/"WARNING: TWS is NOT in equilibrium or is missing"/)) end if if (.not.(ismissing(h2osoi_glob_equil))) then print((/"H2OSOI is in equilibrium. Eq. Yr. = "+h2osoi_glob_equil/)) else print((/"FATAL: H2OSOI is NOT in equilibrium"/)) end if if (.not.(ismissing(tsoi_glob_equil))) then print((/"TSOI is in equilibrium. Eq. Yr. = "+tsoi_glob_equil/)) else print((/"FATAL: TSOI is NOT in equilibrium"/)) end if if (.not.(ismissing(perc_landarea_glob_noequil))) then print((/"At least "+(100.-glob_thresh_area)+" percent of the land surface is in TWS equilibrium. Eq. Yr. = "+perc_landarea_glob_noequil/)) print((/"Percent of the land surface not in equilibrium ("+sprintf("%6.2f",perc_landarea_noequil(nyrs-2))+"% )"/)) else print((/"FATAL: Not enough of the land surface is in equilibrium ("+sprintf("%6.2f",perc_landarea_noequil(nyrs-2))+"% > "+sprintf("%6.2f",glob_thresh_area)+"%)"/)) end if if (.not.(ismissing(fsh_glob_equil)) .and. \ .not.(ismissing(lh_glob_equil)) .and. \ .not.(ismissing(gpp_glob_equil)) .and. \ .not.(ismissing(tws_glob_equil)) .and. \ .not.(ismissing(h2osoi_glob_equil)) .and. \ .not.(ismissing(tsoi_glob_equil)) .and. \ .not.(ismissing(perc_landarea_glob_noequil))) then print((/"Congratulations! Your simulation is in equilibrium"/)) else print((/"FATAL: Your simulation is not in equilibrium, 8 hours have been deducted from your PTO bank, try again"/)) end if print((/"======================================================================="/)) print ("=========================================") print ("Finish Time: "+systemfunc("date") ) print ("=========================================") print ("Successfully ran the script") end