Face Class Reference

#include <Face.h>

Public Member Functions

 Face ()
 
 ~Face ()
 
bool checkTetraIntersection (Face *f2)
 
bool checkTetraIntersection (Face *f2, scalar *blob_corr, int f1_daddy_blob_index, int f2_daddy_blob_index)
 
scalar getTetraIntersectionVolume (Face *f2)
 
scalar getTetraIntersectionVolume (Face *f2, scalar *blob_corr, int f1_daddy_blob_index, int f2_daddy_blob_index)
 
scalar checkTetraIntersectionAndGetVolume (Face *f2)
 
scalar checkTetraIntersectionAndGetVolume (Face *f2, scalar *blob_corr, int f1_daddy_blob_index, int f2_daddy_blob_index)
 
void getTetraIntersectionVolumeAndArea (Face *f2, geoscalar &vol, geoscalar &area)
 
void getTetraIntersectionVolumeAndArea (Face *f2, geoscalar &vol, geoscalar &area, scalar *blob_corr, int f1_daddy_blob_index, int f2_daddy_blob_index)
 
bool getTetraIntersectionVolumeTotalGradientAndShapeFunctions (Face *f2, geoscalar dr, grr3(&dVdr), geoscalar &vol, grr4(&phi1), grr4(&phi2))
 
bool getTetraIntersectionVolumeTotalGradientAndShapeFunctions (Face *f2, geoscalar dr, grr3(&dVdr), geoscalar &vol, grr4(&phi1), grr4(&phi2), scalar *blob_corr, int f1_daddy_blob_index, int f2_daddy_blob_index)
 
int init (int index, tetra_element_linear *e, mesh_node *n0, mesh_node *n1, mesh_node *n2, mesh_node *oposite, SecondOrderFunctions::stu centroid_stu, Blob *daddy_blob, SimulationParams *params)
 
int init (int index, mesh_node *n0, mesh_node *n1, mesh_node *n2, mesh_node *opposite, Blob *daddy_blob, SimulationParams *params)
 
void set_ssint_interaction_type (int ssint_interaction_type)
 
int build_opposite_node ()
 
void calc_area_normal_centroid ()
 
void set_kinetic_state (bool state)
 
vector3get_centroid ()
 
void print_centroid ()
 
void print_nodes ()
 
scalar get_area ()
 
void barycentric_calc_point (scalar b1, scalar b2, scalar b3, vector3 *p)
 
void barycentric_calc_point_f2 (scalar b1, scalar b2, scalar b3, vector3 *p, scalar *blob_corr, int f1_daddy_blob_index, int f2_daddy_blob_index)
 
scalar average_phi ()
 
scalar get_normal_flux ()
 
void add_force_to_node (int i, vector3 *f)
 
template<class brr3 >
void add_force_to_node (int i, brr3(&f))
 
void add_force_to_node_atomic (int i, vector3 *f)
 
void zero_force ()
 
void set_ssint_xz_interaction_flag (bool state)
 
template<class brr3 >
void vec3Vec3SubsToArr3Mod (Face *f2, brr3(&w), scalar *blob_corr, int f1_daddy_blob_index, int f2_daddy_blob_index)
 
bool is_ssint_active ()
 
bool is_kinetic_active ()
 
scalar length_of_longest_edge ()
 

Data Fields

mesh_noden [4]
 
int index
 
tetra_element_lineare
 
int ssint_interaction_type
 
scalar area_0
 
scalar area
 
vector3 normal
 
vector3 centroid
 
vector3 force [4]
 
SecondOrderFunctions::stu centroid_stu
 
bool ssint_xz_interaction_flag
 
bool kinetically_active
 
Blobdaddy_blob
 
int num_blobs
 

Private Attributes

int stuff
 
bool dealloc_n3
 

Constructor & Destructor Documentation

◆ Face()

Face::Face ( )

◆ ~Face()

Face::~Face ( )

Member Function Documentation

◆ add_force_to_node() [1/2]

◆ add_force_to_node() [2/2]

template<class brr3 >
void Face::add_force_to_node ( int  i,
brr3 &  f 
)

◆ add_force_to_node_atomic()

