From 670d6dc13f86607d30ec2eb906a667de77c44c99 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Keck <Jean-Baptiste.Keck@imag.fr> Date: Thu, 24 May 2018 14:07:24 +0200 Subject: [PATCH] working 3D bubbles --- examples/bubble/periodic_bubble_levelset.py | 6 +++--- hysop/operator/directional/stretching_diffusion_dir.py | 4 +++- hysop/operator/directional/symbolic_dir.py | 1 + hysop/symbolic/directional.py | 5 +++-- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/examples/bubble/periodic_bubble_levelset.py b/examples/bubble/periodic_bubble_levelset.py index d4b055985..c8a5afdbf 100644 --- a/examples/bubble/periodic_bubble_levelset.py +++ b/examples/bubble/periodic_bubble_levelset.py @@ -182,7 +182,7 @@ def compute(args): #> External force rot(-rho*g) Fext = np.zeros(shape=(dim,), dtype=object).view(SymbolicTensor) - Fext[dim-1] = -1.0 #-9.8196 + Fext[1] = -1.0 #-9.8196 Fext *= rhos lhs = Ws.diff(frame.time) rhs = curl(Fext, frame) @@ -236,7 +236,7 @@ def compute(args): ### Adaptive timestep operator - adapt_dt = AdaptiveTimeStep(dt, equivalent_CFL=True, max_dt=0.01, + adapt_dt = AdaptiveTimeStep(dt, equivalent_CFL=True, max_dt=1e-2, name='merge_dt', pretty_name='dt', ) dt_cfl = adapt_dt.push_cfl_criteria(cfl=args.cfl, Finf=min_max_U.Finf, equivalent_CFL=True, @@ -401,6 +401,6 @@ if __name__=='__main__': dump_freq=0, dump_times=(0.0, 0.1, 0.20, 0.30, 0.325, 0.4, 0.45, 0.50), rho1=1.0, rho2=10.0, mu1=0.00025, mu2=0.00050, - Bc = ((0.5,0.2,0.5),(0.5,0.5,0.5),), Br = (0.1,0.15,)) + Bc = ((0.5,0.1,0.5),(0.5,0.4,0.5),), Br = (0.1,0.15,)) parser.run(compute) diff --git a/hysop/operator/directional/stretching_diffusion_dir.py b/hysop/operator/directional/stretching_diffusion_dir.py index 9ccac9b2a..598027c76 100644 --- a/hysop/operator/directional/stretching_diffusion_dir.py +++ b/hysop/operator/directional/stretching_diffusion_dir.py @@ -49,13 +49,15 @@ class DirectionalStretchingDiffusion(DirectionalStretching): Base class keywords arguments. See hysop.operator.directional.stretching_dir.DirectionalStretching. """ - check_instance(viscosity, float) + check_instance(viscosity, (float, Field)) self.viscosity = viscosity super(DirectionalStretchingDiffusion, self).__init__(**kwds) def _gen_expressions(self, formulation, velocity, vorticity, C, A): from hysop.symbolic.field import laplacian viscosity = self.viscosity + if isinstance(viscosity, Field): + viscosity = viscosity.s(*viscosity.domain.frame.vars) _exprs = super(DirectionalStretchingDiffusion, self)._gen_expressions(formulation=formulation, velocity=velocity, vorticity=vorticity, C=C, A=A) exprs = () diff --git a/hysop/operator/directional/symbolic_dir.py b/hysop/operator/directional/symbolic_dir.py index ac9a65955..03a6c3911 100644 --- a/hysop/operator/directional/symbolic_dir.py +++ b/hysop/operator/directional/symbolic_dir.py @@ -111,6 +111,7 @@ class DirectionalSymbolic(DirectionalOperatorFrontend): directional_exprs[k] += (v,) else: directional_exprs[k] = (v,) + print self._directional_exprs = directional_exprs self._no_split = no_split diff --git a/hysop/symbolic/directional.py b/hysop/symbolic/directional.py index 9f11c279c..00ee06ff2 100644 --- a/hysop/symbolic/directional.py +++ b/hysop/symbolic/directional.py @@ -40,8 +40,9 @@ def split(F, coords=None): res[i] = collect_direction(F, xi) residue = (F - sum(res.values())).simplify() count = sum((r != 0) for r in res.values()) - for i in res.keys(): - res[i] += (residue/count) + if (count>0): + for i in res.keys(): + res[i] += (residue/count) return res def split_assignement(expr, coords=None): -- GitLab