#ifndef MEDUSA_BITS_DOMAINS_TRANSLATEDSHAPE_HPP_ #define MEDUSA_BITS_DOMAINS_TRANSLATEDSHAPE_HPP_ /** * @file * Implementation of translated domain shapes. */ #include "TranslatedShape_fwd.hpp" #include "DomainShape.hpp" #include "DomainDiscretization.hpp" #include namespace mm { template TranslatedShape::TranslatedShape(const DomainShape& sh, const vec_t& a) : sh(sh), a(a) { auto* tsh = dynamic_cast*>(&sh); if (tsh != nullptr) { // collapse double translations this->sh = tsh->sh; this->a += tsh->a; } } template DomainDiscretization TranslatedShape::discretizeBoundaryWithStep(scalar_t step, int type) const { auto d = sh->discretizeBoundaryWithStep(step, type); d.translate(a); return d; } template DomainDiscretization TranslatedShape::discretizeWithStep(scalar_t step, int internal_type, int boundary_type) const { auto d = sh->discretizeWithStep(step, internal_type, boundary_type); d.translate(a); return d; } template DomainDiscretization TranslatedShape::discretizeWithDensity(const std::function& dr, int internal_type, int boundary_type) const { auto d = sh->discretizeWithDensity(dr, internal_type, boundary_type); d.translate(a); return d; } template DomainDiscretization TranslatedShape::discretizeBoundaryWithDensity(const std::function& dr, int type) const { auto d = sh->discretizeBoundaryWithDensity(dr, type); d.translate(a); return d; } } // namespace mm #endif // MEDUSA_BITS_DOMAINS_TRANSLATEDSHAPE_HPP_