# HG changeset patch # User paugier <pierre.augier@ens-lyon.org> # Date 1538750994 -7200 # Fri Oct 05 16:49:54 2018 +0200 # Node ID c75e601242de70bd078ada2a05822a5b63f838ba # Parent 0beb95096e326feba96dd3a69c01d96270e2680b Option FLUIDSIM_USE_FLUIDPYTHRAN diff --git a/fluidsim/base/time_stepping/pseudo_spect.py b/fluidsim/base/time_stepping/pseudo_spect.py --- a/fluidsim/base/time_stepping/pseudo_spect.py +++ b/fluidsim/base/time_stepping/pseudo_spect.py @@ -20,9 +20,8 @@ """ -from builtins import object - from warnings import warn +import os import numpy as np @@ -112,6 +111,19 @@ if params_ts.type_time_scheme not in ["RK2", "RK4"]: raise ValueError("Problem name time_scheme") + self._state_spect_tmp = np.empty_like(self.sim.state.state_spect) + + if params_ts.type_time_scheme == "RK4": + self._state_spect_tmp1 = np.empty_like(self.sim.state.state_spect) + + if os.environ.get("FLUIDSIM_USE_FLUIDPYTHRAN", False): + if params_ts.type_time_scheme == "RK2": + time_step_RK = self._time_step_RK2_fluidpythran + else: + time_step_RK = self._time_step_RK4_fluidpythran + self._time_step_RK = time_step_RK + return + dtype = self.freq_lin.dtype if dtype == np.float64: str_type = "float" @@ -142,9 +154,6 @@ exec("self._time_step_RK = self." + name_function, globals(), locals()) - self._state_spect_tmp = np.empty_like(self.sim.state.state_spect) - self._state_spect_tmp1 = np.empty_like(self.sim.state.state_spect) - def _compute_freq_complex(self): state_spect = self.sim.state.state_spect freq_complex = np.empty_like(state_spect) @@ -261,6 +270,24 @@ # float64[][] diss2; # float dt # ) + + # pythran block ( + # complex128[][][] state_spect_n12, state_spect, tendencies_n; + # complex128[][][] diss2; + # float dt + # ) + + # pythran block ( + # complex128[][][] state_spect_n12, state_spect, tendencies_n; + # float64[][][] diss2; + # float dt + # ) + + # pythran block ( + # complex128[][][][] state_spect_n12, state_spect, tendencies_n; + # float64[][][] diss2; + # float dt + # ) state_spect_n12[:] = (state_spect + dt / 2 * tendencies_n) * diss2 tendencies_n12 = compute_tendencies(state_spect_n12, old=tendencies_n) @@ -273,6 +300,24 @@ # float64[][] diss, diss2; # float dt # ) + + # pythran block ( + # complex128[][][] state_spect, tendencies_n12; + # complex128[][][] diss, diss2; + # float dt + # ) + + # pythran block ( + # complex128[][][] state_spect, tendencies_n12; + # float64[][][] diss, diss2; + # float dt + # ) + + # pythran block ( + # complex128[][][][] state_spect, tendencies_n12; + # float64[][][] diss, diss2; + # float dt + # ) state_spect[:] = state_spect * diss + dt * diss2 * tendencies_n12 def _time_step_RK4(self): @@ -429,6 +474,27 @@ # float64[][] diss, diss2; # float dt # ) + + # pythran block ( + # complex128[][][] state_spect, state_spect_tmp, + # tendencies_0, state_spect_np12_approx1; + # complex128[][][] diss, diss2; + # float dt + # ) + + # pythran block ( + # complex128[][][] state_spect, state_spect_tmp, + # tendencies_0, state_spect_np12_approx1; + # float64[][][] diss, diss2; + # float dt + # ) + + # pythran block ( + # complex128[][][][] state_spect, state_spect_tmp, + # tendencies_0, state_spect_np12_approx1; + # float64[][][] diss, diss2; + # float dt + # ) state_spect_tmp[:] = (state_spect + dt / 6 * tendencies_0) * diss state_spect_np12_approx1[:] = ( state_spect + dt / 2 * tendencies_0 @@ -451,6 +517,27 @@ # float64[][] diss2; # float dt # ) + + # pythran block ( + # complex128[][][] state_spect, state_spect_tmp, + # state_spect_np12_approx2, tendencies_1; + # complex128[][][] diss2; + # float dt + # ) + + # pythran block ( + # complex128[][][] state_spect, state_spect_tmp, + # state_spect_np12_approx2, tendencies_1; + # float64[][][] diss2; + # float dt + # ) + + # pythran block ( + # complex128[][][][] state_spect, state_spect_tmp, + # state_spect_np12_approx2, tendencies_1; + # float64[][][] diss2; + # float dt + # ) state_spect_tmp[:] += dt / 3 * diss2 * tendencies_1 state_spect_np12_approx2[:] = ( state_spect * diss2 + dt / 2 * tendencies_1 @@ -473,6 +560,27 @@ # float64[][] diss, diss2; # float dt # ) + + # pythran block ( + # complex128[][][] state_spect, state_spect_tmp, + # state_spect_np1_approx, tendencies_2; + # complex128[][][] diss, diss2; + # float dt + # ) + + # pythran block ( + # complex128[][][] state_spect, state_spect_tmp, + # state_spect_np1_approx, tendencies_2; + # float64[][][] diss, diss2; + # float dt + # ) + + # pythran block ( + # complex128[][][][] state_spect, state_spect_tmp, + # state_spect_np1_approx, tendencies_2; + # float64[][][] diss, diss2; + # float dt + # ) state_spect_tmp[:] += dt / 3 * diss2 * tendencies_2 state_spect_np1_approx[:] = ( state_spect * diss + dt * diss2 * tendencies_2 @@ -483,5 +591,16 @@ ) del state_spect_np1_approx - # result using the 4 approximations - self.sim.state.state_spect = state_spect_tmp + dt / 6 * tendencies_3 + if fp.is_pythranized: + fp.use_pythranized_block("rk4_step3") + else: + # result using the 4 approximations + # pythran block ( + # complex128[][][] state_spect, state_spect_tmp, tendencies_3; + # float dt + # ) + # pythran block ( + # complex128[][][][] state_spect, state_spect_tmp, tendencies_3; + # float dt + # ) + state_spect[:] = state_spect_tmp + dt / 6 * tendencies_3 diff --git a/setup.cfg b/setup.cfg --- a/setup.cfg +++ b/setup.cfg @@ -18,3 +18,8 @@ [coverage:xml] output = .coverage/coverage.xml + +[options] +setup_requires = + fluidpythran + numpy diff --git a/setup.py b/setup.py --- a/setup.py +++ b/setup.py @@ -50,13 +50,10 @@ here = Path(__file__).parent.absolute() -try: - from fluidpythran.files_maker import create_pythran_files -except ImportError: - pass -else: - paths = ["fluidsim/base/time_stepping/pseudo_spect.py"] - create_pythran_files([here / path for path in paths]) +from fluidpythran.files_maker import create_pythran_files + +paths = ["fluidsim/base/time_stepping/pseudo_spect.py"] +create_pythran_files([here / path for path in paths]) time_start = time() config = get_config()