MAIA bb96820c
Multiphysics at AIA
Loading...
Searching...
No Matches
LsLbSurface< nDim, nDist, SysEqn > Class Template Reference

#include <lslbsurface.h>

Inheritance diagram for LsLbSurface< nDim, nDist, SysEqn >:
[legend]
Collaboration diagram for LsLbSurface< nDim, nDist, SysEqn >:
[legend]

Classes

struct  ConversionFactors
 
struct  Timers
 

Public Types

using LsSolver = LsCartesianSolver< nDim >
 
using LbSolver = LbSolverDxQy< nDim, nDist, SysEqn >
 
using CouplingLs = CouplingLS< nDim >
 
using CouplingLb = CouplingLB< nDim, nDist, SysEqn >
 
- Public Types inherited from CouplingLS< nDim >
using solverType = LsCartesianSolver< nDim >
 
- Public Types inherited from CouplingLB< nDim, nDist, SysEqn >
using solverType = LbSolverDxQy< nDim, nDist, SysEqn >
 
using LbBndCnd = LbBndCndDxQy< nDim, nDist, SysEqn >
 
using MbCellCollector = maia::lb::collector::LbMbCellCollector< nDim >
 

Public Member Functions

 LsLbSurface (MInt couplingId, LsSolver *ls, LbSolver *lb)
 
 ~LsLbSurface ()
 
void init () override
 
void finalizeSubCoupleInit (MInt) override
 
void finalizeCouplerInit () override
 
void preCouple (MInt) override
 
void subCouple (MInt, MInt, std::vector< MBool > &) override
 
void postCouple (MInt recipeStep=0) override
 
void cleanUp () override
 
void reinitAfterBalance ()
 
MInt ls2lbId (MInt)
 
MInt lb2lsId (MInt)
 
MInt ls2lbIdParent (MInt)
 
MInt lb2lsIdParent (MInt)
 
void updateBoundaryCellsFromGField ()
 
void refillEmergedCells ()
 
void interpolateCurvature (MFloatScratchSpace &curvature)
 
void interpolateNormal ()
 
void evaluateContour ()
 
void bc3060 (MInt)
 
void transferLevelSetFieldValues (MBool)
 
void setExtensionVelocity ()
 
void setExtensionVelocityB ()
 
void computeGCellTimeStep ()
 
MInt a_bodyIdG (const MInt cellId, const MInt set) const
 
MInta_bodyIdG (const MInt cellId, const MInt set)
 
MInt a_bodyToSet (const MInt bodyId) const
 
MFloat a_coordinateG (const MInt gCellId, const MInt dim) const
 
MFloat a_curvatureG (const MInt gCellId, const MInt set) const
 
MFloata_extensionVelocityG (const MInt cellId, const MInt dim, const MInt setId)
 
MInt a_G0CellId (const MInt id, const MInt set) const
 
MFloata_levelSetFunctionG (const MInt cellId, const MInt setId)
 
MInt a_noEmbeddedBodies () const
 
MInt a_noG0Cells (MInt set) const
 
MInt a_noLsCells () const
 
MFloat a_normalVectorG (const MInt gCellId, const MInt dim, const MInt set) const
 
MInt a_noSets () const
 
MFloat a_outsideGValue () const
 
solverTypelsSolver () const
 
MInta_associatedBodyIdsMb (const MInt cellId, const MInt set, const MInt id=0)
 
MInt a_associatedBodyIdsMb (const MInt cellId, const MInt set, const MInt id=0) const
 
MInt a_boundaryCellMb (const MInt cellId, const MInt id=0)
 
MFloat a_cellLengthAtLevel (MInt level, const MInt id=0)
 
MInt a_childId (const MInt cellId, const MInt child, const MInt id=0)
 
MBool a_isActive (const MInt cellId, const MInt id=0) const
 
MFloata_levelSetFunctionMb (const MInt cellId, const MInt set, const MInt id=0)
 
MFloat a_levelSetFunctionMb (const MInt cellId, const MInt set, const MInt id=0) const
 
MFloat a_Ma (const MInt id=0) const
 
MbCellCollectora_mbCell (const MInt id=0)
 
MInt a_noCells (const MInt id=0) const
 
MInt a_noDistributions (const MInt id=0) const
 
MInt a_noEmbeddedBodiesLB (const MInt id=0) const
 
MInt a_noLbCells (const MInt id=0) const
 
MInt a_noLevelSetsMb (const MInt id=0) const
 
MInt a_noVariables (const MInt id=0) const
 
MFloata_oldVariable (const MInt cellId, const MInt varId, const MInt id=0)
 
MInt a_parentId (const MInt cellId, const MInt id=0)
 
MFloat a_Re (const MInt id=0) const
 
MFloata_variable (const MInt cellId, const MInt varId, const MInt id=0)
 
MBool a_wasActive (const MInt cellId, const MInt id=0) const
 
LbBndCndlbBndCnd (const MInt id=0)
 
solverTypelbSolver (const MInt solverId=0) const
 
MInt minCell (const MInt index, const MInt id=0) const
 
MInt noMinCells (const MInt id=0) const
 
- Public Member Functions inherited from CouplingLS< nDim >
 CouplingLS (const MInt couplingId, solverType *b)
 
solverTypelsSolver () const
 
MInt a_noLsCells () const
 
MFloat a_outsideGValue () const
 
MInt a_noG0Cells (MInt set) const
 
MInt a_noBandCells (MInt set) const
 
MInt a_maxGCellLevel (const MInt setId) const
 
MFloata_levelSetFunctionG (const MInt cellId, const MInt setId)
 
MInt a_bodyIdG (const MInt cellId, const MInt set) const
 
MInta_bodyIdG (const MInt cellId, const MInt set)
 
MFloat a_coordinateG (const MInt gCellId, const MInt dim) const
 
MInt a_G0CellId (const MInt id, const MInt set) const
 
MFloat a_normalVectorG (const MInt gCellId, const MInt dim, const MInt set) const
 
MFloat a_curvatureG (const MInt gCellId, const MInt set) const
 
MBool a_inBandG (MInt gcellId, MInt set) const
 
MInt a_potentialGapCellClose (MInt gcellId) const
 
MBool a_nearGapG (const MInt gcellId) const
 
MInt a_bodyToSet (const MInt bodyId) const
 
MInt a_noEmbeddedBodies () const
 
MInt a_noSets () const
 
MInt a_maxnoSets () const
 
MInt a_startSet () const
 
MFloata_extensionVelocityG (const MInt cellId, const MInt dim, const MInt setId)
 
- Public Member Functions inherited from Coupling
 Coupling (const MInt couplingId)
 
virtual ~Coupling ()=default
 
 Coupling (const Coupling &)=delete
 
Couplingoperator= (const Coupling &)=delete
 
MInt couplerId () const
 
virtual void init ()=0
 
virtual void finalizeSubCoupleInit (MInt solverId)=0
 
virtual void finalizeCouplerInit ()=0
 
virtual void preCouple (MInt recipeStep)=0
 
virtual void subCouple (MInt recipeStep, MInt solverId, std::vector< MBool > &solverCompleted)=0
 
virtual void postCouple (MInt recipeStep)=0
 
virtual void cleanUp ()=0
 
virtual void balancePre ()
 Load balancing. More...
 
virtual void balancePost ()
 
virtual void reinitAfterBalance ()
 
virtual void prepareAdaptation ()
 
virtual void postAdaptation ()
 
virtual void finalizeAdaptation (const MInt)
 
virtual void writeRestartFile (const MInt)
 
virtual MInt noCellDataDlb () const
 Methods to inquire coupler data during balancing. More...
 
virtual MInt cellDataTypeDlb (const MInt NotUsed(dataId)) const
 
virtual MInt cellDataSizeDlb (const MInt NotUsed(dataId), const MInt NotUsed(cellId))
 
virtual void getCellDataDlb (const MInt NotUsed(dataId), const MInt NotUsed(oldNoCells), const MInt *const NotUsed(bufferIdToCellId), MInt *const NotUsed(data))
 
virtual void getCellDataDlb (const MInt NotUsed(dataId), const MInt NotUsed(oldNoCells), const MInt *const NotUsed(bufferIdToCellId), MLong *const NotUsed(data))
 
virtual void getCellDataDlb (const MInt NotUsed(dataId), const MInt NotUsed(oldNoCells), const MInt *const NotUsed(bufferIdToCellId), MFloat *const NotUsed(data))
 
virtual void setCellDataDlb (const MInt NotUsed(dataId), const MInt *const NotUsed(data))
 
virtual void setCellDataDlb (const MInt NotUsed(dataId), const MLong *const NotUsed(data))
 
virtual void setCellDataDlb (const MInt NotUsed(dataId), const MFloat *const NotUsed(data))
 
virtual void finalizeBalance (const MInt)
 
virtual MInt noCouplingTimers (const MBool NotUsed(allTimings)) const
 Number of coupling timers. More...
 
virtual void getCouplingTimings (std::vector< std::pair< MString, MFloat > > &NotUsed(timings), const MBool NotUsed(allTimings))
 Return coupling timings. More...
 
virtual void getDomainDecompositionInformation (std::vector< std::pair< MString, MInt > > &NotUsed(domainInfo))
 Return information on current domain decomposition (e.g. number of coupled cells/elements/...) More...
 
void setDlbTimer (const MInt timerId)
 
void startLoadTimer (const MString &name) const
 Start the load timer of the coupler. More...
 
void stopLoadTimer (const MString &name) const
 Stop the load timer of the coupler. More...
 
