From 2081ed6fd45fd52670b9b175a642a2b3bd4db6f7 Mon Sep 17 00:00:00 2001 From: Keith Oleson Date: Tue, 19 Oct 2021 16:23:47 -0600 Subject: [PATCH 1/9] Changes to accomodate presence of both levsoi and levgrnd, and add h9 to timeseries --- Config/config_timeseries.xml | 8 +++++ lnd_diag/model1-model2/set_1.ncl | 46 +++++++++++++++--------- lnd_diag/model1-model2/set_1AnomPlot.ncl | 37 +++++++++++-------- lnd_diag/model1-model2/set_1DiffPlot.ncl | 39 ++++++++++++-------- lnd_diag/model1-model2/set_6.ncl | 27 ++++++++------ 5 files changed, 100 insertions(+), 57 deletions(-) diff --git a/Config/config_timeseries.xml b/Config/config_timeseries.xml index 7751fde4..9ec284bd 100644 --- a/Config/config_timeseries.xml +++ b/Config/config_timeseries.xml @@ -207,6 +207,14 @@ years 50 + + hist + FALSE + netcdf4c + day_1 + years + 50 + date_written diff --git a/lnd_diag/model1-model2/set_1.ncl b/lnd_diag/model1-model2/set_1.ncl index 354ba45a..6053175e 100755 --- a/lnd_diag/model1-model2/set_1.ncl +++ b/lnd_diag/model1-model2/set_1.ncl @@ -120,13 +120,17 @@ trendsFlag = stringtointeger(getenv("trends_match_Flag")) area2 = in2->area time2 = in2->time nlev1 = 0 +; CTSM5.1.dev021 now has both levsoi and levgrnd variables +; so I'm changing this to an if/else (01/19/21). This will +; preferentially use levsoi if(isfilevar(in1,"levsoi")) then - nlev1 = getfilevardimsizes(in1,"levsoi") - levsoi1 = in1->levsoi - end if - if (isfilevar(in1,"levgrnd")) then - nlev1 = getfilevardimsizes(in1,"levgrnd") - levsoi1 = in1->levgrnd + nlev1 = getfilevardimsizes(in1,"levsoi") + levsoi1 = in1->levsoi + else + if (isfilevar(in1,"levgrnd")) then + nlev1 = getfilevardimsizes(in1,"levgrnd") + levsoi1 = in1->levgrnd + end if end if if (nlev1 .eq. 0) print("FATAL ERROR: nlev1 = 0") @@ -138,13 +142,17 @@ trendsFlag = stringtointeger(getenv("trends_match_Flag")) nlev1 = 10 end if nlev2 = 0 +; CTSM5.1.dev021 now has both levsoi and levgrnd variables +; so I'm changing this to an if/else (01/19/21). This will +; preferentially use levsoi if (isfilevar(in2,"levsoi")) then - nlev2 = getfilevardimsizes(in2,"levsoi") - levsoi2 = in2->levsoi - end if - if (isfilevar(in2,"levgrnd")) then - nlev2 = getfilevardimsizes(in2,"levgrnd") - levsoi2 = in2->levgrnd + nlev2 = getfilevardimsizes(in2,"levsoi") + levsoi2 = in2->levsoi + else + if (isfilevar(in2,"levgrnd")) then + nlev2 = getfilevardimsizes(in2,"levgrnd") + levsoi2 = in2->levgrnd + end if end if if (nlev2 .eq. 0) print("FATAL ERROR: nlev2 = 0") @@ -478,11 +486,15 @@ trendsFlag = stringtointeger(getenv("trends_match_Flag")) res@pmLegendDisplayMode = "NoCreate" ;"Never" res@vpHeightF = 0.4 res@vpWidthF = 0.8 - if (isfilevar(in, "levsoi")) then - lev = in->levsoi - end if - if (isfilevar(in, "levgrnd")) then - lev = in->levgrnd + ; CTSM5.1.dev021 now has both levsoi and levgrnd variables + ; so I'm changing this to an if/else (01/19/21). This will + ; preferentially use levsoi + if(isfilevar(in1,"levsoi")) then + lev = in1->levsoi + else + if (isfilevar(in1,"levgrnd")) then + lev = in1->levgrnd + end if end if do k=0,nlev-1 res@tiXAxisOn = False diff --git a/lnd_diag/model1-model2/set_1AnomPlot.ncl b/lnd_diag/model1-model2/set_1AnomPlot.ncl index 3e6e0e23..a0c80f7f 100755 --- a/lnd_diag/model1-model2/set_1AnomPlot.ncl +++ b/lnd_diag/model1-model2/set_1AnomPlot.ncl @@ -98,13 +98,16 @@ begin area2 = in2->area time2 = in2->time nlev1 = 0 +; CTSM5.1.dev021 now has both levsoi and levgrnd variables +; so I'm changing this to an if/else (01/19/21) if(isfilevar(in1,"levsoi")) then - nlev1 = getfilevardimsizes(in1,"levsoi") - levsoi1 = in1->levsoi - end if - if (isfilevar(in1,"levgrnd")) then - nlev1 = getfilevardimsizes(in1,"levgrnd") - levsoi1 = in1->levgrnd + nlev1 = getfilevardimsizes(in1,"levsoi") + levsoi1 = in1->levsoi + else + if (isfilevar(in1,"levgrnd")) then + nlev1 = getfilevardimsizes(in1,"levgrnd") + levsoi1 = in1->levgrnd + end if end if if (nlev1 .eq. 0) print("FATAL ERROR: nlev1 = 0") @@ -116,13 +119,16 @@ begin nlev1 = 10 end if nlev2 = 0 - if (isfilevar(in2,"levsoi")) then +; CTSM5.1.dev021 now has both levsoi and levgrnd variables +; so I'm changing this to an if/else (01/19/21) + if(isfilevar(in2,"levsoi")) then nlev2 = getfilevardimsizes(in2,"levsoi") levsoi2 = in2->levsoi - end if - if (isfilevar(in2,"levgrnd")) then - nlev2 = getfilevardimsizes(in2,"levgrnd") - levsoi2 = in2->levgrnd + else + if (isfilevar(in2,"levgrnd")) then + nlev2 = getfilevardimsizes(in2,"levgrnd") + levsoi2 = in2->levgrnd + end if end if if (nlev2 .eq. 0) print("FATAL ERROR: nlev2 = 0") @@ -443,11 +449,14 @@ begin res@pmLegendDisplayMode = "NoCreate" ;"Never" res@vpHeightF = 0.4 res@vpWidthF = 0.8 + ; CTSM5.1.dev021 now has both levsoi and levgrnd variables + ; so I'm changing this to an if/else (01/19/21) if (isfilevar(in, "levsoi")) then lev = in->levsoi - end if - if (isfilevar(in, "levgrnd")) then - lev = in->levgrnd + else + if (isfilevar(in, "levgrnd")) then + lev = in->levgrnd + end if end if do k=0,nlev-1 res@tiXAxisOn = False diff --git a/lnd_diag/model1-model2/set_1DiffPlot.ncl b/lnd_diag/model1-model2/set_1DiffPlot.ncl index cf8a74fa..9da1deb8 100755 --- a/lnd_diag/model1-model2/set_1DiffPlot.ncl +++ b/lnd_diag/model1-model2/set_1DiffPlot.ncl @@ -108,13 +108,16 @@ trendsFlag = stringtointeger(getenv("trends_match_Flag")) area2 = in2->area time2 = in2->time nlev1 = 0 +; CTSM5.1.dev021 now has both levsoi and levgrnd variables +; so I'm changing this to an if/else (01/19/21) if(isfilevar(in1,"levsoi")) then - nlev1 = getfilevardimsizes(in1,"levsoi") - levsoi1 = in1->levsoi - end if - if(isfilevar(in1,"levgrnd")) then - nlev1 = getfilevardimsizes(in1,"levgrnd") - levsoi1 = in1->levgrnd + nlev1 = getfilevardimsizes(in1,"levsoi") + levsoi1 = in1->levsoi + else + if (isfilevar(in1,"levgrnd")) then + nlev1 = getfilevardimsizes(in1,"levgrnd") + levsoi1 = in1->levgrnd + end if end if if (nlev1 .eq. 0) print("FATAL ERROR: nlev1 = 0") @@ -126,13 +129,16 @@ trendsFlag = stringtointeger(getenv("trends_match_Flag")) nlev1 = 10 end if nlev2 = 0 +; CTSM5.1.dev021 now has both levsoi and levgrnd variables +; so I'm changing this to an if/else (01/19/21) if(isfilevar(in2,"levsoi")) then - nlev2 = getfilevardimsizes(in2,"levsoi") - levsoi2 = in2->levsoi - end if - if(isfilevar(in2,"levgrnd")) then - nlev2 = getfilevardimsizes(in2,"levgrnd") - levsoi2 = in2->levgrnd + nlev2 = getfilevardimsizes(in2,"levsoi") + levsoi2 = in2->levsoi + else + if (isfilevar(in2,"levgrnd")) then + nlev2 = getfilevardimsizes(in2,"levgrnd") + levsoi2 = in2->levgrnd + end if end if if (nlev2 .eq. 0) print("FATAL ERROR: nlev2 = 0") @@ -440,11 +446,14 @@ trendsFlag = stringtointeger(getenv("trends_match_Flag")) res@pmLegendDisplayMode = "Never" res@vpHeightF = 0.4 res@vpWidthF = 0.8 + ; CTSM5.1.dev021 now has both levsoi and levgrnd variables + ; so I'm changing this to an if/else (01/19/21) if(isfilevar(in,"levsoi")) then lev = in->levsoi - end if - if(isfilevar(in,"levgrnd")) then - lev = in->levgrnd + else + if(isfilevar(in,"levgrnd")) then + lev = in->levgrnd + end if end if do k=0,nlev-1 res@tiXAxisOn = False diff --git a/lnd_diag/model1-model2/set_6.ncl b/lnd_diag/model1-model2/set_6.ncl index 98afa883..3f6d7b9c 100755 --- a/lnd_diag/model1-model2/set_6.ncl +++ b/lnd_diag/model1-model2/set_6.ncl @@ -343,15 +343,17 @@ nplots = 12 prefix(1) = getenv(name22) in1 = addfile(ptmpdir1+"/"+prefix(0)+"ANN_ALL.nc","r") in2 = addfile(ptmpdir2+"/"+prefix(1)+"ANN_ALL.nc","r") -; Follow logic of set_1 because now both levsoi and levgrnd may be present nlev1 = 0 - if (isfilevar(in1,"levsoi")) then +; CTSM5.1.dev021 now has both levsoi and levgrnd variables +; so I'm changing this to an if/else (01/19/21) + if(isfilevar(in1,"levsoi")) then nlev1 = getfilevardimsizes(in1,"levsoi") levsoi1 = in1->levsoi - end if - if (isfilevar(in1,"levgrnd")) then - nlev1 = getfilevardimsizes(in1,"levgrnd") - levsoi1 = in1->levgrnd + else + if (isfilevar(in1,"levgrnd")) then + nlev1 = getfilevardimsizes(in1,"levgrnd") + levsoi1 = in1->levgrnd + end if end if if (nlev1 .eq. 0) print("FATAL ERROR: nlev1 = 0") @@ -363,13 +365,16 @@ nplots = 12 nlev1 = 10 end if nlev2 = 0 - if (isfilevar(in2,"levsoi")) then +; CTSM5.1.dev021 now has both levsoi and levgrnd variables +; so I'm changing this to an if/else (01/19/21) + if(isfilevar(in2,"levsoi")) then nlev2 = getfilevardimsizes(in2,"levsoi") levsoi2 = in2->levsoi - end if - if (isfilevar(in2,"levgrnd")) then - nlev2 = getfilevardimsizes(in2,"levgrnd") - levsoi2 = in2->levgrnd + else + if (isfilevar(in2,"levgrnd")) then + nlev2 = getfilevardimsizes(in2,"levgrnd") + levsoi2 = in2->levgrnd + end if end if if (nlev2 .eq. 0) print("FATAL ERROR: nlev2 = 0") From 53289e886d3cbc7e6e5bf1486a79440ab1d1bb88 Mon Sep 17 00:00:00 2001 From: Keith Oleson Date: Thu, 11 Aug 2022 12:52:04 -0600 Subject: [PATCH 2/9] Changes to get regridding to work --- lnd_diag/shared/se2fv_esmf.regrid2file.ncl | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lnd_diag/shared/se2fv_esmf.regrid2file.ncl b/lnd_diag/shared/se2fv_esmf.regrid2file.ncl index 4bb39d36..ec6067d1 100644 --- a/lnd_diag/shared/se2fv_esmf.regrid2file.ncl +++ b/lnd_diag/shared/se2fv_esmf.regrid2file.ncl @@ -48,7 +48,7 @@ begin var_in_exclude = (/"lat", "lon", "date_written", "time_written", "time_bounds", "area"/) ;---Specify a list of variables on the source SE file that should be directly copied - var_in_copy = (/"time", "levgrnd", "levlak", "levdcmp", "hist_interval","mscur"/) + var_in_copy = (/"time", "levgrnd", "levsoi", "levlak", "levdcmp", "hist_interval","mscur"/) ;---Specify a list of variables to be regridded var_out = "All_Variables" ; to be regridded @@ -56,8 +56,10 @@ begin ;---Specify the weights, source and destination file names WgtFileName = "weights_file_"+SE_file if (oldres .eq. "SE_NE30") then - SrcSCRIP = LL_dir+"/SCRIPgrid_ne30np4_nomask_c101123.nc" - SrcSCRIPFileName = "SCRIPgrid_ne30np4_nomask_c101123_"+RGRD_file +; SrcSCRIP = LL_dir+"/SCRIPgrid_ne30np4_nomask_c101123.nc" +; SrcSCRIPFileName = "SCRIPgrid_ne30np4_nomask_c101123_"+RGRD_file + SrcSCRIP = "/glade/p/cesmdata/cseg/inputdata/atm/cam/coords/ne30pg3_scrip_170604.nc" + SrcSCRIPFileName = "ne30pg3_scrip_170604_"+RGRD_file else if (oldres .eq. "SE_NE30_CONUS") then SrcSCRIP = LL_dir+"/SCRIPgrid_conus_30_x8_nomask_c170111.nc" @@ -235,7 +237,7 @@ begin if (rank_in .eq.2 .and. .not.any(var_in(nv).eq.var_in_copy)) then vdims = getfilevardims(sfile, var_in(nv)) - if (.not.any(vdims.eq."levgrnd") .and. .not.any(vdims.eq."levlak")) then + if (.not.any(vdims.eq."levgrnd") .and. .not.any(vdims.eq."levlak") .and. .not.any(vdims.eq."levsoi")) then filevardef(rgrd_nc, var_in(nv), varvar_types \ , (/ "time", "lat", "lon" /) ) dumAtts = new( 1, varvar_types) From 9f347b86a393378a85bac3d05707f3291be44dbb Mon Sep 17 00:00:00 2001 From: Keith Oleson Date: Thu, 11 Aug 2022 14:18:01 -0600 Subject: [PATCH 3/9] Changes to output CPL_ENERGY_BAL in terms of global, not land, area. Addition of ZETA to variable list. --- lnd_diag/inputFiles/set2_clm.txt | 1 + lnd_diag/inputFiles/variable_master4.3.ncl | 30 ++++++++++- lnd_diag/model-obs/set_1.ncl | 10 +++- lnd_diag/model-obs/set_5.ncl | 17 ++++++- lnd_diag/model1-model2/set_1.ncl | 18 ++++++- lnd_diag/model1-model2/set_1AnomPlot.ncl | 18 ++++++- lnd_diag/model1-model2/set_1DiffPlot.ncl | 20 +++++++- lnd_diag/model1-model2/set_5.ncl | 32 ++++++++++-- lnd_diag/shared/lnd_func.ncl | 58 ++++++++++++++++++---- lnd_diag/shared/variable_master4.3.ncl | 30 ++++++++++- 10 files changed, 210 insertions(+), 24 deletions(-) diff --git a/lnd_diag/inputFiles/set2_clm.txt b/lnd_diag/inputFiles/set2_clm.txt index 8febd253..285465c4 100755 --- a/lnd_diag/inputFiles/set2_clm.txt +++ b/lnd_diag/inputFiles/set2_clm.txt @@ -109,3 +109,4 @@ globalMeanNat0 PCT_TREE_PFT globalMeanNat0 PCT_GRASS_PFT globalMeanNat0 PCT_SHRUB_PFT globalMeanNat0 PCT_CROP_PFT +globalMeanNat0 ZETA diff --git a/lnd_diag/inputFiles/variable_master4.3.ncl b/lnd_diag/inputFiles/variable_master4.3.ncl index 5fc87deb..60f77349 100644 --- a/lnd_diag/inputFiles/variable_master4.3.ncl +++ b/lnd_diag/inputFiles/variable_master4.3.ncl @@ -5424,7 +5424,7 @@ if (varName .eq. "LITTERC_HR") then if (varName .eq. "CPL_ENERGY_BAL") then info@flux=True - info@longName="Coupler Energy Balance (Land Area)" + info@longName="Coupler Energy Balance (Global Area)" info@nativeUnits = "W/m2" ; -- global Total info@globalTotal__units = "NA" @@ -10192,6 +10192,34 @@ if (varName .eq. "LITTERC_HR") then return(info) end if + if (varName .eq. "ZETA") then + info@flux=False + info@longName="dimensionless stability parameter" + info@nativeUnits = "unitless" + ; -- global Total + info@globalTotal__units = "unitless" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "unitless" + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "NA" + info@globalMean_Annual__SF = -999. + info@globalMean_Daily__units = "NA" + info@globalMean_Daily__SF = -999. + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = "...." + return(info) + end if + if (varName .eq. "ZSOI") then info@flux=False info@longName="soil depth" diff --git a/lnd_diag/model-obs/set_1.ncl b/lnd_diag/model-obs/set_1.ncl index 33bc872b..98b82094 100755 --- a/lnd_diag/model-obs/set_1.ncl +++ b/lnd_diag/model-obs/set_1.ncl @@ -89,6 +89,10 @@ begin landfrac = in->landfrac time = in->time area = in->area + ; We only have area for land gridcells and we need area over all gridcells + ; to calculate CPL_ENERGY_BAL with respect to global area consistent with + ; calculation in the coupler + areag = dble2flt(area_global_rectilinear_grid(lat1,lon1,False)) lat = in->lat lon = in->lon if(nyrs .ne. dimsizes(time)) then @@ -178,7 +182,11 @@ begin ; calculate global summation or global total if (c13Flag(i) .ne. "C13_" .and. c14Flag(i) .ne. "C14_") then - var_plot = global_values(vars(i),x,area,landfrac,scale_type(i),nyrs,nlev) + if (vars(i) .eq. "CPL_ENERGY_BAL") then + var_plot = global_values(vars(i),x,areag,landfrac,scale_type(i),nyrs,nlev) + else + var_plot = global_values(vars(i), x,area,landfrac,scale_type(i),yrs(m),nlev) + end if else var_plot = x ; del13C and del14C vars are globally averaged before the del value is calculated end if diff --git a/lnd_diag/model-obs/set_5.ncl b/lnd_diag/model-obs/set_5.ncl index 358d59f6..37ee14ff 100755 --- a/lnd_diag/model-obs/set_5.ncl +++ b/lnd_diag/model-obs/set_5.ncl @@ -141,8 +141,14 @@ do p=0,nplots-1 lon1 = in1->lon nlat1 = dimsizes(lat1) nlon1 = dimsizes(lon1) + ; We only have area for land gridcells and we need area over all gridcells + ; to calculate CPL_ENERGY_BAL with respect to global area consistent with + ; calculation in the coupler + area1g = dble2flt(area_global_rectilinear_grid(lat1,lon1,False)) + area1g = area1g * 1.e6 ; convert from km2 to m2 if (lon1(0) .ge. 0) then area1 = lonFlip(area1) + area1g = lonFlip(area1g) landfrac1 = lonFlip(landfrac1) end if @@ -717,8 +723,15 @@ do region=startNumber,nreg-1 else x1 = array1(i,:,:) ; NOTE: area units are m2 - value1 = regional_values(x1,region,area1,landfrac1,scale_type(i),\ - regions_file,time1,nTime,compare) + if (vars(i) .eq. "CPL_ENERGY_BAL") then + x1@long_name = "CPL_ENERGY_BAL" + value1 = regional_values(x1,region,area1g,landfrac1,scale_type(i),\ + regions_file,time1,nTime,compare) + delete(x1@long_name) + else + value1 = regional_values(x1,region,area1,landfrac1,scale_type(i),\ + regions_file,time1,nTime,compare) + end if end if end if delete(x1) diff --git a/lnd_diag/model1-model2/set_1.ncl b/lnd_diag/model1-model2/set_1.ncl index 6053175e..597a5afb 100755 --- a/lnd_diag/model1-model2/set_1.ncl +++ b/lnd_diag/model1-model2/set_1.ncl @@ -116,9 +116,13 @@ trendsFlag = stringtointeger(getenv("trends_match_Flag")) landfrac1 = in1->landfrac area1 = in1->area time1 = in1->time + lat1 = in1->lat + lon1 = in1->lon landfrac2 = in2->landfrac area2 = in2->area time2 = in2->time + lat2 = in2->lat + lon2 = in2->lon nlev1 = 0 ; CTSM5.1.dev021 now has both levsoi and levgrnd variables ; so I'm changing this to an if/else (01/19/21). This will @@ -190,6 +194,10 @@ trendsFlag = stringtointeger(getenv("trends_match_Flag")) in = in1 landfrac = landfrac1 area = area1 + ; We only have area for land gridcells and we need area over all gridcells + ; to calculate CPL_ENERGY_BAL with respect to global area consistent with + ; calculation in the coupler + areag = dble2flt(area_global_rectilinear_grid(lat1,lon1,False)) time = time1 nlev = nlev1 levsoi = levsoi1 @@ -197,6 +205,10 @@ trendsFlag = stringtointeger(getenv("trends_match_Flag")) in = in2 landfrac = landfrac2 area = area2 + ; We only have area for land gridcells and we need area over all gridcells + ; to calculate CPL_ENERGY_BAL with respect to global area consistent with + ; calculation in the coupler + areag = dble2flt(area_global_rectilinear_grid(lat2,lon2,False)) time = time2 nlev = nlev2 levsoi = levsoi2 @@ -286,7 +298,11 @@ trendsFlag = stringtointeger(getenv("trends_match_Flag")) ; calculate global summation or global total if (c13Flag(i) .ne. "C13_" .and. c14Flag(i) .ne. "C14_") then - var_plot = global_values(vars(i), x,area,landfrac,scale_type(i),yrs(m),nlev) + if (vars(i) .eq. "CPL_ENERGY_BAL") then + var_plot = global_values(vars(i), x,areag,landfrac,scale_type(i),yrs(m),nlev) + else + var_plot = global_values(vars(i), x,area,landfrac,scale_type(i),yrs(m),nlev) + end if else var_plot = x ; del13C and del14C vars are globally averaged before the del value is calculated end if diff --git a/lnd_diag/model1-model2/set_1AnomPlot.ncl b/lnd_diag/model1-model2/set_1AnomPlot.ncl index a0c80f7f..b66ab168 100755 --- a/lnd_diag/model1-model2/set_1AnomPlot.ncl +++ b/lnd_diag/model1-model2/set_1AnomPlot.ncl @@ -94,9 +94,13 @@ begin landfrac1 = in1->landfrac area1 = in1->area time1 = in1->time + lat1 = in1->lat + lon1 = in1->lon landfrac2 = in2->landfrac area2 = in2->area time2 = in2->time + lat2 = in2->lat + lon2 = in2->lon nlev1 = 0 ; CTSM5.1.dev021 now has both levsoi and levgrnd variables ; so I'm changing this to an if/else (01/19/21) @@ -165,6 +169,10 @@ begin in = in1 landfrac = landfrac1 area = area1 + ; We only have area for land gridcells and we need area over all gridcells + ; to calculate CPL_ENERGY_BAL with respect to global area consistent with + ; calculation in the coupler + areag = dble2flt(area_global_rectilinear_grid(lat1,lon1,False)) time = time1 nlev = nlev1 levsoi = levsoi1 @@ -172,6 +180,10 @@ begin in = in2 landfrac = landfrac2 area = area2 + ; We only have area for land gridcells and we need area over all gridcells + ; to calculate CPL_ENERGY_BAL with respect to global area consistent with + ; calculation in the coupler + areag = dble2flt(area_global_rectilinear_grid(lat2,lon2,False)) time = time2 nlev = nlev2 levsoi = levsoi2 @@ -259,7 +271,11 @@ begin ; calculate global summation or global total if (c13Flag(i) .ne. "C13_" .and. c14Flag(i) .ne. "C14_") then - var_plot = global_values(vars(i), x,area,landfrac,scale_type(i),yrs(m),nlev) + if (vars(i) .eq. "CPL_ENERGY_BAL") then + var_plot = global_values(vars(i), x,areag,landfrac,scale_type(i),yrs(m),nlev) + else + var_plot = global_values(vars(i), x,area,landfrac,scale_type(i),yrs(m),nlev) + end if else var_plot = x ; del13C and del14C vars are globally averaged before the del value is calculated end if diff --git a/lnd_diag/model1-model2/set_1DiffPlot.ncl b/lnd_diag/model1-model2/set_1DiffPlot.ncl index 9da1deb8..bef49d2a 100755 --- a/lnd_diag/model1-model2/set_1DiffPlot.ncl +++ b/lnd_diag/model1-model2/set_1DiffPlot.ncl @@ -104,9 +104,13 @@ trendsFlag = stringtointeger(getenv("trends_match_Flag")) landfrac1 = in1->landfrac area1 = in1->area time1 = in1->time + lat1 = in1->lat + lon1 = in1->lon landfrac2 = in2->landfrac area2 = in2->area time2 = in2->time + lat2 = in2->lat + lon2 = in2->lon nlev1 = 0 ; CTSM5.1.dev021 now has both levsoi and levgrnd variables ; so I'm changing this to an if/else (01/19/21) @@ -173,6 +177,10 @@ trendsFlag = stringtointeger(getenv("trends_match_Flag")) in = in1 landfrac = landfrac1 area = area1 + ; We only have area for land gridcells and we need area over all gridcells + ; to calculate CPL_ENERGY_BAL with respect to global area consistent with + ; calculation in the coupler + areag = dble2flt(area_global_rectilinear_grid(lat1,lon1,False)) time = time1 nlev = nlev1 ; levsoi = levsoi1 ; nanr 5may11 - causing problems for AdamPhillips. Not sure why @@ -180,6 +188,10 @@ trendsFlag = stringtointeger(getenv("trends_match_Flag")) in = in2 landfrac = landfrac2 area = area2 + ; We only have area for land gridcells and we need area over all gridcells + ; to calculate CPL_ENERGY_BAL with respect to global area consistent with + ; calculation in the coupler + areag = dble2flt(area_global_rectilinear_grid(lat2,lon2,False)) time = time2 nlev = nlev2 ; levsoi = levsoi2 ; nanr 5may11 - causing problems for AdamPhillips. Not sure why @@ -282,9 +294,13 @@ trendsFlag = stringtointeger(getenv("trends_match_Flag")) ; calculate global summation or global total if (c13Flag(i) .ne. "C13_" .and. c14Flag(i) .ne. "C14_") then - var_plot = global_values(vars(i), x,area,landfrac,scale_type(i),yrs(m),nlev) + if (vars(i) .eq. "CPL_ENERGY_BAL") then + var_plot = global_values(vars(i), x,areag,landfrac,scale_type(i),yrs(m),nlev) + else + var_plot = global_values(vars(i), x,area,landfrac,scale_type(i),yrs(m),nlev) + end if else - var_plot = x ; del14C vars are globally averaged before the del value is calculated + var_plot = x ; del14C vars are globally averaged before the del value is calculated end if rank2 = dimsizes(dimsizes(var_plot)) diff --git a/lnd_diag/model1-model2/set_5.ncl b/lnd_diag/model1-model2/set_5.ncl index afdfd878..7cc13b3f 100755 --- a/lnd_diag/model1-model2/set_5.ncl +++ b/lnd_diag/model1-model2/set_5.ncl @@ -143,6 +143,11 @@ print("Now printing plot #" + p) lon1 = in1->lon nlat1 = dimsizes(lat1) nlon1 = dimsizes(lon1) + ; We only have area for land gridcells and we need area over all gridcells + ; to calculate CPL_ENERGY_BAL with respect to global area consistent with + ; calculation in the coupler + area1g = dble2flt(area_global_rectilinear_grid(lat1,lon1,False)) + area1g = area1g * 1.e6 ; convert from km2 to m2 nyrs2 = getfilevardimsizes(in2,"time") landfrac2 = in2->landfrac area2 = in2->area ; read in variable to retain metadata @@ -152,7 +157,11 @@ print("Now printing plot #" + p) lon2 = in2->lon nlat2 = dimsizes(lat2) nlon2 = dimsizes(lon2) - + ; We only have area for land gridcells and we need area over all gridcells + ; to calculate CPL_ENERGY_BAL with respect to global area consistent with + ; calculation in the coupler + area2g = dble2flt(area_global_rectilinear_grid(lat2,lon2,False)) + area2g = area2g * 1.e6 ; convert from km2 to m2 if (lon1(0) .lt. 0.) then fliplon1 = "False" ; history files start at dateline @@ -168,11 +177,13 @@ print("Now printing plot #" + p) if (fliplon1 .eq. "True") then area1 = lonFlip(area1) + area1g = lonFlip(area1g) landfrac1 = lonFlip(landfrac1) end if if (fliplon2 .eq. "True") then area2 = lonFlip(area2) + area2g = lonFlip(area2g) landfrac2 = lonFlip(landfrac2) end if @@ -352,10 +363,21 @@ do region=startNumber,nreg-1 x2 = array2(i,:,:) ; NOTE: area units are m2 - value1 = regional_values(x1,region,area1,landfrac1,scale_type(i),\ - regions_file,time1,nTime,compare) - value2 = regional_values(x2,region,area2,landfrac2,scale_type(i),\ - regions_file,time2,nTime,compare) + if (vars(i) .eq. "CPL_ENERGY_BAL") then + x1@long_name = "CPL_ENERGY_BAL" + x2@long_name = "CPL_ENERGY_BAL" + value1 = regional_values(x1,region,area1g,landfrac1,scale_type(i),\ + regions_file,time1,nTime,compare) + value2 = regional_values(x2,region,area2g,landfrac2,scale_type(i),\ + regions_file,time2,nTime,compare) + delete(x1@long_name) + delete(x2@long_name) + else + value1 = regional_values(x1,region,area1,landfrac1,scale_type(i),\ + regions_file,time1,nTime,compare) + value2 = regional_values(x2,region,area2,landfrac2,scale_type(i),\ + regions_file,time2,nTime,compare) + end if end if end if diff --git a/lnd_diag/shared/lnd_func.ncl b/lnd_diag/shared/lnd_func.ncl index 8235e530..2f466ece 100755 --- a/lnd_diag/shared/lnd_func.ncl +++ b/lnd_diag/shared/lnd_func.ncl @@ -49,7 +49,7 @@ begin avg_x = new(numyrs,typeof(x)) ; no level ; This variable is calculated per total GLOBAL area, not global LAND area. ; therefore, area1 is not masked by land as it is for the other vars. - if (varName .eq. "RNET-SENS-LATENT") then + if (varName .eq. "RNET-SENS-LATENT" .or. varName .eq. "CPL_ENERGY_BAL") then if(isvar("area1")) then delete(area1) end if @@ -923,7 +923,15 @@ begin weights_1n = area weights_1n = -9999. if(rank.eq.2)then - area1 = mask(area, ismissing(x), False) + ; The variable CPL_ENERGY_BAL is calculated per total GLOBAL area, not global LAND area. + ; therefore, area1 is not masked by land as it is for the other vars. + ; We don't have the variable name available in this function so use the long_name + printVarSummary(x) + if (x@long_name .eq. "CPL_ENERGY_BAL") then + area1 = area + else + area1 = mask(area, ismissing(x), False) + end if fland1 = mask(landfrac, ismissing(x), False) nmissing = num(isnan_ieee(x) ) end if @@ -967,8 +975,16 @@ do t = 0,endTime weights_1n = -9999. if(rank.eq.2)then - area1 = mask(area, ismissing(x(:,:)), False) - fland1 = mask(landfrac, ismissing(x(:,:)), False) + ; The variable CPL_ENERGY_BAL is calculated per total GLOBAL area, not global LAND area. + ; therefore, area1 and fland1 are not masked by land as it is for the other vars. + ; We don't have the variable name available in this function so use the long_name + printVarSummary(x) + if (x@long_name .eq. "CPL_ENERGY_BAL") then + area1 = area + else + area1 = mask(area, ismissing(x(:,:)), False) + fland1 = mask(landfrac, ismissing(x(:,:)), False) + end if end if if(rank.eq.3)then area1 = mask(area, ismissing(x(t,:,:)), False) @@ -984,12 +1000,19 @@ do t = 0,endTime if (compare .eq. "model") then ; calculate area mean if(type .eq. "Mean")then ; sets 3, 5 (some) and 6 + if (x@long_name .eq. "CPL_ENERGY_BAL") then + weights_1n ({box_s(ar):box_n(ar)},{box_w(ar):box_e(ar)}) = \ + (area1({box_s(ar):box_n(ar)},{box_w(ar):box_e(ar)})* \ + fland1({box_s(ar):box_n(ar)},{box_w(ar):box_e(ar)}))/ \ + sum(area1({box_s(ar):box_n(ar)},{box_w(ar):box_e(ar)})) + else weights_1n ({box_s(ar):box_n(ar)},{box_w(ar):box_e(ar)}) = \ (area1({box_s(ar):box_n(ar)},{box_w(ar):box_e(ar)})* \ fland1({box_s(ar):box_n(ar)},{box_w(ar):box_e(ar)}))/ \ sum(area1({box_s(ar):box_n(ar)},{box_w(ar):box_e(ar)})* \ fland1({box_s(ar):box_n(ar)},{box_w(ar):box_e(ar)})) - end if + end if + end if ; calculate area total if(type .eq. "Totl")then ; set 5 (some) weights_1n ({box_s(ar):box_n(ar)},{box_w(ar):box_e(ar)}) = \ @@ -1004,11 +1027,26 @@ do t = 0,endTime if (sum(area1({box_s(ar):box_n(ar)},{box_w(ar):box_e(ar)})* \ fland1({box_s(ar):box_n(ar)},{box_w(ar):box_e(ar)})) \ .gt. 0.) then - weights_1n ({box_s(ar):box_n(ar)},{box_w(ar):box_e(ar)}) = \ - (area1({box_s(ar):box_n(ar)},{box_w(ar):box_e(ar)})* \ - fland1({box_s(ar):box_n(ar)},{box_w(ar):box_e(ar)}))/ \ - sum(area1({box_s(ar):box_n(ar)},{box_w(ar):box_e(ar)})* \ - fland1({box_s(ar):box_n(ar)},{box_w(ar):box_e(ar)})) + if (isatt(x,"long_name")) then + if (x@long_name .eq. "CPL_ENERGY_BAL") then + weights_1n ({box_s(ar):box_n(ar)},{box_w(ar):box_e(ar)}) = \ + (area1({box_s(ar):box_n(ar)},{box_w(ar):box_e(ar)})* \ + fland1({box_s(ar):box_n(ar)},{box_w(ar):box_e(ar)}))/ \ + sum(area1({box_s(ar):box_n(ar)},{box_w(ar):box_e(ar)})) + else + weights_1n ({box_s(ar):box_n(ar)},{box_w(ar):box_e(ar)}) = \ + (area1({box_s(ar):box_n(ar)},{box_w(ar):box_e(ar)})* \ + fland1({box_s(ar):box_n(ar)},{box_w(ar):box_e(ar)}))/ \ + sum(area1({box_s(ar):box_n(ar)},{box_w(ar):box_e(ar)})* \ + fland1({box_s(ar):box_n(ar)},{box_w(ar):box_e(ar)})) + end if + else + weights_1n ({box_s(ar):box_n(ar)},{box_w(ar):box_e(ar)}) = \ + (area1({box_s(ar):box_n(ar)},{box_w(ar):box_e(ar)})* \ + fland1({box_s(ar):box_n(ar)},{box_w(ar):box_e(ar)}))/ \ + sum(area1({box_s(ar):box_n(ar)},{box_w(ar):box_e(ar)})* \ + fland1({box_s(ar):box_n(ar)},{box_w(ar):box_e(ar)})) + end if else weights_1n ({box_s(ar):box_n(ar)},{box_w(ar):box_e(ar)}) = 0. end if diff --git a/lnd_diag/shared/variable_master4.3.ncl b/lnd_diag/shared/variable_master4.3.ncl index 5fc87deb..60f77349 100644 --- a/lnd_diag/shared/variable_master4.3.ncl +++ b/lnd_diag/shared/variable_master4.3.ncl @@ -5424,7 +5424,7 @@ if (varName .eq. "LITTERC_HR") then if (varName .eq. "CPL_ENERGY_BAL") then info@flux=True - info@longName="Coupler Energy Balance (Land Area)" + info@longName="Coupler Energy Balance (Global Area)" info@nativeUnits = "W/m2" ; -- global Total info@globalTotal__units = "NA" @@ -10192,6 +10192,34 @@ if (varName .eq. "LITTERC_HR") then return(info) end if + if (varName .eq. "ZETA") then + info@flux=False + info@longName="dimensionless stability parameter" + info@nativeUnits = "unitless" + ; -- global Total + info@globalTotal__units = "unitless" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "unitless" + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "NA" + info@globalMean_Annual__SF = -999. + info@globalMean_Daily__units = "NA" + info@globalMean_Daily__SF = -999. + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = "...." + return(info) + end if + if (varName .eq. "ZSOI") then info@flux=False info@longName="soil depth" From 2bbd6cb8771f56622af296067e90a8aecadbb82f Mon Sep 17 00:00:00 2001 From: Keith Oleson Date: Mon, 15 Aug 2022 09:52:01 -0600 Subject: [PATCH 4/9] Changes to accomodate different spatial resolutions for CPL_ENERGY_BAL --- lnd_diag/model1-model2/set_1.ncl | 18 +++++++++++------- lnd_diag/model1-model2/set_1AnomPlot.ncl | 10 +++++++--- lnd_diag/model1-model2/set_1DiffPlot.ncl | 18 +++++++++++------- lnd_diag/model1-model2/set_3.ncl | 2 +- 4 files changed, 30 insertions(+), 18 deletions(-) diff --git a/lnd_diag/model1-model2/set_1.ncl b/lnd_diag/model1-model2/set_1.ncl index 597a5afb..1c1c5bcf 100755 --- a/lnd_diag/model1-model2/set_1.ncl +++ b/lnd_diag/model1-model2/set_1.ncl @@ -197,7 +197,7 @@ trendsFlag = stringtointeger(getenv("trends_match_Flag")) ; We only have area for land gridcells and we need area over all gridcells ; to calculate CPL_ENERGY_BAL with respect to global area consistent with ; calculation in the coupler - areag = dble2flt(area_global_rectilinear_grid(lat1,lon1,False)) + areag1 = dble2flt(area_global_rectilinear_grid(lat1,lon1,False)) time = time1 nlev = nlev1 levsoi = levsoi1 @@ -208,7 +208,7 @@ trendsFlag = stringtointeger(getenv("trends_match_Flag")) ; We only have area for land gridcells and we need area over all gridcells ; to calculate CPL_ENERGY_BAL with respect to global area consistent with ; calculation in the coupler - areag = dble2flt(area_global_rectilinear_grid(lat2,lon2,False)) + areag2 = dble2flt(area_global_rectilinear_grid(lat2,lon2,False)) time = time2 nlev = nlev2 levsoi = levsoi2 @@ -298,11 +298,15 @@ trendsFlag = stringtointeger(getenv("trends_match_Flag")) ; calculate global summation or global total if (c13Flag(i) .ne. "C13_" .and. c14Flag(i) .ne. "C14_") then - if (vars(i) .eq. "CPL_ENERGY_BAL") then - var_plot = global_values(vars(i), x,areag,landfrac,scale_type(i),yrs(m),nlev) - else - var_plot = global_values(vars(i), x,area,landfrac,scale_type(i),yrs(m),nlev) - end if + if (vars(i) .eq. "CPL_ENERGY_BAL") then + if (m .eq. 0) then + var_plot = global_values(vars(i), x,areag1,landfrac,scale_type(i),yrs(m),nlev) + else + var_plot = global_values(vars(i), x,areag2,landfrac,scale_type(i),yrs(m),nlev) + end if + else + var_plot = global_values(vars(i), x,area,landfrac,scale_type(i),yrs(m),nlev) + end if else var_plot = x ; del13C and del14C vars are globally averaged before the del value is calculated end if diff --git a/lnd_diag/model1-model2/set_1AnomPlot.ncl b/lnd_diag/model1-model2/set_1AnomPlot.ncl index b66ab168..1edcb69d 100755 --- a/lnd_diag/model1-model2/set_1AnomPlot.ncl +++ b/lnd_diag/model1-model2/set_1AnomPlot.ncl @@ -172,7 +172,7 @@ begin ; We only have area for land gridcells and we need area over all gridcells ; to calculate CPL_ENERGY_BAL with respect to global area consistent with ; calculation in the coupler - areag = dble2flt(area_global_rectilinear_grid(lat1,lon1,False)) + areag1 = dble2flt(area_global_rectilinear_grid(lat1,lon1,False)) time = time1 nlev = nlev1 levsoi = levsoi1 @@ -183,7 +183,7 @@ begin ; We only have area for land gridcells and we need area over all gridcells ; to calculate CPL_ENERGY_BAL with respect to global area consistent with ; calculation in the coupler - areag = dble2flt(area_global_rectilinear_grid(lat2,lon2,False)) + areag2 = dble2flt(area_global_rectilinear_grid(lat2,lon2,False)) time = time2 nlev = nlev2 levsoi = levsoi2 @@ -272,7 +272,11 @@ begin ; calculate global summation or global total if (c13Flag(i) .ne. "C13_" .and. c14Flag(i) .ne. "C14_") then if (vars(i) .eq. "CPL_ENERGY_BAL") then - var_plot = global_values(vars(i), x,areag,landfrac,scale_type(i),yrs(m),nlev) + if (m .eq. 0) then + var_plot = global_values(vars(i), x,areag1,landfrac,scale_type(i),yrs(m),nlev) + else + var_plot = global_values(vars(i), x,areag2,landfrac,scale_type(i),yrs(m),nlev) + end if else var_plot = global_values(vars(i), x,area,landfrac,scale_type(i),yrs(m),nlev) end if diff --git a/lnd_diag/model1-model2/set_1DiffPlot.ncl b/lnd_diag/model1-model2/set_1DiffPlot.ncl index bef49d2a..38ca3e8e 100755 --- a/lnd_diag/model1-model2/set_1DiffPlot.ncl +++ b/lnd_diag/model1-model2/set_1DiffPlot.ncl @@ -180,7 +180,7 @@ trendsFlag = stringtointeger(getenv("trends_match_Flag")) ; We only have area for land gridcells and we need area over all gridcells ; to calculate CPL_ENERGY_BAL with respect to global area consistent with ; calculation in the coupler - areag = dble2flt(area_global_rectilinear_grid(lat1,lon1,False)) + areag1 = dble2flt(area_global_rectilinear_grid(lat1,lon1,False)) time = time1 nlev = nlev1 ; levsoi = levsoi1 ; nanr 5may11 - causing problems for AdamPhillips. Not sure why @@ -191,7 +191,7 @@ trendsFlag = stringtointeger(getenv("trends_match_Flag")) ; We only have area for land gridcells and we need area over all gridcells ; to calculate CPL_ENERGY_BAL with respect to global area consistent with ; calculation in the coupler - areag = dble2flt(area_global_rectilinear_grid(lat2,lon2,False)) + areag2 = dble2flt(area_global_rectilinear_grid(lat2,lon2,False)) time = time2 nlev = nlev2 ; levsoi = levsoi2 ; nanr 5may11 - causing problems for AdamPhillips. Not sure why @@ -294,11 +294,15 @@ trendsFlag = stringtointeger(getenv("trends_match_Flag")) ; calculate global summation or global total if (c13Flag(i) .ne. "C13_" .and. c14Flag(i) .ne. "C14_") then - if (vars(i) .eq. "CPL_ENERGY_BAL") then - var_plot = global_values(vars(i), x,areag,landfrac,scale_type(i),yrs(m),nlev) - else - var_plot = global_values(vars(i), x,area,landfrac,scale_type(i),yrs(m),nlev) - end if + if (vars(i) .eq. "CPL_ENERGY_BAL") then + if (m .eq. 0) then + var_plot = global_values(vars(i), x,areag1,landfrac,scale_type(i),yrs(m),nlev) + else + var_plot = global_values(vars(i), x,areag2,landfrac,scale_type(i),yrs(m),nlev) + end if + else + var_plot = global_values(vars(i), x,area,landfrac,scale_type(i),yrs(m),nlev) + end if else var_plot = x ; del14C vars are globally averaged before the del value is calculated end if diff --git a/lnd_diag/model1-model2/set_3.ncl b/lnd_diag/model1-model2/set_3.ncl index 55f0427d..26d650be 100755 --- a/lnd_diag/model1-model2/set_3.ncl +++ b/lnd_diag/model1-model2/set_3.ncl @@ -220,7 +220,7 @@ print("Now printing plot #" + p) ;---------------------------------------------------------- tmp = stringtocharacter(asciiread(inputdir+"/"+fileName,-1,"string")) nvars = dimsizes(tmp(:,0)) -print(" p = " + p + " nvars = " + nvars) + print(" p = " + p + " nvars = " + nvars) nplotsPerCol = (nvars+1)/2 scale_type = new(nvars,"string") vars = new(nvars,"string") From 6c9fb4bdc9c486b5aee6ac2915eda00564e71718 Mon Sep 17 00:00:00 2001 From: Keith Oleson Date: Fri, 21 Oct 2022 08:38:42 -0600 Subject: [PATCH 5/9] Add permissions to copy_html command --- Tools/copy_html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tools/copy_html b/Tools/copy_html index 025fc139..65e2a6ec 100755 --- a/Tools/copy_html +++ b/Tools/copy_html @@ -214,7 +214,7 @@ def create_top_level(env, comp): # make sure top level remote directory exists try: - pipe = subprocess.Popen( ["ssh {0}@{1} 'mkdir -p {2}/{3}'".format(env['GLOBAL_WEBLOGIN'],env['GLOBAL_WEBHOST'],env['GLOBAL_REMOTE_WEBDIR'],comp)], shell=True) + pipe = subprocess.Popen( ["ssh {0}@{1} 'mkdir -p -m u=rwx,g=rwx,o=rx {2}/{3}'".format(env['GLOBAL_WEBLOGIN'],env['GLOBAL_WEBHOST'],env['GLOBAL_REMOTE_WEBDIR'],comp)], shell=True) pipe.wait() except Exception as e: print('ERROR: unable to create remote directory {0}@{1}:{2}/{3}'.format(env['GLOBAL_WEBLOGIN'],env['GLOBAL_WEBHOST'],env['GLOBAL_REMOTE_WEBDIR'],comp)) From 1647836b5899e040cae6b7e98a1ab067b0cbb13e Mon Sep 17 00:00:00 2001 From: Keith Oleson Date: Fri, 21 Oct 2022 08:57:43 -0600 Subject: [PATCH 6/9] Add ALTMAX and QIRRIG_DRIP, get expContours to work --- lnd_diag/inputFiles/set2_clm.txt | 8 +++--- lnd_diag/inputFiles/set2_cn.txt | 1 + lnd_diag/inputFiles/variable_master4.3.ncl | 33 ++++++++++++++++++++-- lnd_diag/model-obs/set_2.ncl | 2 +- lnd_diag/model1-model2/set_2.ncl | 2 +- lnd_diag/shared/variable_master4.3.ncl | 33 ++++++++++++++++++++-- 6 files changed, 69 insertions(+), 10 deletions(-) diff --git a/lnd_diag/inputFiles/set2_clm.txt b/lnd_diag/inputFiles/set2_clm.txt index 285465c4..add96f7b 100755 --- a/lnd_diag/inputFiles/set2_clm.txt +++ b/lnd_diag/inputFiles/set2_clm.txt @@ -1,11 +1,11 @@ -globalMeanNat1 TSA -globalMeanDay1 PREC +globalMeanNat0 TSA +globalMeanDay0 PREC globalMeanNat0 ASA globalMeanNat0 RNET -globalMeanNat1 LHEAT +globalMeanNat0 LHEAT globalMeanDay0 TOTRUNOFF globalMeanNat0 SNOWDP -globalMeanDay1 FPSN +globalMeanDay0 FPSN globalMeanNat0 FSH globalMeanNat0 FSH_V globalMeanNat0 FSH_G diff --git a/lnd_diag/inputFiles/set2_cn.txt b/lnd_diag/inputFiles/set2_cn.txt index 32621535..e6e21527 100755 --- a/lnd_diag/inputFiles/set2_cn.txt +++ b/lnd_diag/inputFiles/set2_cn.txt @@ -113,3 +113,4 @@ globalMeanDay0 SOILC_LOSS globalMeanNat0 WOODC globalMeanDay0 WOODC_ALLOC globalMeanDay0 WOODC_LOSS +globalMeanNat1 ALTMAX diff --git a/lnd_diag/inputFiles/variable_master4.3.ncl b/lnd_diag/inputFiles/variable_master4.3.ncl index 60f77349..1794eacc 100644 --- a/lnd_diag/inputFiles/variable_master4.3.ncl +++ b/lnd_diag/inputFiles/variable_master4.3.ncl @@ -5364,6 +5364,35 @@ if (varName .eq. "LITTERC_HR") then return(info) end if + if (varName .eq. "ALTMAX") then + info@flux=False + info@longName="maximum annual active layer thickness" + info@nativeUnits = "m" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "m" + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "NA" + info@globalMean_Annual__SF = -999. + info@globalMean_Daily__units = "NA" + info@globalMean_Daily__SF = -999. + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = (/0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1., 2., 4./) + info@cn_LevelsDiff = (/-0.6, -0.5, -0.4, -0.3, -0.2, -0.1, 0., 0.1, 0.2, 0.3, 0.4, 0.5, 0.6/) + return(info) + end if + if (varName .eq. "DEGREE_DAYS") then info@flux=False info@longName="Accumulated degree days" @@ -7563,9 +7592,9 @@ if (varName .eq. "LITTERC_HR") then return(info) end if - if (varName .eq. "QIRRIG") then + if (varName .eq. "QIRRIG_DRIP") then info@flux=True - info@longName="water added through irrig" + info@longName="water added via drip irrig" info@nativeUnits = "mm/s" ; -- global Total info@globalTotal__units = "NA" diff --git a/lnd_diag/model-obs/set_2.ncl b/lnd_diag/model-obs/set_2.ncl index 0efa7b46..f2b49451 100755 --- a/lnd_diag/model-obs/set_2.ncl +++ b/lnd_diag/model-obs/set_2.ncl @@ -499,7 +499,7 @@ begin ; Set contour Levels: Dynamic vs pre-defined contours ;************************************************************************** ; dynContour: 1=dynamic; 0=explicit - if (info@cn_Explicit .eq. True .and. dynContour(i) .eq. 0 .and. user_defined .eq. 1) then + if (info@cn_Explicit .eq. True .and. dynContour(i) .eq. 0 .and. user_defined .eq. True) then expFlag = True else expFlag = False diff --git a/lnd_diag/model1-model2/set_2.ncl b/lnd_diag/model1-model2/set_2.ncl index ecb9a7de..5421dd24 100755 --- a/lnd_diag/model1-model2/set_2.ncl +++ b/lnd_diag/model1-model2/set_2.ncl @@ -664,7 +664,7 @@ begin ;************************************************************************** ; dynContour: 0=dynamic;1=explicit - if (info@cn_Explicit .eq. True .and. dynContour(i) .eq. 1 .and. user_defined .eq. 1) then + if (info@cn_Explicit .eq. True .and. dynContour(i) .eq. 1 .and. user_defined .eq. True) then expFlag = True else expFlag = False diff --git a/lnd_diag/shared/variable_master4.3.ncl b/lnd_diag/shared/variable_master4.3.ncl index 60f77349..1794eacc 100644 --- a/lnd_diag/shared/variable_master4.3.ncl +++ b/lnd_diag/shared/variable_master4.3.ncl @@ -5364,6 +5364,35 @@ if (varName .eq. "LITTERC_HR") then return(info) end if + if (varName .eq. "ALTMAX") then + info@flux=False + info@longName="maximum annual active layer thickness" + info@nativeUnits = "m" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "m" + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "NA" + info@globalMean_Annual__SF = -999. + info@globalMean_Daily__units = "NA" + info@globalMean_Daily__SF = -999. + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = (/0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1., 2., 4./) + info@cn_LevelsDiff = (/-0.6, -0.5, -0.4, -0.3, -0.2, -0.1, 0., 0.1, 0.2, 0.3, 0.4, 0.5, 0.6/) + return(info) + end if + if (varName .eq. "DEGREE_DAYS") then info@flux=False info@longName="Accumulated degree days" @@ -7563,9 +7592,9 @@ if (varName .eq. "LITTERC_HR") then return(info) end if - if (varName .eq. "QIRRIG") then + if (varName .eq. "QIRRIG_DRIP") then info@flux=True - info@longName="water added through irrig" + info@longName="water added via drip irrig" info@nativeUnits = "mm/s" ; -- global Total info@globalTotal__units = "NA" From 15c849cff7dfef9477bedb7af1c2c888fc6bfeeb Mon Sep 17 00:00:00 2001 From: Keith Oleson Date: Fri, 21 Oct 2022 12:02:31 -0600 Subject: [PATCH 7/9] Add soil moisture storage to set3 --- lnd_diag/inputFiles/set3_cn_landFlx.txt | 1 + lnd_diag/inputFiles/set3_landFlx.txt | 1 + lnd_diag/inputFiles/variable_master4.3.ncl | 28 ++++++++++++++++++++++ lnd_diag/model-obs/set_3.ncl | 7 ++++-- lnd_diag/model1-model2/set_3.ncl | 7 ++++-- lnd_diag/shared/lnd_func.ncl | 17 +++++++++++++ lnd_diag/shared/variable_master4.3.ncl | 28 ++++++++++++++++++++++ 7 files changed, 85 insertions(+), 4 deletions(-) diff --git a/lnd_diag/inputFiles/set3_cn_landFlx.txt b/lnd_diag/inputFiles/set3_cn_landFlx.txt index 6369473d..bec5196c 100755 --- a/lnd_diag/inputFiles/set3_cn_landFlx.txt +++ b/lnd_diag/inputFiles/set3_cn_landFlx.txt @@ -5,3 +5,4 @@ globalMeanNat SNOWDP globalMeanNat LHEAT globalMeanDay GPP globalMeanNat TLAI +globalMeanNat TOTSOILLIQICE diff --git a/lnd_diag/inputFiles/set3_landFlx.txt b/lnd_diag/inputFiles/set3_landFlx.txt index 90efeac8..d09426c2 100755 --- a/lnd_diag/inputFiles/set3_landFlx.txt +++ b/lnd_diag/inputFiles/set3_landFlx.txt @@ -5,3 +5,4 @@ globalMeanNat SNOWDP globalMeanNat LHEAT globalMeanDay FPSN globalMeanNat TLAI +globalMeanNat TOTSOILLIQICE diff --git a/lnd_diag/inputFiles/variable_master4.3.ncl b/lnd_diag/inputFiles/variable_master4.3.ncl index 1794eacc..f4e327d5 100644 --- a/lnd_diag/inputFiles/variable_master4.3.ncl +++ b/lnd_diag/inputFiles/variable_master4.3.ncl @@ -7449,6 +7449,34 @@ if (varName .eq. "LITTERC_HR") then return(info) end if + if (varName .eq. "TOTSOILLIQICE") then + info@flux=False + info@longName="soil moisture storage (liq+ice)" + info@nativeUnits = "kg/m^2" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "kg/m^2" ;for mm water equivalent: 1:1 conversion from kg/m2 + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "NA" + info@globalMean_Annual__SF = -999. + info@globalMean_Daily__units = "NA" + info@globalMean_Daily__SF = -999. + ; -- Origin + info@model = "CN" + info@derivedVariable = True + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = (/0.,50.,100.,150.,200.,250.,300.,350.,900./) + return(info) + end if + if (varName .eq. "SOIL_PSI") then info@flux=False info@longName="Soil Water Potential" diff --git a/lnd_diag/model-obs/set_3.ncl b/lnd_diag/model-obs/set_3.ncl index 84ce97c7..d278507c 100755 --- a/lnd_diag/model-obs/set_3.ncl +++ b/lnd_diag/model-obs/set_3.ncl @@ -77,7 +77,7 @@ do p=0,nplots-1 fileName = "set3_landFlx.txt" end if plot_name = "landf" - titstr = new(7,"string") + titstr = new(8,"string") titstr(0) = "2m Air Temperature (~S~o~N~K)" titstr(1) = "Precipitation (mm day~S~-1~N~)" titstr(2) = "Runoff (mm day~S~-1~N~)" @@ -85,6 +85,7 @@ do p=0,nplots-1 titstr(4) = "Latent Heat Flux (W m~S~-2~N~)" titstr(5) = "Photosynthesis (gC m~S~-2~N~day~S~-1~N~)" titstr(6) = "Leaf Area Index" + titstr(7) = "Soil Moisture Storage - liq+ice (kg m~S~-2~N~)" end if if (p .eq. 1) then fileName = "set3_radFlx.txt" @@ -372,6 +373,8 @@ do p=0,nplots-1 landmask7 = new((/nvars,nlat7,nlon7/),"float") area7 = new((/nvars,nlat7,nlon7/),"float") + ; No obs for soil moisture storage + landmask2!0 = "var" landmask2&var = vv landmask2!1 = "lat" @@ -681,7 +684,7 @@ do p=0,nplots-1 a7 = ptr_lai->area obsFlag = 1 sFlag(i) = 0 - else + else ; This will cover TOTSOILLIQICE (no obs) obsFlag = 0 sFlag(i) = 0 aFlag(i) = 0 diff --git a/lnd_diag/model1-model2/set_3.ncl b/lnd_diag/model1-model2/set_3.ncl index 26d650be..f41c9120 100755 --- a/lnd_diag/model1-model2/set_3.ncl +++ b/lnd_diag/model1-model2/set_3.ncl @@ -74,7 +74,7 @@ print("Now printing plot #" + p) fileName = "set3_landFlx.txt" end if plot_name = "landf" - titstr = new(7,"string") + titstr = new(8,"string") titstr(0) = "2m Air Temperature (~S~o~N~K)" titstr(1) = "Precipitation (mm day~S~-1~N~)" titstr(2) = "Runoff (mm day~S~-1~N~)" @@ -82,6 +82,7 @@ print("Now printing plot #" + p) titstr(4) = "Latent Heat Flux (W m~S~-2~N~)" titstr(5) = "Photosynthesis (gC m~S~-2~N~day~S~-1~N~)" titstr(6) = "Leaf Area Index" + titstr(7) = "Soil Moisture Storage - liq+ice (kg m~S~-2~N~)" end if if (p .eq. 1) then fileName = "set3_radFlx.txt" @@ -399,6 +400,8 @@ print("Now printing plot #" + p) landmask7 = new((/nvars,nlat7,nlon7/),"float") area7 = new((/nvars,nlat7,nlon7/),"float") + ; No obs for soil moisture storage + landmask3!0 = "var" landmask3&var = vv landmask3!1 = "lat" @@ -705,7 +708,7 @@ print("Now printing plot #" + p) a7 = ptr_lai->area obsFlag = 1 sFlag(i) = 0 - else + else ; This will cover TOTSOILLIQICE (no obs) obsFlag = 0 sFlag(i) = 0 aFlag(i) = 0 diff --git a/lnd_diag/shared/lnd_func.ncl b/lnd_diag/shared/lnd_func.ncl index 2f466ece..44c05d06 100755 --- a/lnd_diag/shared/lnd_func.ncl +++ b/lnd_diag/shared/lnd_func.ncl @@ -429,6 +429,23 @@ begin return(new_var) end if + if(var_name.eq."TOTSOILLIQICE") then + soilice = ptr ->SOILICE + soilliq = ptr ->SOILLIQ + ; SOILICE and SOILLIQ should have same vertical dim so just need to check one + if(isfilevardim(ptr,"SOILICE","levsoi")) then + new_var = dim_sum(soilice(time|:,lat|:,lon|:,levsoi|:)) + \ + dim_sum(soilliq(time|:,lat|:,lon|:,levsoi|:)) + else + if(isfilevardim(ptr,"SOILICE","levgrnd")) then + new_var = dim_sum(soilice(time|:,lat|:,lon|:,levgrnd|:)) + \ + dim_sum(soilliq(time|:,lat|:,lon|:,levgrnd|:)) + end if + end if + copy_VarCoords(soilice(:,0,:,:),new_var) + return(new_var) + end if + if(var_name.eq."EVAPFRAC" .or. var_name .eq. "LATENT")then ; LHEAT fctr = ptr ->FCTR diff --git a/lnd_diag/shared/variable_master4.3.ncl b/lnd_diag/shared/variable_master4.3.ncl index 1794eacc..f4e327d5 100644 --- a/lnd_diag/shared/variable_master4.3.ncl +++ b/lnd_diag/shared/variable_master4.3.ncl @@ -7449,6 +7449,34 @@ if (varName .eq. "LITTERC_HR") then return(info) end if + if (varName .eq. "TOTSOILLIQICE") then + info@flux=False + info@longName="soil moisture storage (liq+ice)" + info@nativeUnits = "kg/m^2" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "kg/m^2" ;for mm water equivalent: 1:1 conversion from kg/m2 + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "NA" + info@globalMean_Annual__SF = -999. + info@globalMean_Daily__units = "NA" + info@globalMean_Daily__SF = -999. + ; -- Origin + info@model = "CN" + info@derivedVariable = True + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = (/0.,50.,100.,150.,200.,250.,300.,350.,900./) + return(info) + end if + if (varName .eq. "SOIL_PSI") then info@flux=False info@longName="Soil Water Potential" From 088ba5be08e03893a6be9bd481a05eb608af00a3 Mon Sep 17 00:00:00 2001 From: Keith Oleson Date: Tue, 25 Oct 2022 10:58:02 -0600 Subject: [PATCH 8/9] Fix web addresses and add set9, 10, 11 thumbnails. --- lnd_diag/shared/lnd_create_webpage.pl | 16 ++++++++-------- lnd_diag/shared/lnd_lookupTable.pl | 2 +- lnd_diag/shared/lnd_statTable.pl | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/lnd_diag/shared/lnd_create_webpage.pl b/lnd_diag/shared/lnd_create_webpage.pl index 51aedf1b..63720f98 100755 --- a/lnd_diag/shared/lnd_create_webpage.pl +++ b/lnd_diag/shared/lnd_create_webpage.pl @@ -152,7 +152,7 @@ sub mainHeader1 { local($num) = @_; $num++; - $path = "\"http://www.cgd.ucar.edu/tss/clm/clm/diagnostics/images/NCAR.gif\""; + $path = "\"http://www2.cgd.ucar.edu/tss/clm/clm/diagnostics/images/NCAR.gif\""; printf fp_main "\n"; printf fp_main "\n"; printf fp_main "LND_DIAG Diagnostic Plots\n"; @@ -169,7 +169,7 @@ sub mainHeader1 printf fp_main "
\n"; printf fp_main "

