migflow.scontact
Model for Immersed Granular Flow: Fluid user interface
Contact: jonathan.lambrechts@uclouvain.be Webpage: www.migflow.be
MigFlow computes immersed granular flows using an unresolved FEM-DEM model. The continuous phase (mixture) is computed by solving averaged Navier-Stokes equations on unstructured meshes with the continuous finite element method.
- class migflow.scontact.ParticleProblem(dim)
Bases:
objectCreates the numerical structure containing all the physical particles that appear in the problem
Builds the particle problem structure.
- Parameters
dim (
int) – Dimension of the problem- Raises
ValueError – If the dimension differs from 2 or 3
NameError – If C builder cannot be found
- __del__()
Deletes the particle solver structure.
- add_body(x, invertM, invertI)
Adds a body in the particle problem. — Only in 2D
- Parameters
x (
ndarray) – array of the position of the bodyInvertM – inverse mass of the body
InvertI – inverse inertia of the body
- Returns
body id
- Return type
int
- add_boundary_periodic_entity(dim, transform)
Adds a periodic entity .
- Parameters
dim (
int) – dimension of the entitytransform (
ndarray) – array of the transformation to applied to the periodic entity
- add_boundary_periodic_point(x, tag)
Adds a boundary periodic point.
- Parameters
x (
ndarray) – array of the coordinates of the pointtag (
int) – entity tag
- add_boundary_periodic_segment(x0, x1, tag)
Adds a boundary periodic segment.
- Parameters
x0 (
ndarray) – array of the coordinates of the first endpointx1 (
ndarray) – array of the coordinates of the second endpointtag (
int) – entity tag
- add_boundary_periodic_triangle(x0, x1, x2, tag)
Adds a boundary periodic triangle.
- Parameters
x0 (
ndarray) – array of the coordinates of the first summitx1 (
ndarray) – array of the coordinates of the second summitx2 (
ndarray) – array of the coordinates of the third summittag (
int) – tag of the periodic entity
- add_boundary_segment(x0, x1, tag, material='default', r=0)
Adds a boundary segment.
- Parameters
x0 (
ndarray) – array of the coordinates of the first endpointx1 (
ndarray) – array of the coordinates of the second endpointtag (
str) – segment tagr – if != 0, the segment is a cylinder
material (
str) – segment material
- add_boundary_triangle(x0, x1, x2, tag, material='default')
Adds a boundary triangle.
- Parameters
x0 (
ndarray) – array of the coordinates of the first summitx1 (
ndarray) – array of the coordinates of the second summitx2 (
ndarray) – array of the coordinates of the third summittag (
str) – triangle tagmaterial (
str) – triangle material
- add_boundary_triangle_framed(x0, x1, x2, tag, material='default')
Adds a boundary triangle with segments framing it.
- Parameters
x0 (
ndarray) – array of the coordinates of the first summitx1 (
ndarray) – array of the coordinates of the second summitx2 (
ndarray) – array of the coordinates of the third summittag (
str) – triangle tagmaterial (
str) – triangle material
- add_entities(xbody, invertM=0.0, invertI=0.0, particles_coordinates=None, particles_radius=None, particles_materials='default', segments_coordinates=None, segments_tags=None, segments_materials='default', triangles_coordinates=None, triangles_tags=None, triangles_materials='default', is_relative_position=True)
Adds entities (either particles, segments or triangles) to a body described by its position, inverse of mass and inverse of inertia.
- Parameters
xbody (np.ndarray) – position of the body
invertM (float, optional) – inverse mass of the body. Defaults to 0.
invertI (float, optional) – inverse inertia of the body. Defaults to 0.
particles_coordinates (np.ndarray, optional) – position of the particles. Defaults to None.
particles_radius (Union[np.ndarray, float], optional) – array of the particles radii. Defaults to None.
particles_materials (Union[str, List[str]], optional) – array of the particles material. Defaults to “default”.
segments_coordinates (np.ndarray, optional) – array of the segments coordinates as n_segments x 2 x dimension. Defaults to None.
segments_tags (Union[str, List[str]], optional) – array of the segments tags. Defaults to None.
segments_materials (Union[str, List[str]], optional) – array of the segments materials. Defaults to “default”.
triangles_coordinates (np.ndarray, optional) – array of the segments coordinates as n_segments x 3 x dimension. Defaults to None.
triangles_tags (str, optional) – array of the triangles tags. Defaults to None.
triangles_materials (Union[str, List[str]], optional) – array of the triangles materials. Defaults to “default”.
is_relative_position (bool, optional) – flag if the given position is the relative position towards the body or the absolute position. Defaults to True.
- Returns
body id
- Return type
int
- add_particle(x, r, m, material='default', forced=False, inverse_inertia=None)
Adds a particle in the particle container.
- Parameters
x (
ndarray) – array of the particle positionr (
float) – particle radiusm (
float) – particle massmaterial (
str) – particle material
- Returns
body id
- Return type
int
- add_particle_body(positions, radii, masses, material='default', forced=False)
Adds a body in the particle problem with a list of constituting particles — Only in 2D
- Parameters
positions (
ndarray) – positions of the particles constituting the bodyradii (
ndarray) – radii of the particlesmasses (
ndarray) – masses of the particlesmaterial (
str) – material of the particlesforced (
bool) – Flag indicating whether the body is forced or not
- Returns
body id
- Return type
int
- add_particle_to_body(x, r, body, material='default')
Adds a particle to a body.
- Parameters
x (
ndarray) – array of the particle positon with respect to the body’s centre of massr (
float) – Particle radiusbody (
int) – number of the body to which the particle will be addedmaterial (
str) – Particle material
- add_particles(x, r, m, material='default', forced=False, inverse_inertia=None)
Adds particles in the particle container.
- Parameters
x (
ndarray) – array of tuple to set the centre particle positionr (
ndarray) – array of particle radiusm (
ndarray) – array of particle massmaterial (
str) – particle material
- Returns
id of the added bodies
- Return type
np.ndarray
- add_segment_to_body(x0, x1, body, tag, material='default', radius=0)
Adds a segment to a body.
- Parameters
x0 (np.ndarray) – array of the coordinates of the first endpoint
x1 (np.ndarray) – array of the coordinates of the second endpoint
body (int) – body id
tag (str) – boundary id associated to the segment
radius (float) – if not 0, the segment is a cylinder
material (str) – Segment material
- add_triangle_to_body(x0, x1, x2, body, tag, material='default')
Adds a segment to a body.
- Parameters
x0 (np.ndarray) – array of the coordinates of the first endpoint
x1 (np.ndarray) – array of the coordinates of the second endpoint
body (int) – body id
tag (str) – boundary id associated to the segment
material (str) – Segment material
- body_constraint()
Returns the invert mases of the bodies. :returns: Array of the body invert masses :rtype: np.ndarray
- body_invert_inertia()
Returns the invert inertias of the bodies. :returns: Array of the body invert inertias :rtype: np.ndarray
- body_invert_mass()
Returns the invert mases of the bodies. :returns: Array of the body invert masses :rtype: np.ndarray
- body_omega()
Returns the angular velocities of the bodies. :returns: Array of the body angular velocities :rtype: np.ndarray
- body_position()
Returns the positions of the bodies. :returns: Array of the body positions :rtype: np.ndarray
- body_theta()
Returns the array of the body angles. :returns: Array of the body angles :rtype: np.ndarray
- body_velocity()
Returns the velocities of the bodies. :returns: Array of the body velocities :rtype: np.ndarray
- bounding_box(padding_ratio=0.0)
Returns the bounding box of the particle problem. :returns: position of the lower left corner, position of the upper right corner :rtype: Tuple[np.ndarray, np.ndarray]
- compute_relative_position(mass_center, particles_position, theta)
- compute_stress_tensor(nodes, radius)
Computes the stress tensor of the granular material :type nodes:
ndarray:param nodes: Array of nodes at which to compute the stress tensor :param r: Radius within which the contact forces will be averaged- Returns
Array of stresses on the nodes of the grid
- Return type
np.ndarray
- contact_forces()
Returns the contact forces on each particle. :returns: Array of the particle contact forces :rtype: np.ndarray
- contact_heat(ks, young_modulus, poisson_ratio, temperature, isolated_bodies=None)
Compute the thermal heat producted by the contact
- Parameters
ks (np.ndarray) – conductibility
young_modulus (np.ndarray) – Bodies Young modulus
poisson_ratio (np.ndarray) – Bodies Poisson ratio
temperature (np.ndarray) – Bodies temperature
isolated_bodies (np.ndarray, optional) – Bodies which does not produce any heat. Defaults to None.
- Raises
ValueError – Wrong shape
- Returns
heat producted by the contact for each body.
- Return type
np.ndarray
- contacts()
Gives the contacts between the bodies. :returns: Array of contact forces between the particles :rtype: np.ndarray
- delassus()
Returns the delassus operators of the particles. :returns: Array of the particle delassus operators :rtype: np.ndarray
- dim()
Returns the dimension of the particle problem. :returns: Dimension of the problem :rtype: int
- filter_new_particles(x, r)
- Return type
ndarray
- get_boundary_forces(tag='default')
Returns the forces acting on a boundary because of the contacts in the global basis. :type tag:
str:param tag: Name of the boundary- Returns
Array of forces on boundary named tag
- Return type
np.ndarray
- get_current_quality(tol)
Returns worst current contact quality(min c.space)
Performs new init of contacts list (copy)
- Return type
float
- get_iters_contacts_solve()
Returns the number of iterations in the contacts solver during the iteration :returns: numbers of iterations in the contacts solver during the iteration :rtype: int
- get_material_id(material)
Returns the number associated to a string material. :type material:
str:param material: string material.- Returns
number associated to the string material
- Return type
int
- get_overall_quality()
returns and tracks the worst interpenetration (min c.space) contacts of the entire simulation
- Return type
float
- get_separation_threshold()
Get the separation threshold for oriented faces.
- Returns
Separation threshold value.
- Return type
float
- get_tag_id(tag='default')
Returns the number associated to a string tag. :type tag:
str:param tag: string tag.- Returns
number associated to the string tag
- Return type
int
- get_time_contacts_solve()
Returns time spent in the contacts solver during the iteration :returns: time spent in the contacts solver during the iteration :rtype: float
- get_time_detection()
Returns time spent in the detection during the iteration :returns: time spent in the detection during the iteration :rtype: float
- id()
Returns the ids of the particles. :returns: Array of the particle ids :rtype: np.ndarray
- init_body(reference_position, relative_position, particle_masses, particle_radii, material='default')
- Return type
int
- iterate(dt, forces, body_forces=None, tol=1e-08, force_motion=0)
- Computes iteratively the set of velocities that respect the non-interpenetration constrain.
Returns 1 if the computation converged, 0 otherwise.
- Parameters
dt (
float) – Numerical time stepforces (
ndarray) – List of vectors containing the forces applied on the particlesbody_forces (
Optional[ndarray]) – List of forces applied to the bodiestol (
float) – Optional argument defining the interpenetration tolerance to stop the NLGS iterations of the NSCDforce_motion (
int) – Optional argument allowing to move the grains if convergence has not been reached when set to 1
- load_mesh_to_body(bodyid, filename, tags=None, shift=None, material='default', moving=False)
Not here : periodic entities
- load_msh_boundaries(filename, tags=None, shift=None, material='default')
Loads the numerical domain and set the physical boundaries the particles cannot go through.
- Parameters
filename (
str) – name of the msh file. If None the current gmsh model is loaded without the need to a msh file.tags (
Optional[str]) – tags of physical boundary defined in the msh fileshift (
Optional[ndarray]) – optional argument to shift the numerical domainmaterial (
str) – material of the boundary
- material()
Returns the materials of the particles. :returns: Array of the particle materials :rtype: np.ndarray
- mu()
Returns the array of the friction coefficients between materials. :returns: Array of the friction coefficients between materials. :rtype: np.ndarray
- n_bodies()
Returns the number of bodies. :returns: number of bodies :rtype: int
- n_particles()
Returns the number of particles. :returns: number of particles :rtype: int
- omega()
Returns the omega of the particles. :returns: Array of the particle omega :rtype: np.ndarray
- parse_type(tname)
- particle_body()
Returns the bodies associated to each particle
- Returns
body id
- Return type
np.ndarray
- particle_relative_position()
Returns the relative positions of the particles
- Returns
Array of the relative positions
- Return type
np.ndarray
- particles()
Returns the array of particles. :returns: Array of particles :rtype: np.ndarray
- periodic_entity()
Returns the array of periodic entities. :returns: Array of periodic entities :rtype: np.ndarray
- periodic_points()
Returns the array of periodic points. :returns: Array of periodic points :rtype: np.ndarray
- periodic_segments()
Returns the array of periodic segments.
- Return type
ndarray
- periodic_triangles()
Returns the array of periodic triangles. :returns: Array of periodic segments :rtype: np.ndarray
- position()
Returns the positions of the particles. :returns: Array of the particle positions :rtype: np.ndarray
- r()
Returns the raddi of the particles. :returns: Array of the particle radii :rtype: np.ndarray
- read_mig(odir, t=None, iteration=None)
Reads output files. :type odir:
str:param odir: Directory in which to read the file :type t:Optional[float] :param t: Time at which to read the file :param iteration; iteration to read: :param -1 for last iteration:
- remove_bodies_flag(flag)
Removes particles based on given flag. :type flag:
ndarray:param flag: flag with the same size as the number of bodies, with 0 for bodies to be removed and 1 for bodies to be kept
- restore_state()
Restores the saved state of the particle problem.
- save_state()
Saves the current state of the particle problem.
- segments()
Returns the array of boundary segments. :returns: Array of boundary segments :rtype: np.ndarray
- segments_position()
Returns the position of all segments.
- Returns
edges coordinates of all segments
- Return type
np.ndarray
- set_boundary_velocity(tag, v)
Sets the velocity of a boundary to a given value. :type tag:
str:param tag: Name of the boundary :type v:ndarray:param v: Velocity vector to be given to the boundary
- set_cohesion_coefficient(c, mat0='default', mat1='default')
Sets the cohesion coefficient between two materials.
- Parameters
c (
ndarray) – Value of the cohesion coefficientsmat0 (
str) – First materialmat1 (
str) – Second material
- set_compute_contact_forces(compute_contact_forces=1)
Enables the computation of the contact forces on each particle if 1 and disables it if 0.
- set_detection_per_iteration(n)
Sets the number of iterations between two contact detection.
- Parameters
n (
int) – Number of iterations between two contact detection.
- set_fixed_contact_geometry(flag)
Sets the management of the contact geometry, either fixed (default) or changing each time the contact is solved.
- Parameters
flag (
bool) – True for fixed False for changing.
- set_friction_coefficient(mu, mat0='default', mat1='default')
Sets the friction coefficient between two materials.
- Parameters
mu (
float) – Value of the friction coefficientmat0 (
str) – First materialmat1 (
str) – Second material
- set_initial(initial=1)
Sets the initial state of the particle problem.
- set_jacobi_max_iters(maxit=10000)
- set_jacobi_mode(jacobi_mode=0)
- set_jacobi_relaxation(relax=0.5)
- set_oriented_faces(flag)
Set whether the faces (triangles in 3d, or edges in 2d) are oriented. By default, set to false.
- Parameters
flag (bool) – _description_
- set_predict_basis(flag)
Set the management of the contact geometry, if true, a contact basis estimation is used in the contact resolution
- Parameters
flag (bool) – True for the estimation
- set_redblack_mode(redblack_mode=0)
- set_separation_threshold(threshold)
Set the separation threshold for oriented faces.
- Parameters
threshold (float) – Separation threshold value.
- set_use_queue(use_queue=1)
Enables the use of the queue if 1 and disables it if 0.
- triangles()
Returns the array of boundary triangles. :returns: Array of boundary triangles :rtype: np.ndarray
- velocity()
Returns the velocities of the particles. :returns: Array of the particle velocities :rtype: np.ndarray
- volume()
Returns the volumes of the particles. :returns: Array of the particle volumes :rtype: np.ndarray
- write_mig(output_dir, t, extra_fields={}, write_contacts=True)
Writes output files for post-visualization. :type output_dir:
str:param output_dir: Directory in which to write the file (expected to end in “.mig”) :type t:float:param t: Time at which the simulation is :type extra_fields:Dict[str,ndarray] :param extra_fields: extra field as a dictionnary {name : values}
- write_residues_to_CSV(filename)
Writes the residues of the particle problem to a CSV file.
- Parameters
filename (str) – Name of the output CSV file.
- migflow.scontact.absolute_coord(position_bodies, theta_bodies, bodies, relative_position)
- migflow.scontact.fastdeposit_2d(boundary, r, svgfilename=None)
Fast 2d deposit of particles in a simple domain. :type boundary:
ndarray:param boundary: points describing the boundary (single loop counter-clockwise oriented, no holes). :type boundary: np.ndarray [n,2] :type r:ndarray:param r: radius of the particles. :type r: np.ndarray [m] :type svgfilename:Optional[str] :param svgfilename: if not None, a svg file is generated illustrating the algorithm- Returns
positions of the particles. np.ndarray [m,2]: radius of the particles.
- Return type
np.ndarray [m,2]
- migflow.scontact.get_particle_range(outputdir, field)
Returns the range associated to a particle field. :type field:
str:param field: name of the field :type field: str- Returns
minimum and maximum values of the field
- Return type
Tuple[np.ndarray, np.ndarray]
- migflow.scontact.read_particle_field(outputdir, field, t)
Returns a particle field at a given time. :type outputdir:
str:param outputdir: output directory of the simulation :type outputdir: str :type field:str:param field: name of the field :type field: str :type t:float:param t: time :type t: float- Returns
values of the field at time t
- Return type
np.ndarray