- Public Member Functions inherited from CouplingLB< nDim, nDist, SysEqn >
 CouplingLB (const MInt couplingId, Solver *solvers, const MInt noSolvers=1)
 
 CouplingLB (const MInt couplingId, std::vector< solverType * > solvers)
 
MFloat a_physicalTime () const
 
MFloat lsTimeStep () const
 
MInt a_RKStep () const
 
MInt a_noLbCells (const MInt id=0) const
 
MInt a_noLevelSetsMb (const MInt id=0) const
 
MFloat a_Ma (const MInt id=0) const
 
MFloat a_Re (const MInt id=0) const
 
MInt a_pvu (const MInt id=0) const
 
MInt a_pvv (const MInt id=0) const
 
MInt a_pvw (const MInt id=0) const
 
MInt a_pvrho (const MInt id=0) const
 
MInt a_pvt (const MInt id=0) const
 
MInt a_isThermal (const MInt id=0) const
 
MInt a_noDistributions (const MInt id=0) const
 
MFloat a_initTemperatureKelvin (const MInt id=0) const
 
MFloat a_time () const
 
MbCellCollectora_mbCell (const MInt id=0)
 
MInt a_boundaryCellMb (const MInt cellId, const MInt id=0)
 
MFloata_levelSetFunctionMb (const MInt cellId, const MInt set, const MInt id=0)
 
MFloat a_levelSetFunctionMb (const MInt cellId, const MInt set, const MInt id=0) const
 
MInta_associatedBodyIdsMb (const MInt cellId, const MInt set, const MInt id=0)
 
MInt a_associatedBodyIdsMb (const MInt cellId, const MInt set, const MInt id=0) const
 
MInt a_parentId (const MInt cellId, const MInt id=0)
 
MInt a_childId (const MInt cellId, const MInt child, const MInt id=0)
 
MInt minCell (const MInt index, const MInt id=0) const
 
MInt noMinCells (const MInt id=0) const
 
MInt a_noCells (const MInt id=0) const
 
MFloat a_cellLengthAtLevel (MInt level, const MInt id=0)
 
MInt a_noEmbeddedBodiesLB (const MInt id=0) const
 
MBool a_isActive (const MInt cellId, const MInt id=0) const
 
MBool a_wasActive (const MInt cellId, const MInt id=0) const
 
MInt a_noVariables (const MInt id=0) const
 
MFloata_variable (const MInt cellId, const MInt varId, const MInt id=0)
 
MFloata_oldVariable (const MInt cellId, const MInt varId, const MInt id=0)
 
MInt a_bndCellId (const MInt bndCell, const MInt id=0)
 
MInt a_noBndCells (const MInt id=0)
 

Public Attributes

MInt m_lbSolverId {}
 
MInt m_lsSolverId {}
 
MBool m_static_updateLevelSetFlowSolver_firstRun = true
 

Static Public Attributes

static constexpr MInt m_noCorners = (nDim == 2) ? 4 : 8
 

Private Member Functions

void initData ()
 Initialize coupling-class-specific Data. More...
 
void initTimers ()
 
void checkProperties ()
 Checks property-data which is read in by both ls-and Lb-Solver. More...
 
void readProperties ()
 reads lsfvmb-coupling-specific data More...
 
void updateGeometry ()
 Updates the member-variables in the geometry-intersection class. More...
 

Private Attributes

MBool m_calcWallForces {}
 
ConversionFactors conversionLsLb
 
ConversionFactors conversionLbLs
 
MFloat m_surfaceTension = 0.0
 
MFloat m_gravity {}
 
MFloat m_Ga = 0.0
 
MFloat m_Eo = 1.0
 
MFloat m_initCurvature = 0.0
 
MFloat m_initHeight = 0.0
 
std::array< MInt, Timers::_countm_timers
 
maia::coupling::Mapping bndryToVolumeMap {}
 
maia::coupling::Mapping volumeToBndryMap {}
 

Additional Inherited Members

- Protected Member Functions inherited from Coupling
MFloat returnLoadRecord () const
 
MFloat returnIdleRecord () const
 
- Protected Member Functions inherited from CouplingLB< nDim, nDist, SysEqn >
MInt noSolvers () const
 
solverTypelbSolver (const MInt solverId=0) const
 
LbBndCndlbBndCnd (const MInt id=0)
 

Detailed Description

template<MInt nDim, MInt nDist, class SysEqn>
class LsLbSurface< nDim, nDist, SysEqn >

Definition at line 27 of file lslbsurface.h.

Member Typedef Documentation

◆ CouplingLb

template<MInt nDim, MInt nDist, class SysEqn >
using LsLbSurface< nDim, nDist, SysEqn >::CouplingLb = CouplingLB<nDim, nDist, SysEqn>

Definition at line 33 of file lslbsurface.h.

◆ CouplingLs

template<MInt nDim, MInt nDist, class SysEqn >
using LsLbSurface< nDim, nDist, SysEqn >::CouplingLs = CouplingLS<nDim>

Definition at line 32 of file lslbsurface.h.

◆ LbSolver

template<MInt nDim, MInt nDist, class SysEqn >
using LsLbSurface< nDim, nDist, SysEqn >::LbSolver = LbSolverDxQy<nDim, nDist, SysEqn>

Definition at line 31 of file lslbsurface.h.

◆ LsSolver

template<MInt nDim, MInt nDist, class SysEqn >
using LsLbSurface< nDim, nDist, SysEqn >::LsSolver = LsCartesianSolver<nDim>

Definition at line 30 of file lslbsurface.h.

Constructor & Destructor Documentation

◆ LsLbSurface()

template<MInt nDim, MInt nDist, class SysEqn >
LsLbSurface< nDim, nDist, SysEqn >::LsLbSurface ( MInt  couplingId,
LsSolver ls,
LbSolver lb 
)

Definition at line 24 of file lslbsurface.cpp.

25 : Coupling(couplingId), CouplingLS<nDim>(couplingId, ls), CouplingLB<nDim, nDist, SysEqn>(couplingId, lb) {
26 TRACE();
27
28 // Init timers as the first action
29 initTimers();
30
32
33 initData();
34
36
38
39 RECORD_TIMER_STOP(m_timers[Timers::Constructor]);
40}
void initTimers()
Definition: lslbsurface.cpp:50
void initData()
Initialize coupling-class-specific Data.
Definition: lslbsurface.cpp:87
void readProperties()
reads lsfvmb-coupling-specific data
std::array< MInt, Timers::_count > m_timers
Definition: lslbsurface.h:133
void checkProperties()
Checks property-data which is read in by both ls-and Lb-Solver.
void updateGeometry()
Updates the member-variables in the geometry-intersection class.

◆ ~LsLbSurface()

template<MInt nDim, MInt nDist, class SysEqn >
LsLbSurface< nDim, nDist, SysEqn >::~LsLbSurface

Definition at line 43 of file lslbsurface.cpp.

43 {
44 TRACE();
45
46 RECORD_TIMER_STOP(m_timers[Timers::Class]);
47}

Member Function Documentation

◆ a_associatedBodyIdsMb() [1/2]

template<MInt nDim, MInt nDist, class SysEqn >
MInt & CouplingLB< nDim, nDist, SysEqn >::a_associatedBodyIdsMb ( const MInt  cellId,
const MInt  set,
const MInt  id = 0 
)
inline

Definition at line 498 of file coupling.h.

498 {
499 return lbSolver(id).a_associatedBodyIds(cellId, set);
500 }
solverType & lbSolver(const MInt solverId=0) const
Definition: coupling.h:454

◆ a_associatedBodyIdsMb() [2/2]

template<MInt nDim, MInt nDist, class SysEqn >
MInt CouplingLB< nDim, nDist, SysEqn >::a_associatedBodyIdsMb ( const MInt  cellId,
const MInt  set,
const MInt  id = 0 
) const
inline

Definition at line 502 of file coupling.h.

502 {
503 return lbSolver(id).a_associatedBodyIds(cellId, set);
504 }

◆ a_bodyIdG() [1/2]

template<MInt nDim, MInt nDist, class SysEqn >
MInt & CouplingLS< nDim >::a_bodyIdG ( const MInt  cellId,
const MInt  set 
)
inline

Definition at line 205 of file coupling.h.

205{ return lsSolver().a_bodyIdG(cellId, set); }
MInt & a_bodyIdG(const MInt cellId, const MInt set)
Returns bodyId of the cell cellId for set set.
solverType & lsSolver() const
Definition: coupling.h:188

◆ a_bodyIdG() [2/2]

template<MInt nDim, MInt nDist, class SysEqn >
MInt CouplingLS< nDim >::a_bodyIdG ( const MInt  cellId,
const MInt  set 
) const
inline

Definition at line 203 of file coupling.h.

203{ return lsSolver().a_bodyIdG(cellId, set); }

◆ a_bodyToSet()

template<MInt nDim, MInt nDist, class SysEqn >
MInt CouplingLS< nDim >::a_bodyToSet ( const MInt  bodyId) const
inline

Definition at line 220 of file coupling.h.

220{ return lsSolver().m_bodyToSetTable[bodyId]; }

◆ a_boundaryCellMb()

template<MInt nDim, MInt nDist, class SysEqn >
MInt CouplingLB< nDim, nDist, SysEqn >::a_boundaryCellMb ( const MInt  cellId,
const MInt  id = 0 
)
inline

Definition at line 487 of file coupling.h.

487{ return lbBndCnd(id).a_boundaryCellMb(cellId); }
MInt a_boundaryCellMb(const MInt cellId)
Definition: lbbndcnd.h:83
LbBndCnd & lbBndCnd(const MInt id=0)
Definition: coupling.h:461

◆ a_cellLengthAtLevel()

template<MInt nDim, MInt nDist, class SysEqn >
MFloat CouplingLB< nDim, nDist, SysEqn >::a_cellLengthAtLevel ( MInt  level,
const MInt  id = 0 
)
inline

Definition at line 518 of file coupling.h.

518{ return lbSolver(id).grid().cellLengthAtLevel(level); }
constexpr GridProxy & grid() const

◆ a_childId()

template<MInt nDim, MInt nDist, class SysEqn >
MInt CouplingLB< nDim, nDist, SysEqn >::a_childId ( const MInt  cellId,
const MInt  child,
const MInt  id = 0 
)
inline

Definition at line 508 of file coupling.h.

508 {
509 return lbSolver(id).c_childId(cellId, child);
510 }
MInt c_childId(const MInt gCellId, const MInt pos) const

◆ a_coordinateG()

template<MInt nDim, MInt nDist, class SysEqn >
MFloat CouplingLS< nDim >::a_coordinateG ( const MInt  gCellId,
const MInt  dim 
) const
inline

Definition at line 207 of file coupling.h.

207{ return lsSolver().c_coordinate(gCellId, dim); }
MFloat c_coordinate(const MInt gCellId, const MInt dim) const
Returns the coordinate of the cell cellId for direction dim.

◆ a_curvatureG()

template<MInt nDim, MInt nDist, class SysEqn >
MFloat CouplingLS< nDim >::a_curvatureG ( const MInt  gCellId,
const MInt  set 
) const
inline

Definition at line 215 of file coupling.h.

215{ return lsSolver().a_curvatureG(gCellId, set); }
MFloat & a_curvatureG(const MInt cellId, const MInt set)
Returns curvature of the cell cellId for set set.

◆ a_extensionVelocityG()

template<MInt nDim, MInt nDist, class SysEqn >
MFloat & CouplingLS< nDim >::a_extensionVelocityG ( const MInt  cellId,
const MInt  dim,
const MInt  setId 
)
inline

Definition at line 226 of file coupling.h.

226 {
227 return lsSolver().a_extensionVelocityG(cellId, dim, setId);
228 }
MFloat & a_extensionVelocityG(const MInt cellId, const MInt dim, const MInt set)
Returns fExt of the cell cellId for index n.

◆ a_G0CellId()

template<MInt nDim, MInt nDist, class SysEqn >
MInt CouplingLS< nDim >::a_G0CellId ( const MInt  id,
const MInt  set 
) const
inline

Definition at line 209 of file coupling.h.

209{ return lsSolver().a_G0CellId(id, set); }
constexpr MInt a_G0CellId(MInt id, MInt set) const

◆ a_isActive()

template<MInt nDim, MInt nDist, class SysEqn >
MBool CouplingLB< nDim, nDist, SysEqn >::a_isActive ( const MInt  cellId,
const MInt  id = 0 
) const
inline

Definition at line 522 of file coupling.h.

522{ return lbSolver(id).a_isActive(cellId); }

◆ a_levelSetFunctionG()

template<MInt nDim, MInt nDist, class SysEqn >
MFloat & CouplingLS< nDim >::a_levelSetFunctionG ( const MInt  cellId,
const MInt  setId 
)
inline

Definition at line 199 of file coupling.h.

199 {
200 return lsSolver().a_levelSetFunctionG(cellId, setId);
201 }
MFloat & a_levelSetFunctionG(const MInt cellId, const MInt set)
Returns levelSetFunction of the cell cellId.

◆ a_levelSetFunctionMb() [1/2]

template<MInt nDim, MInt nDist, class SysEqn >
MFloat & CouplingLB< nDim, nDist, SysEqn >::a_levelSetFunctionMb ( const MInt  cellId,
const MInt  set,
const MInt  id = 0 
)
inline

Definition at line 490 of file coupling.h.

490 {
491 return lbSolver(id).a_levelSetFunctionMB(cellId, set);
492 }

◆ a_levelSetFunctionMb() [2/2]

template<MInt nDim, MInt nDist, class SysEqn >
MFloat CouplingLB< nDim, nDist, SysEqn >::a_levelSetFunctionMb ( const MInt  cellId,
const MInt  set,
const MInt  id = 0 
) const
inline

Definition at line 494 of file coupling.h.

494 {
495 return lbSolver(id).a_levelSetFunctionMB(cellId, set);
496 }

◆ a_Ma()

template<MInt nDim, MInt nDist, class SysEqn >
MFloat CouplingLB< nDim, nDist, SysEqn >::a_Ma ( const MInt  id = 0) const
inline

Definition at line 472 of file coupling.h.

472{ return lbSolver(id).m_Ma; }
MFloat m_Ma
the Mach number
Definition: solver.h:71

◆ a_mbCell()

template<MInt nDim, MInt nDist, class SysEqn >
MbCellCollector & CouplingLB< nDim, nDist, SysEqn >::a_mbCell ( const MInt  id = 0)
inline

Definition at line 486 of file coupling.h.

486{ return lbBndCnd(id).m_boundaryCellsMb; }
MbCellCollector m_boundaryCellsMb
Definition: lbbndcnd.h:57

◆ a_noCells()

template<MInt nDim, MInt nDist, class SysEqn >
MInt CouplingLB< nDim, nDist, SysEqn >::a_noCells ( const MInt  id = 0) const
inline

Definition at line 516 of file coupling.h.

516{ return lbSolver(id).grid().noCells(); }

◆ a_noDistributions()

template<MInt nDim, MInt nDist, class SysEqn >
MInt CouplingLB< nDim, nDist, SysEqn >::a_noDistributions ( const MInt  id = 0) const
inline

Definition at line 481 of file coupling.h.

481{ return lbSolver(id).m_noDistributions; }

◆ a_noEmbeddedBodies()

template<MInt nDim, MInt nDist, class SysEqn >
MInt CouplingLS< nDim >::a_noEmbeddedBodies ( ) const
inline

Definition at line 221 of file coupling.h.

◆ a_noEmbeddedBodiesLB()

template<MInt nDim, MInt nDist, class SysEqn >
MInt CouplingLB< nDim, nDist, SysEqn >::a_noEmbeddedBodiesLB ( const MInt  id = 0) const
inline

Definition at line 520 of file coupling.h.

520{ return lbSolver(id).m_noEmbeddedBodies; }

◆ a_noG0Cells()

template<MInt nDim, MInt nDist, class SysEqn >
MInt CouplingLS< nDim >::a_noG0Cells ( MInt  set) const
inline

Definition at line 194 of file coupling.h.

194{ return lsSolver().m_G0Cells[set].size(); }
std::vector< MInt > * m_G0Cells

◆ a_noLbCells()

template<MInt nDim, MInt nDist, class SysEqn >
MInt CouplingLB< nDim, nDist, SysEqn >::a_noLbCells ( const MInt  id = 0) const
inline

Definition at line 470 of file coupling.h.

470{ return lbSolver(id).a_noCells(); }
MInt a_noCells() const

◆ a_noLevelSetsMb()

template<MInt nDim, MInt nDist, class SysEqn >
MInt CouplingLB< nDim, nDist, SysEqn >::a_noLevelSetsMb ( const MInt  id = 0) const
inline

Definition at line 471 of file coupling.h.

471{ return lbSolver(id).m_noLevelSetsUsedForMb; }

◆ a_noLsCells()

template<MInt nDim, MInt nDist, class SysEqn >
MInt CouplingLS< nDim >::a_noLsCells ( ) const
inline

Definition at line 191 of file coupling.h.

191{ return lsSolver().a_noCells(); }

◆ a_normalVectorG()

template<MInt nDim, MInt nDist, class SysEqn >
MFloat CouplingLS< nDim >::a_normalVectorG ( const MInt  gCellId,
const MInt  dim,
const MInt  set 
) const
inline

Definition at line 211 of file coupling.h.

211 {
212 return lsSolver().a_normalVectorG(gCellId, dim, set);
213 }
MFloat & a_normalVectorG(const MInt cellId, const MInt dim, const MInt set)
Returns normalVector of the cell cellId for index n.

◆ a_noSets()

template<MInt nDim, MInt nDist, class SysEqn >
MInt CouplingLS< nDim >::a_noSets ( ) const
inline

Definition at line 222 of file coupling.h.

222{ return lsSolver().m_noSets; }

◆ a_noVariables()

template<MInt nDim, MInt nDist, class SysEqn >
MInt CouplingLB< nDim, nDist, SysEqn >::a_noVariables ( const MInt  id = 0) const
inline

Definition at line 526 of file coupling.h.

526{ return lbSolver(id).noVariables(); }
MInt noVariables() const override
Return the number of variables.

◆ a_oldVariable()

template<MInt nDim, MInt nDist, class SysEqn >
MFloat & CouplingLB< nDim, nDist, SysEqn >::a_oldVariable ( const MInt  cellId,
const MInt  varId,
const MInt  id = 0 
)
inline

Definition at line 533 of file coupling.h.

533 {
534 return lbSolver(id).a_oldVariable(cellId, varId);
535 }

◆ a_outsideGValue()

template<MInt nDim, MInt nDist, class SysEqn >
MFloat CouplingLS< nDim >::a_outsideGValue ( ) const
inline

Definition at line 192 of file coupling.h.

192{ return lsSolver().m_outsideGValue; }

◆ a_parentId()

