/** * @file material_selector_tmpl.hh * * @author Lucas Frerot * @author Nicolas Richart * * @date creation: Wed Nov 13 2013 * @date last modification: Fri May 01 2015 * * @brief Implementation of the template MaterialSelector * * @section LICENSE * * Copyright (©) 2014, 2015 EPFL (Ecole Polytechnique Fédérale de Lausanne) * Laboratory (LSMS - Laboratoire de Simulation en Mécanique des Solides) * * Akantu is free software: you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 3 of the License, or (at your option) any * later version. * * Akantu is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR * A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with Akantu. If not, see . * */ /* -------------------------------------------------------------------------- */ #ifndef __AKANTU_MATERIAL_SELECTOR_TMPL_HH__ #define __AKANTU_MATERIAL_SELECTOR_TMPL_HH__ __BEGIN_AKANTU__ /* -------------------------------------------------------------------------- */ template MeshDataMaterialSelector::MeshDataMaterialSelector(const std::string & name, const SolidMechanicsModel & model, UInt first_index): ElementDataMaterialSelector(model.getMesh().getData(name), model, first_index) {} /* -------------------------------------------------------------------------- */ template<> inline UInt ElementDataMaterialSelector::operator() (const Element & element) { try { std::string material_name = this->elementData(element); return model.getMaterialIndex(material_name); } catch (...) { return MaterialSelector::operator()(element); } } /* -------------------------------------------------------------------------- */ template<> inline UInt ElementDataMaterialSelector::operator() (const Element & element) { try { return this->elementData(element) - first_index; } catch (...) { return MaterialSelector::operator()(element); } } __END_AKANTU__ #endif /* __AKANTU_MATERIAL_SELECTOR_TMPL_HH__ */