void Face::add_force_to_node_atomic ( int  i,
vector3 f 
)

◆ average_phi()

scalar Face::average_phi ( )

Returns the average electrostatic potential of this face

◆ barycentric_calc_point()

void Face::barycentric_calc_point ( scalar  b1,
scalar  b2,
scalar  b3,
vector3 p 
)

Calculate the point p on this triangle given the barycentric coordinates b1, b2, b3. Altered to act periodically around box boundaries.

Referenced by BEM_Poisson_Boltzmann::build_BEM_matrices(), VdW_solver::do_gensoft_interaction(), VdW_solver::do_lj_interaction(), VdW_solver::do_sticky_xz_interaction(), GaussianQuadrature_tri::integrate_face_to_face(), and GaussianQuadrature_tri::integrate_point_to_face().

◆ barycentric_calc_point_f2()

void Face::barycentric_calc_point_f2 ( scalar  b1,
scalar  b2,
scalar  b3,
vector3 p,
scalar blob_corr,
int  f1_daddy_blob_index,
int  f2_daddy_blob_index 
)

◆ build_opposite_node()

int Face::build_opposite_node ( )

Referenced by Blob::add_steric_nodes().

◆ calc_area_normal_centroid()

void Face::calc_area_normal_centroid ( )

◆ checkTetraIntersection() [1/2]

bool Face::checkTetraIntersection ( Face f2)

Check whether the tetrahedron formed by this face an the opposite linear node does intersect with the corresponding tetrahedron in f2 Returns true if there is intersection. Uses the "Fast Tetrahedron-Tetrahedron Overlap Algorithm". It calls some private functions.

Referenced by GenSoftSSINT_solver::do_interaction(), Steric_solver::do_interaction(), and LJSteric_solver::do_interaction().

◆ checkTetraIntersection() [2/2]

bool Face::checkTetraIntersection ( Face f2,
scalar blob_corr,
int  f1_daddy_blob_index,
int  f2_daddy_blob_index 
)

◆ checkTetraIntersectionAndGetVolume() [1/2]

scalar Face::checkTetraIntersectionAndGetVolume ( Face f2)

Check whether the tetrahedron formed by this face an the opposite linear node does intersect with the corresponding tetrahedron in f2. If so, return the overlapping volume, otherwise return 0. Uses the "Fast Tetrahedron-Tetrahedron Overlap Algorithm" for checking if interaction occurs.

◆ checkTetraIntersectionAndGetVolume() [2/2]

scalar Face::checkTetraIntersectionAndGetVolume ( Face f2,
scalar blob_corr,
int  f1_daddy_blob_index,
int  f2_daddy_blob_index 
)

◆ get_area()

scalar Face::get_area ( )

Referenced by Blob::apply_ctforces().

◆ get_centroid()

vector3 * Face::get_centroid ( )

Referenced by print_centroid().

◆ get_normal_flux()

scalar Face::get_normal_flux ( )

Referenced by Blob::solve_poisson().

◆ getTetraIntersectionVolume() [1/2]

scalar Face::getTetraIntersectionVolume ( Face f2)

Get the volume that the enclose the intersection of the tetrahedron formed by this face an the opposite linear node with the corresponding tetrahedron in f2. It calls volumeIntersection, at volumeIntersection.h

◆ getTetraIntersectionVolume() [2/2]

scalar Face::getTetraIntersectionVolume ( Face f2,
scalar blob_corr,
int  f1_daddy_blob_index,
int  f2_daddy_blob_index 
)

◆ getTetraIntersectionVolumeAndArea() [1/2]

void Face::getTetraIntersectionVolumeAndArea ( Face f2,
geoscalar vol,
geoscalar area 
)

Get the volume and area that the enclose the intersection of the tetrahedron formed by this face an the opposite linear node with the corresponding tetrahedron in f2. It calls volumeIntersection, at volumeIntersection.h

◆ getTetraIntersectionVolumeAndArea() [2/2]

void Face::getTetraIntersectionVolumeAndArea ( Face f2,
geoscalar vol,
geoscalar area,
scalar blob_corr,
int  f1_daddy_blob_index,
int  f2_daddy_blob_index 
)

