Exemplo n.º 1
0
bool SiteIsEdge(const Site& site) {
	const Index& ind = site.GetIndex();
	if (_CheckMin(ind))
		return true;

	if (_CheckMax(ind, site.GetBlock().GetDomain().GetSiteCounts() - 1))
		return true;
	return false;
}
Exemplo n.º 2
0
void GeometryGenerator::WriteFluidSite(BlockWriter& blockWriter, Site& site) {
	blockWriter << static_cast<unsigned int>(geometry::FLUID);

	// Iterate over the displacements of the neighbourhood
	for (unsigned int i = 0; i < Neighbours::n; ++i) {
		unsigned int cutType = site.Links[i].Type;

		if (cutType == geometry::CUT_NONE) {
			blockWriter << static_cast<unsigned int>(geometry::CUT_NONE);
		} else if (cutType == geometry::CUT_WALL
				|| cutType == geometry::CUT_INLET
				|| cutType == geometry::CUT_OUTLET) {
			blockWriter << static_cast<unsigned int>(cutType);
			if (cutType == geometry::CUT_INLET
					|| cutType == geometry::CUT_OUTLET) {
				blockWriter << static_cast<unsigned int>(site.Links[i].IoletId);
			}
			blockWriter << static_cast<float>(site.Links[i].Distance);
		} else {
			// TODO: throw some exception
			std::cout << "Unknown cut type "
					<< static_cast<unsigned int>(cutType) << " for site "
					<< site.GetIndex() << std::endl;
		}
	}

	// Indicate whether the current fluid site has a wall normal available and
	// if so write it.
	if (site.WallNormalAvailable) {
		blockWriter
				<< static_cast<unsigned int>(geometry::WALL_NORMAL_AVAILABLE);
		blockWriter << static_cast<float>(site.WallNormal[0]);
		blockWriter << static_cast<float>(site.WallNormal[1]);
		blockWriter << static_cast<float>(site.WallNormal[2]);
	} else {
		blockWriter
				<< static_cast<unsigned int>(geometry::WALL_NORMAL_NOT_AVAILABLE);
	}
}