[New GfsRefineSurface class (gerris--mainline--0.7--patch-21) Stephane Popinet **20041102020733 gerris--mainline--0.7--patch-21 Keywords: The GfsRefineSolid and GfsRefineDistance classes have also been reworked. ] addfile ./doc/tmpl/refine_surface.sgml hunk ./doc/gfs-docs.sgml 54 + hunk ./doc/gfs-docs.sgml 120 + &gfs-refine-surface; hunk ./doc/gfs-sections.txt 765 -GFS_REFINE_SOLID_CLASS -GFS_REFINE_SOLID hunk ./doc/gfs-sections.txt 767 -GfsRefineSolidClass hunk ./doc/gfs-sections.txt 773 +refine_surface +Surface refinement +GFS_REFINE_SURFACE +GFS_IS_REFINE_SURFACE + +GfsRefineSurface + +gfs_refine_surface_class + + +
hunk ./doc/gfs-sections.txt 785 -Solid distance refinement -GFS_REFINE_DISTANCE_CLASS +Surface distance refinement hunk ./doc/gfs-sections.txt 789 -GfsRefineDistanceClass hunk ./doc/tmpl/domain-advection-vof.sgml 66 -@c: +@a: hunk ./doc/tmpl/domain-advection-vof.sgml 68 + +@c: hunk ./doc/tmpl/domain.sgml 311 + + + + + +@domain: +@s: +@c: + + hunk ./doc/tmpl/fluid.sgml 141 -@temporary: hunk ./doc/tmpl/fluid.sgml 145 -@next: hunk ./doc/tmpl/fluid.sgml 392 - - - - - - - -@root: -@s: -@stree: -@is_open: -@c: hunk ./doc/tmpl/gfs-unused.sgml 255 + + + + + +@klass: + + + + + + +@obj: + + + + + + +@klass: + hunk ./doc/tmpl/gfs-unused.sgml 346 + + + + + +@parent_class: + + + + + + +@parent: + + + + + + +@parent_class: + hunk ./doc/tmpl/gfs-unused.sgml 407 + + + + + + +@root: +@s: +@stree: +@is_open: +@c: + + + + + + +@root: +@s: +@stree: +@is_open: +@destroy_solid: +@cleanup: +@data: +@Param2: hunk ./doc/tmpl/refine_distance.sgml 2 -Solid distance refinement +Surface distance refinement hunk ./doc/tmpl/refine_distance.sgml 15 -[ #GfsRefine ] surface.gts +[ #GfsRefineSurface ] hunk ./doc/tmpl/refine_distance.sgml 24 - - - - - -@klass: - - hunk ./doc/tmpl/refine_distance.sgml 40 - - - - - -@parent_class: - hunk ./doc/tmpl/refine_distance.sgml 46 -@surface: hunk ./doc/tmpl/refine_solid.sgml 5 -Refining cells close to a solid boundary +Refining cells cut by solid boundary hunk ./doc/tmpl/refine_solid.sgml 25 - - - - - -@klass: - - - - - - - -@obj: - - hunk ./doc/tmpl/refine_solid.sgml 32 - - - - - - -@parent_class: - - - - - - -@parent: hunk ./doc/tmpl/refine_surface.sgml 1 + +Surface refinement + + +Refining cells cut by a surface + + + +#GfsRefineSurface can be used to add levels of refinement to cells which are cut by a given surface. + + +The syntax in parameter files is as follows: + + +[ #GfsRefine ] surface.gts + + + + + + + + + + + + + + +@obj: + + + + + + + +@obj: + + + + + + + +@parent: +@surface: + + + + + + +@Returns: + + hunk ./doc/tmpl/simulation.sgml 62 -@stree: -@is_open: hunk ./doc/tmpl/solid.sgml 62 - - - - - -@root: -@s: -@stree: -@is_open: -@destroy_solid: -@cleanup: -@data: - -@Param2: - - hunk ./doc/tmpl/solid.sgml 76 +@Returns: + hunk ./doc/tmpl/solid.sgml 81 -@Returns: - hunk ./src/init.c 239 - gfs_refine_distance_class (); + gfs_refine_surface_class (); + gfs_refine_distance_class (); hunk ./src/refine.c 152 -static void refine_solid (GfsBox * box, gpointer * data) -{ - GfsSimulation * sim = data[1]; - - gfs_cell_traverse_cut (box->root, sim->surface, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, - (FttCellTraverseCutFunc) refine_cut_cell, data); -} - hunk ./src/refine.c 159 - gts_container_foreach (GTS_CONTAINER (sim), (GtsFunc) refine_solid, data); + gfs_domain_traverse_cut (GFS_DOMAIN (sim), sim->surface, + FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, + (FttCellTraverseCutFunc) refine_cut_cell, data); hunk ./src/refine.c 165 -static void gfs_refine_solid_class_init (GfsRefineSolidClass * klass) +static void gfs_refine_solid_class_init (GfsRefineClass * klass) hunk ./src/refine.c 167 - GFS_REFINE_CLASS (klass)->refine = gfs_refine_solid_refine; + klass->refine = gfs_refine_solid_refine; hunk ./src/refine.c 170 -GfsRefineSolidClass * gfs_refine_solid_class (void) +GfsRefineClass * gfs_refine_solid_class (void) hunk ./src/refine.c 172 - static GfsRefineSolidClass * klass = NULL; + static GfsRefineClass * klass = NULL; hunk ./src/refine.c 177 - sizeof (GfsRefineSolid), - sizeof (GfsRefineSolidClass), + sizeof (GfsRefine), + sizeof (GfsRefineClass), hunk ./src/refine.c 191 -/* GfsRefineDistance: Object */ +/* GfsRefineSurface: Object */ hunk ./src/refine.c 193 -static void refine_distance_destroy (GtsObject * object) +static void refine_surface_destroy (GtsObject * object) hunk ./src/refine.c 195 - GfsRefineDistance * d = GFS_REFINE_DISTANCE (object); + GfsRefineSurface * d = GFS_REFINE_SURFACE (object); hunk ./src/refine.c 199 - if (d->stree) - gts_bb_tree_destroy (d->stree, TRUE); hunk ./src/refine.c 200 - (* GTS_OBJECT_CLASS (gfs_refine_distance_class ())->parent_class->destroy) - (object); + (* GTS_OBJECT_CLASS (gfs_refine_surface_class ())->parent_class->destroy) (object); hunk ./src/refine.c 203 -static void refine_distance_write (GtsObject * o, FILE * fp) +static void refine_surface_write (GtsObject * o, FILE * fp) hunk ./src/refine.c 205 - GfsRefineDistance * d = GFS_REFINE_DISTANCE (o); + GfsRefineSurface * d = GFS_REFINE_SURFACE (o); hunk ./src/refine.c 207 - (* GTS_OBJECT_CLASS (gfs_refine_distance_class ())->parent_class->write) (o, fp); + (* GTS_OBJECT_CLASS (gfs_refine_surface_class ())->parent_class->write) (o, fp); hunk ./src/refine.c 213 -static void refine_distance_read (GtsObject ** o, GtsFile * fp) +static void refine_surface_read (GtsObject ** o, GtsFile * fp) hunk ./src/refine.c 215 - GfsRefineDistance * refine; + GfsRefineSurface * refine; hunk ./src/refine.c 217 - (* GTS_OBJECT_CLASS (gfs_refine_distance_class ())->parent_class->read) (o, fp); + (* GTS_OBJECT_CLASS (gfs_refine_surface_class ())->parent_class->read) (o, fp); hunk ./src/refine.c 221 - refine = GFS_REFINE_DISTANCE (*o); + refine = GFS_REFINE_SURFACE (*o); hunk ./src/refine.c 260 - refine->stree = gts_bb_tree_surface (refine->surface); hunk ./src/refine.c 264 +static void gfs_refine_surface_refine (GfsRefine * refine, GfsSimulation * sim) +{ + gpointer data[2]; + + data[0] = refine; + data[1] = sim; + gfs_domain_traverse_cut (GFS_DOMAIN (sim), GFS_REFINE_SURFACE (refine)->surface, + FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, + (FttCellTraverseCutFunc) refine_cut_cell, data); +} + +static void gfs_refine_surface_class_init (GfsRefineClass * klass) +{ + klass->refine = gfs_refine_surface_refine; + + GTS_OBJECT_CLASS (klass)->destroy = refine_surface_destroy; + GTS_OBJECT_CLASS (klass)->write = refine_surface_write; + GTS_OBJECT_CLASS (klass)->read = refine_surface_read; +} + +static void refine_surface_init (GfsRefineSurface * r) +{ + r->surface = gts_surface_new (gts_surface_class (), + gts_face_class (), + gts_edge_class (), + gts_vertex_class ()); +} + +GfsRefineClass * gfs_refine_surface_class (void) +{ + static GfsRefineClass * klass = NULL; + + if (klass == NULL) { + GtsObjectClassInfo gfs_refine_surface_info = { + "GfsRefineSurface", + sizeof (GfsRefineSurface), + sizeof (GfsRefineClass), + (GtsObjectClassInitFunc) gfs_refine_surface_class_init, + (GtsObjectInitFunc) refine_surface_init, + (GtsArgSetFunc) NULL, + (GtsArgGetFunc) NULL + }; + klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_refine_class ()), + &gfs_refine_surface_info); + } + + return klass; +} + +/* GfsRefineDistance: Object */ + +static void refine_distance_destroy (GtsObject * object) +{ + GfsRefineDistance * d = GFS_REFINE_DISTANCE (object); + + if (d->stree) + gts_bb_tree_destroy (d->stree, TRUE); + + (* GTS_OBJECT_CLASS (gfs_refine_distance_class ())->parent_class->destroy) (object); +} + +static void refine_distance_read (GtsObject ** o, GtsFile * fp) +{ + (* GTS_OBJECT_CLASS (gfs_refine_distance_class ())->parent_class->read) (o, fp); + if (fp->type == GTS_ERROR) + return; + + GFS_REFINE_DISTANCE (*o)->stree = gts_bb_tree_surface (GFS_REFINE_SURFACE (*o)->surface); +} + hunk ./src/refine.c 356 - if (GFS_REFINE_DISTANCE (refine)->surface) - gts_container_foreach (GTS_CONTAINER (sim), (GtsFunc) refine_distance, - refine); + gts_container_foreach (GTS_CONTAINER (sim), (GtsFunc) refine_distance, refine); hunk ./src/refine.c 359 -static void gfs_refine_distance_class_init (GfsRefineDistanceClass * klass) +static void gfs_refine_distance_class_init (GfsRefineClass * klass) hunk ./src/refine.c 361 - GFS_REFINE_CLASS (klass)->refine = refine_distance_refine; + klass->refine = refine_distance_refine; hunk ./src/refine.c 364 - GTS_OBJECT_CLASS (klass)->write = refine_distance_write; hunk ./src/refine.c 367 -static void gfs_refine_distance_init (GfsRefineDistance * d) +GfsRefineClass * gfs_refine_distance_class (void) hunk ./src/refine.c 369 - d->surface = gts_surface_new (gts_surface_class (), - gts_face_class (), - gts_edge_class (), - gts_vertex_class ()); -} + static GfsRefineClass * klass = NULL; hunk ./src/refine.c 371 -GfsRefineDistanceClass * gfs_refine_distance_class (void) -{ - static GfsRefineDistanceClass * klass = NULL; - hunk ./src/refine.c 375 - sizeof (GfsRefineDistanceClass), + sizeof (GfsRefineClass), hunk ./src/refine.c 377 - (GtsObjectInitFunc) gfs_refine_distance_init, + (GtsObjectInitFunc) NULL, hunk ./src/refine.c 381 - klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_refine_class ()), + klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_refine_surface_class ()), hunk ./src/refine.h 60 -typedef struct _GfsRefineSolid GfsRefineSolid; -typedef struct _GfsRefineSolidClass GfsRefineSolidClass; +#define GFS_IS_REFINE_SOLID(obj) (gts_object_is_from_class (obj,\ + gfs_refine_solid_class ())) + +GfsRefineClass * gfs_refine_solid_class (void); hunk ./src/refine.h 65 -struct _GfsRefineSolid { +/* GfsRefineSurface: Header */ + +typedef struct _GfsRefineSurface GfsRefineSurface; + +struct _GfsRefineSurface { hunk ./src/refine.h 71 -}; hunk ./src/refine.h 72 -struct _GfsRefineSolidClass { - GfsRefineClass parent_class; + GtsSurface * surface; hunk ./src/refine.h 75 -#define GFS_REFINE_SOLID(obj) GTS_OBJECT_CAST (obj,\ - GfsRefineSolid,\ - gfs_refine_solid_class ()) -#define GFS_REFINE_SOLID_CLASS(klass) GTS_OBJECT_CLASS_CAST (klass,\ - GfsRefineSolidClass,\ - gfs_refine_solid_class()) -#define GFS_IS_REFINE_SOLID(obj) (gts_object_is_from_class (obj,\ - gfs_refine_solid_class ())) +#define GFS_REFINE_SURFACE(obj) GTS_OBJECT_CAST (obj,\ + GfsRefineSurface,\ + gfs_refine_surface_class ()) +#define GFS_IS_REFINE_SURFACE(obj) (gts_object_is_from_class (obj,\ + gfs_refine_surface_class ())) hunk ./src/refine.h 81 -GfsRefineSolidClass * gfs_refine_solid_class (void); +GfsRefineClass * gfs_refine_surface_class (void); hunk ./src/refine.h 86 -typedef struct _GfsRefineDistanceClass GfsRefineDistanceClass; hunk ./src/refine.h 88 - GfsRefine parent; + GfsRefineSurface parent; hunk ./src/refine.h 90 - GtsSurface * surface; hunk ./src/refine.h 93 -struct _GfsRefineDistanceClass { - GfsRefineClass parent_class; -}; - hunk ./src/refine.h 96 -#define GFS_REFINE_DISTANCE_CLASS(klass) GTS_OBJECT_CLASS_CAST (klass,\ - GfsRefineDistanceClass,\ - gfs_refine_distance_class()) hunk ./src/refine.h 99 -GfsRefineDistanceClass * gfs_refine_distance_class (void); -GfsRefineDistance * gfs_refine_distance_new (GfsRefineDistanceClass * klass); +GfsRefineClass * gfs_refine_distance_class (void);