#include "reduce_domain_to_axis.hpp" #include "axis_algorithm_reduce_domain.hpp" #include "type.hpp" #include "axis.hpp" #include "domain.hpp" namespace xios { /// ////////////////////// Définitions ////////////////////// /// CReduceDomainToAxis::CReduceDomainToAxis(void) : CObjectTemplate(), CReduceDomainToAxisAttributes(), CTransformation() { /* Ne rien faire de plus */ } CReduceDomainToAxis::CReduceDomainToAxis(const StdString & id) : CObjectTemplate(id), CReduceDomainToAxisAttributes(), CTransformation() { /* Ne rien faire de plus */ } CReduceDomainToAxis::~CReduceDomainToAxis(void) {} CTransformation* CReduceDomainToAxis::create(const StdString& id, xml::CXMLNode* node) { CReduceDomainToAxis* reduceDomain = CReduceDomainToAxisGroup::get("reduce_domain_to_axis_definition")->createChild(id); if (node) reduceDomain->parse(*node); return static_cast*>(reduceDomain); } bool CReduceDomainToAxis::registerTrans() { return registerTransformation(TRANS_REDUCE_DOMAIN_TO_AXIS, {create, getTransformation}); } bool CReduceDomainToAxis::_dummyRegistered = CReduceDomainToAxis::registerTrans(); //---------------------------------------------------------------- StdString CReduceDomainToAxis::GetName(void) { return StdString("reduce_domain_to_axis"); } StdString CReduceDomainToAxis::GetDefName(void) { return StdString("reduce_domain_to_axis"); } ENodeType CReduceDomainToAxis::GetType(void) { return eReduceDomainToAxis; } void CReduceDomainToAxis::checkValid(CAxis* axisDst, CDomain* domainSrc) { if (CDomain::type_attr::unstructured == domainSrc->type) ERROR("CReduceDomainToAxis::checkValid(CAxis* axisDst, CDomain* domainSrc)", << "Domain reduction is only supported for rectilinear or curvillinear grid." << "Domain source " <getId() << std::endl << "Axis destination " << axisDst->getId()); if (this->operation.isEmpty()) ERROR("CReduceDomainToAxis::checkValid(CAxis* axisDst, CDomain* domainSrc)", << "An operation must be defined." << "Domain source " <getId() << std::endl << "Axis destination " << axisDst->getId()); if (this->direction.isEmpty()) ERROR("CReduceDomainToAxis::checkValid(CAxis* axisDst, CDomain* domainSrc)", << "A direction to apply the operation must be defined. It should be: 'iDir' or 'jDir'" << "Domain source " <getId() << std::endl << "Axis destination " << axisDst->getId()); if (this->local.isEmpty()) local=false ; } shared_ptr CReduceDomainToAxis::createAlgorithm(bool isSource, CGrid* gridDst, CGrid* gridSrc, int elementPositionInGrid, std::map& elementPositionInGridSrc2ScalarPosition, std::map& elementPositionInGridSrc2AxisPosition, std::map& elementPositionInGridSrc2DomainPosition, std::map& elementPositionInGridDst2ScalarPosition, std::map& elementPositionInGridDst2AxisPosition, std::map& elementPositionInGridDst2DomainPosition) { return CAxisAlgorithmReduceDomain::create(isSource, gridDst, gridSrc, this, elementPositionInGrid, elementPositionInGridSrc2ScalarPosition, elementPositionInGridSrc2AxisPosition, elementPositionInGridSrc2DomainPosition, elementPositionInGridDst2ScalarPosition, elementPositionInGridDst2AxisPosition, elementPositionInGridDst2DomainPosition) ; } }