Skip to content
Snippets Groups Projects
Commit 7abed404 authored by Peters, Wouter's avatar Peters, Wouter
Browse files

changed the CtMember and StateVector object so that there is no longer a...

changed the CtMember and StateVector object so that there is no longer a separate 'mean' in the statevector, it is simply member 0
parent dcce1c71
No related branches found
No related tags found
No related merge requests found
......@@ -26,7 +26,7 @@ class CtMember(object):
def __init__(self, membernumber):
self.membernumber = membernumber # the member number
self.MeanDeviations = None # Parameter values of this member
self.ParameterValues = None # Parameter values of this member
self.ModelSample = None # Model Sampled Parameter values of this member
self.ParameterOutputFile = None # File to which the member info should be written
......@@ -40,9 +40,9 @@ class CtMember(object):
filename = os.path.join(outdir,'parameters.%03d.nc'% self.membernumber)
f = CT_CDF(filename,'create')
dimparams = f.AddParamsDim(len(self.MeanDeviations))
dimparams = f.AddParamsDim(len(self.ParameterValues))
data = self.MeanDeviations
data = self.ParameterValues
savedict = std_savedict.copy()
savedict['name'] = "parametervalues"
......@@ -75,9 +75,8 @@ class CtStateVector(object):
self.isOptimized = False
# These list objects hold the data for each time step of lag in the system. Note that the ensembles for each time step consist
# of lists of CtMember objects, whereas the MeanValues will simply be a list of array values.
# of lists of CtMember objects, we define member 0 as the mean of the distribution and n=1,...,nmembers as the spread.
self.MeanValues = range(self.nlag)
self.EnsembleMembers = range(self.nlag)
for n in range(self.nlag):
......@@ -158,15 +157,14 @@ class CtStateVector(object):
plt.close('all')
# Create mean values for the new time step (default = 1.0) and add to the MeanValues list
# Create mean values for the new time step (default = 1.0)
NewMean = np.ones(self.nparams,float)
self.MeanValues[lag-1] = NewMean
# Create the first ensemble member with a deviation of 0.0 and add to list
NewMember = CtMember(0)
NewMember.MeanDeviations = np.zeros((self.nparams),float)
NewMember.ParameterValues = np.zeros((self.nparams),float) + NewMean
dummy = self.EnsembleMembers[lag-1].append(NewMember)
# Create members 1:nmembers and add to EnsembleMembers list
......@@ -176,7 +174,7 @@ class CtStateVector(object):
rands = np.random.randn(self.nparams)
NewMember = CtMember(member)
NewMember.MeanDeviations = np.dot(C,rands)
NewMember.ParameterValues = np.dot(C,rands) + NewMean
dummy = self.EnsembleMembers[lag-1].append(NewMember)
msg = '%d new ensemble members were added to the state vector # %d'%(self.nmembers,lag) ; logging.debug(msg)
......@@ -193,10 +191,8 @@ class CtStateVector(object):
# Remove State Vector n=1 by simply "popping" it from the list and appending a new empty list at the front. This empty list will
# hold the new ensemble for the new cycle
dummy = self.MeanValues.pop(0)
dummy = self.EnsembleMembers.pop(0)
dummy = self.MeanValues.append([])
dummy = self.EnsembleMembers.append([])
# And now create a new week of mean + members for n=nlag
......@@ -227,17 +223,18 @@ class CtStateVector(object):
for n in range(self.nlag):
data = self.MeanValues[n]
members = self.EnsembleMembers[n]
MeanState = members[0].ParameterValues
savedict = f.StandardVar(varname='meanstate')
savedict['dims'] = dimlag+dimparams
savedict['values'] = data
savedict['values'] = MeanState
savedict['count'] = n
savedict['comment'] = 'this represents the mean of the ensemble'
dummy = f.AddData(savedict)
members = self.EnsembleMembers[n]
data = np.array([m.MeanDeviations for m in members])
data = np.array([m.ParameterValues for m in members])- MeanState
savedict = f.StandardVar(varname='ensemblestate')
savedict['dims'] = dimlag+dimmembers+dimparams
......@@ -261,11 +258,9 @@ class CtStateVector(object):
dummy = f.close()
for n in range(self.nlag):
self.MeanValues[n] = MeanState[n,:]
for m in range(self.nmembers):
NewMember = CtMember(m)
NewMember.MeanDeviations = EnsembleMembers[n,m,:]
NewMember.ParameterValues = EnsembleMembers[n,m,:] + MeanState # add the mean to the deviations to hold the full parameter values
dummy = self.EnsembleMembers[n].append(NewMember)
msg = 'Successfully read the State Vector from file (%s) ' % (filename,) ; logging.info(msg)
......@@ -361,7 +356,7 @@ if __name__ == "__main__":
members[0].WriteToFile(DaCycle.da_settings['dir.input'])
data = np.array([m.MeanDeviations for m in members])
data = np.array([m.ParameterValues for m in members])
StateVector.WriteToFile()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment