From b84d2f7202387a3bbc811a14e07b530f6f062364 Mon Sep 17 00:00:00 2001
From: weihe <amvdw95@gmail.com>
Date: Thu, 14 Jan 2016 15:42:49 +0000
Subject: [PATCH] add more information to the sampling outputs

---
 da/stilt/output.ncdf4.v2.3.r | 117 +++++++++++++++++++++++++++++++++++
 1 file changed, 117 insertions(+)
 create mode 100644 da/stilt/output.ncdf4.v2.3.r

diff --git a/da/stilt/output.ncdf4.v2.3.r b/da/stilt/output.ncdf4.v2.3.r
new file mode 100644
index 0000000..bda396d
--- /dev/null
+++ b/da/stilt/output.ncdf4.v2.3.r
@@ -0,0 +1,117 @@
+#******************************************************************************************
+# Function for writing a netcdf4 file
+# created by W.He on April 15, 2015 
+#****************************************************************************************** 
+
+write.results.netcdf <- function(bioflux_flag,vals,nobs,nmem,output_fname) { 
+    
+  obsdim <- ncdim_def( 'obsnum', '', 1:nobs, unlim=FALSE, create_dimvar=FALSE ) #IMPORTANT TO USE create_dimvar
+  memdim <- ncdim_def( 'nmembers', '', 1:nmem, unlim=FALSE, create_dimvar=FALSE)
+  
+  ccgg_evn=array(NA,dim=c(nobs))
+  flask=array(NA,dim=c(nmem,nobs))
+  deltacarbon=array(NA,dim=c(nmem,nobs))
+  deltabc=array(NA,dim=c(nmem,nobs))
+
+  if(bioflux_flag == "SiB3" || bioflux_flag == "SiBCASA") 
+  {
+      gpp=array(NA,dim=c(nobs))
+      reco=array(NA,dim=c(nobs))
+  }
+
+  if(bioflux_flag == "CT_OPT")
+      bio=array(NA,dim=c(nobs))
+
+  ocn=array(NA,dim=c(nobs))
+  fos=array(NA,dim=c(nobs))
+  fir=array(NA,dim=c(nobs))
+  bou=array(NA,dim=c(nobs))
+  
+  #mv <- 0 # missing value #ccgg_evn
+  var_ccgg_evn <- ncvar_def( name="obs_num", units=" ", dim=list(obsdim), longname="NOAA_CCGG_Event_Number", prec="integer" )
+  var_flask <- ncvar_def( name="flask", units="mol tracer (mol air)^-1", dim=list(memdim,obsdim), longname="mole_fraction_of_trace_gas_in_air", prec="float" )
+  var_deltacarbon <- ncvar_def( name="deltaco2", units="mol tracer (mol air)^-1", dim=list(memdim,obsdim),   longname="delta_co2_air", prec="float" )
+  var_deltabc <- ncvar_def( name="deltabc", units="mol tracer (mol air)^-1", dim=list(memdim,obsdim), longname="delta_boundary_conditions", prec="float" )
+
+ if(bioflux_flag == "SiB3" || bioflux_flag == "SiBCASA")
+ {
+     var_gpp <- ncvar_def( name="gpp", units="mol (mol air)^-1", dim=list(obsdim), longname="contribution from gpp", prec="float" )
+     var_reco <- ncvar_def( name="reco", units="mol (mol air)^-1", dim=list(obsdim), longname="contribution from ecosystem respiration", prec="float" )
+ }
+
+if(bioflux_flag == "CT_OPT")
+     var_bio <- ncvar_def( name="bio", units="mol (mol air)^-1", dim=list(obsdim), longname="simulation using CT optimized bio flux as a reference", prec="float" )
+
+var_ocn <- ncvar_def( name="ocn", units="mol (mol air)^-1", dim=list(obsdim), longname="contribution from ocean", prec="float" )
+  var_fos <- ncvar_def( name="fossil", units="mol (mol air)^-1", dim=list(obsdim), longname="contribution from fossil", prec="float" )
+  var_fir <- ncvar_def( name="fire", units="mol (mol air)^-1", dim=list(obsdim), longname="contribution from fire", prec="float" )
+  var_bou <- ncvar_def( name="boundary", units="mol (mol air)^-1", dim=list(obsdim), longname="boundary concentration", prec="float" )
+
+
+  for(i in 1:nobs)
+  { 
+    if(bioflux_flag == "SiB3" || bioflux_flag == "SiBCASA")
+    {
+        ccgg_evn[i]=vals[i,1]
+        gpp[i]=vals[i,3*nmem+2]
+        reco[i]=vals[i,3*nmem+3]
+        ocn[i]=vals[i,3*nmem+4]
+        fos[i]=vals[i,3*nmem+5]
+        fir[i]=vals[i,3*nmem+6]
+        bou[i]=vals[i,3*nmem+7]
+    }
+    if(bioflux_flag == "CT_OPT")
+    {
+       ccgg_evn[i]=vals[i,1]
+       bio[i]=vals[i,3*nmem+2]
+       ocn[i]=vals[i,3*nmem+3]
+       fos[i]=vals[i,3*nmem+4]
+       fir[i]=vals[i,3*nmem+5]
+       bou[i]=vals[i,3*nmem+6]
+    }
+  }
+  
+  for(j in 1:nmem)
+    for(i in 1:nobs)
+    {
+      flask[j,i]=vals[i,j+1]
+      deltacarbon[j,i]=vals[i,nmem+j+1]
+      deltabc[j,i]=vals[i,2*nmem+j+1]
+    }
+
+print(deltabc)
+
+if(bioflux_flag == "SiB3" || bioflux_flag == "SiBCASA")
+    ncid_new <- nc_create( output_fname, list(var_ccgg_evn,var_flask,var_deltacarbon,var_deltabc,var_gpp,var_reco,var_ocn,var_fos,var_fir,var_bou))
+
+if(bioflux_flag == "CT_OPT")
+     ncid_new <- nc_create( output_fname, list(var_ccgg_evn,var_flask,var_deltacarbon,var_deltabc,var_bio,var_ocn,var_fos,var_fir,var_bou))
+
+  ncvar_put( ncid_new,var_ccgg_evn, ccgg_evn, start=c(1), count=c(nobs))
+  ncvar_put( ncid_new,var_flask, flask, start=c(1,1), count=c(nmem,nobs))
+  ncvar_put( ncid_new,var_deltacarbon, deltacarbon, start=c(1,1), count=c(nmem,nobs))
+  ncvar_put( ncid_new,var_deltabc, deltabc, start=c(1,1), count=c(nmem,nobs))
+
+  if(bioflux_flag == "SiB3" || bioflux_flag == "SiBCASA")
+  {
+      ncvar_put( ncid_new,var_gpp, gpp, start=c(1), count=c(nobs))
+      ncvar_put( ncid_new,var_reco, reco, start=c(1), count=c(nobs))
+  }
+  if(bioflux_flag == "CT_OPT")
+      ncvar_put( ncid_new,var_bio, bio, start=c(1), count=c(nobs))
+
+  ncvar_put( ncid_new,var_ocn, ocn, start=c(1), count=c(nobs))
+  ncvar_put( ncid_new,var_fos, fos, start=c(1), count=c(nobs))
+  ncvar_put( ncid_new,var_fir, fir, start=c(1), count=c(nobs))
+  ncvar_put( ncid_new,var_bou, bou, start=c(1), count=c(nobs))
+  ncatt_put( ncid_new, 0, "Institution", "Centre for Isotope research, University of Groningen")
+  ncatt_put( ncid_new, 0, "Contact", "wei.he@rug.nl")
+  ncatt_put( ncid_new, 0, "Source", "CarbonTracker-WRF-STILT 1.0")      
+
+  date = format(Sys.time(), "%b %d, %Y")
+  user = Sys.getenv("LOGNAME")
+  history = paste("created on",date,"by",user,sep=" ")
+  ncatt_put( ncid_new, 0, "History", history)
+
+  nc_close( ncid_new )    
+}
-- 
GitLab