◆ getTetraIntersectionVolumeTotalGradientAndShapeFunctions() [1/2]

bool Face::getTetraIntersectionVolumeTotalGradientAndShapeFunctions ( Face f2,
geoscalar  dr,
grr3 dVdr,
geoscalar vol,
grr4 phi1,
grr4 phi2 
)

Get the volume that enclose the intersection of the tetrahedron formed by this face an the opposite linear node with the corresponding tetrahedron in f2. In addition, return the gradient of this volume, calculated as dV/dx,dV/dy,dV/dz, and the internal coordinates of the point where the force is applied. It calls 4 times volumeIntersection. This version works well for the double loop i<j.

Referenced by VdW_solver::do_steric_interaction().

◆ getTetraIntersectionVolumeTotalGradientAndShapeFunctions() [2/2]

bool Face::getTetraIntersectionVolumeTotalGradientAndShapeFunctions ( Face f2,
geoscalar  dr,
grr3 dVdr,
geoscalar vol,
grr4 phi1,
grr4 phi2,
scalar blob_corr,
int  f1_daddy_blob_index,
int  f2_daddy_blob_index 
)

◆ init() [1/2]

int Face::init ( int  index,
tetra_element_linear e,
mesh_node n0,
mesh_node n1,
mesh_node n2,
mesh_node oposite,
SecondOrderFunctions::stu  centroid_stu,
Blob daddy_blob,
SimulationParams params 
)

◆ init() [2/2]

int Face::init ( int  index,
mesh_node n0,
mesh_node n1,
mesh_node n2,
mesh_node opposite,
Blob daddy_blob,
SimulationParams params 
)

◆ is_kinetic_active()

bool Face::is_kinetic_active ( )

Referenced by VdW_solver::solve().

◆ is_ssint_active()

bool Face::is_ssint_active ( )

◆ length_of_longest_edge()

scalar Face::length_of_longest_edge ( )

◆ print_centroid()

void Face::print_centroid ( )

◆ print_nodes()

void Face::print_nodes ( )

◆ set_kinetic_state()

void Face::set_kinetic_state ( bool  state)

◆ set_ssint_interaction_type()

void Face::set_ssint_interaction_type ( int  ssint_interaction_type)

Referenced by Blob::load_ssint().

◆ set_ssint_xz_interaction_flag()

void Face::set_ssint_xz_interaction_flag ( bool  state)

◆ vec3Vec3SubsToArr3Mod()

template<class brr3 >
template void Face::vec3Vec3SubsToArr3Mod< grr3 > ( Face f2,
brr3 &  w,
scalar blob_corr,
int  f1_daddy_blob_index,
int  f2_daddy_blob_index 
)

◆ zero_force()

void Face::zero_force ( )

Field Documentation

◆ area

◆ area_0

scalar Face::area_0

Initial, equilibrium area of this face

Referenced by Face(), init(), Blob::load_surface(), Blob::load_surface_no_topology(), and ~Face().

◆ centroid

◆ centroid_stu

SecondOrderFunctions::stu Face::centroid_stu

Stores the natural (shape function) coords of the centroid of this face in the parent element

Referenced by get_normal_flux(), and init().

◆ daddy_blob

◆ dealloc_n3

bool Face::dealloc_n3
private

Referenced by build_opposite_node(), Face(), and ~Face().

◆ e

Pointer to the element this is a face of

Referenced by Face(), get_normal_flux(), init(), and ~Face().

◆ force

vector3 Face::force[4]

Stores the current force applied to this face. The first 3 "vectors" are to those surface nodes that define this face, while the last one belongs to the opposite node of the linear tetrahedron

Referenced by add_force_to_node(), add_force_to_node_atomic(), Blob::aggregate_forces_and_solve(), and zero_force().

◆ index

int Face::index

Index of this face

Referenced by init().

◆ kinetically_active

bool Face::kinetically_active

◆ n

◆ normal

◆ num_blobs

◆ ssint_interaction_type

◆ ssint_xz_interaction_flag

bool Face::ssint_xz_interaction_flag

◆ stuff

int Face::stuff
private

The documentation for this class was generated from the following files: