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

Stephane Popinet popinet at users.sourceforge.net
Fri May 15 02:51:16 UTC 2009


The following commit has been merged in the upstream branch:
commit 11177d782cc851117a669bb92fcb56df3158b3dc
Author: Stephane Popinet <popinet at users.sourceforge.net>
Date:   Wed Oct 20 14:08:17 2004 +1000

    Fixed cloning of GfsVariable. (gerris--mainline--0.7--patch-3)
    
    gerris--mainline--0.7--patch-3
    Keywords:
    
    The (non)-cloning of the surface_bc field of GfsVariable was crashing
    the code when destroying cloned variables. This has been solved by not
    cloning surface_bc and source terms.
    
    darcs-hash:20041020040817-aabb8-ca2693bb57eaecb9a4dccf0bea4779425a9ddd62.gz

diff --git a/src/fluid.c b/src/fluid.c
index 178de9b..d9f1047 100644
--- a/src/fluid.c
+++ b/src/fluid.c
@@ -1921,20 +1921,11 @@ static void gfs_variable_clone (GtsObject * clone, GtsObject * object)
   GfsVariable * c = GFS_VARIABLE1 (clone);
   GfsVariable * v = GFS_VARIABLE1 (object);
 
-  (* GTS_OBJECT_CLASS (gfs_variable_class ())->parent_class->clone) 
-    (clone, object);
+  (* GTS_OBJECT_CLASS (gfs_variable_class ())->parent_class->clone) (clone, object);
   if (v->name)
     c->name = g_strdup (v->name);
-  if (v->sources) {
-    GSList * i = GTS_SLIST_CONTAINER (v->sources)->items;
-
-    c->sources = 
-      gts_container_new (GTS_CONTAINER_CLASS (gts_slist_container_class ()));
-    while (i) {
-      gts_container_add (c->sources, GTS_CONTAINEE (i->data));
-      i = i->next;
-    }
-  }
+  c->sources = NULL;
+  c->surface_bc = NULL;
 }
 
 static void gfs_variable_class_init (GfsVariableClass * klass)
diff --git a/src/timestep.c b/src/timestep.c
index fcc8c52..658a252 100644
--- a/src/timestep.c
+++ b/src/timestep.c
@@ -731,6 +731,14 @@ void gfs_tracer_advection_diffusion (GfsDomain * domain,
 
 /* GfsSurfaceGenericBc: Object */
 
+static void gfs_surface_generic_bc_destroy (GtsObject * o)
+{
+  if (GFS_SURFACE_GENERIC_BC (o)->v)
+    GFS_SURFACE_GENERIC_BC (o)->v->surface_bc = NULL;
+
+  (* GTS_OBJECT_CLASS (gfs_surface_generic_bc_class ())->parent_class->destroy) (o);
+}
+
 static void gfs_surface_generic_bc_read (GtsObject ** o, GtsFile * fp)
 {
   GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o));
@@ -776,13 +784,13 @@ static void gfs_surface_generic_bc_read (GtsObject ** o, GtsFile * fp)
 static void gfs_surface_generic_bc_write (GtsObject * o, FILE * fp)
 {
   if (GTS_OBJECT_CLASS (gfs_surface_generic_bc_class ())->parent_class->write)
-    (* GTS_OBJECT_CLASS (gfs_surface_generic_bc_class ())->parent_class->write) 
-      (o, fp);
+    (* GTS_OBJECT_CLASS (gfs_surface_generic_bc_class ())->parent_class->write) (o, fp);
   fprintf (fp, "%s %s", o->klass->info.name, GFS_SURFACE_GENERIC_BC (o)->v->name);
 }
 
 static void gfs_surface_generic_bc_class_init (GfsSurfaceGenericBcClass * klass)
 {
+  GTS_OBJECT_CLASS (klass)->destroy = gfs_surface_generic_bc_destroy;
   GTS_OBJECT_CLASS (klass)->read = gfs_surface_generic_bc_read;
   GTS_OBJECT_CLASS (klass)->write = gfs_surface_generic_bc_write;
 }

-- 
Gerris Flow Solver



More information about the debian-science-commits mailing list