Low level functions for cutting poly faces and cells. More...
Classes | |
| struct | OpIndex |
| struct | OpBegin |
| struct | OpDereference |
| struct | OpNext |
| struct | OpScaled |
| struct | OpPreInner |
| struct | OpIndirectAverage |
| struct | OpIterableAverage |
| struct | OpFaceCutValues |
| struct | OpCellCutValues |
| struct | InPlaceOpAdvance |
| struct | BinaryOpAdd |
| struct | OffsetSequence |
| struct | OffsetSequence< Int, Offset, std::integer_sequence< Int, Is ... > > |
| struct | RangeSequence |
| class | FaceValues |
| class | FaceCutValues |
| class | CellCutValues |
Typedefs | |
| template<class Type > | |
| using | AreaIntegralType = typename Foam::outerProduct< Foam::vector, Type >::type |
| Definition for the type of a face-area-integral. More... | |
Functions | |
| List< labelPair > | faceCuts (const face &f, const scalarField &pAlphas, const scalar isoAlpha) |
| Return the cuts for a given face. This returns a list of pairs of. More... | |
| labelListList | cellCuts (const cell &c, const cellEdgeAddressing &cAddr, const faceUList &fs, const List< List< labelPair >> &fCuts, const scalarField &pAlphas, const scalar isoAlpha) |
| Return the cuts for a given cell. This returns a list of lists of cell-edge. More... | |
| void | writeFaceCuts (const face &f, const List< labelPair > &fCuts, const pointField &ps, const scalarField &pAlphas, const scalar isoAlpha, OBJstream &obj) |
| Write the cuts for a given face to an OBJ file. More... | |
| void | writeCellCuts (const cell &c, const cellEdgeAddressing &cAddr, const List< List< label >> &cCuts, const faceList &fs, const pointField &ps, const scalarField &pAlphas, const scalar isoAlpha, OBJstream &obj) |
| Write the cuts for a given cell to an OBJ file. More... | |
| template<template< class > class FaceValues, class ... Types> | |
| Tuple2< vector, std::tuple< AreaIntegralType< Types > ... > > | faceAreaIntegral (const FaceValues< point > &fPs, const point &fPAvg, const std::tuple< FaceValues< Types > ... > &fPsis, const std::tuple< Types ... > &fPsiAvgs) |
| Compute the face-area and face-area-integrals of the given properties. More... | |
| vector | faceArea (const face &f, const point &fPAvg, const pointField &ps) |
| Compute the face-area. More... | |
| vector | faceArea (const face &f, const pointField &ps) |
| Compute the face-area. More... | |
| template<class Type > | |
| Tuple2< vector, AreaIntegralType< Type > > | faceAreaIntegral (const face &f, const point &fPAvg, const Type &fPsiAvg, const pointField &ps, const Field< Type > &pPsis) |
| Compute the face-area and face-area-integral of a given property. More... | |
| template<class Type > | |
| Tuple2< vector, AreaIntegralType< Type > > | faceAreaIntegral (const face &f, const pointField &ps, const Field< Type > &pPsis) |
| Compute the face-area and face-area-integral of a given property. More... | |
| template<template< class > class FaceValues, class ... Types> | |
| Tuple2< vector, std::tuple< Types ... > > | faceAreaAverage (const FaceValues< point > &fPs, const point &fPAvg, const std::tuple< FaceValues< Types > ... > &fPsis, const std::tuple< Types ... > &fPsiAvgs) |
| Compute the face-area and face-area-averages of the given properties. More... | |
| template<class Type > | |
| Tuple2< vector, Type > | faceAreaAverage (const face &f, const point &fPAvg, const Type &fPsiAvg, const pointField &ps, const Field< Type > &pPsis) |
| Compute the face-area and face-area-average of a given property. More... | |
| template<class Type > | |
| Tuple2< vector, Type > | faceAreaAverage (const face &f, const pointField &ps, const Field< Type > &pPsis) |
| Compute the face-area and face-area-average of a given property. More... | |
| template<class ... Types> | |
| Tuple2< vector, std::tuple< AreaIntegralType< Types > ... > > | faceCutAreaIntegral (const face &f, const vector &fArea, const std::tuple< Types ... > &fPsis, const List< labelPair > &fCuts, const pointField &ps, const std::tuple< const Field< Types > &... > &pPsis, const scalarField &pAlphas, const scalar isoAlpha, const bool below) |
| Compute the face-cut-area and face-cut-area-integral of the given properties. More... | |
| vector | faceCutArea (const face &f, const vector &fArea, const List< labelPair > &fCuts, const pointField &ps, const scalarField &pAlphas, const scalar isoAlpha, const bool below) |
| Compute the face-cut-area. More... | |
| template<class Type > | |
| Tuple2< vector, AreaIntegralType< Type > > | faceCutAreaIntegral (const face &f, const vector &fArea, const Type &fPsi, const List< labelPair > &fCuts, const pointField &ps, const Field< Type > &pPsis, const scalarField &pAlphas, const scalar isoAlpha, const bool below) |
| Compute the face-cut-area and face-cut-area-integral of the given property. More... | |
| template<class ... Types> | |
| Tuple2< scalar, std::tuple< Types ... > > | cellVolumeIntegral (const cell &c, const cellEdgeAddressing &cAddr, const point &cPAvg, const std::tuple< Types ... > &cPsiAvgs, const vectorField &fAreas, const pointField &fCentres, const std::tuple< const Field< Types > &... > &fPsis) |
| Compute the cell-volume and cell-volume-integrals of the given properties. More... | |
| scalar | cellVolume (const cell &c, const cellEdgeAddressing &cAddr, const point &cPAvg, const vectorField &fAreas, const pointField &fCentres) |
| Compute the cell-volume. More... | |
| scalar | cellVolume (const cell &c, const cellEdgeAddressing &cAddr, const vectorField &fAreas, const pointField &fCentres) |
| Compute the cell-volume. More... | |
| template<class Type > | |
| Tuple2< scalar, Type > | cellVolumeIntegral (const cell &c, const cellEdgeAddressing &cAddr, const point &cPAvg, const Type &cPsiAvg, const vectorField &fAreas, const pointField &fCentres, const Field< Type > &fPsis) |
| Compute the cell-volume and cell-volume-integrals of the given property. More... | |
| template<class Type > | |
| Tuple2< scalar, Type > | cellVolumeIntegral (const cell &c, const cellEdgeAddressing &cAddr, const vectorField &fAreas, const pointField &fCentres, const Field< Type > &fPsis) |
| Compute the cell-volume and cell-volume-integrals of the given property. More... | |
| template<class ... Types> | |
| Tuple2< scalar, std::tuple< Types ... > > | cellCutVolumeIntegral (const cell &c, const cellEdgeAddressing &cAddr, const scalar cVolume, const std::tuple< Types ... > &cPsis, const labelListList &cCuts, const faceUList &fs, const vectorField &fAreas, const pointField &fCentres, const std::tuple< const Field< Types > &... > &fPsis, const vectorField &fCutAreas, const std::tuple< const Field< Types > &... > &fCutPsis, const pointField &ps, const std::tuple< const Field< Types > &... > &pPsis, const scalarField &pAlphas, const scalar isoAlpha, const bool below) |
| Compute the cell-cut-volume and cell-cut-volume-integral. More... | |
| scalar | cellCutVolume (const cell &c, const cellEdgeAddressing &cAddr, const scalar cVolume, const labelListList &cCuts, const faceUList &fs, const vectorField &fAreas, const pointField &fCentres, const vectorField &fCutAreas, const pointField &ps, const scalarField &pAlphas, const scalar isoAlpha, const bool below) |
| Compute the cell-cut-volume. More... | |
| template<class Type > | |
| Tuple2< scalar, Type > | cellCutVolumeIntegral (const cell &c, const cellEdgeAddressing &cAddr, const scalar cVolume, const Type &cPsi, const labelListList &cCuts, const faceUList &fs, const vectorField &fAreas, const pointField &fCentres, const Field< Type > &fPsis, const vectorField &fCutAreas, const Field< Type > &fCutPsis, const pointField &ps, const Field< Type > &pPsis, const scalarField &pAlphas, const scalar isoAlpha, const bool below) |
| Compute the cell-cut-volume and cell-cut-volume-integral. More... | |
| template<class Tuple , class Int , Int ... Is> | |
| auto | tupleSubset (const Tuple &tuple, const std::integer_sequence< Int, Is ... > &) |
| template<class Op , class Tuple , class Int , Int ... Is> | |
| auto | tupleSubset (const Tuple &tuple, const std::integer_sequence< Int, Is ... > &, const Op &op) |
| template<class ... Types> | |
| auto | tupleTail (const std::tuple< Types ... > &tuple) |
| template<class Op , class ... Types> | |
| auto | tupleOp (const std::tuple< Types ... > &tuple, const Op &op) |
| template<class Op , class Tuple , class Int , Int ... Is> | |
| void | tupleInPlaceOp (Tuple &tuple, const std::integer_sequence< Int, Is ... > &, const Op &op) |
| template<class Op , class ... Types> | |
| void | tupleInPlaceOp (std::tuple< Types ... > &tuple, const Op &op) |
| template<class BinaryOp , class Tuple , class Int , Int ... Is> | |
| auto | tupleBinaryOp (const Tuple &tupleA, const Tuple &tupleB, const std::integer_sequence< Int, Is ... > &, const BinaryOp &bop) |
| template<class BinaryOp , class ... TypesA, class ... TypesB> | |
| auto | tupleBinaryOp (const std::tuple< TypesA ... > &tupleA, const std::tuple< TypesB ... > &tupleB, const BinaryOp &bop) |
| scalar | edgeCutLambda (const edge &e, const scalarField &pAlphas, const scalar isoAlpha) |
| Get the local coordinate within an edge, given end point values and an. More... | |
| template<class Type > | |
| Type | edgeCutValue (const edge &e, const scalar lambda, const Field< Type > &pPsis) |
| Linearly interpolate a value from the end points to the cut point of an. More... | |
| template<class Type > | |
| Type | edgeCutValue (const edge &e, const scalarField &pAlphas, const scalar isoAlpha, const Field< Type > &pPsis) |
| Linearly interpolate a value from the end points to the cut point of an. More... | |
Variables | |
| static const bool | separatedBelow = true |
| This flag determines which side of the iso-surface is separated into. More... | |
Low level functions for cutting poly faces and cells.
Functions and classes for extracting values from cut edges, faces and cells.
Functions for computing integrals over cut faces and cells.
Cutting a face using an iso-surface defined at the points is done by walking around the face. A start point is chosen and then the walk proceeds until a "cut" edge is found with points on either side of the iso-surface. This edge is noted and the walk continues until another cut edge is found. These two edge cuts, along with all points in-between, form a sub-face on one side of the iso-surface. This algorithm continues around the entire face, potentially cutting off multiple sub-faces. The remainder is a single contiguous face on the other side of the iso-surface.
Cutting a cell is then done by walking from cut-edge to cut-edge around the cell's faces.
| using AreaIntegralType = typename Foam::outerProduct<Foam::vector, Type>::type |
Definition for the type of a face-area-integral.
Definition at line 50 of file cutPolyIntegral.H.
| Foam::List< Foam::labelPair > faceCuts | ( | const face & | f, |
| const scalarField & | pAlphas, | ||
| const scalar | isoAlpha | ||
| ) |
Return the cuts for a given face. This returns a list of pairs of.
face-edge indices. Both edges in the pair are cut, and connecting these cuts creates an edge of the iso-surface.
Definition at line 60 of file cutPoly.C.
References DynamicList< T, SizeInc, SizeMult, SizeDiv >::append(), Foam::exit(), f(), Foam::FatalError, FatalErrorInFunction, forAll, UList< T >::last(), Foam::max(), Foam::min(), separatedBelow, and DynamicList< T, SizeInc, SizeMult, SizeDiv >::shrink().
Referenced by faceCutData::cache(), and cutPolyIsoSurface::cutPolyIsoSurface().


