Swept face area weighted Arbitrary Mesh Interface (AMI) method. More...
Public Member Functions  
TypeName ("sweptFaceAreaWeightAMI")  
Runtime type information. More...  
virtual  ~sweptFaceAreaWeightAMI () 
Destructor. More...  
Public Member Functions inherited from faceAreaWeightAMI  
TypeName ("faceAreaWeightAMI")  
Runtime type information. More...  
faceAreaWeightAMI (const primitivePatch &srcPatch, const primitivePatch &tgtPatch, const scalarField &srcMagSf, const scalarField &tgtMagSf, const faceAreaIntersect::triangulationMode &triMode, const bool reverseTarget=false, const bool requireMatch=true, const bool restartUncoveredSourceFace=true)  
Construct from components. More...  
faceAreaWeightAMI (const faceAreaWeightAMI &)=delete  
Disallow default bitwise copy construction. More...  
virtual  ~faceAreaWeightAMI () 
Destructor. More...  
virtual void  calculate (labelListList &srcAddress, scalarListList &srcWeights, labelListList &tgtAddress, scalarListList &tgtWeights, label srcFacei=1, label tgtFacei=1) 
Update addressing and weights. More...  
void  operator= (const faceAreaWeightAMI &)=delete 
Disallow default bitwise assignment. More...  
Public Member Functions inherited from AMIMethod  
TypeName ("AMIMethod")  
Runtime type information. More...  
declareRunTimeSelectionTable (autoPtr, AMIMethod, components,(const primitivePatch &srcPatch, const primitivePatch &tgtPatch, const scalarField &srcMagSf, const scalarField &tgtMagSf, const faceAreaIntersect::triangulationMode &triMode, const bool reverseTarget, const bool requireMatch),(srcPatch, tgtPatch, srcMagSf, tgtMagSf, triMode, reverseTarget, requireMatch))  
Declare runtime constructor selection table. More...  
AMIMethod (const primitivePatch &srcPatch, const primitivePatch &tgtPatch, const scalarField &srcMagSf, const scalarField &tgtMagSf, const faceAreaIntersect::triangulationMode &triMode, const bool reverseTarget, const bool requireMatch)  
Construct from components. More...  
AMIMethod (const AMIMethod &)=delete  
Disallow default bitwise copy construction. More...  
virtual  ~AMIMethod () 
Destructor. More...  
const labelList &  srcNonOverlap () const 
Labels of faces that are not overlapped by any target faces. More...  
virtual bool  conformal () const 
Flag to indicate that interpolation patches are conformal. More...  
void  operator= (const AMIMethod &)=delete 
Disallow default bitwise assignment. More...  
Protected Member Functions  
virtual scalar  interArea (const label srcFacei, const label tgtFacei) const 
Area of intersection between source and target faces. More...  
Protected Member Functions inherited from faceAreaWeightAMI  
virtual void  calcAddressing (List< DynamicList< label >> &srcAddress, List< DynamicList< scalar >> &srcWeights, List< DynamicList< label >> &tgtAddress, List< DynamicList< scalar >> &tgtWeights, label srcFacei, label tgtFacei) 
Calculate addressing and weights using temporary storage. More...  
virtual bool  processSourceFace (const label srcFacei, const label tgtStartFacei, DynamicList< label > &nbrFaces, DynamicList< label > &visitedFaces, List< DynamicList< label >> &srcAddr, List< DynamicList< scalar >> &srcWght, List< DynamicList< label >> &tgtAddr, List< DynamicList< scalar >> &tgtWght) 
Determine overlap contributions for source face srcFacei. More...  
virtual void  restartUncoveredSourceFace (List< DynamicList< label >> &srcAddr, List< DynamicList< scalar >> &srcWght, List< DynamicList< label >> &tgtAddr, List< DynamicList< scalar >> &tgtWght) 
Attempt to reevaluate source faces that have not been included. More...  
virtual void  setNextFaces (label &startSeedI, label &srcFacei, label &tgtFacei, const boolList &mapFlag, labelList &seedFaces, const DynamicList< label > &visitedFaces, bool errorOnNotFound=true) const 
Set the source and target seed faces. More...  
Protected Member Functions inherited from AMIMethod  
void  checkPatches () const 
Check AMI patch coupling. More...  
bool  initialise (labelListList &srcAddress, scalarListList &srcWeights, labelListList &tgtAddress, scalarListList &tgtWeights, label &srcFacei, label &tgtFacei) 
Initialise and return true if all ok. More...  
void  writeIntersectionOBJ (const scalar area, const face &f1, const face &f2, const pointField &f1Points, const pointField &f2Points) const 
Write triangle intersection to OBJ file. More...  
void  resetTree () 
Reset the octree for the target patch face search. More...  
label  findTargetFace (const label srcFacei) const 
Find face on target patch that overlaps source face. More...  
void  appendNbrFaces (const label facei, const primitivePatch &patch, const DynamicList< label > &visitedFaces, DynamicList< label > &faceIDs) const 
Add faces neighbouring facei to the ID list. More...  
Additional Inherited Members  
Static Public Member Functions inherited from AMIMethod  
static autoPtr< AMIMethod >  New (const word &methodName, const primitivePatch &srcPatch, const primitivePatch &tgtPatch, const scalarField &srcMagSf, const scalarField &tgtMagSf, const faceAreaIntersect::triangulationMode &triMode, const bool reverseTarget, const bool requireMatch) 
Selector. More...  
Protected Types inherited from AMIMethod  
typedef treeDataPrimitivePatch< primitivePatch >  treeType 
Local typedef to octree treetype. More...  
Protected Attributes inherited from AMIMethod  
const primitivePatch &  srcPatch_ 
Reference to source patch. More...  
const primitivePatch &  tgtPatch_ 
Reference to target patch. More...  
const bool  reverseTarget_ 
Flag to indicate that the two patches are codirectional and. More...  
const bool  requireMatch_ 
Flag to indicate that the two patches must be matched/an overlap. More...  
const scalarField &  srcMagSf_ 
Source face areas. More...  
const scalarField &  tgtMagSf_ 
Target face areas. More...  
labelList  srcNonOverlap_ 
Labels of faces that are not overlapped by any target faces. More...  
autoPtr< indexedOctree< treeType > >  treePtr_ 
Octree used to find face seeds. More...  
const faceAreaIntersect::triangulationMode  triMode_ 
Face triangulation mode. More...  
Swept face area weighted Arbitrary Mesh Interface (AMI) method.
This method uses the point normals of the source patch to sweep the source faces over the target patches. This creates a projection which fills space, and which therefore generates overlap areas which are consistent between neighbouring faces. The projection of a source edge is shown below:
/ / n_1 ^ / / p_1 o \\ ^ u \\ \ \\ +  > v o    >    p_0 n_0
The surface is, in general, not flat. Any deviation between the two end normals generates expansion, contraction, and twist in the surface. The surface connects with surfaces emanating from connected edges along the end normals. This is what makes the projection fill space and generate consistent overlaps between neighbouring faces.
The projected surface is parameterised by the local coordinates, and , and a position on this plane is calculated from and as follows:
To calculate an intersection with a line between points to , we define a local coordinate, , along the line, and subtract it's equation from that of the surface:
This is a system of three equations in three unknowns. It is nonlinear, courtesy of the term at the end. It can be reduced to a single quadratic in any of the three variables. We choose to solve for by taking the dot product of the above equation with the following vector:
The sign of the intersection (i.e., whether the line crosses from below the surface to above or vice versa) can be determined by taking the dot product of the line vector with the surface normal at the intersection. The surface normal is as follows:
Definition at line 103 of file sweptFaceAreaWeightAMI.H.

virtual 
Destructor.
Definition at line 591 of file sweptFaceAreaWeightAMI.C.
Area of intersection between source and target faces.
Reimplemented from faceAreaWeightAMI.
Definition at line 358 of file sweptFaceAreaWeightAMI.C.
References Foam::degToRad(), Foam::endl(), forAllConstIter(), Foam::Info, faceAreaWeightAMI::interArea(), Foam::mag(), Foam::name(), Foam::Swap(), faceAreaIntersect::triangulate(), Foam::triCut(), Foam::Zero, and VectorSpace< Vector< scalar >, scalar, 3 >::zero.
TypeName  (  "sweptFaceAreaWeightAMI"  ) 
Runtime type information.