[SCM] Gerris Flow Solver branch, upstream, updated. b3aa46814a06c9cb2912790b23916ffb44f1f203

Stephane Popinet popinet at users.sf.net
Fri May 15 02:53:34 UTC 2009


The following commit has been merged in the upstream branch:
commit ad5c944e84863922694233ef02cb48bb106b71ca
Author: Stephane Popinet <popinet at users.sf.net>
Date:   Wed Feb 1 01:34:46 2006 +1100

    "Semi-implicit" scheme for VariableCurvature
    
    darcs-hash:20060131143446-d4795-e669666933cb4ded66bc246984f96c0473601f12.gz

diff --git a/src/levelset.c b/src/levelset.c
index cc1927d..44f13ff 100644
--- a/src/levelset.c
+++ b/src/levelset.c
@@ -265,7 +265,10 @@ static gboolean variable_levelset_event (GfsEvent * event, GfsSimulation * sim)
 {
   if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_variable_levelset_class ())->parent_class)->event)
       (event, sim)) {
-    variable_levelset_event_half (event, sim);
+    if (!GFS_VARIABLE_LEVELSET (event)->first_done) {
+      variable_levelset_event_half (event, sim);
+      GFS_VARIABLE_LEVELSET (event)->first_done = TRUE;
+    }
     return TRUE;
   }
   return FALSE;
diff --git a/src/levelset.h b/src/levelset.h
index c330acc..85d2f4a 100644
--- a/src/levelset.h
+++ b/src/levelset.h
@@ -34,6 +34,7 @@ struct _GfsVariableLevelSet {
   /*< private >*/
   GfsVariable parent;
   GfsVariable * min, * max;
+  gboolean first_done;
 
   /*< public >*/
   GfsVariable * v;
diff --git a/src/variable.c b/src/variable.c
index 5c3373f..4c17518 100644
--- a/src/variable.c
+++ b/src/variable.c
@@ -518,15 +518,17 @@ static void curvature (FttCell * cell, gpointer * data)
 {
   GfsVariable ** nv = data[0];
   GfsVariable * v = data[1];
+  GfsVariableCurvature * k = GFS_VARIABLE_CURVATURE (v);
   gdouble kappa = 0.;
   FttComponent c;
   GtsVector n = { 0., 0., 0. };
-
+  
   for (c = 0; c < FTT_DIMENSION; c++) {
     gfs_youngs_normal (cell, nv[c], (FttVector *) n);
     kappa += n[c];
   }
-  GFS_VARIABLE (cell, v->i) = GFS_VARIABLE_CURVATURE (v)->sigma*kappa/ftt_cell_size (cell);
+  GFS_VARIABLE (cell, v->i) = (k->theta*k->sigma*kappa/ftt_cell_size (cell) +
+			       (1. - k->theta)*GFS_VARIABLE (cell, v->i));
 }
 
 static void variable_curvature_event_half (GfsEvent * event, GfsSimulation * sim)
@@ -557,7 +559,9 @@ static gboolean variable_curvature_event (GfsEvent * event, GfsSimulation * sim)
 {
   if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_variable_curvature_class ())->parent_class)->event)
       (event, sim)) {
+    GFS_VARIABLE_CURVATURE (event)->theta = 1.;
     variable_curvature_event_half (event, sim);
+    GFS_VARIABLE_CURVATURE (event)->theta = 0.5;
     return TRUE;
   }
   return FALSE;
diff --git a/src/variable.h b/src/variable.h
index 17d935a..12e5347 100644
--- a/src/variable.h
+++ b/src/variable.h
@@ -138,6 +138,7 @@ typedef struct _GfsVariableCurvature                GfsVariableCurvature;
 struct _GfsVariableCurvature {
   /*< private >*/
   GfsVariable parent;
+  gdouble theta;
 
   /*< public >*/
   GfsVariable * v;

-- 
Gerris Flow Solver



More information about the debian-science-commits mailing list