| Foam::labelListList cellCuts | ( | const cell & | c, |
| const cellEdgeAddressing & | cAddr, | ||
| const faceUList & | fs, | ||
| const List< List< labelPair >> & | fCuts, | ||
| const scalarField & | pAlphas, | ||
| const scalar | isoAlpha | ||
| ) |
Return the cuts for a given cell. This returns a list of lists of cell-edge.
indices. Each sub-list represents a single closed loop of cell-edges. The edges listed are all cut, and connecting these cuts up creates a face of the iso-surface.
Definition at line 120 of file cutPoly.C.
References DynamicList< T, SizeInc, SizeMult, SizeDiv >::append(), Foam::constant::universal::c, cellEdgeAddressing::ceiToCfiAndFei(), cellEdgeAddressing::cfiAndFeiToCei(), cellEdgeAddressing::cOwns(), Foam::exit(), Foam::FatalError, FatalErrorInFunction, Pair< Type >::first(), forAll, found, UList< T >::last(), Pair< Type >::second(), DynamicList< T, SizeInc, SizeMult, SizeDiv >::shrink(), and UList< T >::size().
Referenced by cutPolyIsoSurface::cutPolyIsoSurface().


| void writeFaceCuts | ( | const face & | f, |
| const List< labelPair > & | fCuts, | ||
| const pointField & | ps, | ||
| const scalarField & | pAlphas, | ||
| const scalar | isoAlpha, | ||
| OBJstream & | obj | ||
| ) |
Write the cuts for a given face to an OBJ file.
Definition at line 244 of file cutPoly.C.
References Foam::constant::electromagnetic::e, edgeCutValue(), f(), forAll, and OBJstream::write().

| void writeCellCuts | ( | const cell & | c, |
| const cellEdgeAddressing & | cAddr, | ||
| const List< List< label >> & | cCuts, | ||
| const faceList & | fs, | ||
| const pointField & | ps, | ||
| const scalarField & | pAlphas, | ||
| const scalar | isoAlpha, | ||
| OBJstream & | obj | ||
| ) |
Write the cuts for a given cell to an OBJ file.
Definition at line 270 of file cutPoly.C.
References Foam::constant::universal::c, cellEdgeAddressing::ceiToCfiAndFei(), Foam::constant::electromagnetic::e, edgeCutValue(), forAll, Foam::identityMap(), and OBJstream::write().

| Tuple2<vector, std::tuple<AreaIntegralType<Types> ...> > Foam::cutPoly::faceAreaIntegral | ( | const FaceValues< point > & | fPs, |
| const point & | fPAvg, | ||
| const std::tuple< FaceValues< Types > ... > & | fPsis, | ||
| const std::tuple< Types ... > & | fPsiAvgs | ||
| ) |
Compute the face-area and face-area-integrals of the given properties.
Referenced by faceArea().

|
inline |
Compute the face-area.
Definition at line 277 of file cutPolyIntegralI.H.
References f(), and faceAreaIntegral().
Referenced by faceArea().