template<MInt nDim, MInt nDist, class SysEqn >
MInt CouplingLB< nDim, nDist, SysEqn >::a_parentId ( const MInt  cellId,
const MInt  id = 0 
)
inline

Definition at line 506 of file coupling.h.

506{ return lbSolver(id).c_parentId(cellId); }
MInt c_parentId(const MInt gCellId) const

◆ a_Re()

template<MInt nDim, MInt nDist, class SysEqn >
MFloat CouplingLB< nDim, nDist, SysEqn >::a_Re ( const MInt  id = 0) const
inline

Definition at line 473 of file coupling.h.

473{ return lbSolver(id).m_Re; }
MFloat m_Re
the Reynolds number
Definition: solver.h:68

◆ a_variable()

template<MInt nDim, MInt nDist, class SysEqn >
MFloat & CouplingLB< nDim, nDist, SysEqn >::a_variable ( const MInt  cellId,
const MInt  varId,
const MInt  id = 0 
)
inline

Definition at line 528 of file coupling.h.

528 {
529 return lbSolver(id).a_variable(cellId, varId);
530 }

◆ a_wasActive()

template<MInt nDim, MInt nDist, class SysEqn >
MBool CouplingLB< nDim, nDist, SysEqn >::a_wasActive ( const MInt  cellId,
const MInt  id = 0 
) const
inline

Definition at line 524 of file coupling.h.

524{ return lbSolver(id).a_wasActive(cellId); }

◆ bc3060()

template<MInt nDim, MInt nDist, class SysEqn >
void LsLbSurface< nDim, nDist, SysEqn >::bc3060 ( MInt  )

◆ checkProperties()

template<MInt nDim, MInt nDist, class SysEqn >
void LsLbSurface< nDim, nDist, SysEqn >::checkProperties
privatevirtual
Author
Moritz Waldmann

Implements Coupling.

Definition at line 170 of file lslbsurface.cpp.

170 {
171 TRACE();
172
173 lbSolver().m_noLevelSetsUsedForMb = 1;
174 if(lsSolver().m_maxNoSets > 1) {
175 lbSolver().m_noLevelSetsUsedForMb = lsSolver().m_maxNoSets;
176 }
177
180
181 // Check that the lb-solver-cell-count is correct!
182 ASSERT(lbSolver().a_noCells(), "");
183}
MInt a_noCells(const MInt id=0) const
Definition: coupling.h:516

◆ cleanUp()

template<MInt nDim, MInt nDist, class SysEqn >
void LsLbSurface< nDim, nDist, SysEqn >::cleanUp ( )
inlineoverridevirtual

Implements Coupling.

Definition at line 157 of file lslbsurface.h.

157{};

◆ computeGCellTimeStep()

template<MInt nDim, MInt nDist, class SysEqn >
void LsLbSurface< nDim, nDist, SysEqn >::computeGCellTimeStep ( )

◆ evaluateContour()

template<MInt nDim, MInt nDist, class SysEqn >
void LsLbSurface< nDim, nDist, SysEqn >::evaluateContour

Definition at line 729 of file lslbsurface.cpp.

729 {
730 MFloat COG[nDim]{0.0};
731 MFloat mass = 0.0;
732
733 for(MInt cellId = 0; cellId < a_noLsCells(); cellId++) {
734 if(lsSolver().a_isHalo(cellId)) {
735 continue;
736 }
737
738 if(a_levelSetFunctionG(cellId, 0) > 0) {
739 continue;
740 }
741
742 const MFloat dm = 1.0;
743
744 for(MInt n = 0; n < nDim; n++) {
745 COG[n] += dm * lsSolver().c_coordinate(cellId, n);
746 }
747 mass += dm;
748 }
749
750 if(lsSolver().noDomains() > 1) {
751 MPI_Allreduce(MPI_IN_PLACE, COG, 2, MPI_DOUBLE, MPI_SUM, lsSolver().mpiComm(), AT_, "COG", "COG");
752 MPI_Allreduce(MPI_IN_PLACE, &mass, 1, MPI_DOUBLE, MPI_SUM, lsSolver().mpiComm(), AT_, "mass", "mass");
753 }
754
755 for(MInt n = 0; n < nDim; n++) {
756 COG[n] /= mass;
757 }
758
759 const MFloat dx = a_cellLengthAtLevel(lbSolver().maxLevel());
760
761 if(!lsSolver().domainId()) {
762 std::cout << "Bubble COG " << COG[0] << " " << COG[1] << " mass " << mass << " hydrostatic pressure rho "
763 << 1.0 - 3.0 * COG[1] / dx * m_gravity << std::endl;
764 }
765
766 if(!lsSolver().domainId()) {
767 FILE* log;
768 log = fopen("bubble.log", "a+");
769 fprintf(log, "%d ", globalTimeStep);
770 fprintf(log, "%f ", COG[1]);
771 fprintf(log, "\n");
772 fclose(log);
773 }
774}
MBool a_isHalo(const MInt gCellId) const
Returns IsHalo of the cell cellId.
MFloat m_gravity
Definition: lslbsurface.h:103
MInt a_noLsCells() const
Definition: coupling.h:191
MFloat a_cellLengthAtLevel(MInt level, const MInt id=0)
Definition: coupling.h:518
MFloat & a_levelSetFunctionG(const MInt cellId, const MInt setId)
Definition: coupling.h:199
MInt globalTimeStep
int32_t MInt
Definition: maiatypes.h:62
double MFloat
Definition: maiatypes.h:52
int MPI_Allreduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, const MString &name, const MString &sndvarname, const MString &rcvvarname)
same as MPI_Allreduce
void const MInt cellId
Definition: collector.h:239

◆ finalizeCouplerInit()

template<MInt nDim, MInt nDist, class SysEqn >
void LsLbSurface< nDim, nDist, SysEqn >::finalizeCouplerInit ( )
inlineoverridevirtual

Implements Coupling.

Definition at line 151 of file lslbsurface.h.

151{};

◆ finalizeSubCoupleInit()

template<MInt nDim, MInt nDist, class SysEqn >
void LsLbSurface< nDim, nDist, SysEqn >::finalizeSubCoupleInit ( MInt  )
inlineoverridevirtual

Implements Coupling.

Definition at line 150 of file lslbsurface.h.

150{};

◆ init()

template<MInt nDim, MInt nDist, class SysEqn >
void LsLbSurface< nDim, nDist, SysEqn >::init
overridevirtual

Implements Coupling.

Definition at line 208 of file lslbsurface.cpp.

208 {
209 TRACE();
210
211 lbSolver().initializeMovingBoundaries();
213}
virtual void initializeBndMovingBoundaries()
This function initializes the LbBndCnd for coupled simulations.
Definition: lbbndcnd.cpp:3498

◆ initData()

template<MInt nDim, MInt nDist, class SysEqn >
void LsLbSurface< nDim, nDist, SysEqn >::initData
private
Author
Moritz Waldmann

Definition at line 87 of file lslbsurface.cpp.

87 {
88 TRACE();
89
90 // solver-specific data:
93
94 const MFloat dx = a_cellLengthAtLevel(lbSolver().maxLevel());
95
96 conversionLbLs.velocity = sqrt(3) / a_Ma();
98
101
104
107
108 if(!lbSolver().domainId()) {
109 std::cout << "CONVERSION" << std::endl
110 << "VEL LB LS " << conversionLbLs.velocity << std::endl
111 << "VEL LS LB " << conversionLsLb.velocity << std::endl
112 << "LEN LB LS " << conversionLbLs.length << std::endl
113 << "LEN LS LB " << conversionLsLb.length << std::endl
114 << "TIME LB LS " << conversionLbLs.time << std::endl
115 << "TIME LS LB " << conversionLsLb.time << std::endl
116 << "PRESSURE LB LS " << conversionLbLs.pressure << std::endl
117 << "PRESSURE LS LB " << conversionLsLb.pressure << std::endl;
118 }
119
121
122 const MFloat nu = a_Ma() * LBCS / a_Re() * lbSolver().m_referenceLength;
123
124 m_gravity = POW2(m_Ga) * POW2(nu) / POW3(lbSolver().m_referenceLength);
125
126 m_surfaceTension = 1.0 * m_gravity * POW2(lbSolver().m_referenceLength) / m_Eo;
127
128 // Some quality of life output
129
130 const MFloat tau = (1 + 6 * nu) / 2.0;
131
132 stringstream ss;
133 const MInt maxLineLength = 256;
134 MChar b[maxLineLength];
135 const MString divider = "-------------------------------------------------------------------------";
136
137 ss << "\n";
138 ss << "FREE SURFACE PROBLEM SUMARRY"
139 << "\n";
140 ss << divider << "\n";
141
142 snprintf(b, maxLineLength, " | %-45s | %-20E | \n", "Mach", a_Ma());
143 ss << b;
144 snprintf(b, maxLineLength, " | %-45s | %-20E | \n", "Reynolds", a_Re());
145 ss << b;
146 snprintf(b, maxLineLength, " | %-45s | %-20E | \n", "Galileo", m_Ga);
147 ss << b;
148 snprintf(b, maxLineLength, " | %-45s | %-20E | \n", "Eotvos", m_Eo);
149 ss << b;
150
151 ss << "\n";
152 snprintf(b, maxLineLength, " | %-45s | %-20E | \n", "viscosity nu", nu);
153 ss << b;
154 snprintf(b, maxLineLength, " | %-45s | %-20E | \n", "relaxation tau", tau);
155 ss << b;
156 snprintf(b, maxLineLength, " | %-45s | %-20E | \n", "gravity g", m_gravity);
157 ss << b;
158 snprintf(b, maxLineLength, " | %-45s | %-20E | \n", "surface tension sigma", m_surfaceTension);
159 ss << b;
160
161 if(!lbSolver().domainId()) {
162 cout << ss.str() << std::endl;
163 }
164}
MInt m_lbSolverId
Definition: lslbsurface.h:39
ConversionFactors conversionLsLb
Definition: lslbsurface.h:99
MFloat a_Re(const MInt id=0) const
Definition: coupling.h:473
ConversionFactors conversionLbLs
Definition: lslbsurface.h:100
MFloat m_Ga
Definition: lslbsurface.h:104
MFloat a_Ma(const MInt id=0) const
Definition: coupling.h:472
MInt m_lsSolverId
Definition: lslbsurface.h:40
MFloat m_Eo
Definition: lslbsurface.h:105
MFloat m_surfaceTension
Definition: lslbsurface.h:102
MInt solverId() const
Return the solverId.
Definition: solver.h:425
constexpr Real POW3(const Real x)
Definition: functions.h:123
constexpr Real POW2(const Real x)
Definition: functions.h:119
std::basic_string< char > MString
Definition: maiatypes.h:55
char MChar
Definition: maiatypes.h:56

