| Gerris Flow Solver Reference Manual |
|---|
#include <gfs.h> #define GFS_DOMAIN_CLASS (klass) #define GFS_DOMAIN (obj) #define GFS_IS_DOMAIN (obj) struct GfsDomainClass; struct GfsDomain; GfsDomainClass* gfs_domain_class (void); GfsVariable* gfs_domain_add_variable (GfsDomain *domain, constgchar *name);void gfs_domain_add_new_variable (GfsDomain *domain, GfsVariable *v);void gfs_domain_replace_variable (GfsDomain *domain, GfsVariable *v, GfsVariable *with);void gfs_domain_cell_traverse (GfsDomain *domain, FttTraverseType order, FttTraverseFlags flags,gint max_depth, FttCellTraverseFunc func,gpointer data);void gfs_domain_cell_traverse_boundary (GfsDomain *domain, FttDirection d, FttTraverseType order, FttTraverseFlags flags,gint max_depth, FttCellTraverseFunc func,gpointer data);void gfs_domain_cell_traverse_box (GfsDomain *domain,GtsBBox *box, FttTraverseType order, FttTraverseFlags flags,gint max_depth, FttCellTraverseFunc func,gpointer data);void gfs_domain_traverse_mixed (GfsDomain *domain, FttTraverseType order, FttTraverseFlags flags, FttCellTraverseFunc func,gpointer data);void gfs_domain_face_traverse (GfsDomain *domain, FttComponent c, FttTraverseType order, FttTraverseFlags flags,gint max_depth, FttFaceTraverseFunc func,gpointer data); FttCell* gfs_domain_locate (GfsDomain *domain, FttVector target,gint max_depth);void gfs_domain_bc (GfsDomain *domain, FttTraverseFlags flags,gint max_depth, GfsVariable *v);void gfs_domain_homogeneous_bc (GfsDomain *domain, FttTraverseFlags flags,gint max_depth, GfsVariable *ov, GfsVariable *v);void gfs_domain_face_bc (GfsDomain *domain, FttComponent c, GfsVariable *v);void gfs_domain_surface_bc (GfsDomain *domain, GfsVariable *v);void gfs_domain_match (GfsDomain *domain);guint gfs_domain_depth (GfsDomain *domain);GtsRange gfs_domain_stats_variable (GfsDomain *domain, GfsVariable *v, FttTraverseFlags flags,gint max_depth); GfsNorm gfs_domain_norm_variable (GfsDomain *domain, GfsVariable *v, FttTraverseFlags flags,gint max_depth); GfsNorm gfs_domain_norm_velocity (GfsDomain *domain, FttTraverseFlags flags,gint max_depth);void gfs_domain_stats_balance (GfsDomain *domain,GtsRange *size,GtsRange *boundary,GtsRange *mpiwait);GtsRange gfs_domain_stats_solid (GfsDomain *domain);void gfs_domain_solid_force (GfsDomain *domain, FttVector *pf, FttVector *vf); GfsDomain* gfs_domain_read (GtsFile *fp);void gfs_domain_split (GfsDomain *domain,gboolean one_box_per_pe);void gfs_domain_remove_droplets (GfsDomain *domain, GfsVariable *c,gint min);void gfs_domain_remove_islands (GfsDomain *domain,gint min, FttCellCleanupFunc cleanup,gpointer data);void gfs_domain_advect_point (GfsDomain *domain,GtsPoint *p,gdouble dt);gdouble gfs_domain_cfl (GfsDomain *domain, FttTraverseFlags flags,gint max_depth);guint gfs_domain_size (GfsDomain *domain, FttTraverseFlags flags,gint max_depth);void gfs_domain_timer_start (GfsDomain *domain, constgchar *name);void gfs_domain_timer_stop (GfsDomain *domain, constgchar *name);
struct GfsDomainClass {
GtsWGraphClass parent_class;
void (* post_read) (GfsDomain *, GtsFile * fp);
};struct GfsDomain {
GtsWGraph parent;
int pid;
GTimer * timer;
GHashTable * timers;
GtsRange timestep;
GtsRange size;
gboolean profile_bc;
GtsRange mpi_messages;
GtsRange mpi_wait;
guint rootlevel;
FttVector refpos;
FttVector lambda;
GfsVariable * variables;
guint variables_size;
GfsVariable * variables_io;
gboolean binary;
gint max_depth_write;
};GfsVariable* gfs_domain_add_variable (GfsDomain *domain, constgchar *name);
Adds a new variable name to domain.
| domain : | a GfsDomain. |
| name : | the name of the variable to add or NULL. |
| Returns : | the new variable or NULL if a variable with the same name already exists. |
void gfs_domain_add_new_variable (GfsDomain *domain, GfsVariable *v);
Adds a new variable v to domain.
| domain : | a GfsDomain. |
| v : | the GfsVariable to add. |
void gfs_domain_replace_variable (GfsDomain *domain, GfsVariable *v, GfsVariable *with);
Replaces existing variable v with new variable with.
| domain : | a GfsDomain. |
| v : | the GfsVariable to replace. |
| with : | the new GfsVariable. |
void gfs_domain_cell_traverse (GfsDomain *domain, FttTraverseType order, FttTraverseFlags flags,gint max_depth, FttCellTraverseFunc func,gpointer data);
Traverses the cell trees of domain. Calls the given function for each cell visited.
| domain : | a GfsDomain. |
| order : | the order in which the cells are visited - FTT_PRE_ORDER, FTT_POST_ORDER. |
| flags : | which types of children are to be visited. |
| max_depth : | the maximum depth of the traversal. Cells below this depth will not be traversed. If max_depth is -1 all cells in the tree are visited. |
| func : | the function to call for each visited FttCell. |
| data : | user data to pass to func. |
void gfs_domain_cell_traverse_boundary (GfsDomain *domain, FttDirection d, FttTraverseType order, FttTraverseFlags flags,gint max_depth, FttCellTraverseFunc func,gpointer data);
Traverses the boundary of a domain in direction d. Calls the given function for each cell visited.
| domain : | a GfsDomain. |
| d : | the direction of the boundary to traverse. |
| order : | the order in which the cells are visited - FTT_PRE_ORDER, FTT_POST_ORDER. |
| flags : | which types of children are to be visited. |
| max_depth : | the maximum depth of the traversal. Cells below this depth will not be traversed. If max_depth is -1 all cells in the tree are visited. |
| func : | the function to call for each visited FttCell. |
| data : | user data to pass to func. |
void gfs_domain_cell_traverse_box (GfsDomain *domain,GtsBBox *box, FttTraverseType order, FttTraverseFlags flags,gint max_depth, FttCellTraverseFunc func,gpointer data);
Traverses the cell trees of domain. Calls the given function for each cell visited. Only the cells overlapping with box are visited.
| domain : | a GfsDomain. |
| box : | a |
| order : | the order in which the cells are visited - FTT_PRE_ORDER, FTT_POST_ORDER. |
| flags : | which types of children are to be visited. |
| max_depth : | the maximum depth of the traversal. Cells below this depth will not be traversed. If max_depth is -1 all cells in the tree are visited. |
| func : | the function to call for each visited FttCell. |
| data : | user data to pass to func. |
void gfs_domain_traverse_mixed (GfsDomain *domain, FttTraverseType order, FttTraverseFlags flags, FttCellTraverseFunc func,gpointer data);
Calls func for each mixed cell of domain.
| domain : | a GfsDomain. |
| order : | the order in which the cells are visited - FTT_PRE_ORDER, FTT_POST_ORDER. |
| flags : | which types of children are to be visited. |
| func : | the function to call for each visited FttCell. |
| data : | user data to pass to func. |
void gfs_domain_face_traverse (GfsDomain *domain, FttComponent c, FttTraverseType order, FttTraverseFlags flags,gint max_depth, FttFaceTraverseFunc func,gpointer data);
Traverses a domain. Calls the given function for each face of the cells of the domain.
If FTT_TRAVERSE_BOUNDARY_FACES is not set in flags, only "double-sided" faces are traversed i.e. the neighbor field of the face is never NULL.
| domain : | a GfsDomain. |
| c : | only the faces orthogonal to this component will be traversed - one of FTT_X, FTT_Y, (FTT_Z), FTT_XYZ. |
| order : | the order in which the cells are visited - FTT_PRE_ORDER, FTT_POST_ORDER. |
| flags : | which types of children and faces are to be visited. |
| max_depth : | the maximum depth of the traversal. Cells below this depth will not be traversed. If max_depth is -1 all cells in the tree are visited. |
| func : | the function to call for each visited FttCellFace. |
| data : | user data to pass to func. |
FttCell* gfs_domain_locate (GfsDomain *domain, FttVector target,gint max_depth);
Locates the cell of domain containing target. This is done efficiently in log(n) operations by using the topology of the cell trees.
| domain : | a GfsDomain. |
| target : | position of the point to look for. |
| max_depth : | maximum depth to consider (-1 means no restriction). |
| Returns : | a FttCell of domain containing (boundary included) the point defined by target or NULL if target is not contained in any cell of domain. |
void gfs_domain_bc (GfsDomain *domain, FttTraverseFlags flags,gint max_depth, GfsVariable *v);
Apply the boundary conditions in domain for variable v.
| domain : | a GfsDomain. |
| flags : | the traversal flags. |
| max_depth : | the maximum depth of the traversal. |
| v : | a GfsVariable. |
void gfs_domain_homogeneous_bc (GfsDomain *domain, FttTraverseFlags flags,gint max_depth, GfsVariable *ov, GfsVariable *v);
Apply the boundary conditions in domain for variable ov using the homogeneous version of the boundary condititons for v.
| domain : | a GfsDomain. |
| flags : | the traversal flags. |
| max_depth : | the maximum depth of the traversal. |
| ov : | a GfsVariable. |
| v : | a GfsVariable of which ov is an homogeneous version. |
void gfs_domain_face_bc (GfsDomain *domain, FttComponent c, GfsVariable *v);
Apply the boundary conditions on the faces of domain for variable v.
| domain : | a GfsDomain. |
| c : | a component. |
| v : | a GfsVariable. |
void gfs_domain_surface_bc (GfsDomain *domain, GfsVariable *v);
Apply boundary conditions for variable v on embedded surfaces.
| domain : | a GfsDomain. |
| v : | a GfsVariable. |
void gfs_domain_match (GfsDomain *domain);
Match the boundaries of domain.
| domain : | a GfsDomain. |
guint gfs_domain_depth (GfsDomain *domain);
| domain : | a GfsDomain. |
| Returns : | the maximum depth of the cell trees of domain. This function is global i.e. it returns the maximum depth over all the processes (for parallel execution). |
GtsRange gfs_domain_stats_variable (GfsDomain *domain, GfsVariable *v, FttTraverseFlags flags,gint max_depth);
Traverses the domain defined by domain using gfs_domain_cell_traverse()
and gathers statistics about variable v.
| domain : | the domain to obtain statistics from. |
| v : | a GfsVariable. |
| flags : | which types of cells are to be visited. |
| max_depth : | maximum depth of the traversal. |
| Returns : | a |
GfsNorm gfs_domain_norm_variable (GfsDomain *domain, GfsVariable *v, FttTraverseFlags flags,gint max_depth);
Traverses the domain defined by domain using gfs_domain_cell_traverse()
and gathers norm statistics about variable v.
The norm is weighted by the volume of each cell.
| domain : | the domain to obtain norm from. |
| v : | a GfsVariable. |
| flags : | which types of cells are to be visited. |
| max_depth : | maximum depth of the traversal. |
| Returns : | a GfsNorm containing the norm statistics about v. |
GfsNorm gfs_domain_norm_velocity (GfsDomain *domain, FttTraverseFlags flags,gint max_depth);
Traverses the domain defined by domain using gfs_domain_cell_traverse()
and gathers norm statistics about velocity.
| domain : | the domain to obtain the norm from. |
| flags : | which types of cells are to be visited. |
| max_depth : | maximum depth of the traversal. |
| Returns : | a GfsNorm containing the norm statistics about the velocity. |
void gfs_domain_stats_balance (GfsDomain *domain,GtsRange *size,GtsRange *boundary,GtsRange *mpiwait);
Gathers statistics about the sizes of the domains, their parallel boundaries and the execution time on each PE.
| domain : | the domain to obtain statistics from. |
| size : | |
| boundary : | |
| mpiwait : | |
GtsRange gfs_domain_stats_solid (GfsDomain *domain);
Traverses the domain defined by domain using gfs_domain_traverse_mixed()
and gathers statistics about the solid volume fraction in mixed cells.
| domain : | the domain to obtain statistics from. |
| Returns : | statistics about the solid volume fraction a in mixed cells. |
void gfs_domain_solid_force (GfsDomain *domain, FttVector *pf, FttVector *vf);
Fills pf and vf with the components of the net pressure and viscous forces applied by the fluid on the solid surface embbeded in domain.
| domain : | a GfsDomain. |
| pf : | a FttVector. |
| vf : | a FttVector. |
GfsDomain* gfs_domain_read (GtsFile *fp);
Reads the graph nodes (GfsBox) and edges and the corresponding boundaries (GfsBoundaryMpi if necessary) defined in fp.
| fp : | a |
| Returns : | the GfsDomain or NULL if an error occured, in which case the corresponding fp fields (pos and error) are set. |
void gfs_domain_split (GfsDomain *domain,gboolean one_box_per_pe);
Splits each box of domain into its (4 in 2D, 8 in 3D) children. The corresponding newly created boxes are added to the graph and the parent boxes are destroyed.
| domain : | a GfsDomain. |
| one_box_per_pe : | if TRUE each new box created is assigned to a different process, otherwise the newly created box inherits the pid of its parent. |
void gfs_domain_remove_droplets (GfsDomain *domain, GfsVariable *c,gint min);
Removes all the droplets of domain smaller than min cells if min is positive, or all the droplets but the -$min largest ones if min is negative.
| domain : | a GfsDomain. |
| c : | a GfsVariable. |
| min : | the minimum size (in cells) of the droplets. |
void gfs_domain_remove_islands (GfsDomain *domain,gint min, FttCellCleanupFunc cleanup,gpointer data);
Removes all the fluid "islands" of domain smaller than min cells if min is positive, or all the islands but the -min largest ones if min is negative.
| domain : | a GfsDomain. |
| min : | the minimum size (in cells) of the islands. |
| cleanup : | a FttCellCleanupFunc or NULL. |
| data : | user data to pass to cleanup. |
void gfs_domain_advect_point (GfsDomain *domain,GtsPoint *p,gdouble dt);
Updates the coordinates of point p at time t + dt using the velocity field defined by domain.
If p is not contained within domain, the coordinates are unchanged.
| domain : | a GfsDomain. |
| p : | a |
| dt : | the time step. |
gdouble gfs_domain_cfl (GfsDomain *domain, FttTraverseFlags flags,gint max_depth);
| domain : | a GfsDomain. |
| flags : | which types of cells are to be visited. |
| max_depth : | maximum depth of the traversal. |
| Returns : | the minimum over the cells of domain (traversed using flags and max_depth) of the time scale defined by the size of the cell and the norm of either the local velocity or the local acceleration. |
guint gfs_domain_size (GfsDomain *domain, FttTraverseFlags flags,gint max_depth);
| domain : | a GfsDomain. |
| flags : | which types of cells are to be visited. |
| max_depth : | maximum depth of the traversal. |
| Returns : | the number of cells of domain traversed using flags and max_depth. |
void gfs_domain_timer_start (GfsDomain *domain, constgchar *name);
Starts timer name of domain. If name does not exist it is created first.
| domain : | a GfsDomain. |
| name : | the name of the timer. |
| <<< Non-adaptive fluid box node | Fluid box boundaries >>> |