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