◆ initTimers()

template<MInt nDim, MInt nDist, class SysEqn >
void LsLbSurface< nDim, nDist, SysEqn >::initTimers
private

Definition at line 50 of file lslbsurface.cpp.

50 {
51 TRACE();
52
53 // Create timer group and coupler timer, and start the timer
54 NEW_TIMER_GROUP_NOCREATE(m_timers[Timers::TimerGroup], "Coupler LS LB Surface");
55 NEW_TIMER_NOCREATE(m_timers[Timers::Class], "Total object lifetime", m_timers[Timers::TimerGroup]);
56 RECORD_TIMER_START(m_timers[Timers::Class]);
57
58 // Create and start constructor timer
59 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::Constructor], "Constructor", m_timers[Timers::Class]);
60 RECORD_TIMER_START(m_timers[Timers::Constructor]);
61
62 // Create PreCouple timers
63 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::PreCouple], "PreCouple", m_timers[Timers::Class]);
64 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::TransferToLevelSet], "TransferToLevelSet", m_timers[Timers::PreCouple]);
65 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::SetExtensionVelocity], "SetExtensionVelocity",
67 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::ExtendVelocity], "ExtendVelocity", m_timers[Timers::TransferToLevelSet]);
68
69 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::FindBoundaryCells], "FindBoundaryCells", m_timers[Timers::PreCouple]);
70 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::InitOutsideDomain], "InitOutsideDomain", m_timers[Timers::PreCouple]);
71 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::SetBoundaryCondition], "SetBoundaryCondition", m_timers[Timers::PreCouple]);
72
73 // Create PostCouple timers
74 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::PostCouple], "PostCouple", m_timers[Timers::Class]);
75 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::ComputeBoundaryValues], "ComputeBoundaryValues",
77 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::CreateComm], "CreateComm", m_timers[Timers::PostCouple]);
78 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::ApplyBoundaryCondition], "ApplyBoundaryCondition",
80}

◆ interpolateCurvature()

template<MInt nDim, MInt nDist, class SysEqn >
void LsLbSurface< nDim, nDist, SysEqn >::interpolateCurvature ( MFloatScratchSpace curvature)

Definition at line 604 of file lslbsurface.cpp.

604 {
605 for(MInt mbCell = 0; mbCell < a_mbCell().size(); mbCell++) {
606 const MInt pCellId = a_mbCell().cellId(mbCell);
607
608 // Find minWallDistDir
609 MInt minDistDir = -1;
610 MFloat minWallDistance = F2;
611 for(MInt dist = 0; dist < a_noDistributions() - 1; dist++) {
612 if(minWallDistance > a_mbCell().distance(mbCell, dist)) {
613 minWallDistance = a_mbCell().distance(mbCell, dist);
614 minDistDir = dist;
615 }
616 }
617
618 ASSERT(minDistDir > -1, "minDistDir not found!");
619
620 const MFloat q = lbBndCnd().getDistanceMb(pCellId, mbCell, minDistDir);
621
622 const MInt neighbor = lbSolver().c_neighborId(pCellId, minDistDir);
623
624 if(neighbor == -1) {
625 continue;
626 }
627
628 // const MFloat lin = a_curvatureG(pCellId, 0) * (1-q) + a_curvatureG(neighbor, 0) * q;
629
630 /*const MFloat rad1 = maia::math::sgn(a_curvatureG(pCellId, 0))
631 * sqrt(1/abs(a_curvatureG(pCellId, 0)));
632 const MFloat rad2 = maia::math::sgn(a_curvatureG(neighbor,0))
633 * sqrt(1/abs(a_curvatureG(neighbor,0)));*/
634
635 const MFloat rad1 = 1 / a_curvatureG(pCellId, 0);
636 const MFloat rad2 = 1 / a_curvatureG(neighbor, 0);
637
638 const MFloat rad = rad1 * (1 - q) + rad2 * q;
639
640 // const MFloat lin = maia::math::sgn(rad)*1/POW2(rad);
641 const MFloat lin = 1 / rad;
642
643 curvature[mbCell] = lin;
644 }
645}
MFloat getDistanceMb(const MInt cellId, const MInt mbCellId, const MInt distId)
Definition: lbbndcnddxqy.h:359
MInt c_neighborId(const MInt gCellId, const MInt dir) const
MInt a_noDistributions(const MInt id=0) const
Definition: coupling.h:481
MFloat a_curvatureG(const MInt gCellId, const MInt set) const
Definition: coupling.h:215
MbCellCollector & a_mbCell(const MInt id=0)
Definition: coupling.h:486
constexpr MInt size() const
Return size (i.e., currently used number of nodes)
Definition: container.h:89
MFloat & distance(const MInt id, const MInt did)
Accessor for distances.
MInt & cellId(const MInt id)
Accessor for cellId.
MFloat dist(const Point< DIM > &p, const Point< DIM > &q)
Definition: pointbox.h:54

◆ interpolateNormal()

template<MInt nDim, MInt nDist, class SysEqn >
void LsLbSurface< nDim, nDist, SysEqn >::interpolateNormal

Definition at line 648 of file lslbsurface.cpp.

648 {
649 for(MInt mbCell = 0; mbCell < a_mbCell().size(); mbCell++) {
650 const MInt pCellId = a_mbCell().cellId(mbCell);
651
652 // Find minWallDistDir
653 MInt minDistDir = -1;
654 MFloat minWallDistance = F2;
655 for(MInt dist = 0; dist < a_noDistributions() - 1; dist++) {
656 if(minWallDistance > a_mbCell().distance(mbCell, dist)) {
657 minWallDistance = a_mbCell().distance(mbCell, dist);
658 minDistDir = dist;
659 }
660 }
661
662 ASSERT(minDistDir > -1, "minDistDir not found!");
663
664 const MFloat q = lbBndCnd().getDistanceMb(pCellId, mbCell, minDistDir);
665
666 ASSERT(minDistDir > -1, "No min dist found.");
667
668 const MInt neighbor = lbSolver().c_neighborId(pCellId, minDistDir);
669
670 if(neighbor == -1) {
671 continue;
672 }
673
674 for(MInt n = 0; n < nDim; n++) {
675 const MFloat lin =
676 lsSolver().a_normalVectorG(pCellId, n, 0) * (1 - q) + lsSolver().a_normalVectorG(neighbor, n, 0) * q;
677
678 a_mbCell().normal(mbCell, n) = lin;
679 }
680 }
681}
MFloat & normal(const MInt id, const MInt dim)
Accessor for surface normal.

◆ lb2lsId()

template<MInt nDim, MInt nDist, class SysEqn >
MInt LsLbSurface< nDim, nDist, SysEqn >::lb2lsId ( MInt  )

◆ lb2lsIdParent()

template<MInt nDim, MInt nDist, class SysEqn >
MInt LsLbSurface< nDim, nDist, SysEqn >::lb2lsIdParent ( MInt  )

◆ lbBndCnd()

template<MInt nDim, MInt nDist, class SysEqn >
LbBndCnd & CouplingLB< nDim, nDist, SysEqn >::lbBndCnd ( const MInt  id = 0)
inline

Definition at line 461 of file coupling.h.

461{ return *lbSolver(id).m_bndCnd; }

◆ lbSolver()

template<MInt nDim, MInt nDist, class SysEqn >
solverType & CouplingLB< nDim, nDist, SysEqn >::lbSolver ( const MInt  solverId = 0) const
inline

Definition at line 454 of file coupling.h.

454 {
455 ASSERT(solverId < noSolvers(), "Invalid solverId " + std::to_string(solverId) + "/" + std::to_string(noSolvers()));
456 return *m_lbSolvers[solverId];
457 }
std::vector< solverType * > m_lbSolvers
Definition: coupling.h:464
MInt noSolvers() const
Definition: coupling.h:453

◆ ls2lbId()

template<MInt nDim, MInt nDist, class SysEqn >
MInt LsLbSurface< nDim, nDist, SysEqn >::ls2lbId ( MInt  )

◆ ls2lbIdParent()

template<MInt nDim, MInt nDist, class SysEqn >
MInt LsLbSurface< nDim, nDist, SysEqn >::ls2lbIdParent ( MInt  )

◆ lsSolver()

template<MInt nDim, MInt nDist, class SysEqn >
solverType & CouplingLS< nDim >::lsSolver ( ) const
inline

Definition at line 188 of file coupling.h.

188{ return *m_solver; }
solverType * m_solver
Definition: coupling.h:231

◆ minCell()

template<MInt nDim, MInt nDist, class SysEqn >
MInt CouplingLB< nDim, nDist, SysEqn >::minCell ( const MInt  index,
const MInt  id = 0 
) const
inline

Definition at line 512 of file coupling.h.

512{ return lbSolver(id).grid().minCell(index); }

◆ noMinCells()

template<MInt nDim, MInt nDist, class SysEqn >
MInt CouplingLB< nDim, nDist, SysEqn >::noMinCells ( const MInt  id = 0) const
inline

Definition at line 514 of file coupling.h.

514{ return lbSolver(id).grid().noMinCells(); }

◆ postCouple()

template<MInt nDim, MInt nDist, class SysEqn >
void LsLbSurface< nDim, nDist, SysEqn >::postCouple ( MInt  recipeStep = 0)
overridevirtual

Implements Coupling.

Definition at line 346 of file lslbsurface.cpp.

346 {
347 TRACE();
348 RECORD_TIMER_START(m_timers[Timers::PostCouple]);
349
350 // Post LS
351 if(recipeStep == 0) {
352 if(!lbSolver().domainId()) {
353 std::cout << "Post LS couple ..." << std::endl;
354 }
355
356 // TODO labels:COUPLER,LS,LB Transfer LS FROM LS to LB in a more generalized manner
357 // TODO labels:COUPLER Only band cells ?
358 const MInt setId = 0;
359 for(MInt cellId = 0; cellId < a_noLsCells(); cellId++) {
360 // TODO labels:COUPLER Use id conversion
361 a_levelSetFunctionMb(cellId, setId) = a_levelSetFunctionG(cellId, setId);
362 }
363
365 }
366
367 // Post LB
368 else if(recipeStep == 1) {
369 if(!lbSolver().domainId()) {
370 std::cout << "Post LB couple ..." << std::endl;
371 }
372
373 RECORD_TIMER_START(m_timers[Timers::ComputeBoundaryValues]);
375
376 // Exchange velocity between boundary cells
377 auto setVel = static_cast<MFloat& (CouplingLb::MbCellCollector::*)(const MInt, const MInt)>(
378 &CouplingLb::MbCellCollector::velocity);
379 auto getVel = static_cast<MFloat (CouplingLb::MbCellCollector::*)(const MInt, const MInt) const>(
380 &CouplingLb::MbCellCollector::velocity);
381 auto setData = std::bind(setVel, &a_mbCell(), std::placeholders::_1, std::placeholders::_2);
382 auto getData = std::bind(getVel, &a_mbCell(), std::placeholders::_1, std::placeholders::_2);
383
384 auto cellMapping = std::bind(&CouplingLb::a_boundaryCellMb, this, std::placeholders::_1, std::placeholders::_2);
385
386 lbSolver().exchangeSparseLeafValues(getData, setData, nDim, cellMapping);
387
388 // Check all vels in mbcellcollector for nan
389 for(MInt mbCell = 0; mbCell < a_mbCell().size(); mbCell++) {
390 const MFloat u = a_mbCell().velocity(mbCell, 0);
391
392 if(std::isnan(u)) {
393 mTerm(1, "Should not happen");
394 }
395 }
396 RECORD_TIMER_STOP(m_timers[Timers::ComputeBoundaryValues]);
397
398 RECORD_TIMER_START(m_timers[Timers::CreateComm]);
400 RECORD_TIMER_STOP(m_timers[Timers::CreateComm]);
401
402 RECORD_TIMER_START(m_timers[Timers::ApplyBoundaryCondition]);
404 RECORD_TIMER_STOP(m_timers[Timers::ApplyBoundaryCondition]);
405 }
406
407 RECORD_TIMER_STOP(m_timers[Timers::PostCouple]);
408}
MInt a_boundaryCellMb(const MInt cellId, const MInt id=0)
Definition: coupling.h:487
maia::lb::collector::LbMbCellCollector< nDim > MbCellCollector
Definition: coupling.h:432
void extrapolateVelocitiesMb()
virtual void createMBComm()
This function creates the communicator for calculating the wall forces of the level-set boundaries.
Definition: lbbndcnd.cpp:3416
virtual void postCouple()
This function does the sub coupling step called from the coupling class.
Definition: lbbndcnd.cpp:3538
void evaluateContour()
MFloat & a_levelSetFunctionMb(const MInt cellId, const MInt set, const MInt id=0)
Definition: coupling.h:490
void exchangeSparseLeafValues(G getData, S setData, const MInt dataSize, M cellMapping)
Exchange of sparse data structures on max Level.
MFloat & velocity(const MInt id, const MInt dim)
Accessor for velocities.
void mTerm(const MInt errorCode, const MString &location, const MString &message)
Definition: functions.cpp:29

◆ preCouple()

template<MInt nDim, MInt nDist, class SysEqn >
void LsLbSurface< nDim, nDist, SysEqn >::preCouple ( MInt  recipeStep)
overridevirtual

Implements Coupling.

Definition at line 217 of file lslbsurface.cpp.

217 {
218 TRACE();
219 RECORD_TIMER_START(m_timers[Timers::PreCouple]);
220
221 // Pre LS
222 if(recipeStep == 0) {
223 if(!lbSolver().domainId()) {
224 std::cout << "Pre LS couple ..." << std::endl;
225 }
226
227 RECORD_TIMER_START(m_timers[Timers::TransferToLevelSet]);
228 // TODO labels:COUPLER Decide based on number of bnd cells
229 // FIXME labels:COUPLER julian
230 if(lbSolver().getCurrentTimeStep() > 1) {
231 // Reset, set and extend transport velocity for the LS
232 // FIXME labels:COUPLER julian
233 // lsSolver().resetExtensionVelocity();
234
235 RECORD_TIMER_START(m_timers[Timers::SetExtensionVelocity]);
237 RECORD_TIMER_STOP(m_timers[Timers::SetExtensionVelocity]);
238
239 RECORD_TIMER_START(m_timers[Timers::ExtendVelocity]);
240 // FIXME labels:COUPLER julian
241 // lsSolver().extendVelocity(0);
242 RECORD_TIMER_STOP(m_timers[Timers::ExtendVelocity]);
243 }
244 RECORD_TIMER_STOP(m_timers[Timers::TransferToLevelSet]);
245 }
246
247 // Pre LB
248 else {
249 if(!lbSolver().domainId()) {
250 std::cout << "Pre LB couple ..." << std::endl;
251 }
252
253 std::vector<MInt> maxGCellLevels(lsSolver().m_maxNoSets);
254 for(MInt set = 0; set < lsSolver().m_maxNoSets; set++) {
255 maxGCellLevels[set] = lsSolver().a_maxGCellLevel(set);
256 }
257 RECORD_TIMER_START(m_timers[Timers::FindBoundaryCells]);
258 lbSolver().preCoupleLs(maxGCellLevels);
259 RECORD_TIMER_STOP(m_timers[Timers::FindBoundaryCells]);
260
261 RECORD_TIMER_START(m_timers[Timers::InitOutsideDomain]);
263 RECORD_TIMER_STOP(m_timers[Timers::InitOutsideDomain]);
264
265 // FIXME labels:COUPLER Curvature semms wrong for the first time step
266 for(MInt mbCell = 0; mbCell < a_mbCell().size(); mbCell++) {
267 a_mbCell().density(mbCell) = 1.0;
268 }
269 if(lbSolver().getCurrentTimeStep() == 1) {
270 return;
271 }
272
273 RECORD_TIMER_START(m_timers[Timers::SetBoundaryCondition]);
274 MFloatScratchSpace curvatureInterp(a_mbCell().size(), AT_, "curvature");
275
276 interpolateCurvature(curvatureInterp);
278
279 if(a_mbCell().size() > 0) {
280 std::cout << "curv " << curvatureInterp[0] << std::endl;
281 }
282
283 // Compute and transfer pressure from curvature (Laplace)
284 MFloat l_curvature_sum = 0;
285 MFloat l_rho_sum = 0;
286 MFloat l_rho_hyd = 0;
287 MFloat l_drho_curv = 0;
288
289 for(MInt mbCell = 0; mbCell < a_mbCell().size(); mbCell++) {
290 l_curvature_sum += curvatureInterp[mbCell];
291 }
292
293 const MInt l_count = a_mbCell().size();
294 MInt g_count = 0;
295 MPI_Allreduce(&l_count, &g_count, 1, MPI_INT, MPI_SUM, lbSolver().mpiComm(), AT_, "count", "count");
296
297 MFloat g_curvature_sum = 0;
298 MPI_Allreduce(&l_curvature_sum, &g_curvature_sum, 1, MPI_DOUBLE, MPI_SUM, lbSolver().mpiComm(), AT_, "curv",
299 "curv");
300
301 const MFloat dpCorr = 0.1 * (POW3(g_curvature_sum / g_count / m_initCurvature) - 1.0);
302
303 for(MInt mbCell = 0; mbCell < a_mbCell().size(); mbCell++) {
304 const MFloat curvature = curvatureInterp[mbCell];
305
306 const MFloat dx = a_cellLengthAtLevel(lbSolver().maxLevel());
307
308 MFloat dpLB = -m_initHeight * m_gravity + dpCorr;
309
310 l_rho_hyd += 1 + 3.0 * dpLB;
311
312 // TODO labels:COUPLER Check Factor convention 2D/3D ...
313 IF_CONSTEXPR(nDim == 2) { dpLB += 2 * (curvature - m_initCurvature) * dx * m_surfaceTension; }
314 else {
315 dpLB += 1 * (curvature - m_initCurvature) * dx * m_surfaceTension;
316 l_drho_curv += 3 * (curvature - m_initCurvature) * dx * m_surfaceTension;
317 }
318
319 const MFloat rhoLB = 1 + 3.0 * dpLB;
320
321 a_mbCell().density(mbCell) = rhoLB;
322
323 l_rho_sum += rhoLB;
324 }
325
326 MFloat g_rho_sum = 0;
327 MPI_Allreduce(&l_rho_sum, &g_rho_sum, 1, MPI_DOUBLE, MPI_SUM, lbSolver().mpiComm(), AT_, "curv", "curv");
328
329 MFloat g_rho_hyd = 0;
330 MPI_Allreduce(&l_rho_hyd, &g_rho_hyd, 1, MPI_DOUBLE, MPI_SUM, lbSolver().mpiComm(), AT_, "curv", "curv");
331
332 MFloat g_drho_curv = 0;
333 MPI_Allreduce(&l_drho_curv, &g_drho_curv, 1, MPI_DOUBLE, MPI_SUM, lbSolver().mpiComm(), AT_, "curv", "curv");
334
335 if(!lbSolver().domainId()) {
336 std::cout << " AVG curv " << g_curvature_sum / g_count << " AVG rho " << g_rho_sum / g_count << " AVG hyd rho "
337 << g_rho_hyd / g_count << " AVG curv drho " << g_drho_curv / g_count << std::endl;
338 }
339
340 RECORD_TIMER_STOP(m_timers[Timers::SetBoundaryCondition]);
341 }
342 RECORD_TIMER_STOP(m_timers[Timers::PreCouple]);
343}
MInt a_maxGCellLevel(const MInt set=-1) const
void setExtensionVelocity()
MFloat m_initCurvature
Definition: lslbsurface.h:106
MFloat m_initHeight
Definition: lslbsurface.h:107
void interpolateCurvature(MFloatScratchSpace &curvature)
void interpolateNormal()
void refillEmergedCells()
This class is a ScratchSpace.
Definition: scratch.h:758
MFloat & density(const MInt id)
Accessor for density.