|
inline |
Compute the face-area.
Definition at line 295 of file cutPolyIntegralI.H.
References f(), and faceArea().

|
inline |
Compute the face-area and face-area-integral of a given property.
|
inline |
Compute the face-area and face-area-integral of a given property.
| Tuple2<vector, std::tuple<Types ...> > Foam::cutPoly::faceAreaAverage | ( | const FaceValues< point > & | fPs, |
| const point & | fPAvg, | ||
| const std::tuple< FaceValues< Types > ... > & | fPsis, | ||
| const std::tuple< Types ... > & | fPsiAvgs | ||
| ) |
Compute the face-area and face-area-averages of the given properties.
Referenced by faceFsData::cache().

|
inline |
Compute the face-area and face-area-average of a given property.
|
inline |
Compute the face-area and face-area-average of a given property.
| Tuple2<vector, std::tuple<AreaIntegralType<Types> ...> > Foam::cutPoly::faceCutAreaIntegral | ( | const face & | f, |
| const vector & | fArea, | ||
| const std::tuple< Types ... > & | fPsis, | ||
| const List< labelPair > & | fCuts, | ||
| const pointField & | ps, | ||
| const std::tuple< const Field< Types > &... > & | pPsis, | ||
| const scalarField & | pAlphas, | ||
| const scalar | isoAlpha, | ||
| const bool | below | ||
| ) |
Compute the face-cut-area and face-cut-area-integral of the given properties.
Referenced by faceFsData::cache(), and faceCutArea().

|
inline |
Compute the face-cut-area.
Definition at line 409 of file cutPolyIntegralI.H.
References f(), and faceCutAreaIntegral().
Referenced by faceCutData::cache().


|
inline |
Compute the face-cut-area and face-cut-area-integral of the given property.
| Tuple2<scalar, std::tuple<Types ...> > Foam::cutPoly::cellVolumeIntegral | ( | const cell & | c, |
| const cellEdgeAddressing & | cAddr, | ||
| const point & | cPAvg, | ||
| const std::tuple< Types ... > & | cPsiAvgs, | ||
| const vectorField & | fAreas, | ||
| const pointField & | fCentres, | ||
| const std::tuple< const Field< Types > &... > & | fPsis | ||
| ) |
Compute the cell-volume and cell-volume-integrals of the given properties.
Referenced by cellVolume().

|
inline |
Compute the cell-volume.
Definition at line 474 of file cutPolyIntegralI.H.
References Foam::constant::universal::c, and cellVolumeIntegral().
Referenced by cellVolume(), and cellPointWeight::findTetrahedron().


|
inline |
Compute the cell-volume.
Definition at line 497 of file cutPolyIntegralI.H.
References Foam::constant::universal::c, and cellVolume().

