This prevents me from plotting the spectra etc... when I am running a simulation directly from the python console. I added this to OutputBasePseudoSpectral class to cure this issue:
The latest change in base/output/base.py: SpecificOutput class
led to more bugs.
It should be self._name_file right?
Also, since PhysFieldsBase doesnot have a fixed _name_file attribute, I think it should be under try-except. This circumvented some bugs:
#!python379 try:380 if self._name_file is not None:381 self.path_file = self.output.path_run + '/' + self._name_file382 else:383 self.init_path_files()384 except AttributeError:385 pass386
Still some issues remain:
#!pythonrun test.py*************************************Program FluidDynsolver SW1L, RK4 and sequential,type fft: FFTWPYnx = 32 ; ny = 32Lx = 2*pi ; Ly = 2*pipath_run =/scratch/avmo/tmp/examples/SW1L_test_L=2pix2pi_32x32_2015-11-01_12-24-45init_fields.type: vortex_gridInitialization outputs:<class 'fluidsim.base.output.increments.IncrementsSW1L'> increments<class 'fluidsim.base.output.phys_fields.PhysFieldsBase2D'> phys_fields<class 'fluidsim.solvers.sw1l.output.spectra.SpectraSW1L'> spectra---------------------------------------------------------------------------AttributeError Traceback (most recent call last)/home/avmo/src/test.py in <module>() 24 params.preprocess.forcing_const = 0.01 25 ---> 26 sim = Simul(params) 27 sim.time_stepping.start() 28 sim.output.spectra.animate()/home/avmo/src/geofluiddyn/fluidsim/solvers/sw1l/solver.pyc in __init__(self, params) 57 params.kd2 = params.f**2/params.c2 58 ---> 59 super(Simul, self).__init__(params) 60 61 if mpi.rank == 0:/home/avmo/src/geofluiddyn/fluidsim/base/solvers/base.pyc in __init__(self, params) 128 129 # complete the initialisation of the object output--> 130 self.output.init_with_oper_and_state() 131 132 # if enabled, preprocesses flow parameters such as viscosity and forcing/home/avmo/src/geofluiddyn/fluidsim/base/output/base.py in init_with_oper_and_state(self) 342 # self.rotfft_from_vecfft = oper.rotfft_from_vecfft 343 --> 344 super(OutputBasePseudoSpectral, self).init_with_oper_and_state() 345 346 /home/avmo/src/geofluiddyn/fluidsim/base/output/base.py in init_with_oper_and_state(self) 199 200 if self.sim.state.is_initialized:--> 201 self.init_with_initialized_state() 202 203 def save_info_solver_params_xml(self, replace=False):/home/avmo/src/geofluiddyn/fluidsim/base/output/base.py in init_with_initialized_state(self) 243 if mpi.rank == 0: 244 print(Class, Class._tag)--> 245 self.__dict__[Class._tag] = Class(self) 246 247 print_memory_usage(/home/avmo/src/geofluiddyn/fluidsim/solvers/sw1l/output/spectra.pyc in __init__(self, output) 15 self.f = params.f 16 ---> 17 super(SpectraSW1L, self).__init__(output) 18 19 /home/avmo/src/geofluiddyn/fluidsim/base/output/spectra.pyc in __init__(self, output) 35 output, 36 period_save=params.output.periods_save.spectra,---> 37 has_to_plot_saved=params.output.spectra.HAS_TO_PLOT_SAVED) 38 39 def init_path_files(self):/home/avmo/src/geofluiddyn/fluidsim/base/output/base.py in __init__(self, output, period_save, period_plot, has_to_plot_saved, dico_arrays_1time) 392 393 if self.period_save != 0.:--> 394 self.init_files(dico_arrays_1time) 395 396 def init_path_files(self):/home/avmo/src/geofluiddyn/fluidsim/base/output/spectra.pyc in init_files(self, dico_arrays_1time) 45 dico_spectra1D, dico_spectra2D = self.compute() 46 if mpi.rank == 0:---> 47 if not os.path.exists(self.path_file1D): 48 dico_arrays_1time = {'kxE': self.sim.oper.kxE, 49 'kyE': self.sim.oper.kyE}AttributeError: 'SpectraSW1L' object has no attribute 'path_file1D'> /home/avmo/src/geofluiddyn/fluidsim/base/output/spectra.py(47)init_files() 46 if mpi.rank == 0:---> 47 if not os.path.exists(self.path_file1D): 48 dico_arrays_1time = {'kxE': self.sim.oper.kxE,
OK. I get it. Ignore my previous comment. It can be closed with the following changes:
#!pythondiff -r 51421b1c3874 fluidsim/base/output/base.py--- a/fluidsim/base/output/base.py Sat Oct 31 16:50:27 2015 +0100+++ b/fluidsim/base/output/base.py Sun Nov 01 14:41:32 2015 +0100@@ -377,8 +376,8 @@ self.period_show = params.output.period_refresh_plots self.t_last_show = 0.- if name_file is not None:- self.path_file = self.output.path_run + '/' + name_file+ if self._name_file is not None:+ self.path_file = self.output.path_run + '/' + self._name_file else: self.init_path_files()diff -r 51421b1c3874 fluidsim/base/output/phys_fields.py--- a/fluidsim/base/output/phys_fields.py Sat Oct 31 16:50:27 2015 +0100+++ b/fluidsim/base/output/phys_fields.py Sun Nov 01 14:41:32 2015 +0100@@ -26,6 +26,7 @@ """Manage the output of physical fields.""" _tag = 'phys_fields'+ _name_file = Nonediff -r 51421b1c3874 fluidsim/base/output/spectra.py--- a/fluidsim/base/output/spectra.py Sat Oct 31 16:50:27 2015 +0100+++ b/fluidsim/base/output/spectra.py Sun Nov 01 14:41:32 2015 +0100@@ -15,6 +15,7 @@ """ _tag = 'spectra'+ _name_file = None @staticmethod def _complete_params_with_default(params):
EDIT: Also this inside SpecificOutput class
#!python393 def init_path_files(self):394 if hasattr(self, '_name_file'):395 if self._name_file is not None:396 self.path_file = os.path.join(self.output.path_run, self._name_file)