\n"; printf fp_main "\n"; - printf fp_main "
\n"; + printf fp_main " \n"; printf fp_main "LND_DIAG Diagnostics Plots\n"; printf fp_main "Source: $source\n"; printf fp_main "
\n"; @@ -234,12 +234,12 @@ sub set_Inactive sub setHeader { - if ($set == 5 || $set == 9) { $path = "\"http://www.cgd.ucar.edu/tss/clm/diagnostics/images/3Dglobe.gif\""; } + if ($set == 5) { $path = "\"http://www2.cgd.ucar.edu/tss/clm/diagnostics/images/3Dglobe.gif\""; } else { if ($set == 3 | $set == 4) { $sn = "s"; } else { $sn = "sn";} - if ( $set == 8) { $path = "\"http://www.cgd.ucar.edu/tss/clm/diagnostics/images/SET".$set.".jpg\""; } - else { $path = "\"http://www.cgd.ucar.edu/tss/clm/diagnostics/images/SET".$set.$sn.".gif\""; } + if ( $set == 8) { $path = "\"http://www2.cgd.ucar.edu/tss/clm/diagnostics/images/SET".$set.".jpg\""; } + else { $path = "\"http://www2.cgd.ucar.edu/tss/clm/diagnostics/images/SET".$set.$sn.".gif\""; } } # write generalized header @@ -278,7 +278,7 @@ sub setHeader sub clickablePlotTypes { printf(fp_main "\n"); - @setList = (1,2,3,4,6,7,8,10,11,12); + @setList = (1,2,3,4,6,7,8,9,10,11,12); printf(fp_main "


