// Set boundary fluxes void RampIBC::primBC(FArrayBox& a_WGdnv, const FArrayBox& a_Wextrap, const FArrayBox& a_W, const int& a_dir, const Side::LoHiSide& a_side, const Real& a_time) { CH_assert(m_isFortranCommonSet == true); CH_assert(m_isDefined == true); // Neither the x or y direction can be periodic if ((a_dir == 0 || a_dir == 1) && m_domain.isPeriodic(a_dir)) { MayDay::Error("RampIBC::primBC: Neither the x or y boundaries can be periodic"); } Box boundaryBox; getBoundaryFaces(boundaryBox, a_WGdnv.box(), a_dir, a_side); if (! boundaryBox.isEmpty() ) { // Set the boundary fluxes int lohisign = sign(a_side); FORT_RAMPBCF(CHF_FRA(a_WGdnv), CHF_CONST_FRA(a_Wextrap), CHF_CONST_FRA(a_W), CHF_CONST_REAL(a_time), CHF_CONST_INT(lohisign), CHF_CONST_REAL(m_dx), CHF_CONST_INT(a_dir), CHF_BOX(boundaryBox)); } }
/// Set boundary primitive values. void RSIBC::primBC(FArrayBox& a_WGdnv, const FArrayBox& a_WShiftInside, const FArrayBox& a_W, const int& a_dir, const Side::LoHiSide& a_side, const Real& a_time) { CH_assert(m_isFortranCommonSet == true); // CH_assert(m_isFortranCommonLESet == true); CH_assert(m_isDefined == true); Box boundaryBox; getBoundaryFaces(boundaryBox, a_WGdnv.box(), a_dir, a_side); // In periodic case, this doesn't do anything if (!m_domain.isPeriodic(a_dir)) { int lohisign; Box tmp = a_WGdnv.box(); // Determine which side and thus shifting directions lohisign = sign(a_side); tmp.shiftHalf(a_dir,lohisign); // Is there a domain boundary next to this grid if (!m_domain.contains(tmp)) { tmp &= m_domain; Box boundaryBox; // Find the strip of cells next to the domain boundary if (a_side == Side::Lo) { boundaryBox = bdryLo(tmp,a_dir); } else { boundaryBox = bdryHi(tmp,a_dir); } if(lohisign == -1 && a_dir == 1) { if(m_tmpBdryDataSet) { FORT_RSFAULTBCF(CHF_FRA(a_WGdnv), CHF_CONST_FRA(a_WShiftInside), CHF_CONST_FRA(a_W), CHF_CONST_FRA1((*m_tmpBdryData),RX_PSI), CHF_CONST_INT(lohisign), CHF_CONST_REAL(m_dx), CHF_CONST_REAL(a_time), CHF_CONST_INT(a_dir), CHF_BOX(boundaryBox)); } else { FORT_RSFAULTBCF(CHF_FRA(a_WGdnv), CHF_CONST_FRA(a_WShiftInside), CHF_CONST_FRA(a_W), CHF_CONST_FRA1((*m_bdryData),RX_PSI), CHF_CONST_INT(lohisign), CHF_CONST_REAL(m_dx), CHF_CONST_REAL(a_time), CHF_CONST_INT(a_dir), CHF_BOX(boundaryBox)); } } else if(m_boundaryType[a_dir*2 + (lohisign+1)/2] == 0) { FORT_LINELASTOUTBCF(CHF_FRA(a_WGdnv), CHF_CONST_FRA(a_WShiftInside), CHF_CONST_FRA(a_W), CHF_CONST_INT(lohisign), CHF_CONST_REAL(m_dx), CHF_CONST_INT(a_dir), CHF_BOX(boundaryBox)); } else if(m_boundaryType[a_dir*2 + (lohisign+1)/2] == 1) { FORT_LINELASTFREEBCF(CHF_FRA(a_WGdnv), CHF_CONST_FRA(a_WShiftInside), CHF_CONST_FRA(a_W), CHF_CONST_INT(lohisign), CHF_CONST_REAL(m_dx), CHF_CONST_INT(a_dir), CHF_BOX(boundaryBox)); } else { MayDay::Error("Invalid Boundary Type"); } } } }