[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