◆ readProperties()

template<MInt nDim, MInt nDist, class SysEqn >
void LsLbSurface< nDim, nDist, SysEqn >::readProperties
privatevirtual
Author
Moritz Waldmann

Implements Coupling.

Definition at line 189 of file lslbsurface.cpp.

189 {
190 TRACE();
191
192 m_Ga = 0.0;
193 m_Ga = Context::getBasicProperty<MFloat>("Ga", AT_, &m_Ga);
194
195
196 m_Eo = 0.0;
197 m_Eo = Context::getBasicProperty<MFloat>("Eo", AT_, &m_Eo);
198
199 m_initCurvature = 0.0;
200 m_initCurvature = Context::getBasicProperty<MFloat>("initCurvature", AT_, &m_initCurvature);
201
202 m_initHeight = 0.0;
203 m_initHeight = Context::getBasicProperty<MFloat>("initHeight", AT_, &m_initHeight);
205}
MFloat c_cellLengthAtLevel(const MInt level) const

◆ refillEmergedCells()

template<MInt nDim, MInt nDist, class SysEqn >
void LsLbSurface< nDim, nDist, SysEqn >::refillEmergedCells

Definition at line 700 of file lslbsurface.cpp.

700 {
701 TRACE();
702
703 for(MInt i = 0; i < a_noCells(); i++) {
704 if(lbSolver().a_isHalo(i)) {
705 continue;
706 }
707
708 // Regular fluid cell
709 if(a_isActive(i) && a_wasActive(i)) {
710 continue;
711 }
712
713 // Regular outside cell
714 // TODO labels:COUPLER Access via PV
715 if(!a_isActive(i)) {
716 for(MInt n = 0; n < nDim; n++) {
717 lbSolver().a_variable(i, n) = 0.0;
718 }
719 lbSolver().a_variable(i, nDim) = 1.0;
720 }
721
722 if(a_isActive(i) && !a_wasActive(i)) {
724 }
725 }
726}
void refillEmergedCell(const MInt)
MBool a_isActive(const MInt cellId, const MInt id=0) const
Definition: coupling.h:522
MBool a_wasActive(const MInt cellId, const MInt id=0) const
Definition: coupling.h:524

◆ reinitAfterBalance()

template<MInt nDim, MInt nDist, class SysEqn >
void LsLbSurface< nDim, nDist, SysEqn >::reinitAfterBalance ( )
inlinevirtual

Reimplemented from Coupling.

Definition at line 158 of file lslbsurface.h.

158{};

◆ setExtensionVelocity()

template<MInt nDim, MInt nDist, class SysEqn >
void LsLbSurface< nDim, nDist, SysEqn >::setExtensionVelocity

Definition at line 411 of file lslbsurface.cpp.

411 {
412 // Revert the algorithm:
413 // Try to find a reasonable velocity value for every G0 cell...
414 for(MInt id = 0; id < a_noG0Cells(0); id++) {
415 const MInt cellId = a_G0CellId(id, 0);
416
417 if(lsSolver().a_isHalo(cellId)) {
418 continue;
419 }
420
421 const MInt mbCell = a_boundaryCellMb(cellId);
422
423 if(mbCell > -1) {
424 // Boundary cell found
425
426 for(MInt n = 0; n < nDim; n++) {
427 a_extensionVelocityG(cellId, n, 0) = a_mbCell().velocity(mbCell, n) * conversionLbLs.velocity;
428 }
429
430 if(std::isnan(a_extensionVelocityG(cellId, 0, 0))) {
431 std::cout << "Velocity nan in boundary cell..." << std::endl;
432 }
433
434 } else {
435 // No boundary cell found
436
437 // Find the nearest boundary cell by maximizing e * n
438 MFloat minBndDist = std::numeric_limits<MFloat>::min();
439 MInt minDistDir = -1;
440 for(MInt dist = 0; dist < a_noDistributions() - 1; dist++) {
441 MFloat bndDist = 0;
442 for(MInt n = 0; n < nDim; n++) {
444 }
445 IF_CONSTEXPR(nDim == 2) {
446 if(dist >= 4) {
447 bndDist /= SQRT2;
448 }
449 }
450 else {
451 if(dist >= 6 && dist < 18) {
452 bndDist /= SQRT2;
453 } else if(dist >= 18) {
454 bndDist /= SQRT3;
455 }
456 }
457 bndDist *= a_levelSetFunctionG(cellId, 0);
458
459 if(minBndDist < bndDist) {
460 minBndDist = bndDist;
461 minDistDir = dist;
462 }
463 }
464 const MInt neighbor = lbSolver().c_neighborId(cellId, minDistDir);
465
466 const MInt nextMbCell = a_boundaryCellMb(neighbor);
467
468 if(nextMbCell > -1) {
469 // Found the next possible boundary cell
470 for(MInt n = 0; n < nDim; n++) {
471 a_extensionVelocityG(cellId, n, 0) = a_mbCell().velocity(nextMbCell, n) * conversionLbLs.velocity;
472 }
473
474 if(std::isnan(a_extensionVelocityG(cellId, 0, 0))) {
475 std::cout << "Velocity nan in boundary cell..." << std::endl;
476 }
477
478 } else {
479 for(MInt n = 0; n < nDim; n++) {
480 a_extensionVelocityG(cellId, n, 0) = 0.0;
481 }
482 std::cout << "G0 cell " << lbSolver().c_globalId(cellId) << " neighbor " << lbSolver().c_globalId(neighbor)
483 << std::endl;
484
485 for(MInt dist = 0; dist < a_noDistributions() - 1; dist++) {
486 MFloat bndDist = 0;
487 for(MInt n = 0; n < nDim; n++) {
489 }
490 IF_CONSTEXPR(nDim == 2) {
491 if(dist >= 4) {
492 bndDist /= SQRT2;
493 }
494 }
495 else {
496 if(dist >= 6 && dist < 18) {
497 bndDist /= SQRT2;
498 } else if(dist >= 18) {
499 bndDist /= SQRT3;
500 }
501 }
502 bndDist *= a_levelSetFunctionG(cellId, 0);
503 std::cout << "Dist " << dist << " bndDist " << bndDist << " normal_y " << a_normalVectorG(cellId, 1, 0)
504 << " ppdfdir " << LbLatticeDescriptor<nDim, nDist>::ppdfDir(dist, 1) << std::endl;
505 }
506
507 mTerm(1, "Cant find corresponding LB bnd cell for given G0 cell. Should not happen.");
508 }
509 }
510 }
511}
MLong c_globalId(const MInt gCellId) const
MInt a_noG0Cells(MInt set) const
Definition: coupling.h:194
MFloat a_normalVectorG(const MInt gCellId, const MInt dim, const MInt set) const
Definition: coupling.h:211
MInt a_boundaryCellMb(const MInt cellId, const MInt id=0)
Definition: coupling.h:487
MFloat & a_extensionVelocityG(const MInt cellId, const MInt dim, const MInt setId)
Definition: coupling.h:226
MInt a_G0CellId(const MInt id, const MInt set) const
Definition: coupling.h:209
static constexpr MFloat ppdfDir(MInt i, MInt j)

◆ setExtensionVelocityB()

template<MInt nDim, MInt nDist, class SysEqn >
void LsLbSurface< nDim, nDist, SysEqn >::setExtensionVelocityB

Definition at line 514 of file lslbsurface.cpp.

