diff --git a/Examples/testPenalization.py b/Examples/testPenalization.py index 7aebc86126e0b1302fa91e8a9f4bebad59b27985..192becbff17e797cce928260a0b70c7570ec9608 100644 --- a/Examples/testPenalization.py +++ b/Examples/testPenalization.py @@ -8,6 +8,7 @@ from parmepy.domain.obstacle.plates import Plates pi = math.pi from parmepy.operator.penalization import Penalization from parmepy.operator.monitors.printer import Printer +from parmepy.problem.simulation import Simulation def vitesse(x, y, z): @@ -67,9 +68,9 @@ penal2.setUp() printer = Printer(fields=[scal2], frequency=1) printer.setUp() print scal.norm() - -penal.apply(dt=0.1) -penal2.apply(dt=0.1) -printer.apply(ite=1) +simulation = Simulation() +penal.apply(simulation) +penal2.apply(simulation) +printer.apply(simulation) print "print ..." print scal.norm() diff --git a/HySoP/hysop/operator/discrete/analytic.py b/HySoP/hysop/operator/discrete/analytic.py index 80fcc6d7a65b8a717e199c1eacca98196f210ed4..f8508720f995e8b90b5c26515fd69f05747b4a8b 100644 --- a/HySoP/hysop/operator/discrete/analytic.py +++ b/HySoP/hysop/operator/discrete/analytic.py @@ -35,6 +35,9 @@ class Analytic_D(DiscreteOperator): Initialize is always called with coords + current time. Any extra parameters must be set using field.setExtraParameters. """ + if simulation is None: + raise ValueError("Missing simulation value for computation.") + self.compute_time = MPI.Wtime() for df in self.variables: df.initialize(self.vformula, simulation.time) diff --git a/HySoP/hysop/operator/discrete/curlAndDiffusion_fft.py b/HySoP/hysop/operator/discrete/curlAndDiffusion_fft.py index 6bede01e067743e32516eb3b938a16d378771d69..67fc5d496fce8cd0b1e412629ac100e877d16516 100644 --- a/HySoP/hysop/operator/discrete/curlAndDiffusion_fft.py +++ b/HySoP/hysop/operator/discrete/curlAndDiffusion_fft.py @@ -35,11 +35,7 @@ class DiffusionFFT(DiscreteOperator): self.compute_time = 0. @debug - def apply(self, t=None, dt=None, ite=None): - """ - Apply operator. - """ - self.compute_time = time.time() + def apply(self, simulation): if (self.vorticity.dimension == 2): diff --git a/HySoP/hysop/operator/discrete/multiphase.py b/HySoP/hysop/operator/discrete/multiphase.py index 172aaf6772e7d0e09bdf0f6ea2af48c4a3dff97e..887fca716d936cfb643ff8a1075148bc28c2ff05 100644 --- a/HySoP/hysop/operator/discrete/multiphase.py +++ b/HySoP/hysop/operator/discrete/multiphase.py @@ -34,7 +34,7 @@ class Pressure_d(DiscreteOperator): @debug def apply(self, simulation=None): if simulation is None: - raise ValueError("Missing dt value for diffusion computation.") + raise ValueError("Missing simulation value for computation.") self.compute_time = time.time() dt = simulation.timeStep diff --git a/HySoP/hysop/operator/discrete/particle_advection.py b/HySoP/hysop/operator/discrete/particle_advection.py index aa8b05b86867c657700f08e2ba516c4b843795f5..bd494c991b47800fd28021c34f957f38815ccd2d 100644 --- a/HySoP/hysop/operator/discrete/particle_advection.py +++ b/HySoP/hysop/operator/discrete/particle_advection.py @@ -149,7 +149,7 @@ class ParticleAdvection(DiscreteOperator): @debug def apply(self, simulation=None): if simulation is None: - raise ValueError("Missing dt value for diffusion computation.") + raise ValueError("Missing simulation value for computation.") self.numMethod(simulation.time, simulation.timeStep) diff --git a/HySoP/hysop/operator/discrete/scales_advection.py b/HySoP/hysop/operator/discrete/scales_advection.py index 3c4aaa9b690121ab41bc96b48ca745c5dab2717c..76ad8f0ab19d212b2ea7c6d947d522a7b6e93e1a 100644 --- a/HySoP/hysop/operator/discrete/scales_advection.py +++ b/HySoP/hysop/operator/discrete/scales_advection.py @@ -42,7 +42,7 @@ class ScalesAdvection(DiscreteOperator): @debug def apply(self, simulation=None): if simulation is None: - raise ValueError("Missing dt value for diffusion computation.") + raise ValueError("Missing simulation value for computation.") self.compute_time = time.time() dt = simulation.timeStep diff --git a/HySoP/hysop/operator/discrete/stretching.py b/HySoP/hysop/operator/discrete/stretching.py index b26a9419a48dd6a1e453aaad740601a3bee5b6bb..6fede186d6fb8daab2cbfe15edfc8199b572aa04 100755 --- a/HySoP/hysop/operator/discrete/stretching.py +++ b/HySoP/hysop/operator/discrete/stretching.py @@ -79,7 +79,7 @@ class Stretching_d(DiscreteOperator): -integrate with the chosen method (RK4. RK2. euler) """ if simulation is None: - raise ValueError("Missing dt value for diffusion computation.") + raise ValueError("Missing simulation value for computation.") self.compute_time = time.time() dt = simulation.timeStep diff --git a/HySoP/hysop/operator/discrete/synchronizeGhosts.py b/HySoP/hysop/operator/discrete/synchronizeGhosts.py index 6a6b622c69d64a95a2683bdf5fc2f7d178672950..23036054c6f22ddb4004aa1ed34bcc5e13d82551 100644 --- a/HySoP/hysop/operator/discrete/synchronizeGhosts.py +++ b/HySoP/hysop/operator/discrete/synchronizeGhosts.py @@ -114,7 +114,7 @@ class SynchronizeGhosts_d(DiscreteOperator): #self.discreteOperator.setUp() @debug - def apply(self, t, dt, ite): + def apply(self, simulation=None): self.resolution = self.topology.localGridResolution resolution = self.topology.localGridResolution ghosts = self.topology.ghosts diff --git a/HySoP/hysop/operator/monitors/printer.py b/HySoP/hysop/operator/monitors/printer.py index 89ccb20e886d8f8521123b7806ff2da900f91d2a..1ca7e7f75ec4600fe297c2b0cfa597f5ad359dfe 100644 --- a/HySoP/hysop/operator/monitors/printer.py +++ b/HySoP/hysop/operator/monitors/printer.py @@ -7,7 +7,6 @@ from parmepy.constants import np, S_DIR, PARMES_REAL from parmepy.operator.monitors.monitoring import Monitoring import evtk.hl as evtk from parmepy.mpi import main_rank -from parmepy.mpi import MPI class Printer(Monitoring): @@ -30,6 +29,8 @@ class Printer(Monitoring): Monitoring.__init__(self, fields, frequency) ## output file name prefix self.prefix = prefix + str(main_rank) + ## Extension for filename + self.ext = ext ## Method to collect data in case of distributed data self.get_data_method = None if self.freq != 0: @@ -37,13 +38,14 @@ class Printer(Monitoring): self.step = self._printStep else: self.step = self._passStep - ## Printing compute time - self.compute_time = 0. ## Internal counter self._call_number = 0 - def apply(self, t=None, dt=None, ite=None): - self.step(ite) + def apply(self, simulation=None): + if simulation is None: + raise ValueError("Missing simulation value for monitoring.") + + self.step(simulation.currentIteration) def _build_vtk_dict(self): """Build a dictionary from fields to VTK image.""" @@ -74,7 +76,7 @@ class Printer(Monitoring): raise ValueError("Cannot set non callable method to get data " + "to print. Given method : " + str(method)) - def _passStep(self, ite): + def _passStep(self, ite=None): """A code method that do nothing.""" pass @@ -82,8 +84,8 @@ class Printer(Monitoring): """ Try to write data into VTK files. If fails, turn to classical ascii output. + @param iter : current iteration number """ - t = MPI.Wtime() if (ite % self.freq) == 0: self._call_number += 1 # Transfer from GPU to CPU if required @@ -94,8 +96,8 @@ class Printer(Monitoring): except AttributeError: pass # Set output file name - filename = self.outputPrefix + "results_{0:05d}.dat".format(ite) - print "Print file : " + filename + filename = self.prefix + '_it_' + str(ite) + self.ext + print "Print to file " + filename ## VTK output \todo: Need fix in 2D, getting an IOError. try: evtk.imageToVTK(filename, pointData=self._build_vtk_dict()) @@ -145,13 +147,6 @@ class Printer(Monitoring): f.write("\n") f.close() print "==\n" - self.compute_time += (time.time() - t) - - def printComputeTime(self): - self.time_info[0] = "\"IO\" " - self.time_info[1] = str(self.compute_time) + " " - print "IO total time : ", self.compute_time, self._call_number - if __name__ == "__main__": print __doc__