From d30e2d5ee94cbc4a9bb9225a74cf32d3dd6de0db Mon Sep 17 00:00:00 2001 From: karolina <amvdw95@gmail.com> Date: Tue, 7 May 2013 11:26:47 +0000 Subject: [PATCH] removed StateVector.isOptimized and replaced with an "optimized" parameter in StateVector.write_to_file call in obs and obspack_geocarbon adding some parameters to function calls --- da/baseclasses/optimizer.py | 1 - da/baseclasses/statevector.py | 5 ++--- da/ct/obs.py | 9 +++++---- da/ct/obspack_geocarbon.py | 8 +++++--- da/tools/pipeline.py | 22 ++++++++-------------- 5 files changed, 20 insertions(+), 25 deletions(-) diff --git a/da/baseclasses/optimizer.py b/da/baseclasses/optimizer.py index c3548638..bed60e04 100755 --- a/da/baseclasses/optimizer.py +++ b/da/baseclasses/optimizer.py @@ -148,7 +148,6 @@ class Optimizer(object): for m, mem in enumerate(members): members[m].ParameterValues[:] = self.X_prime[n * self.nparams:(n + 1) * self.nparams, m] + self.x[n * self.nparams:(n + 1) * self.nparams] - StateVector.isOptimized = True logging.debug('Returning optimized data to the StateVector, setting "StateVector.isOptimized = True" ') def write_diagnostics(self, DaCycle, StateVector, type='prior'): diff --git a/da/baseclasses/statevector.py b/da/baseclasses/statevector.py index ae8e018c..fb0bf004 100755 --- a/da/baseclasses/statevector.py +++ b/da/baseclasses/statevector.py @@ -143,7 +143,6 @@ class StateVector(object): self.nparams = int(self.DaCycle.DaSystem['nparameters']) self.nobs = 0 - self.isOptimized = False self.ObsToAssimmilate = () # empty containter to hold observations to assimilate later on # These list objects hold the data for each time step of lag in the system. Note that the ensembles for each time step consist @@ -308,7 +307,7 @@ class StateVector(object): logging.info('The state vector has been propagated by one cycle') - def write_to_file(self, filename): + def write_to_file(self, filename, optimized): """ :param filename: the full filename for the output NetCDF file :rtype: None @@ -326,7 +325,7 @@ class StateVector(object): #import da.tools.io4 as io #import da.tools.io as io - if not self.isOptimized: + if not optimized: f = io.CT_CDF(filename, method='create') logging.debug('Creating new StateVector output file (%s)' % filename) qual = 'prior' diff --git a/da/ct/obs.py b/da/ct/obs.py index 8b0ea858..de0e13be 100755 --- a/da/ct/obs.py +++ b/da/ct/obs.py @@ -241,7 +241,7 @@ class CtObservations(Observation): return obsinputfile - def add_model_data_mismatch(self): + def add_model_data_mismatch(self, filename): """ Get the model-data mismatch values for this cycle. @@ -253,7 +253,7 @@ class CtObservations(Observation): """ import da.tools.rc as rc - filename = self.DaCycle.DaSystem['obs.sites.rc'] + if not os.path.exists(filename): msg = 'Could not find the required sites.rc input file (%s)' % filename @@ -314,7 +314,7 @@ class CtObservations(Observation): self.SiteInfo = SiteInfo - def write_obs_to_file(self): + def write_obs_to_file(self, outdir, timestamp): """ Write selected information contained in the Observation object to a file. @@ -322,7 +322,8 @@ class CtObservations(Observation): import da.tools.io4 as io outfile = os.path.join(self.DaCycle['dir.output'], 'sampleinfo_%s.nc' % (self.DaCycle['time.sample.stamp'])) - + outfile = os.path.join(outdir, 'sampleinfo_%s.nc' % timestamp) + f = io.CT_CDF(outfile, method='create') logging.debug('Creating new Sample output file for postprocessing (%s)' % outfile) diff --git a/da/ct/obspack_geocarbon.py b/da/ct/obspack_geocarbon.py index ac8e8528..efd799f8 100755 --- a/da/ct/obspack_geocarbon.py +++ b/da/ct/obspack_geocarbon.py @@ -253,7 +253,7 @@ class ObsPackObservations(Observation): return obsinputfile - def add_model_data_mismatch(self): + def add_model_data_mismatch(self, filename): """ Get the model-data mismatch values for this cycle. @@ -265,7 +265,7 @@ class ObsPackObservations(Observation): """ import da.tools.rc as rc - filename = self.DaCycle.DaSystem['obs.sites.rc'] + if not os.path.exists(filename): msg = 'Could not find the required sites.rc input file (%s) ' % filename @@ -360,7 +360,7 @@ class ObsPackObservations(Observation): logging.debug("Added Model Data Mismatch to all samples ") - def write_obs_to_file(self): + def write_obs_to_file(self, outdir, timestamp): """ Write selected information contained in the Observation object to a file. @@ -368,6 +368,8 @@ class ObsPackObservations(Observation): import da.tools.io4 as io outfile = os.path.join(self.DaCycle['dir.output'], 'sampleinfo_%s.nc' % (self.DaCycle['time.sample.stamp'])) + outfile = os.path.join(outdir, 'sampleinfo_%s.nc' % timestamp) + f = io.CT_CDF(outfile, method='create') logging.debug('Creating new Sample output file for postprocessing (%s)' % outfile) diff --git a/da/tools/pipeline.py b/da/tools/pipeline.py index 907055f3..11fbc207 100755 --- a/da/tools/pipeline.py +++ b/da/tools/pipeline.py @@ -56,12 +56,12 @@ def forward_pipeline(DaCycle, PlatForm, DaSystem, Samples, StateVector, ObsOpera else: prepare_state(DaCycle, StateVector) - StateVector.isOptimized = False + # Write as prior fluxes to output dir savefilename = os.path.join(DaCycle['dir.output'], 'savestate.nc') #LU to jest state vector po zoptymalizowaniu. - StateVector.write_to_file(savefilename) + StateVector.write_to_file(savefilename, False) # Now read optimized fluxes to propagate @@ -70,7 +70,6 @@ def forward_pipeline(DaCycle, PlatForm, DaSystem, Samples, StateVector, ObsOpera else: StateVector.read_from_file(savefilename, 'prior') - StateVector.isOptimized = True # Run forward with these parameters @@ -131,7 +130,7 @@ def prepare_state(DaCycle, StateVector): # Finally, also write the StateVector to a file so that we can always access the a-priori information filename = os.path.join(DaCycle['dir.output'], 'savestate.nc') - StateVector.write_to_file(filename) # write prior info because StateVector.Isoptimized == False for now + StateVector.write_to_file(filename, False) # write prior info because StateVector.Isoptimized == False for now def sample_state(DaCycle, Samples, StateVector, ObservationOperator): """ Sample the filter state for the inversion """ @@ -162,7 +161,7 @@ def sample_state(DaCycle, Samples, StateVector, ObservationOperator): logging.debug("StateVector now carries %d samples" % StateVector.nobs) -def sample_step(DaCycle, Samples, StateVector, ObservationOperator, lag, isadvance=False): +def sample_step(DaCycle, Samples, StateVector, ObservationOperator, lag): """ Perform all actions needed to sample one cycle """ @@ -190,7 +189,7 @@ def sample_step(DaCycle, Samples, StateVector, ObservationOperator, lag, isadvan # Add model-data mismatch to all samples, this *might* use output from the ensemble in the future?? - Samples.add_model_data_mismatch() + Samples.add_model_data_mismatch(DaCycle.DaSystem['obs.sites.rc']) filename = Samples.write_sample_info() #LU observations.nc # Write filename to DaCycle, and to output collection list @@ -201,11 +200,6 @@ def sample_step(DaCycle, Samples, StateVector, ObservationOperator, lag, isadvan run_forecast_model(DaCycle, ObservationOperator) - # Add model-data mismatch to all samples, this *might* use output from the ensemble in the future?? - - #Samples.add_model_data_mismatch() - - #msg = "Added Model Data Mismatch to all samples " ; logging.debug(msg) # Read forecast model samples that were written to NetCDF files by each member. Add them to the exisiting # Observation object for each sample loop. This data fill be written to file in the output folder for each sample cycle. @@ -280,7 +274,7 @@ def advance(DaCycle, Samples, StateVector, ObservationOperator): ObservationOperator.get_initial_data() - sample_step(DaCycle, Samples, StateVector, ObservationOperator, 0, True) #LU w srodku zmienia zawartosc obiektu samples + sample_step(DaCycle, Samples, StateVector, ObservationOperator, 0) #LU w srodku zmienia zawartosc obiektu samples #LU ale z drugiej strony dodaje tez pozniej samples, to tak jakby chcial na nowo dodac ... #LU a to dlatego ze samples jest inicjalizowane na nowo. #LU skoro w srodku sample step jest inicjalizowanie samples przez przypisanie datalist=[], to czy ten obiekt samples ma jkaies podobiekty ktore kaza mu byc przekazywanym? @@ -293,7 +287,7 @@ def advance(DaCycle, Samples, StateVector, ObservationOperator): logging.debug("Appended Observation filename to DaCycle for collection ") - Samples.write_obs_to_file() + Samples.write_obs_to_file(DaCycle['dir.output'], DaCycle['time.sample.stamp']) def save_and_submit(DaCycle, StateVector): @@ -302,7 +296,7 @@ def save_and_submit(DaCycle, StateVector): savedir = DaCycle['dir.output'] filename = os.path.join(savedir, 'savestate.nc') #LU to jest state vector po zoptymalizowaniu. - StateVector.write_to_file(filename) + StateVector.write_to_file(filename, True) DaCycle.RestartFileList.append(filename) # write optimized info because StateVector.Isoptimized == False for now DaCycle.finalize() -- GitLab