\n"); printf(fp_main "Click on Plot Type

\n"); for $set (@setList) @@ -288,8 +288,8 @@ sub clickablePlotTypes ## if( @status[$set-1] == "True") { if( @status[$set-1] eq "True") { $href = "set".$set."/set".$set.".html"; - if ($set == 8) { $path = "\"http://www.cgd.ucar.edu/tss/clm/diagnostics/images/SET".$set.".jpg\""; } - else { $path = "\"http://www.cgd.ucar.edu/tss/clm/diagnostics/images/SET".$set.$sn.".gif\""; } + if ($set == 8) { $path = "\"http://www2.cgd.ucar.edu/tss/clm/diagnostics/images/SET".$set.".jpg\""; } + else { $path = "\"http://www2.cgd.ucar.edu/tss/clm/diagnostics/images/SET".$set.$sn.".gif\""; } printf(fp_main "\"Set\n"); } } diff --git a/lnd_diag/shared/lnd_lookupTable.pl b/lnd_diag/shared/lnd_lookupTable.pl index bcc6055d..dbc82b43 100755 --- a/lnd_diag/shared/lnd_lookupTable.pl +++ b/lnd_diag/shared/lnd_lookupTable.pl @@ -83,7 +83,7 @@ sub mainHeader1 { local($num) = @_; $num++; - $path = "\"http://www.cgd.ucar.edu/tss/clm/clm/diagnostics/images/NCAR.gif\""; + $path = "\"http://www2.cgd.ucar.edu/tss/clm/clm/diagnostics/images/NCAR.gif\""; printf fp_main "\n"; printf fp_main "\n"; printf fp_main "LND Variable Definitions\n"; diff --git a/lnd_diag/shared/lnd_statTable.pl b/lnd_diag/shared/lnd_statTable.pl index bf3ddc51..c0da097e 100755 --- a/lnd_diag/shared/lnd_statTable.pl +++ b/lnd_diag/shared/lnd_statTable.pl @@ -60,7 +60,7 @@ sub mainHeader1 { local($num) = @_; $num++; - $path = "\"http://www.cgd.ucar.edu/tss/clm/clm/diagnostics/images/NCAR.gif\""; + $path = "\"http://www2.cgd.ucar.edu/tss/clm/clm/diagnostics/images/NCAR.gif\""; printf fp_main "\n"; printf fp_main "\n"; printf fp_main "LND Variable Definitions\n"; From a0068b0abc60f5b44bcd1f9d3c1a4eb49b485559 Mon Sep 17 00:00:00 2001 From: Keith Oleson Date: Thu, 9 Nov 2023 12:49:14 -0700 Subject: [PATCH 9/9] Various fixes. - Add more diagnostic variables (mostly forcing) - CPL_ENERGY_BAL calculation problem - levsoi/levgrnd/levlak problems - Set 5 C13/C13 problem - Restore observations to model-model set3 - Set 6 hack for CWCD to CWCD_C change --- lnd_diag/inputFiles/set1_c13.txt | 2 + lnd_diag/inputFiles/set1_clm.txt | 30 + lnd_diag/inputFiles/set1_cn.txt | 1 + lnd_diag/inputFiles/set2_c13.txt | 2 + lnd_diag/inputFiles/set2_clm.txt | 25 + lnd_diag/inputFiles/set2_cn.txt | 2 + lnd_diag/inputFiles/set5_c13.txt | 2 + lnd_diag/inputFiles/set5_cn.txt | 1 + lnd_diag/inputFiles/variable_master4.3.ncl | 918 +++++++++++++++++++-- lnd_diag/model-obs/set_1.ncl | 21 +- lnd_diag/model-obs/set_10.ncl | 15 +- lnd_diag/model-obs/set_11.ncl | 2 - lnd_diag/model-obs/set_2.ncl | 2 - lnd_diag/model-obs/set_5.ncl | 34 +- lnd_diag/model-obs/set_6.ncl | 21 +- lnd_diag/model1-model2/set_3.ncl | 61 +- lnd_diag/model1-model2/set_6.ncl | 11 + lnd_diag/shared/variable_master4.3.ncl | 918 +++++++++++++++++++-- 18 files changed, 1919 insertions(+), 149 deletions(-) diff --git a/lnd_diag/inputFiles/set1_c13.txt b/lnd_diag/inputFiles/set1_c13.txt index 23a5051b..b59c982c 100755 --- a/lnd_diag/inputFiles/set1_c13.txt +++ b/lnd_diag/inputFiles/set1_c13.txt @@ -27,6 +27,7 @@ globalTotlNat C13_DEADCROOTC globalTotlNat C13_CPOOL globalTotlNat C13_TOTVEGC globalTotlNat C13_CWDC +globalTotlNat C13_CWD_C globalTotlNat C13_TOTLITC globalTotlNat C13_TOTSOMC globalTotlNat C13_TOTECOSYSC @@ -63,6 +64,7 @@ globalTotlNat C14_DEADCROOTC globalTotlNat C14_CPOOL globalTotlNat C14_TOTVEGC globalTotlNat C14_CWDC +globalTotlNat C14_CWD_C globalTotlNat C14_TOTLITC globalTotlNat C14_TOTSOMC globalTotlNat C14_TOTECOSYSC diff --git a/lnd_diag/inputFiles/set1_clm.txt b/lnd_diag/inputFiles/set1_clm.txt index 26af4d2f..2179723c 100755 --- a/lnd_diag/inputFiles/set1_clm.txt +++ b/lnd_diag/inputFiles/set1_clm.txt @@ -43,3 +43,33 @@ globalTotlAnn DSTDEP globalTotlAnn DSTFLXT globalTotlAnn OCDEP globalTotlAnn BCDEP +globalMeanNat FSDSND +globalMeanNat FSDSVD +globalMeanNat FSDSNI +globalMeanNat FSDSVI +globalMeanDay RAIN_FROM_ATM +globalMeanDay SNOW_FROM_ATM +globalMeanNat FLDS_NOT_DOWNSCALED +globalMeanNat ZBOT +globalMeanNat Tair_from_atm +globalMeanNat Thair_from_atm +globalMeanNat QBOT_NOT_DOWNSCALED +globalMeanNat PBOT_NOT_DOWNSCALED +globalMeanNat Rho_from_atm +globalMeanNat UWIND +globalMeanNat VWIND +globalTotlAnn BCPHIDRY +globalTotlAnn BCPHODRY +globalTotlAnn BCPHIWET +globalTotlAnn OCPHIDRY +globalTotlAnn OCPHODRY +globalTotlAnn OCPHIWET +globalTotlAnn DSTWET1 +globalTotlAnn DSTDRY1 +globalTotlAnn DSTWET2 +globalTotlAnn DSTDRY2 +globalTotlAnn DSTWET3 +globalTotlAnn DSTDRY3 +globalTotlAnn DSTWET4 +globalTotlAnn DSTDRY4 +globalMeanNat ATM_TOPO diff --git a/lnd_diag/inputFiles/set1_cn.txt b/lnd_diag/inputFiles/set1_cn.txt index 9f1b513c..afa3faac 100755 --- a/lnd_diag/inputFiles/set1_cn.txt +++ b/lnd_diag/inputFiles/set1_cn.txt @@ -45,6 +45,7 @@ globalTotlNat TOTVEGC globalTotlNat TOTVEGN globalMeanNat TOTVEGCN globalTotlNat CWDC +globalTotlNat CWD_C globalTotlNat TOTLITC globalTotlNat TOTLITC_1m globalTotlNat TOTLITN diff --git a/lnd_diag/inputFiles/set2_c13.txt b/lnd_diag/inputFiles/set2_c13.txt index bba72b53..69ca3c96 100755 --- a/lnd_diag/inputFiles/set2_c13.txt +++ b/lnd_diag/inputFiles/set2_c13.txt @@ -27,6 +27,7 @@ globalMeanNat0 C13_DEADCROOTC globalMeanNat0 C13_CPOOL globalMeanNat0 C13_TOTVEGC globalMeanNat0 C13_CWDC +globalMeanNat0 C13_CWD_C globalMeanNat0 C13_TOTLITC globalMeanNat0 C13_TOTSOMC globalMeanNat0 C13_TOTECOSYSC @@ -61,6 +62,7 @@ globalMeanNat0 C14_DEADCROOTC globalMeanNat0 C14_CPOOL globalMeanNat0 C14_TOTVEGC globalMeanNat0 C14_CWDC +globalMeanNat0 C14_CWD_C globalMeanNat0 C14_TOTLITC globalMeanNat0 C14_TOTSOMC globalMeanNat0 C14_TOTECOSYSC diff --git a/lnd_diag/inputFiles/set2_clm.txt b/lnd_diag/inputFiles/set2_clm.txt index add96f7b..77b726d9 100755 --- a/lnd_diag/inputFiles/set2_clm.txt +++ b/lnd_diag/inputFiles/set2_clm.txt @@ -110,3 +110,28 @@ globalMeanNat0 PCT_GRASS_PFT globalMeanNat0 PCT_SHRUB_PFT globalMeanNat0 PCT_CROP_PFT globalMeanNat0 ZETA +globalMeanDay0 RAIN_FROM_ATM +globalMeanDay0 SNOW_FROM_ATM +globalMeanNat0 FLDS_NOT_DOWNSCALED +globalMeanNat0 Tair_from_atm +globalMeanNat0 Thair_from_atm +globalMeanNat0 QBOT_NOT_DOWNSCALED +globalMeanNat0 PBOT_NOT_DOWNSCALED +globalMeanNat0 Rho_from_atm +globalMeanNat0 UWIND +globalMeanNat0 VWIND +globalMeanDay0 BCPHIDRY +globalMeanDay0 BCPHODRY +globalMeanDay0 BCPHIWET +globalMeanDay0 OCPHIDRY +globalMeanDay0 OCPHODRY +globalMeanDay0 OCPHIWET +globalMeanDay0 DSTWET1 +globalMeanDay0 DSTDRY1 +globalMeanDay0 DSTWET2 +globalMeanDay0 DSTDRY2 +globalMeanDay0 DSTWET3 +globalMeanDay0 DSTDRY3 +globalMeanDay0 DSTWET4 +globalMeanDay0 DSTDRY4 +globalMeanNat0 ATM_TOPO diff --git a/lnd_diag/inputFiles/set2_cn.txt b/lnd_diag/inputFiles/set2_cn.txt index e6e21527..816d1880 100755 --- a/lnd_diag/inputFiles/set2_cn.txt +++ b/lnd_diag/inputFiles/set2_cn.txt @@ -49,6 +49,7 @@ globalMeanNat0 TOTVEGC globalMeanNat0 TOTVEGN globalMeanNat0 TOTVEGCN globalMeanNat0 CWDC +globalMeanNat0 CWD_C globalMeanNat0 TOTLITC globalMeanNat0 TOTLITC_1m globalMeanNat0 TOTSOMC @@ -114,3 +115,4 @@ globalMeanNat0 WOODC globalMeanDay0 WOODC_ALLOC globalMeanDay0 WOODC_LOSS globalMeanNat1 ALTMAX +globalMeanDay1 LNFM diff --git a/lnd_diag/inputFiles/set5_c13.txt b/lnd_diag/inputFiles/set5_c13.txt index 23a5051b..b59c982c 100755 --- a/lnd_diag/inputFiles/set5_c13.txt +++ b/lnd_diag/inputFiles/set5_c13.txt @@ -27,6 +27,7 @@ globalTotlNat C13_DEADCROOTC globalTotlNat C13_CPOOL globalTotlNat C13_TOTVEGC globalTotlNat C13_CWDC +globalTotlNat C13_CWD_C globalTotlNat C13_TOTLITC globalTotlNat C13_TOTSOMC globalTotlNat C13_TOTECOSYSC @@ -63,6 +64,7 @@ globalTotlNat C14_DEADCROOTC globalTotlNat C14_CPOOL globalTotlNat C14_TOTVEGC globalTotlNat C14_CWDC +globalTotlNat C14_CWD_C globalTotlNat C14_TOTLITC globalTotlNat C14_TOTSOMC globalTotlNat C14_TOTECOSYSC diff --git a/lnd_diag/inputFiles/set5_cn.txt b/lnd_diag/inputFiles/set5_cn.txt index 09913012..0aded560 100755 --- a/lnd_diag/inputFiles/set5_cn.txt +++ b/lnd_diag/inputFiles/set5_cn.txt @@ -40,6 +40,7 @@ globalTotlNat DEADCROOTC globalTotlNat CPOOL globalTotlNat TOTVEGC globalTotlNat CWDC +globalTotlNat CWD_C globalTotlNat TOTLITC globalTotlNat TOTLITC_1m globalTotlNat TOTSOMC diff --git a/lnd_diag/inputFiles/variable_master4.3.ncl b/lnd_diag/inputFiles/variable_master4.3.ncl index f4e327d5..3501a2eb 100644 --- a/lnd_diag/inputFiles/variable_master4.3.ncl +++ b/lnd_diag/inputFiles/variable_master4.3.ncl @@ -1519,6 +1519,35 @@ begin info@cn_LevelsDiff = (/-10., -8.0, -6.0, -4.0, -2.0, 0.0, 2.0, 4.0, 6.0, 8.0, 10/) return(info) end if + + if (varName .eq. "LNFM") then + info@flux=True + info@longName="lightning frequency" + info@nativeUnits = "counts/km^2/hr" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "counts/y" + info@globalTotal_Annual__SF = 24.*365. + ; -- global Mean + info@globalMean__units = "counts/km^2/hr" + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "counts/km^2/y" + info@globalMean_Annual__SF = 24.*365. + info@globalMean_Daily__units = "counts/km^2/d" + info@globalMean_Daily__SF = 24. + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = (/0.0, 0.03, 0.06, 0.09, 0.12, 0.15, 0.18, 0.21, 0.24/) + info@cn_LevelsDiff = (/-0.10, -0.08, -0.06, -0.04, -0.02, 0.0, 0.02, 0.04, 0.06, 0.08, 0.10/) + return(info) + end if if (varName .eq. "SR") then info@flux=True @@ -2869,6 +2898,35 @@ begin info@cn_LevelsDiff = (/-1., -0.8, -0.6, -0.4, -0.2, 0.0, 0.2, 0.4, 0.6, 0.8, 1/) return(info) end if + + if (varName .eq. "CWD_C") then + info@flux=False + info@longName="coarse woody debris carbon" + info@nativeUnits = "gC/m^2" + ; -- global Total + info@globalTotal__units = "PgC" + info@globalTotal__SF = grams2Pgrams + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "kgC/m^2" + info@globalMean__SF = grams2Kgrams + info@globalMean_Annual__units = "NA" + info@globalMean_Annual__SF = -999. + info@globalMean_Daily__units = "NA" + info@globalMean_Daily__SF = -999. + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = (/1.0, 2., 3., 4., 5.0, 6.0, 7., 8., 9/) + info@cn_LevelsDiff = (/-1., -0.8, -0.6, -0.4, -0.2, 0.0, 0.2, 0.4, 0.6, 0.8, 1/) + return(info) + end if if (varName .eq. "TOTLITC") then info@flux=False @@ -8616,6 +8674,35 @@ if (varName .eq. "LITTERC_HR") then return(info) end if + if (varName .eq. "RAIN_FROM_ATM") then + info@flux=True + info@longName="atmospheric rain (pre-downscaling)" + info@nativeUnits = "mm/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "mm/s" + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "mm/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "mm/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = (/0.,2.,4.,6.,8.,10.,12.,14.,16./) + info@cn_LevelsDiff = (/-1.25,-1.,-0.75,-0.5,-0.25,0.,0.25,0.5,0.75,1.,1.25/) + return(info) + end if + if (varName .eq. "SNOW") then info@flux=True info@longName="atmospheric snow" @@ -8645,6 +8732,34 @@ if (varName .eq. "LITTERC_HR") then return(info) end if + if (varName .eq. "SNOW_FROM_ATM") then + info@flux=True + info@longName="atmospheric snow (pre-downscaling)" + info@nativeUnits = "mm/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "mm/s" + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "mm/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "mm/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = (/0.,.5,1.,1.5,2.,2.5,3.,3.5,4./) + info@cn_LevelsDiff = (/-1.25,-1.,-0.75,-0.5,-0.25,0.,0.25,0.5,0.75,1.,1.25/) + return(info) + end if if (varName .eq. "SNOW_REPARTITIONED") then info@flux=True @@ -8731,6 +8846,62 @@ if (varName .eq. "LITTERC_HR") then info@cn_LevelsDiff = (/-5.,-4.,-3.,-2.,-1.,0.,1.,2.,3.,4.,5./) return(info) end if + if (varName .eq. "UWIND") then + info@flux=True + info@longName="atmospheric uwind velocity magnitude" + info@nativeUnits = "m/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "m/s" + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "m/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "m/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = (/0.,2.,4.,6.,8.,10.,12.,14.,16./) + info@cn_LevelsDiff = (/-5.,-4.,-3.,-2.,-1.,0.,1.,2.,3.,4.,5./) + return(info) + end if + if (varName .eq. "VWIND") then + info@flux=True + info@longName="atmospheric vwind velocity magnitude" + info@nativeUnits = "m/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "m/s" + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "m/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "m/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = (/0.,2.,4.,6.,8.,10.,12.,14.,16./) + info@cn_LevelsDiff = (/-5.,-4.,-3.,-2.,-1.,0.,1.,2.,3.,4.,5./) + return(info) + end if if (varName .eq. "U10") then info@flux=True @@ -8819,6 +8990,64 @@ if (varName .eq. "LITTERC_HR") then return(info) end if + if (varName .eq. "PBOT_NOT_DOWNSCALED") then + info@flux=False + info@longName="atm pressure of bottom layer (pre-downscaling)" + info@nativeUnits = "Pa" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "Pa" + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "NA" + info@globalMean_Annual__SF = -999. + info@globalMean_Daily__units = "NA" + info@globalMean_Daily__SF = -999. + ; -- Origin + info@model = "CLM" + info@derivedVariable = False + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = False + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = (/-50, -40, -30, -20, -10, 0, 10, 20, 30/) + info@cn_LevelsDiff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) + return(info) + end if + + if (varName .eq. "Rho_from_atm") then + info@flux=False + info@longName="atmospheric density of bottom layer (pre-downscaling)" + info@nativeUnits = "kg/m3" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "kg/m3" + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "NA" + info@globalMean_Annual__SF = -999. + info@globalMean_Daily__units = "NA" + info@globalMean_Daily__SF = -999. + ; -- Origin + info@model = "CLM" + info@derivedVariable = False + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = False + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = (/-50, -40, -30, -20, -10, 0, 10, 20, 30/) + info@cn_LevelsDiff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) + return(info) + end if + if (varName .eq. "PCO2") then info@flux=False info@longName="partial pressure of CO2" @@ -8877,17 +9106,17 @@ if (varName .eq. "LITTERC_HR") then return(info) end if - if (varName .eq. "TBOT") then + if (varName .eq. "ATM_TOPO") then info@flux=False - info@longName="atmospheric air temperature" - info@nativeUnits = "K" + info@longName="atmospheric surface height" + info@nativeUnits = "m" ; -- global Total info@globalTotal__units = "NA" info@globalTotal__SF = -999. info@globalTotal_Annual__units = "NA" info@globalTotal_Annual__SF = -999. ; -- global Mean - info@globalMean__units = "K" + info@globalMean__units = "m" info@globalMean__SF = 1.0 info@globalMean_Annual__units = "NA" info@globalMean_Annual__SF = -999. @@ -8906,9 +9135,9 @@ if (varName .eq. "LITTERC_HR") then return(info) end if - if (varName .eq. "THBOT") then + if (varName .eq. "TBOT") then info@flux=False - info@longName="atmospheric air potential temperature" + info@longName="atmospheric air temperature" info@nativeUnits = "K" ; -- global Total info@globalTotal__units = "NA" @@ -8935,9 +9164,9 @@ if (varName .eq. "LITTERC_HR") then return(info) end if - if (varName .eq. "TLAKE") then + if (varName .eq. "Tair_from_atm") then info@flux=False - info@longName="lake temperature" + info@longName="atmospheric air temperature (pre-downscaling)" info@nativeUnits = "K" ; -- global Total info@globalTotal__units = "NA" @@ -8959,55 +9188,142 @@ if (varName .eq. "LITTERC_HR") then info@cn_Explicit = True info@cn_Min = -999 info@cn_Max = -999 - info@cn_Level0 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) - info@cn_Level1 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) - info@cn_Level2 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) - info@cn_Level3 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) - info@cn_Level4 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) - info@cn_Level5 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) - info@cn_Level6 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) - info@cn_Level7 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) - info@cn_Level8 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) - info@cn_Level9 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) - info@cn_Level0Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) - info@cn_Level1Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) - info@cn_Level2Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) - info@cn_Level3Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) - info@cn_Level4Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) - info@cn_Level5Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) - info@cn_Level6Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) - info@cn_Level7Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) - info@cn_Level8Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) - info@cn_Level9Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) + info@cn_Levels = (/-50, -40, -30, -20, -10, 0, 10, 20, 30/) + info@cn_LevelsDiff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) return(info) end if - if (varName .eq. "REL_HUM") then + if (varName .eq. "THBOT") then info@flux=False - info@longName="Relative Humidity at 2m" - info@nativeUnits = "kg/kg" + info@longName="atmospheric air potential temperature" + info@nativeUnits = "K" ; -- global Total info@globalTotal__units = "NA" info@globalTotal__SF = -999. info@globalTotal_Annual__units = "NA" info@globalTotal_Annual__SF = -999. ; -- global Mean - info@globalMean__units = "kg/kg" + info@globalMean__units = "K" info@globalMean__SF = 1.0 info@globalMean_Annual__units = "NA" - info@globalMean_Annual__SF = -999. + info@globalMean_Annual__SF = -999. info@globalMean_Daily__units = "NA" - info@globalMean_Daily__SF = -999. + info@globalMean_Daily__SF = -999. ; -- Origin - info@model = "CLM" + info@model = "CN" info@derivedVariable = False - info@clampVariable = True + info@clampVariable = False ; -- contour intervals info@cn_Explicit = True info@cn_Min = -999 info@cn_Max = -999 - info@cn_Levels = (/0.,0.002,0.004,0.006,0.008,0.010,0.012,0.014,0.016/) - info@cn_LevelsDiff = (/-2.5e-3,-2.0e-3,-1.5e-3,-1.0e-3,-0.5e-3,0.,0.5e-3,1.0e-3,1.5e-3,2.0e-3,2.5e-3/) + info@cn_Levels = (/-50, -40, -30, -20, -10, 0, 10, 20, 30/) + info@cn_LevelsDiff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) + return(info) + end if + + if (varName .eq. "Thair_from_atm") then + info@flux=False + info@longName="atmospheric air potential temperature (pre-downscaling)" + info@nativeUnits = "K" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "K" + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "NA" + info@globalMean_Annual__SF = -999. + info@globalMean_Daily__units = "NA" + info@globalMean_Daily__SF = -999. + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = (/-50, -40, -30, -20, -10, 0, 10, 20, 30/) + info@cn_LevelsDiff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) + return(info) + end if + + if (varName .eq. "TLAKE") then + info@flux=False + info@longName="lake temperature" + info@nativeUnits = "K" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "K" + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "NA" + info@globalMean_Annual__SF = -999. + info@globalMean_Daily__units = "NA" + info@globalMean_Daily__SF = -999. + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Level0 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) + info@cn_Level1 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) + info@cn_Level2 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) + info@cn_Level3 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) + info@cn_Level4 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) + info@cn_Level5 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) + info@cn_Level6 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) + info@cn_Level7 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) + info@cn_Level8 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) + info@cn_Level9 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) + info@cn_Level0Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) + info@cn_Level1Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) + info@cn_Level2Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) + info@cn_Level3Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) + info@cn_Level4Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) + info@cn_Level5Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) + info@cn_Level6Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) + info@cn_Level7Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) + info@cn_Level8Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) + info@cn_Level9Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) + return(info) + end if + + if (varName .eq. "REL_HUM") then + info@flux=False + info@longName="Relative Humidity at 2m" + info@nativeUnits = "kg/kg" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "kg/kg" + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "NA" + info@globalMean_Annual__SF = -999. + info@globalMean_Daily__units = "NA" + info@globalMean_Daily__SF = -999. + ; -- Origin + info@model = "CLM" + info@derivedVariable = False + info@clampVariable = True + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = (/0.,0.002,0.004,0.006,0.008,0.010,0.012,0.014,0.016/) + info@cn_LevelsDiff = (/-2.5e-3,-2.0e-3,-1.5e-3,-1.0e-3,-0.5e-3,0.,0.5e-3,1.0e-3,1.5e-3,2.0e-3,2.5e-3/) return(info) end if @@ -9069,6 +9385,35 @@ if (varName .eq. "LITTERC_HR") then return(info) end if + if (varName .eq. "QBOT_NOT_DOWNSCALED") then + info@flux=False + info@longName="atmospheric specific humidity (pre-downscaling)" + info@nativeUnits = "kg/kg" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "kg/kg" + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "NA" + info@globalMean_Annual__SF = -999. + info@globalMean_Daily__units = "NA" + info@globalMean_Daily__SF = -999. + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = (/0.,0.002,0.004,0.006,0.008,0.010,0.012,0.014,0.016/) + info@cn_LevelsDiff = (/-2.5e-3,-2.0e-3,-1.5e-3,-1.0e-3,-0.5e-3,0.,0.5e-3,1.0e-3,1.5e-3,2.0e-3,2.5e-3/) + return(info) + end if + if (varName .eq. "ZBOT") then info@flux=False info@longName="atmospheric reference height" @@ -9156,6 +9501,35 @@ if (varName .eq. "LITTERC_HR") then return(info) end if + if (varName .eq. "FLDS_NOT_DOWNSCALED") then + info@flux=True + info@longName="atmospheric longwave radiation (pre-downscaling)" + info@nativeUnits = "W/m^2" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "W/m^2" + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "NA" + info@globalMean_Annual__SF = -999. + info@globalMean_Daily__units = "NA" + info@globalMean_Daily__SF = -999. + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = (/100.,150.,200.,250.,300.,350.,400.,450.,500./) + info@cn_LevelsDiff = (/-50.,-25.,-10.,-5.,-1.,0.,1.,5.,10.,25.,50./) + return(info) + end if + if (varName .eq. "SOLAR") then info@flux=True info@longName="Total Incident Solar Radiation" @@ -11136,6 +11510,35 @@ if (varName .eq. "LITTERC_HR") then info@cn_LevelsDiff = -999 return(info) end if + + if (varName .eq. "C13_CWD_C") then + info@flux=False + info@longName="C13 Coarse Woody Debris Carbon" + info@nativeUnits = "gC/m^2" + ; -- global Total + info@globalTotal__units = "per mil v PDB" + info@globalTotal__SF = 1.0 + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "per mil v PDB" + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "NA" + info@globalMean_Annual__SF = -999. + info@globalMean_Daily__units = "NA" + info@globalMean_Daily__SF = -999. + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = -999 + info@cn_LevelsDiff = -999 + return(info) + end if if (varName .eq. "C13_DEADCROOTC") then info@flux=False @@ -12465,6 +12868,35 @@ if (varName .eq. "LITTERC_HR") then info@cn_LevelsDiff = -999 return(info) end if + + if (varName .eq. "C14_CWD_C") then + info@flux=False + info@longName="C14 Coarse Woody Debris Carbon" + info@nativeUnits = "gC/m^2" + ; -- global Total + info@globalTotal__units = "per mil" + info@globalTotal__SF = 1.0 + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "per mil" + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "NA" + info@globalMean_Annual__SF = -999. + info@globalMean_Daily__units = "NA" + info@globalMean_Daily__SF = -999. + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = -999 + info@cn_LevelsDiff = -999 + return(info) + end if if (varName .eq. "C14_DEADCROOTC") then info@flux=False @@ -13708,10 +14140,9 @@ if (varName .eq. "LITTERC_HR") then info@cn_LevelsDiff = -999 return(info) end if - - if (varName .eq. "DSTFLXT") then + if (varName .eq. "DSTWET1") then info@flux=True - info@longName="total surface dust emission" + info@longName="dust deposition (wet1) from atmosphere" info@nativeUnits = "kg/m2/s" ; -- global Total info@globalTotal__units = "NA" @@ -13737,10 +14168,9 @@ if (varName .eq. "LITTERC_HR") then info@cn_LevelsDiff = -999 return(info) end if - - if (varName .eq. "OCDEP") then + if (varName .eq. "DSTDRY1") then info@flux=True - info@longName="total OC deposition (dry+wet) from atmosphere" + info@longName="dust deposition (dry1) from atmosphere" info@nativeUnits = "kg/m2/s" ; -- global Total info@globalTotal__units = "NA" @@ -13766,10 +14196,404 @@ if (varName .eq. "LITTERC_HR") then info@cn_LevelsDiff = -999 return(info) end if - - if (varName .eq. "BCDEP") then + if (varName .eq. "DSTWET2") then info@flux=True - info@longName="total BC deposition (dry+wet) from atmosphere" + info@longName="dust deposition (wet2) from atmosphere" + info@nativeUnits = "kg/m2/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "Pg/y" + info@globalTotal_Annual__SF = kgrams2Pgrams*secondsInYear + ; -- global Mean + info@globalMean__units = "kg/m2/s" + info@globalMean__SF = -999. + info@globalMean_Annual__units = "kg/m2/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "kg/m2/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = True + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = -999. + info@cn_LevelsDiff = -999 + return(info) + end if + if (varName .eq. "DSTDRY2") then + info@flux=True + info@longName="dust deposition (dry2) from atmosphere" + info@nativeUnits = "kg/m2/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "Pg/y" + info@globalTotal_Annual__SF = kgrams2Pgrams*secondsInYear + ; -- global Mean + info@globalMean__units = "kg/m2/s" + info@globalMean__SF = -999. + info@globalMean_Annual__units = "kg/m2/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "kg/m2/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = True + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = -999. + info@cn_LevelsDiff = -999 + return(info) + end if + if (varName .eq. "DSTWET3") then + info@flux=True + info@longName="dust deposition (wet3) from atmosphere" + info@nativeUnits = "kg/m2/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "Pg/y" + info@globalTotal_Annual__SF = kgrams2Pgrams*secondsInYear + ; -- global Mean + info@globalMean__units = "kg/m2/s" + info@globalMean__SF = -999. + info@globalMean_Annual__units = "kg/m2/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "kg/m2/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = True + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = -999. + info@cn_LevelsDiff = -999 + return(info) + end if + if (varName .eq. "DSTDRY3") then + info@flux=True + info@longName="dust deposition (dry3) from atmosphere" + info@nativeUnits = "kg/m2/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "Pg/y" + info@globalTotal_Annual__SF = kgrams2Pgrams*secondsInYear + ; -- global Mean + info@globalMean__units = "kg/m2/s" + info@globalMean__SF = -999. + info@globalMean_Annual__units = "kg/m2/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "kg/m2/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = True + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = -999. + info@cn_LevelsDiff = -999 + return(info) + end if + if (varName .eq. "DSTWET4") then + info@flux=True + info@longName="dust deposition (wet4) from atmosphere" + info@nativeUnits = "kg/m2/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "Pg/y" + info@globalTotal_Annual__SF = kgrams2Pgrams*secondsInYear + ; -- global Mean + info@globalMean__units = "kg/m2/s" + info@globalMean__SF = -999. + info@globalMean_Annual__units = "kg/m2/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "kg/m2/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = True + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = -999. + info@cn_LevelsDiff = -999 + return(info) + end if + if (varName .eq. "DSTDRY4") then + info@flux=True + info@longName="dust deposition (dry4) from atmosphere" + info@nativeUnits = "kg/m2/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "Pg/y" + info@globalTotal_Annual__SF = kgrams2Pgrams*secondsInYear + ; -- global Mean + info@globalMean__units = "kg/m2/s" + info@globalMean__SF = -999. + info@globalMean_Annual__units = "kg/m2/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "kg/m2/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = True + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = -999. + info@cn_LevelsDiff = -999 + return(info) + end if + + if (varName .eq. "DSTFLXT") then + info@flux=True + info@longName="total surface dust emission" + info@nativeUnits = "kg/m2/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "Pg/y" + info@globalTotal_Annual__SF = kgrams2Pgrams*secondsInYear + ; -- global Mean + info@globalMean__units = "kg/m2/s" + info@globalMean__SF = -999. + info@globalMean_Annual__units = "kg/m2/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "kg/m2/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = True + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = -999. + info@cn_LevelsDiff = -999 + return(info) + end if + + if (varName .eq. "OCDEP") then + info@flux=True + info@longName="total OC deposition (dry+wet) from atmosphere" + info@nativeUnits = "kg/m2/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "Pg/y" + info@globalTotal_Annual__SF = kgrams2Pgrams*secondsInYear + ; -- global Mean + info@globalMean__units = "kg/m2/s" + info@globalMean__SF = -999. + info@globalMean_Annual__units = "kg/m2/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "kg/m2/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = True + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = -999. + info@cn_LevelsDiff = -999 + return(info) + end if + if (varName .eq. "OCPHIDRY") then + info@flux=True + info@longName="OC deposition (phidry) from atmosphere" + info@nativeUnits = "kg/m2/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "Pg/y" + info@globalTotal_Annual__SF = kgrams2Pgrams*secondsInYear + ; -- global Mean + info@globalMean__units = "kg/m2/s" + info@globalMean__SF = -999. + info@globalMean_Annual__units = "kg/m2/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "kg/m2/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = True + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = -999. + info@cn_LevelsDiff = -999 + return(info) + end if + if (varName .eq. "OCPHODRY") then + info@flux=True + info@longName="OC deposition (phodry) from atmosphere" + info@nativeUnits = "kg/m2/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "Pg/y" + info@globalTotal_Annual__SF = kgrams2Pgrams*secondsInYear + ; -- global Mean + info@globalMean__units = "kg/m2/s" + info@globalMean__SF = -999. + info@globalMean_Annual__units = "kg/m2/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "kg/m2/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = True + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = -999. + info@cn_LevelsDiff = -999 + return(info) + end if + if (varName .eq. "OCPHIWET") then + info@flux=True + info@longName="OC deposition (phiwet) from atmosphere" + info@nativeUnits = "kg/m2/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "Pg/y" + info@globalTotal_Annual__SF = kgrams2Pgrams*secondsInYear + ; -- global Mean + info@globalMean__units = "kg/m2/s" + info@globalMean__SF = -999. + info@globalMean_Annual__units = "kg/m2/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "kg/m2/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = True + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = -999. + info@cn_LevelsDiff = -999 + return(info) + end if + + if (varName .eq. "BCDEP") then + info@flux=True + info@longName="total BC deposition (dry+wet) from atmosphere" + info@nativeUnits = "kg/m2/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "Pg/y" + info@globalTotal_Annual__SF = kgrams2Pgrams*secondsInYear + ; -- global Mean + info@globalMean__units = "kg/m2/s" + info@globalMean__SF = -999. + info@globalMean_Annual__units = "kg/m2/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "kg/m2/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = True + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = -999. + info@cn_LevelsDiff = -999 + return(info) + end if + if (varName .eq. "BCPHIDRY") then + info@flux=True + info@longName="BC deposition (phidry) from atmosphere" + info@nativeUnits = "kg/m2/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "Pg/y" + info@globalTotal_Annual__SF = kgrams2Pgrams*secondsInYear + ; -- global Mean + info@globalMean__units = "kg/m2/s" + info@globalMean__SF = -999. + info@globalMean_Annual__units = "kg/m2/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "kg/m2/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = True + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = -999. + info@cn_LevelsDiff = -999 + return(info) + end if + if (varName .eq. "BCPHODRY") then + info@flux=True + info@longName="BC deposition (phodry) from atmosphere" + info@nativeUnits = "kg/m2/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "Pg/y" + info@globalTotal_Annual__SF = kgrams2Pgrams*secondsInYear + ; -- global Mean + info@globalMean__units = "kg/m2/s" + info@globalMean__SF = -999. + info@globalMean_Annual__units = "kg/m2/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "kg/m2/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = True + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = -999. + info@cn_LevelsDiff = -999 + return(info) + end if + if (varName .eq. "BCPHIWET") then + info@flux=True + info@longName="BC deposition (phiwet) from atmosphere" info@nativeUnits = "kg/m2/s" ; -- global Total info@globalTotal__units = "NA" diff --git a/lnd_diag/model-obs/set_1.ncl b/lnd_diag/model-obs/set_1.ncl index 98b82094..d4599fb3 100755 --- a/lnd_diag/model-obs/set_1.ncl +++ b/lnd_diag/model-obs/set_1.ncl @@ -89,12 +89,12 @@ begin landfrac = in->landfrac time = in->time area = in->area + lat = in->lat + lon = in->lon ; We only have area for land gridcells and we need area over all gridcells ; to calculate CPL_ENERGY_BAL with respect to global area consistent with ; calculation in the coupler - areag = dble2flt(area_global_rectilinear_grid(lat1,lon1,False)) - lat = in->lat - lon = in->lon + areag = dble2flt(area_global_rectilinear_grid(lat,lon,False)) if(nyrs .ne. dimsizes(time)) then print(" ") print(" ") @@ -185,7 +185,7 @@ begin if (vars(i) .eq. "CPL_ENERGY_BAL") then var_plot = global_values(vars(i),x,areag,landfrac,scale_type(i),nyrs,nlev) else - var_plot = global_values(vars(i), x,area,landfrac,scale_type(i),yrs(m),nlev) + var_plot = global_values(vars(i), x,area,landfrac,scale_type(i),nyrs,nlev) end if else var_plot = x ; del13C and del14C vars are globally averaged before the del value is calculated @@ -274,12 +274,13 @@ begin res@pmLegendDisplayMode = "Never" res@vpHeightF = 0.4 res@vpWidthF = 0.8 - if(isfilevar(in,"levsoi")) then - lev = in->levsoi - end if - if(isfilevar(in,"levgrnd")) then - lev = in->levgrnd - end if +; if(isfilevar(in,"levsoi")) then +; nlev = getfilevardimsizes(in,"levsoi") +; else +; if(isfilevar(in,"levgrnd")) then +; nlev = getfilevardimsizes(in,"levgrnd") +; end if +; end if do k=0,nlev-1 res@tiXAxisOn = False res@gsnCenterString = "Layer " + (k+1) diff --git a/lnd_diag/model-obs/set_10.ncl b/lnd_diag/model-obs/set_10.ncl index 9cbf5682..871517f4 100755 --- a/lnd_diag/model-obs/set_10.ncl +++ b/lnd_diag/model-obs/set_10.ncl @@ -125,11 +125,9 @@ begin nlev = 0 if (isfilevar(in1,"levsoi")) then - levsoi = in1->levsoi nlev = getfilevardimsizes(in1,"levsoi") end if if (isfilevar(in1,"levgrnd")) then - levsoi = in1->levgrnd nlev = getfilevardimsizes(in1,"levgrnd") end if if (nlev .eq. 0) @@ -142,10 +140,11 @@ begin nlev = 10 end if - if (isfilevar(in1,"TLAKE") .and. isfilevar(in1,"levlak") ) then - levlak1 = in1->levlak - nlevlak1 = getfilevardimsizes(in1,"levlak") - end if + if (isfilevar(in1,"TLAKE") ) then + if (isfilevar(in1,"levlak") ) then + nlevlak1 = getfilevardimsizes(in1,"levlak") + end if + end if lat1 = in1->lat nlat1 = dimsizes(lat1) lon1 = in1->lon @@ -237,7 +236,7 @@ begin continue else ; read in observations (if present) - obsFlag = 0 ; (0 = on; 1 = off) + obsFlag = 0 ; (0 = off; 1 = on) if (isvar("x2") ) then delete(x2) end if @@ -425,7 +424,7 @@ begin print("processing variable: " + vars(i) ) ; process observations if present - if (obsFlag .eq. 1) ; (0 = on; 1 = off) + if (obsFlag .eq. 1) ; (0 = off; 1 = on) ; flip longitudes to -180 to 180 if needed if (min(x2&lon) .ge. 0 .and. min(x1&lon) .lt. 0) then x2 = lonFlip(x2) diff --git a/lnd_diag/model-obs/set_11.ncl b/lnd_diag/model-obs/set_11.ncl index 802e90e6..1087f1bd 100755 --- a/lnd_diag/model-obs/set_11.ncl +++ b/lnd_diag/model-obs/set_11.ncl @@ -125,11 +125,9 @@ begin nlev = 0 if (isfilevar(in1,"levsoi")) then - levsoi = in1->levsoi nlev = getfilevardimsizes(in1,"levsoi") end if if (isfilevar(in1,"levgrnd")) then - levsoi = in1->levgrnd nlev = getfilevardimsizes(in1,"levgrnd") end if if (nlev .eq. 0) diff --git a/lnd_diag/model-obs/set_2.ncl b/lnd_diag/model-obs/set_2.ncl index f2b49451..50997fab 100755 --- a/lnd_diag/model-obs/set_2.ncl +++ b/lnd_diag/model-obs/set_2.ncl @@ -144,11 +144,9 @@ begin nlev = 0 if (isfilevar(in1,"levsoi")) then - levsoi = in1->levsoi nlev = getfilevardimsizes(in1,"levsoi") end if if (isfilevar(in1,"levgrnd")) then - levsoi = in1->levgrnd nlev = getfilevardimsizes(in1,"levgrnd") end if if (nlev .eq. 0) diff --git a/lnd_diag/model-obs/set_5.ncl b/lnd_diag/model-obs/set_5.ncl index 37ee14ff..c38e5efa 100755 --- a/lnd_diag/model-obs/set_5.ncl +++ b/lnd_diag/model-obs/set_5.ncl @@ -241,6 +241,7 @@ do p=0,nplots-1 info = var_init(vars(i)) filevar = vars(i) if(isfilevar(in1,filevar) .and. info@derivedVariable .eq. False)then +; if(isfilevar(in1,filevar))then if (c13Flag(i) .eq. "C13_") then x1 = derive_del13C(vars(i),in1,scale_type(i),nyrs,5) if(all(ismissing(x1)))then @@ -255,7 +256,10 @@ do p=0,nplots-1 plot_check(i) = False end if else + tmp10 = in1->$filevar$ + printVarSummary(tmp10) x1 = in1->$filevar$ + printVarSummary(x1) end if end if delete(filevar) @@ -269,7 +273,20 @@ do p=0,nplots-1 else print("variable "+ vars(i)+ " is not a defined variable.") plot_check(i) = False - continue + if (c13Flag(i) .eq. "C13_" .or. c14Flag(i) .eq. "C14_") then + x1 = new((/nyrs/),"float") + x1!0 ="time" + x1&time =time1 + else + x1 = new((/nyrs,nlat1,nlon1/),"float") + x1!0 ="time" + x1&time =time1 + x1!1 ="lat" + x1&lat = lat1 + x1!2 ="lon" + x1&lon = lon1 + end if +; continue end if end if @@ -296,6 +313,7 @@ do p=0,nplots-1 if (vars(i) .eq. "TSA" ) then tmp = ptr_wm->$vars(i)$ x2 = dim_avg(tmp(lat|:,lon|:,month|:)) + printVarSummary(x2) l2 = ptr_wm->datamask a2 = ptr_wm->weight obsFlag(i) = 1; @@ -465,7 +483,9 @@ do p=0,nplots-1 a2 = lonFlip(a2) l2 = lonFlip(l2) end if + printVarSummary(x2) array2(i,:,:) = x2 ; Wrapper fcn that copies coord Vars + printVarSummary(array2) landmask2(i,:,:) = l2 area2(i,:,:) = a2 delete(l2) @@ -674,36 +694,42 @@ do region=startNumber,nreg-1 ; NOTE: area units are m2 if (resoln(i) .eq. 2) then x2 = array2(i,:,:) + x2@long_name = "NOTHING" value2 = regional_values(x2,region,area2(i,:,:),landmask2(i,:,:),scale_type(i),\ regions_file,time1,nTime,compare) delete(x2) end if if (resoln(i) .eq. 3) then x3 = array3(i,:,:) + x3@long_name = "NOTHING" value2 = regional_values(x3,region,area3(i,:,:),landmask3(i,:,:),scale_type(i),\ regions_file,time1,nTime,compare) delete(x3) end if if (resoln(i) .eq. 4) then x4 = array4(i,:,:) + x4@long_name = "NOTHING" value2 = regional_values(x4,region,area4(i,:,:),landmask4(i,:,:),scale_type(i),\ regions_file,time1,nTime,compare) delete(x4) end if if (resoln(i) .eq. 5) then x5 = array5(i,:,:) + x5@long_name = "NOTHING" value2 = regional_values(x5,region,area5(i,:,:),landmask5(i,:,:),scale_type(i),\ regions_file,time1,nTime,compare) delete(x5) end if if (resoln(i) .eq. 6) then x6 = array6(i,:,:) + x6@long_name = "NOTHING" value2 = regional_values(x6,region,area6(i,:,:),landmask6(i,:,:),scale_type(i),\ regions_file,time1,nTime,compare) delete(x6) end if if (resoln(i) .eq. 7) then x7 = array7(i,:,:) + x7@long_name = "NOTHING" value2 = regional_values(x7,region,area7(i,:,:),landmask7(i,:,:),scale_type(i),\ regions_file,time1,nTime,compare) delete(x7) @@ -716,10 +742,12 @@ do region=startNumber,nreg-1 if (c13Flag(i) .eq. "C13_") then x1 = array13c1(i) value1 = x1 ; del13C values are regionally averaged before conversion + delete(x1) else if (c14Flag(i) .eq. "C14_") then x1 = array14c1(i) value1 = x1 ; del14C values are regionally averaged before conversion + delete(x1) else x1 = array1(i,:,:) ; NOTE: area units are m2 @@ -727,14 +755,14 @@ do region=startNumber,nreg-1 x1@long_name = "CPL_ENERGY_BAL" value1 = regional_values(x1,region,area1g,landfrac1,scale_type(i),\ regions_file,time1,nTime,compare) - delete(x1@long_name) + delete(x1) else value1 = regional_values(x1,region,area1,landfrac1,scale_type(i),\ regions_file,time1,nTime,compare) + delete(x1) end if end if end if - delete(x1) else value1 = -999. value2 = -999. diff --git a/lnd_diag/model-obs/set_6.ncl b/lnd_diag/model-obs/set_6.ncl index a1140fd3..b45650bb 100755 --- a/lnd_diag/model-obs/set_6.ncl +++ b/lnd_diag/model-obs/set_6.ncl @@ -279,15 +279,17 @@ print("Now printing plot #" + p) prefix1 = getenv(name11) in1 = addfile(ptmpdir + "/" + prefix1 +"ANN_ALL.nc","r") print ("DEBUG file in1 = "+ptmpdir+"/"+prefix1+"ANN_ALL.nc") -; Follow logic of set_1 because now both levsoi and levgrnd may be present +; CTSM5.1.dev021 now has both levsoi and levgrnd variables +; so I'm changing this to an if/else (01/19/21) nlev1 = 0 if (isfilevar(in1,"levsoi")) then nlev1 = getfilevardimsizes(in1,"levsoi") levsoi1 = in1->levsoi - end if - if (isfilevar(in1,"levgrnd")) then - nlev1 = getfilevardimsizes(in1,"levgrnd") - levsoi1 = in1->levgrnd + else + if (isfilevar(in1,"levgrnd")) then + nlev1 = getfilevardimsizes(in1,"levgrnd") + levsoi1 = in1->levgrnd + end if end if if (nlev1 .eq. 0) print("FATAL ERROR: nlev1 = 0") @@ -476,11 +478,14 @@ if(plot_check.eq.True)then res@vpHeightF = 0.4 res@vpWidthF = 0.8 res@tiXAxisOn = False + ; CTSM5.1.dev021 now has both levsoi and levgrnd variables + ; so I'm changing this to an if/else (01/19/21) if(isfilevar(in1,"levsoi")) then - lev = in1->levsoi - end if - if(isfilevar(in1,"levgrnd")) then + lev = in1->levsoi + else + if (isfilevar(in1,"levgrnd")) then lev = in1->levgrnd + end if end if res@tiYAxisString = array1_3@units do k=0,nlevLimit-1 diff --git a/lnd_diag/model1-model2/set_3.ncl b/lnd_diag/model1-model2/set_3.ncl index f41c9120..6e63c3fe 100755 --- a/lnd_diag/model1-model2/set_3.ncl +++ b/lnd_diag/model1-model2/set_3.ncl @@ -486,8 +486,10 @@ print("Now printing plot #" + p) sFlag = new((/nvars/),"integer") aFlag = new((/nvars/),"integer") + obsFlag = new((/nvars/),"integer") sFlag = 0 aFlag = 0 + obsFlag = 0 ;************************** ; Variable loop ----------- read both cases of each variable into memeory. @@ -552,14 +554,14 @@ print("Now printing plot #" + p) end if ;read in observations (if present) - obsFlag = 0 ; (1 = on; 0 = off) + obsFlag(i) = 0 ; (1 = on; 0 = off) if (paleo .ne. "True") then if (vars(i) .eq. "TSA" ) then x3 = ptr_wm->$vars(i)$ l3 = ptr_wm->datamask a3 = ptr_wm->weight cases(2) = "Willmott-Matsuura(T,P),GRDC(R),USAF/ETAC(S),FLUXNET(LHF,GPP)" - obsFlag = 1 + obsFlag(i) = 1 sFlag(i) = 0 else if (vars(i) .eq. "PREC" .and. p .ne. 5) then @@ -567,14 +569,14 @@ print("Now printing plot #" + p) l3 = ptr_wm->datamask a3 = ptr_wm->weight cases(2) = "Willmott-Matsuura(T,P),GRDC(R),USAF/ETAC(S),FLUXNET(LHF,GPP)" - obsFlag = 1 + obsFlag(i) = 1 sFlag(i) = 0 else if (vars(i) .eq. "TOTRUNOFF" ) then x3 = ptr_grdc->RUNOFF l3 = ptr_grdc->datamask a3 = ptr_grdc->weight - obsFlag = 1 + obsFlag(i) = 1 sFlag(i) = 0 else if (vars(i) .eq. "SNOWDP" .and. snowFlag .eq. 1) then @@ -586,7 +588,7 @@ print("Now printing plot #" + p) a3 = ptr_fd->weight cases(2) = "USAF" x3@_FillValue = 1e30 - obsFlag = 1 + obsFlag(i) = 1 sFlag(i) = 0 else if (vars(i) .eq. "FSNO" ) then @@ -597,7 +599,7 @@ print("Now printing plot #" + p) a4 = ptr_scf->weight cases(2) = "NOAA AVHRR (1967-2003)" x4@_FillValue = 1e30 - obsFlag = 1 + obsFlag(i) = 1 sFlag(i) = 1 else if (vars(i) .eq. "H2OSNO" ) then @@ -607,7 +609,7 @@ print("Now printing plot #" + p) a4 = ptr_swe->weight cases(3) = "CMC (1980-1996)" x4@_FillValue = 1e30 - obsFlag = 1 + obsFlag(i) = 1 sFlag(i) = 1 else if (vars(i) .eq. "SNOWDP" .and. snowFlag .eq. 2) then @@ -620,7 +622,7 @@ print("Now printing plot #" + p) a4 = ptr_sd->weight cases(3) = "CMC (1980-1996)" x4@_FillValue = 1e30 - obsFlag = 1 + obsFlag(i) = 1 sFlag(i) = 1 else if (vars(i) .eq. "VBSA") then @@ -632,7 +634,7 @@ print("Now printing plot #" + p) l5 = ptr_alb->LANDFRAC a5 = ptr_alb->weight x5@_FillValue = 1e30 - obsFlag = 1; + obsFlag(i) = 1; sFlag(i) = 0; aFlag(i) = 1; else @@ -645,7 +647,7 @@ print("Now printing plot #" + p) l5 = ptr_alb->LANDFRAC a5 = ptr_alb->weight x5@_FillValue = 1e30 - obsFlag = 1; + obsFlag(i) = 1; sFlag(i) = 0; aFlag(i) = 1; else @@ -658,7 +660,7 @@ print("Now printing plot #" + p) l5 = ptr_alb->LANDFRAC a5 = ptr_alb->weight x5@_FillValue = 1e30 - obsFlag = 1; + obsFlag(i) = 1; sFlag(i) = 0; aFlag(i) = 1; else @@ -671,7 +673,7 @@ print("Now printing plot #" + p) l5 = ptr_alb->LANDFRAC a5 = ptr_alb->weight x5@_FillValue = 1e30 - obsFlag = 1; + obsFlag(i) = 1; sFlag(i) = 0; aFlag(i) = 1; else @@ -684,7 +686,7 @@ print("Now printing plot #" + p) l5 = ptr_alb->LANDFRAC ; use LANDFRAC and weight from ptr_alb file. a5 = ptr_alb->weight x5@_FillValue = 1e30 - obsFlag = 1; + obsFlag(i) = 1; sFlag(i) = 0; aFlag(i) = 1; else @@ -692,24 +694,24 @@ print("Now printing plot #" + p) x6 = ptr_lhf->LHF l6 = ptr_lhf->datamask a6 = ptr_lhf->area - obsFlag = 1 + obsFlag(i) = 1 sFlag(i) = 0 else if ((vars(i) .eq. "FPSN" .and. cn .eq. 0) .or. vars(i) .eq. "GPP") then x6 = ptr_gpp->GPP l6 = ptr_gpp->datamask a6 = ptr_gpp->area - obsFlag = 1 + obsFlag(i) = 1 sFlag(i) = 0 else if (vars(i) .eq. "TLAI") then x7 = ptr_lai->TLAI l7 = ptr_lai->landmask a7 = ptr_lai->area - obsFlag = 1 + obsFlag(i) = 1 sFlag(i) = 0 else ; This will cover TOTSOILLIQICE (no obs) - obsFlag = 0 + obsFlag(i) = 0 sFlag(i) = 0 aFlag(i) = 0 end if @@ -730,15 +732,18 @@ print("Now printing plot #" + p) end if ; paleo if (paleo .eq. "True") then - obsFlag = 0 + obsFlag(i) = 0 end if +; print((/"var: "+vars(i)/)) +; print((/"obsFlag: "+obsFlag(i)/)) +; print((/"vcheck1: "+vcheck1(i)/)) if (vcheck1(i) .eq. True) then ; catch NaNs x1 = catchNaN(x1) x1 = scale_var(x1,scale_type(i),info) - if (obsFlag .eq. 1) then ; process variables with observed data + if (obsFlag(i) .eq. 1) then ; process variables with observed data if (isvar("x3") ) x3 = catchNaN(x3) x3!0 = "mons" @@ -964,6 +969,7 @@ if(plot_check.eq.True)then end if do region=startRegion,nreg-1 +; print((/"region: "+region/)) ; open ps file for plotting wks = gsn_open_wks(plot_type,wkdir + "set3_" + plot_name + "_" + ps_id(region)) @@ -1126,9 +1132,13 @@ if(plot_check.eq.True)then ; process variables with observed data - if (obsFlag .eq. 1) then +; print((/"var: "+vars(i)/)) +; print((/"obsFlag: "+obsFlag(i)/)) + if (obsFlag(i) .eq. 1) then data = new((/3,nmons/),"double") compare = "obs" +; print((/"sFlag: "+sFlag(i)/)) +; print((/"aFlag: "+aFlag(i)/)) if (sFlag(i) .eq. 1) then ; processing snow vars at 1x1 degree x4 = array4(i,:,:,:) var_plot3 = regional_values(x4,region,area4(i,:,:),landmask4(i,:,:),scale_type(i),\ @@ -1141,6 +1151,9 @@ if(plot_check.eq.True)then regions_file,time1,nmons,compare) delete(x5) else +; print((/vars(i)/)) + ; OBS are restricted to plot 0 and plots 6 and 7 (as handled by sFlag and aFlag above) + if (p .eq. 0) then x3 = array3(i,:,:,:) var_plot3 = regional_values(x3,region,area3(i,:,:),landmask3(i,:,:),scale_type(i),\ regions_file,time1,nmons,compare) @@ -1163,11 +1176,14 @@ if(plot_check.eq.True)then regions_file,time1,nmons,compare) delete(x7) end if + end if end if end if end if - data(2,:) = var_plot3 - delete(var_plot3) + if (p .eq. 0 .or. sFlag(i) .eq. 1 .or. aFlag(i) .eq. 1) then + data(2,:) = var_plot3 + delete(var_plot3) + end if else data = new((/2,nmons/),"double") end if @@ -1410,6 +1426,7 @@ end if ; end of plot_check loop delete(res@xyDashPatterns) delete(sFlag) delete(aFlag) + delete(obsFlag) end do ; end p plot loop diff --git a/lnd_diag/model1-model2/set_6.ncl b/lnd_diag/model1-model2/set_6.ncl index 3f6d7b9c..d93b3c26 100755 --- a/lnd_diag/model1-model2/set_6.ncl +++ b/lnd_diag/model1-model2/set_6.ncl @@ -489,6 +489,13 @@ nplots = 12 ; check for variables in case 1 info = var_init(vars(i)) vcheck1(i) = True + ; Special hack for CWDC to CWD_C change +; print((/vars(i)/)) +; print((/isfilevar(in1,vars(i))/)) +; print((/.not.(isfilevar(in1,vars(i)))/)) + if (vars(i) .eq. "CWDC" .and. .not.(isfilevar(in1,vars(i)))) then + vars(i) = "CWD_C" + end if if(isfilevar(in1,vars(i)) .and. info@derivedVariable .eq. False)then x1 = in1->$vars(i)$ @@ -505,6 +512,10 @@ nplots = 12 end if ; check for variables in case 2 vcheck2(i) = True + ; Special hack for CWDC to CWD_C change + if (vars(i) .eq. "CWDC" .and. .not.(isfilevar(in2,vars(i)))) then + vars(i) = "CWD_C" + end if if(isfilevar(in2,vars(i)) .and. info@derivedVariable .eq. False)then x2 = in2->$vars(i)$ else diff --git a/lnd_diag/shared/variable_master4.3.ncl b/lnd_diag/shared/variable_master4.3.ncl index f4e327d5..3501a2eb 100644 --- a/lnd_diag/shared/variable_master4.3.ncl +++ b/lnd_diag/shared/variable_master4.3.ncl @@ -1519,6 +1519,35 @@ begin info@cn_LevelsDiff = (/-10., -8.0, -6.0, -4.0, -2.0, 0.0, 2.0, 4.0, 6.0, 8.0, 10/) return(info) end if + + if (varName .eq. "LNFM") then + info@flux=True + info@longName="lightning frequency" + info@nativeUnits = "counts/km^2/hr" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "counts/y" + info@globalTotal_Annual__SF = 24.*365. + ; -- global Mean + info@globalMean__units = "counts/km^2/hr" + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "counts/km^2/y" + info@globalMean_Annual__SF = 24.*365. + info@globalMean_Daily__units = "counts/km^2/d" + info@globalMean_Daily__SF = 24. + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = (/0.0, 0.03, 0.06, 0.09, 0.12, 0.15, 0.18, 0.21, 0.24/) + info@cn_LevelsDiff = (/-0.10, -0.08, -0.06, -0.04, -0.02, 0.0, 0.02, 0.04, 0.06, 0.08, 0.10/) + return(info) + end if if (varName .eq. "SR") then info@flux=True @@ -2869,6 +2898,35 @@ begin info@cn_LevelsDiff = (/-1., -0.8, -0.6, -0.4, -0.2, 0.0, 0.2, 0.4, 0.6, 0.8, 1/) return(info) end if + + if (varName .eq. "CWD_C") then + info@flux=False + info@longName="coarse woody debris carbon" + info@nativeUnits = "gC/m^2" + ; -- global Total + info@globalTotal__units = "PgC" + info@globalTotal__SF = grams2Pgrams + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "kgC/m^2" + info@globalMean__SF = grams2Kgrams + info@globalMean_Annual__units = "NA" + info@globalMean_Annual__SF = -999. + info@globalMean_Daily__units = "NA" + info@globalMean_Daily__SF = -999. + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = (/1.0, 2., 3., 4., 5.0, 6.0, 7., 8., 9/) + info@cn_LevelsDiff = (/-1., -0.8, -0.6, -0.4, -0.2, 0.0, 0.2, 0.4, 0.6, 0.8, 1/) + return(info) + end if if (varName .eq. "TOTLITC") then info@flux=False @@ -8616,6 +8674,35 @@ if (varName .eq. "LITTERC_HR") then return(info) end if + if (varName .eq. "RAIN_FROM_ATM") then + info@flux=True + info@longName="atmospheric rain (pre-downscaling)" + info@nativeUnits = "mm/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "mm/s" + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "mm/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "mm/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = (/0.,2.,4.,6.,8.,10.,12.,14.,16./) + info@cn_LevelsDiff = (/-1.25,-1.,-0.75,-0.5,-0.25,0.,0.25,0.5,0.75,1.,1.25/) + return(info) + end if + if (varName .eq. "SNOW") then info@flux=True info@longName="atmospheric snow" @@ -8645,6 +8732,34 @@ if (varName .eq. "LITTERC_HR") then return(info) end if + if (varName .eq. "SNOW_FROM_ATM") then + info@flux=True + info@longName="atmospheric snow (pre-downscaling)" + info@nativeUnits = "mm/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "mm/s" + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "mm/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "mm/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = (/0.,.5,1.,1.5,2.,2.5,3.,3.5,4./) + info@cn_LevelsDiff = (/-1.25,-1.,-0.75,-0.5,-0.25,0.,0.25,0.5,0.75,1.,1.25/) + return(info) + end if if (varName .eq. "SNOW_REPARTITIONED") then info@flux=True @@ -8731,6 +8846,62 @@ if (varName .eq. "LITTERC_HR") then info@cn_LevelsDiff = (/-5.,-4.,-3.,-2.,-1.,0.,1.,2.,3.,4.,5./) return(info) end if + if (varName .eq. "UWIND") then + info@flux=True + info@longName="atmospheric uwind velocity magnitude" + info@nativeUnits = "m/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "m/s" + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "m/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "m/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = (/0.,2.,4.,6.,8.,10.,12.,14.,16./) + info@cn_LevelsDiff = (/-5.,-4.,-3.,-2.,-1.,0.,1.,2.,3.,4.,5./) + return(info) + end if + if (varName .eq. "VWIND") then + info@flux=True + info@longName="atmospheric vwind velocity magnitude" + info@nativeUnits = "m/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "m/s" + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "m/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "m/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = (/0.,2.,4.,6.,8.,10.,12.,14.,16./) + info@cn_LevelsDiff = (/-5.,-4.,-3.,-2.,-1.,0.,1.,2.,3.,4.,5./) + return(info) + end if if (varName .eq. "U10") then info@flux=True @@ -8819,6 +8990,64 @@ if (varName .eq. "LITTERC_HR") then return(info) end if + if (varName .eq. "PBOT_NOT_DOWNSCALED") then + info@flux=False + info@longName="atm pressure of bottom layer (pre-downscaling)" + info@nativeUnits = "Pa" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "Pa" + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "NA" + info@globalMean_Annual__SF = -999. + info@globalMean_Daily__units = "NA" + info@globalMean_Daily__SF = -999. + ; -- Origin + info@model = "CLM" + info@derivedVariable = False + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = False + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = (/-50, -40, -30, -20, -10, 0, 10, 20, 30/) + info@cn_LevelsDiff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) + return(info) + end if + + if (varName .eq. "Rho_from_atm") then + info@flux=False + info@longName="atmospheric density of bottom layer (pre-downscaling)" + info@nativeUnits = "kg/m3" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "kg/m3" + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "NA" + info@globalMean_Annual__SF = -999. + info@globalMean_Daily__units = "NA" + info@globalMean_Daily__SF = -999. + ; -- Origin + info@model = "CLM" + info@derivedVariable = False + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = False + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = (/-50, -40, -30, -20, -10, 0, 10, 20, 30/) + info@cn_LevelsDiff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) + return(info) + end if + if (varName .eq. "PCO2") then info@flux=False info@longName="partial pressure of CO2" @@ -8877,17 +9106,17 @@ if (varName .eq. "LITTERC_HR") then return(info) end if - if (varName .eq. "TBOT") then + if (varName .eq. "ATM_TOPO") then info@flux=False - info@longName="atmospheric air temperature" - info@nativeUnits = "K" + info@longName="atmospheric surface height" + info@nativeUnits = "m" ; -- global Total info@globalTotal__units = "NA" info@globalTotal__SF = -999. info@globalTotal_Annual__units = "NA" info@globalTotal_Annual__SF = -999. ; -- global Mean - info@globalMean__units = "K" + info@globalMean__units = "m" info@globalMean__SF = 1.0 info@globalMean_Annual__units = "NA" info@globalMean_Annual__SF = -999. @@ -8906,9 +9135,9 @@ if (varName .eq. "LITTERC_HR") then return(info) end if - if (varName .eq. "THBOT") then + if (varName .eq. "TBOT") then info@flux=False - info@longName="atmospheric air potential temperature" + info@longName="atmospheric air temperature" info@nativeUnits = "K" ; -- global Total info@globalTotal__units = "NA" @@ -8935,9 +9164,9 @@ if (varName .eq. "LITTERC_HR") then return(info) end if - if (varName .eq. "TLAKE") then + if (varName .eq. "Tair_from_atm") then info@flux=False - info@longName="lake temperature" + info@longName="atmospheric air temperature (pre-downscaling)" info@nativeUnits = "K" ; -- global Total info@globalTotal__units = "NA" @@ -8959,55 +9188,142 @@ if (varName .eq. "LITTERC_HR") then info@cn_Explicit = True info@cn_Min = -999 info@cn_Max = -999 - info@cn_Level0 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) - info@cn_Level1 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) - info@cn_Level2 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) - info@cn_Level3 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) - info@cn_Level4 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) - info@cn_Level5 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) - info@cn_Level6 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) - info@cn_Level7 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) - info@cn_Level8 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) - info@cn_Level9 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) - info@cn_Level0Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) - info@cn_Level1Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) - info@cn_Level2Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) - info@cn_Level3Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) - info@cn_Level4Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) - info@cn_Level5Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) - info@cn_Level6Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) - info@cn_Level7Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) - info@cn_Level8Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) - info@cn_Level9Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) + info@cn_Levels = (/-50, -40, -30, -20, -10, 0, 10, 20, 30/) + info@cn_LevelsDiff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) return(info) end if - if (varName .eq. "REL_HUM") then + if (varName .eq. "THBOT") then info@flux=False - info@longName="Relative Humidity at 2m" - info@nativeUnits = "kg/kg" + info@longName="atmospheric air potential temperature" + info@nativeUnits = "K" ; -- global Total info@globalTotal__units = "NA" info@globalTotal__SF = -999. info@globalTotal_Annual__units = "NA" info@globalTotal_Annual__SF = -999. ; -- global Mean - info@globalMean__units = "kg/kg" + info@globalMean__units = "K" info@globalMean__SF = 1.0 info@globalMean_Annual__units = "NA" - info@globalMean_Annual__SF = -999. + info@globalMean_Annual__SF = -999. info@globalMean_Daily__units = "NA" - info@globalMean_Daily__SF = -999. + info@globalMean_Daily__SF = -999. ; -- Origin - info@model = "CLM" + info@model = "CN" info@derivedVariable = False - info@clampVariable = True + info@clampVariable = False ; -- contour intervals info@cn_Explicit = True info@cn_Min = -999 info@cn_Max = -999 - info@cn_Levels = (/0.,0.002,0.004,0.006,0.008,0.010,0.012,0.014,0.016/) - info@cn_LevelsDiff = (/-2.5e-3,-2.0e-3,-1.5e-3,-1.0e-3,-0.5e-3,0.,0.5e-3,1.0e-3,1.5e-3,2.0e-3,2.5e-3/) + info@cn_Levels = (/-50, -40, -30, -20, -10, 0, 10, 20, 30/) + info@cn_LevelsDiff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) + return(info) + end if + + if (varName .eq. "Thair_from_atm") then + info@flux=False + info@longName="atmospheric air potential temperature (pre-downscaling)" + info@nativeUnits = "K" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "K" + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "NA" + info@globalMean_Annual__SF = -999. + info@globalMean_Daily__units = "NA" + info@globalMean_Daily__SF = -999. + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = (/-50, -40, -30, -20, -10, 0, 10, 20, 30/) + info@cn_LevelsDiff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) + return(info) + end if + + if (varName .eq. "TLAKE") then + info@flux=False + info@longName="lake temperature" + info@nativeUnits = "K" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "K" + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "NA" + info@globalMean_Annual__SF = -999. + info@globalMean_Daily__units = "NA" + info@globalMean_Daily__SF = -999. + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Level0 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) + info@cn_Level1 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) + info@cn_Level2 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) + info@cn_Level3 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) + info@cn_Level4 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) + info@cn_Level5 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) + info@cn_Level6 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) + info@cn_Level7 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) + info@cn_Level8 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) + info@cn_Level9 = (/-10, -5, -1, 0, 1, 5, 10, 15, 20/) + info@cn_Level0Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) + info@cn_Level1Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) + info@cn_Level2Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) + info@cn_Level3Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) + info@cn_Level4Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) + info@cn_Level5Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) + info@cn_Level6Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) + info@cn_Level7Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) + info@cn_Level8Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) + info@cn_Level9Diff = (/-2.5,-2.,-1.5,-1.,-0.5,0.,0.5,1.,1.5,2.,2.5/) + return(info) + end if + + if (varName .eq. "REL_HUM") then + info@flux=False + info@longName="Relative Humidity at 2m" + info@nativeUnits = "kg/kg" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "kg/kg" + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "NA" + info@globalMean_Annual__SF = -999. + info@globalMean_Daily__units = "NA" + info@globalMean_Daily__SF = -999. + ; -- Origin + info@model = "CLM" + info@derivedVariable = False + info@clampVariable = True + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = (/0.,0.002,0.004,0.006,0.008,0.010,0.012,0.014,0.016/) + info@cn_LevelsDiff = (/-2.5e-3,-2.0e-3,-1.5e-3,-1.0e-3,-0.5e-3,0.,0.5e-3,1.0e-3,1.5e-3,2.0e-3,2.5e-3/) return(info) end if @@ -9069,6 +9385,35 @@ if (varName .eq. "LITTERC_HR") then return(info) end if + if (varName .eq. "QBOT_NOT_DOWNSCALED") then + info@flux=False + info@longName="atmospheric specific humidity (pre-downscaling)" + info@nativeUnits = "kg/kg" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "kg/kg" + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "NA" + info@globalMean_Annual__SF = -999. + info@globalMean_Daily__units = "NA" + info@globalMean_Daily__SF = -999. + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = (/0.,0.002,0.004,0.006,0.008,0.010,0.012,0.014,0.016/) + info@cn_LevelsDiff = (/-2.5e-3,-2.0e-3,-1.5e-3,-1.0e-3,-0.5e-3,0.,0.5e-3,1.0e-3,1.5e-3,2.0e-3,2.5e-3/) + return(info) + end if + if (varName .eq. "ZBOT") then info@flux=False info@longName="atmospheric reference height" @@ -9156,6 +9501,35 @@ if (varName .eq. "LITTERC_HR") then return(info) end if + if (varName .eq. "FLDS_NOT_DOWNSCALED") then + info@flux=True + info@longName="atmospheric longwave radiation (pre-downscaling)" + info@nativeUnits = "W/m^2" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "W/m^2" + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "NA" + info@globalMean_Annual__SF = -999. + info@globalMean_Daily__units = "NA" + info@globalMean_Daily__SF = -999. + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = (/100.,150.,200.,250.,300.,350.,400.,450.,500./) + info@cn_LevelsDiff = (/-50.,-25.,-10.,-5.,-1.,0.,1.,5.,10.,25.,50./) + return(info) + end if + if (varName .eq. "SOLAR") then info@flux=True info@longName="Total Incident Solar Radiation" @@ -11136,6 +11510,35 @@ if (varName .eq. "LITTERC_HR") then info@cn_LevelsDiff = -999 return(info) end if + + if (varName .eq. "C13_CWD_C") then + info@flux=False + info@longName="C13 Coarse Woody Debris Carbon" + info@nativeUnits = "gC/m^2" + ; -- global Total + info@globalTotal__units = "per mil v PDB" + info@globalTotal__SF = 1.0 + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "per mil v PDB" + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "NA" + info@globalMean_Annual__SF = -999. + info@globalMean_Daily__units = "NA" + info@globalMean_Daily__SF = -999. + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = -999 + info@cn_LevelsDiff = -999 + return(info) + end if if (varName .eq. "C13_DEADCROOTC") then info@flux=False @@ -12465,6 +12868,35 @@ if (varName .eq. "LITTERC_HR") then info@cn_LevelsDiff = -999 return(info) end if + + if (varName .eq. "C14_CWD_C") then + info@flux=False + info@longName="C14 Coarse Woody Debris Carbon" + info@nativeUnits = "gC/m^2" + ; -- global Total + info@globalTotal__units = "per mil" + info@globalTotal__SF = 1.0 + info@globalTotal_Annual__units = "NA" + info@globalTotal_Annual__SF = -999. + ; -- global Mean + info@globalMean__units = "per mil" + info@globalMean__SF = 1.0 + info@globalMean_Annual__units = "NA" + info@globalMean_Annual__SF = -999. + info@globalMean_Daily__units = "NA" + info@globalMean_Daily__SF = -999. + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = False + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = -999 + info@cn_LevelsDiff = -999 + return(info) + end if if (varName .eq. "C14_DEADCROOTC") then info@flux=False @@ -13708,10 +14140,9 @@ if (varName .eq. "LITTERC_HR") then info@cn_LevelsDiff = -999 return(info) end if - - if (varName .eq. "DSTFLXT") then + if (varName .eq. "DSTWET1") then info@flux=True - info@longName="total surface dust emission" + info@longName="dust deposition (wet1) from atmosphere" info@nativeUnits = "kg/m2/s" ; -- global Total info@globalTotal__units = "NA" @@ -13737,10 +14168,9 @@ if (varName .eq. "LITTERC_HR") then info@cn_LevelsDiff = -999 return(info) end if - - if (varName .eq. "OCDEP") then + if (varName .eq. "DSTDRY1") then info@flux=True - info@longName="total OC deposition (dry+wet) from atmosphere" + info@longName="dust deposition (dry1) from atmosphere" info@nativeUnits = "kg/m2/s" ; -- global Total info@globalTotal__units = "NA" @@ -13766,10 +14196,404 @@ if (varName .eq. "LITTERC_HR") then info@cn_LevelsDiff = -999 return(info) end if - - if (varName .eq. "BCDEP") then + if (varName .eq. "DSTWET2") then info@flux=True - info@longName="total BC deposition (dry+wet) from atmosphere" + info@longName="dust deposition (wet2) from atmosphere" + info@nativeUnits = "kg/m2/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "Pg/y" + info@globalTotal_Annual__SF = kgrams2Pgrams*secondsInYear + ; -- global Mean + info@globalMean__units = "kg/m2/s" + info@globalMean__SF = -999. + info@globalMean_Annual__units = "kg/m2/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "kg/m2/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = True + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = -999. + info@cn_LevelsDiff = -999 + return(info) + end if + if (varName .eq. "DSTDRY2") then + info@flux=True + info@longName="dust deposition (dry2) from atmosphere" + info@nativeUnits = "kg/m2/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "Pg/y" + info@globalTotal_Annual__SF = kgrams2Pgrams*secondsInYear + ; -- global Mean + info@globalMean__units = "kg/m2/s" + info@globalMean__SF = -999. + info@globalMean_Annual__units = "kg/m2/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "kg/m2/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = True + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = -999. + info@cn_LevelsDiff = -999 + return(info) + end if + if (varName .eq. "DSTWET3") then + info@flux=True + info@longName="dust deposition (wet3) from atmosphere" + info@nativeUnits = "kg/m2/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "Pg/y" + info@globalTotal_Annual__SF = kgrams2Pgrams*secondsInYear + ; -- global Mean + info@globalMean__units = "kg/m2/s" + info@globalMean__SF = -999. + info@globalMean_Annual__units = "kg/m2/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "kg/m2/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = True + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = -999. + info@cn_LevelsDiff = -999 + return(info) + end if + if (varName .eq. "DSTDRY3") then + info@flux=True + info@longName="dust deposition (dry3) from atmosphere" + info@nativeUnits = "kg/m2/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "Pg/y" + info@globalTotal_Annual__SF = kgrams2Pgrams*secondsInYear + ; -- global Mean + info@globalMean__units = "kg/m2/s" + info@globalMean__SF = -999. + info@globalMean_Annual__units = "kg/m2/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "kg/m2/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = True + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = -999. + info@cn_LevelsDiff = -999 + return(info) + end if + if (varName .eq. "DSTWET4") then + info@flux=True + info@longName="dust deposition (wet4) from atmosphere" + info@nativeUnits = "kg/m2/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "Pg/y" + info@globalTotal_Annual__SF = kgrams2Pgrams*secondsInYear + ; -- global Mean + info@globalMean__units = "kg/m2/s" + info@globalMean__SF = -999. + info@globalMean_Annual__units = "kg/m2/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "kg/m2/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = True + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = -999. + info@cn_LevelsDiff = -999 + return(info) + end if + if (varName .eq. "DSTDRY4") then + info@flux=True + info@longName="dust deposition (dry4) from atmosphere" + info@nativeUnits = "kg/m2/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "Pg/y" + info@globalTotal_Annual__SF = kgrams2Pgrams*secondsInYear + ; -- global Mean + info@globalMean__units = "kg/m2/s" + info@globalMean__SF = -999. + info@globalMean_Annual__units = "kg/m2/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "kg/m2/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = True + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = -999. + info@cn_LevelsDiff = -999 + return(info) + end if + + if (varName .eq. "DSTFLXT") then + info@flux=True + info@longName="total surface dust emission" + info@nativeUnits = "kg/m2/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "Pg/y" + info@globalTotal_Annual__SF = kgrams2Pgrams*secondsInYear + ; -- global Mean + info@globalMean__units = "kg/m2/s" + info@globalMean__SF = -999. + info@globalMean_Annual__units = "kg/m2/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "kg/m2/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = True + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = -999. + info@cn_LevelsDiff = -999 + return(info) + end if + + if (varName .eq. "OCDEP") then + info@flux=True + info@longName="total OC deposition (dry+wet) from atmosphere" + info@nativeUnits = "kg/m2/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "Pg/y" + info@globalTotal_Annual__SF = kgrams2Pgrams*secondsInYear + ; -- global Mean + info@globalMean__units = "kg/m2/s" + info@globalMean__SF = -999. + info@globalMean_Annual__units = "kg/m2/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "kg/m2/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = True + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = -999. + info@cn_LevelsDiff = -999 + return(info) + end if + if (varName .eq. "OCPHIDRY") then + info@flux=True + info@longName="OC deposition (phidry) from atmosphere" + info@nativeUnits = "kg/m2/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "Pg/y" + info@globalTotal_Annual__SF = kgrams2Pgrams*secondsInYear + ; -- global Mean + info@globalMean__units = "kg/m2/s" + info@globalMean__SF = -999. + info@globalMean_Annual__units = "kg/m2/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "kg/m2/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = True + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = -999. + info@cn_LevelsDiff = -999 + return(info) + end if + if (varName .eq. "OCPHODRY") then + info@flux=True + info@longName="OC deposition (phodry) from atmosphere" + info@nativeUnits = "kg/m2/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "Pg/y" + info@globalTotal_Annual__SF = kgrams2Pgrams*secondsInYear + ; -- global Mean + info@globalMean__units = "kg/m2/s" + info@globalMean__SF = -999. + info@globalMean_Annual__units = "kg/m2/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "kg/m2/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = True + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = -999. + info@cn_LevelsDiff = -999 + return(info) + end if + if (varName .eq. "OCPHIWET") then + info@flux=True + info@longName="OC deposition (phiwet) from atmosphere" + info@nativeUnits = "kg/m2/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "Pg/y" + info@globalTotal_Annual__SF = kgrams2Pgrams*secondsInYear + ; -- global Mean + info@globalMean__units = "kg/m2/s" + info@globalMean__SF = -999. + info@globalMean_Annual__units = "kg/m2/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "kg/m2/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = True + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = -999. + info@cn_LevelsDiff = -999 + return(info) + end if + + if (varName .eq. "BCDEP") then + info@flux=True + info@longName="total BC deposition (dry+wet) from atmosphere" + info@nativeUnits = "kg/m2/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "Pg/y" + info@globalTotal_Annual__SF = kgrams2Pgrams*secondsInYear + ; -- global Mean + info@globalMean__units = "kg/m2/s" + info@globalMean__SF = -999. + info@globalMean_Annual__units = "kg/m2/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "kg/m2/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = True + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = -999. + info@cn_LevelsDiff = -999 + return(info) + end if + if (varName .eq. "BCPHIDRY") then + info@flux=True + info@longName="BC deposition (phidry) from atmosphere" + info@nativeUnits = "kg/m2/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "Pg/y" + info@globalTotal_Annual__SF = kgrams2Pgrams*secondsInYear + ; -- global Mean + info@globalMean__units = "kg/m2/s" + info@globalMean__SF = -999. + info@globalMean_Annual__units = "kg/m2/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "kg/m2/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = True + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = -999. + info@cn_LevelsDiff = -999 + return(info) + end if + if (varName .eq. "BCPHODRY") then + info@flux=True + info@longName="BC deposition (phodry) from atmosphere" + info@nativeUnits = "kg/m2/s" + ; -- global Total + info@globalTotal__units = "NA" + info@globalTotal__SF = -999. + info@globalTotal_Annual__units = "Pg/y" + info@globalTotal_Annual__SF = kgrams2Pgrams*secondsInYear + ; -- global Mean + info@globalMean__units = "kg/m2/s" + info@globalMean__SF = -999. + info@globalMean_Annual__units = "kg/m2/y" + info@globalMean_Annual__SF = secondsInYear + info@globalMean_Daily__units = "kg/m2/d" + info@globalMean_Daily__SF = secondsInDay + ; -- Origin + info@model = "CN" + info@derivedVariable = False + info@clampVariable = True + ; -- contour intervals + info@cn_Explicit = True + info@cn_Min = -999 + info@cn_Max = -999 + info@cn_Levels = -999. + info@cn_LevelsDiff = -999 + return(info) + end if + if (varName .eq. "BCPHIWET") then + info@flux=True + info@longName="BC deposition (phiwet) from atmosphere" info@nativeUnits = "kg/m2/s" ; -- global Total info@globalTotal__units = "NA"