514 {
515 // Collector is created after this, such that these velocities are from the time step n-1
516 for(MInt mbCell = 0; mbCell < a_mbCell().size(); mbCell++) {
517 const MInt cellId = a_mbCell().cellId(mbCell);
518
519 const MFloat uLB = a_mbCell().velocity(mbCell, 0);
520 const MFloat vLB = a_mbCell().velocity(mbCell, 1);
521
522 const MFloat uLS = uLB * conversionLbLs.velocity;
523 const MFloat vLS = vLB * conversionLbLs.velocity;
524
525 if(!std::isnan(uLS) && !std::isnan(vLS)) {
526 a_extensionVelocityG(cellId, 0, 0) = uLS;
527 a_extensionVelocityG(cellId, 1, 0) = vLS;
528
529
530 MInt minDistDir = -1;
531 MFloat minWallDistance = F2;
532 for(MInt dist = 0; dist < a_noDistributions() - 1; dist++) {
533 if(minWallDistance > a_mbCell().distance(mbCell, dist)) {
534 minWallDistance = a_mbCell().distance(mbCell, dist);
535 minDistDir = dist;
536 }
537 }
538
539 ASSERT(minDistDir > -1, "minDistDir not found!");
540
541 const MInt neighbor = lbSolver().c_neighborId(cellId, minDistDir);
542
543 if(neighbor == -1 || lsSolver().a_isHalo(neighbor)) {
544 continue;
545 }
546
547 // a_extensionVelocityG(cellId, 0, 0) = 0.0;
548 // a_extensionVelocityG(cellId, 1, 0) = v;
549 a_extensionVelocityG(neighbor, 0, 0) = uLS;
550 a_extensionVelocityG(neighbor, 1, 0) = vLS;
551 }
552
553 if(!lsSolver().a_isHalo(cellId)) {
554 // Set value to LS cell correspondig to the LB interface cell
555 if(std::isnan(uLS) || std::isnan(vLS)) {
556 std::cout << "attempt to set nan at cell " << cellId << " which is an halo " << lsSolver().a_isHalo(cellId)
557 << " which is in " << (a_levelSetFunctionMb(cellId, 0) > 0) << std::endl;
558 mTerm(1, "nan set");
559 }
560
561 a_extensionVelocityG(cellId, 0, 0) = uLS;
562 a_extensionVelocityG(cellId, 1, 0) = vLS;
563 }
564
565 // The LS solver has two layers of interface cells
566
567 // Find direction to the missing cell
568 MInt minDistDir = -1;
569 MFloat minWallDistance = F2;
570 for(MInt dist = 0; dist < a_noDistributions() - 1; dist++) {
571 if(minWallDistance > a_mbCell().distance(mbCell, dist)) {
572 minWallDistance = a_mbCell().distance(mbCell, dist);
573 minDistDir = dist;
574 }
575 }
576
577
578 ASSERT(minDistDir > -1, "minDistDir not found!");
579
580 const MInt neighbor = lbSolver().c_neighborId(cellId, minDistDir);
581
582 const MInt opposite = LbLatticeDescriptor<nDim, nDist>::oppositeDist(minDistDir);
583 const MInt oppositeNeighbor = lbSolver().c_neighborId(cellId, opposite);
584
585 if(neighbor == -1 || lsSolver().a_isHalo(neighbor) || lsSolver().a_isHalo(oppositeNeighbor)) {
586 continue;
587 }
588
589 if(std::isnan(uLS) || std::isnan(vLS)) {
590 std::cout << "attempt to set nan at neighbor " << neighbor << std::endl;
591 std::cout << "cell itself is halo " << lsSolver().a_isHalo(cellId) << std::endl;
592 std::cout << "extrap neighbor is halo " << lsSolver().a_isHalo(oppositeNeighbor) << std::endl;
593 mTerm(1, "nan set");
594 }
595
596 a_extensionVelocityG(neighbor, 0, 0) = uLS;
597 a_extensionVelocityG(neighbor, 1, 0) = vLS;
598 }
599}
static constexpr MInt oppositeDist(MInt i)

◆ subCouple()

template<MInt nDim, MInt nDist, class SysEqn >
void LsLbSurface< nDim, nDist, SysEqn >::subCouple ( MInt  ,
MInt  ,
std::vector< MBool > &   
)
inlineoverridevirtual

Implements Coupling.

Definition at line 154 of file lslbsurface.h.

154{};

◆ transferLevelSetFieldValues()

template<MInt nDim, MInt nDist, class SysEqn >
void LsLbSurface< nDim, nDist, SysEqn >::transferLevelSetFieldValues ( MBool  )

◆ updateBoundaryCellsFromGField()

template<MInt nDim, MInt nDist, class SysEqn >
void LsLbSurface< nDim, nDist, SysEqn >::updateBoundaryCellsFromGField ( )

◆ updateGeometry()

template<MInt nDim, MInt nDist, class SysEqn >
void LsLbSurface< nDim, nDist, SysEqn >::updateGeometry
private
Author
Tim Wegmann

Definition at line 688 of file lslbsurface.cpp.

688 {
689 TRACE();
690
691 lbSolver().m_geometryIntersection->m_noEmbeddedBodies = lbSolver().m_noEmbeddedBodies;
692 lbSolver().m_geometryIntersection->m_noLevelSetsUsedForMb = lbSolver().m_noLevelSetsUsedForMb;
693 lbSolver().m_geometryIntersection->m_bodyToSetTable = lsSolver().m_bodyToSetTable;
694 lbSolver().m_geometryIntersection->m_setToBodiesTable = lsSolver().m_setToBodiesTable;
695 lbSolver().m_geometryIntersection->m_noBodiesInSet = lsSolver().m_noBodiesInSet;
696}

Member Data Documentation

◆ bndryToVolumeMap

template<MInt nDim, MInt nDist, class SysEqn >
maia::coupling::Mapping LsLbSurface< nDim, nDist, SysEqn >::bndryToVolumeMap {}
private

Definition at line 136 of file lslbsurface.h.

◆ conversionLbLs

template<MInt nDim, MInt nDist, class SysEqn >
ConversionFactors LsLbSurface< nDim, nDist, SysEqn >::conversionLbLs
private

Definition at line 100 of file lslbsurface.h.

◆ conversionLsLb

template<MInt nDim, MInt nDist, class SysEqn >
ConversionFactors LsLbSurface< nDim, nDist, SysEqn >::conversionLsLb
private

Definition at line 99 of file lslbsurface.h.

◆ m_calcWallForces

template<MInt nDim, MInt nDist, class SysEqn >
MBool LsLbSurface< nDim, nDist, SysEqn >::m_calcWallForces {}
private

Definition at line 87 of file lslbsurface.h.

◆ m_Eo

template<MInt nDim, MInt nDist, class SysEqn >
MFloat LsLbSurface< nDim, nDist, SysEqn >::m_Eo = 1.0
private

Definition at line 105 of file lslbsurface.h.

◆ m_Ga

template<MInt nDim, MInt nDist, class SysEqn >
MFloat LsLbSurface< nDim, nDist, SysEqn >::m_Ga = 0.0
private

Definition at line 104 of file lslbsurface.h.

◆ m_gravity

template<MInt nDim, MInt nDist, class SysEqn >
MFloat LsLbSurface< nDim, nDist, SysEqn >::m_gravity {}
private

Definition at line 103 of file lslbsurface.h.

◆ m_initCurvature

template<MInt nDim, MInt nDist, class SysEqn >
MFloat LsLbSurface< nDim, nDist, SysEqn >::m_initCurvature = 0.0
private

Definition at line 106 of file lslbsurface.h.

◆ m_initHeight

template<MInt nDim, MInt nDist, class SysEqn >
MFloat LsLbSurface< nDim, nDist, SysEqn >::m_initHeight = 0.0
private

Definition at line 107 of file lslbsurface.h.

◆ m_lbSolverId

template<MInt nDim, MInt nDist, class SysEqn >
MInt LsLbSurface< nDim, nDist, SysEqn >::m_lbSolverId {}

Definition at line 39 of file lslbsurface.h.

◆ m_lsSolverId

template<MInt nDim, MInt nDist, class SysEqn >
MInt LsLbSurface< nDim, nDist, SysEqn >::m_lsSolverId {}

Definition at line 40 of file lslbsurface.h.

◆ m_noCorners

template<MInt nDim, MInt nDist, class SysEqn >
constexpr MInt LsLbSurface< nDim, nDist, SysEqn >::m_noCorners = (nDim == 2) ? 4 : 8
staticconstexpr

Definition at line 42 of file lslbsurface.h.

◆ m_static_updateLevelSetFlowSolver_firstRun

template<MInt nDim, MInt nDist, class SysEqn >
MBool LsLbSurface< nDim, nDist, SysEqn >::m_static_updateLevelSetFlowSolver_firstRun = true

Definition at line 44 of file lslbsurface.h.

◆ m_surfaceTension

template<MInt nDim, MInt nDist, class SysEqn >
MFloat LsLbSurface< nDim, nDist, SysEqn >::m_surfaceTension = 0.0
private

Definition at line 102 of file lslbsurface.h.

◆ m_timers

template<MInt nDim, MInt nDist, class SysEqn >
std::array<MInt, Timers::_count> LsLbSurface< nDim, nDist, SysEqn >::m_timers
private

Definition at line 133 of file lslbsurface.h.

◆ volumeToBndryMap

template<MInt nDim, MInt nDist, class SysEqn >
maia::coupling::Mapping LsLbSurface< nDim, nDist, SysEqn >::volumeToBndryMap {}
private

Definition at line 137 of file lslbsurface.h.


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