|
inline |
Compute the cell-volume and cell-volume-integrals of the given property.
|
inline |
Compute the cell-volume and cell-volume-integrals of the given property.
| Tuple2<scalar, std::tuple<Types ...> > Foam::cutPoly::cellCutVolumeIntegral | ( | const cell & | c, |
| const cellEdgeAddressing & | cAddr, | ||
| const scalar | cVolume, | ||
| const std::tuple< Types ... > & | cPsis, | ||
| const labelListList & | cCuts, | ||
| const faceUList & | fs, | ||
| const vectorField & | fAreas, | ||
| const pointField & | fCentres, | ||
| const std::tuple< const Field< Types > &... > & | fPsis, | ||
| const vectorField & | fCutAreas, | ||
| const std::tuple< const Field< Types > &... > & | fCutPsis, | ||
| const pointField & | ps, | ||
| const std::tuple< const Field< Types > &... > & | pPsis, | ||
| const scalarField & | pAlphas, | ||
| const scalar | isoAlpha, | ||
| const bool | below | ||
| ) |
Compute the cell-cut-volume and cell-cut-volume-integral.
of the given properties
Referenced by cellCutVolume().

|
inline |
Compute the cell-cut-volume.
Definition at line 574 of file cutPolyIntegralI.H.
References Foam::constant::universal::c, and cellCutVolumeIntegral().

|
inline |
Compute the cell-cut-volume and cell-cut-volume-integral.
of the given property
| auto Foam::cutPoly::tupleSubset | ( | const Tuple & | tuple, |
| const std::integer_sequence< Int, Is ... > & | |||
| ) |
Definition at line 62 of file cutPolyIntegralTemplates.C.
Referenced by tupleOp(), and tupleTail().

| auto Foam::cutPoly::tupleSubset | ( | const Tuple & | tuple, |
| const std::integer_sequence< Int, Is ... > & | , | ||
| const Op & | op | ||
| ) |
Definition at line 73 of file cutPolyIntegralTemplates.C.
| auto Foam::cutPoly::tupleTail | ( | const std::tuple< Types ... > & | tuple | ) |
Definition at line 85 of file cutPolyIntegralTemplates.C.
References tupleSubset(), and Foam::type().

| auto Foam::cutPoly::tupleOp | ( | const std::tuple< Types ... > & | tuple, |
| const Op & | op | ||
| ) |
Definition at line 97 of file cutPolyIntegralTemplates.C.
References tupleSubset().

| void Foam::cutPoly::tupleInPlaceOp | ( | Tuple & | tuple, |
| const std::integer_sequence< Int, Is ... > & | , | ||
| const Op & | op | ||
| ) |
Definition at line 110 of file cutPolyIntegralTemplates.C.
Referenced by tupleInPlaceOp().

| void Foam::cutPoly::tupleInPlaceOp | ( | std::tuple< Types ... > & | tuple, |
| const Op & | op | ||
| ) |
Definition at line 126 of file cutPolyIntegralTemplates.C.
References tupleInPlaceOp().

| auto Foam::cutPoly::tupleBinaryOp | ( | const Tuple & | tupleA, |
| const Tuple & | tupleB, | ||
| const std::integer_sequence< Int, Is ... > & | , | ||
| const BinaryOp & | bop | ||
| ) |
Definition at line 133 of file cutPolyIntegralTemplates.C.
Referenced by tupleBinaryOp().

| auto Foam::cutPoly::tupleBinaryOp | ( | const std::tuple< TypesA ... > & | tupleA, |
| const std::tuple< TypesB ... > & | tupleB, | ||
| const BinaryOp & | bop | ||
| ) |
Definition at line 146 of file cutPolyIntegralTemplates.C.
References tupleBinaryOp().

|
inline |
Get the local coordinate within an edge, given end point values and an.
iso-value
Definition at line 30 of file cutPolyValueI.H.
References Foam::constant::electromagnetic::e.
Referenced by cutPolyIsoSurface::cutPolyIsoSurface(), and edgeCutValue().

Linearly interpolate a value from the end points to the cut point of an.
edge, given a local coordinate within the edge
Definition at line 31 of file cutPolyValueTemplates.C.
References Foam::constant::electromagnetic::e, and lambda().
Referenced by cutPolyIsoSurface::cutPolyIsoSurface(), edgeCutValue(), cutPolyIsoSurface::interpolate(), writeCellCuts(), and writeFaceCuts().


| Type edgeCutValue | ( | const edge & | e, |
| const scalarField & | pAlphas, | ||
| const scalar | isoAlpha, | ||
| const Field< Type > & | pPsis | ||
| ) |
Linearly interpolate a value from the end points to the cut point of an.
edge, given end point values and an iso-value
Definition at line 43 of file cutPolyValueTemplates.C.
References Foam::constant::electromagnetic::e, edgeCutLambda(), and edgeCutValue().

|
static |
This flag determines which side of the iso-surface is separated into.
multiple sub-faces, and which side is kept as the central contiguous face
Definition at line 65 of file cutPoly.H.
Referenced by faceCuts(), and FaceCutValues< Type >::const_iterator::next().