X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMEDCoupling%2FMEDCouplingTimeDiscretization.cxx;h=3f27e506ae0033032bab5ee8bc8ed04969b0ee63;hb=a7a49bcd1fbbf89a8d7e4de71baf27d323b0a109;hp=7836e91c4efddfb39a4bfb6b65e3eaad02481e89;hpb=f1a947b32a36d8dc8e3079b25305bb50e8cb59a0;p=tools%2Fmedcoupling.git diff --git a/src/MEDCoupling/MEDCouplingTimeDiscretization.cxx b/src/MEDCoupling/MEDCouplingTimeDiscretization.cxx index 7836e91c4..3f27e506a 100644 --- a/src/MEDCoupling/MEDCouplingTimeDiscretization.cxx +++ b/src/MEDCoupling/MEDCouplingTimeDiscretization.cxx @@ -1,9 +1,9 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D +// Copyright (C) 2007-2014 CEA/DEN, EDF R&D // // This library 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 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -52,7 +52,7 @@ const char MEDCouplingLinearTime::REPR[]="Linear time between 2 time steps."; MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::New(TypeOfTimeDiscretization type) { switch(type) - { + { case MEDCouplingNoTimeLabel::DISCRETIZATION: return new MEDCouplingNoTimeLabel; case MEDCouplingWithTimeStep::DISCRETIZATION: @@ -63,10 +63,10 @@ MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::New(TypeOfTimeDisc return new MEDCouplingLinearTime; default: throw INTERP_KERNEL::Exception("Time discretization not implemented yet"); - } + } } -void MEDCouplingTimeDiscretization::copyTinyAttrFrom(const MEDCouplingTimeDiscretization& other) throw(INTERP_KERNEL::Exception) +void MEDCouplingTimeDiscretization::copyTinyAttrFrom(const MEDCouplingTimeDiscretization& other) { _time_tolerance=other._time_tolerance; _time_unit=other._time_unit; @@ -79,7 +79,7 @@ void MEDCouplingTimeDiscretization::copyTinyStringsFrom(const MEDCouplingTimeDis _array->copyStringInfoFrom(*other._array); } -void MEDCouplingTimeDiscretization::checkCoherency() const throw(INTERP_KERNEL::Exception) +void MEDCouplingTimeDiscretization::checkCoherency() const { if(!_array) throw INTERP_KERNEL::Exception("Field invalid because no values set !"); @@ -93,11 +93,17 @@ void MEDCouplingTimeDiscretization::updateTime() const updateTimeWith(*_array); } -std::size_t MEDCouplingTimeDiscretization::getHeapMemorySize() const +std::size_t MEDCouplingTimeDiscretization::getHeapMemorySizeWithoutChildren() const { - std::size_t ret=_time_unit.capacity(); + std::size_t ret(_time_unit.capacity()); + return ret; +} + +std::vector MEDCouplingTimeDiscretization::getDirectChildren() const +{ + std::vector ret; if(_array) - ret+=_array->getHeapMemorySize(); + ret.push_back(_array); return ret; } @@ -258,7 +264,7 @@ void MEDCouplingTimeDiscretization::finishUnserialization(const std::vector _time_tolerance=tinyInfoD[0]; int nbOfCompo=_array->getNumberOfComponents(); for(int i=0;isetInfoOnComponent(i,tinyInfoS[i].c_str()); + _array->setInfoOnComponent(i,tinyInfoS[i]); } void MEDCouplingTimeDiscretization::getTinySerializationDbleInformation(std::vector& tinyInfo) const @@ -320,7 +326,7 @@ void MEDCouplingTimeDiscretization::setEndArray(DataArrayDouble *array, TimeLabe throw INTERP_KERNEL::Exception("setEndArray not available for this type of time discretization !"); } -void MEDCouplingTimeDiscretization::setArrays(const std::vector& arrays, TimeLabel *owner) throw(INTERP_KERNEL::Exception) +void MEDCouplingTimeDiscretization::setArrays(const std::vector& arrays, TimeLabel *owner) { if(arrays.size()!=1) throw INTERP_KERNEL::Exception("MEDCouplingTimeDiscretization::setArrays : number of arrays must be one."); @@ -333,7 +339,7 @@ void MEDCouplingTimeDiscretization::getArrays(std::vector& ar arrays[0]=_array; } -bool MEDCouplingTimeDiscretization::isBefore(const MEDCouplingTimeDiscretization *other) const throw(INTERP_KERNEL::Exception) +bool MEDCouplingTimeDiscretization::isBefore(const MEDCouplingTimeDiscretization *other) const { int iteration,order; double time1=getEndTime(iteration,order)-_time_tolerance; @@ -341,7 +347,7 @@ bool MEDCouplingTimeDiscretization::isBefore(const MEDCouplingTimeDiscretization return time1<=time2; } -bool MEDCouplingTimeDiscretization::isStrictlyBefore(const MEDCouplingTimeDiscretization *other) const throw(INTERP_KERNEL::Exception) +bool MEDCouplingTimeDiscretization::isStrictlyBefore(const MEDCouplingTimeDiscretization *other) const { int iteration,order; double time1=getEndTime(iteration,order)+_time_tolerance; @@ -349,14 +355,14 @@ bool MEDCouplingTimeDiscretization::isStrictlyBefore(const MEDCouplingTimeDiscre return time1setTimeUnit(getTimeUnit()); std::vector arrays; getArrays(arrays); std::vector< MEDCouplingAutoRefCountObjectPtr > arrays2(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;jdoublyContractedProduct(); @@ -364,18 +370,18 @@ MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::doublyContractedPr arrays2[j]=0; } std::vector arrays3(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;jsetArrays(arrays3,0); return ret; } -MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::determinant() const throw(INTERP_KERNEL::Exception) +MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::determinant() const { std::vector arrays; getArrays(arrays); std::vector< MEDCouplingAutoRefCountObjectPtr > arrays2(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;jdeterminant(); @@ -383,7 +389,7 @@ MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::determinant() cons arrays2[j]=0; } std::vector arrays3(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;jsetTimeUnit(getTimeUnit()); @@ -391,12 +397,12 @@ MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::determinant() cons return ret; } -MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::eigenValues() const throw(INTERP_KERNEL::Exception) +MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::eigenValues() const { std::vector arrays; getArrays(arrays); std::vector< MEDCouplingAutoRefCountObjectPtr > arrays2(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;jeigenValues(); @@ -404,7 +410,7 @@ MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::eigenValues() cons arrays2[j]=0; } std::vector arrays3(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;jsetTimeUnit(getTimeUnit()); @@ -412,12 +418,12 @@ MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::eigenValues() cons return ret; } -MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::eigenVectors() const throw(INTERP_KERNEL::Exception) +MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::eigenVectors() const { std::vector arrays; getArrays(arrays); std::vector< MEDCouplingAutoRefCountObjectPtr > arrays2(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;jeigenVectors(); @@ -425,7 +431,7 @@ MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::eigenVectors() con arrays2[j]=0; } std::vector arrays3(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;jsetTimeUnit(getTimeUnit()); @@ -433,12 +439,12 @@ MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::eigenVectors() con return ret; } -MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::inverse() const throw(INTERP_KERNEL::Exception) +MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::inverse() const { std::vector arrays; getArrays(arrays); std::vector< MEDCouplingAutoRefCountObjectPtr > arrays2(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;jinverse(); @@ -446,7 +452,7 @@ MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::inverse() const th arrays2[j]=0; } std::vector arrays3(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;jsetTimeUnit(getTimeUnit()); @@ -454,12 +460,12 @@ MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::inverse() const th return ret; } -MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::trace() const throw(INTERP_KERNEL::Exception) +MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::trace() const { std::vector arrays; getArrays(arrays); std::vector< MEDCouplingAutoRefCountObjectPtr > arrays2(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;jtrace(); @@ -467,7 +473,7 @@ MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::trace() const thro arrays2[j]=0; } std::vector arrays3(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;jsetTimeUnit(getTimeUnit()); @@ -475,12 +481,12 @@ MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::trace() const thro return ret; } -MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::deviator() const throw(INTERP_KERNEL::Exception) +MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::deviator() const { std::vector arrays; getArrays(arrays); std::vector< MEDCouplingAutoRefCountObjectPtr > arrays2(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;jdeviator(); @@ -488,7 +494,7 @@ MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::deviator() const t arrays2[j]=0; } std::vector arrays3(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;jsetTimeUnit(getTimeUnit()); @@ -496,12 +502,12 @@ MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::deviator() const t return ret; } -MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::magnitude() const throw(INTERP_KERNEL::Exception) +MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::magnitude() const { std::vector arrays; getArrays(arrays); std::vector< MEDCouplingAutoRefCountObjectPtr > arrays2(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;jmagnitude(); @@ -509,7 +515,28 @@ MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::magnitude() const arrays2[j]=0; } std::vector arrays3(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;jsetTimeUnit(getTimeUnit()); + ret->setArrays(arrays3,0); + return ret; +} + +MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::negate() const +{ + std::vector arrays; + getArrays(arrays); + std::vector< MEDCouplingAutoRefCountObjectPtr > arrays2(arrays.size()); + for(std::size_t j=0;jnegate(); + else + arrays2[j]=0; + } + std::vector arrays3(arrays.size()); + for(std::size_t j=0;jsetTimeUnit(getTimeUnit()); @@ -517,12 +544,12 @@ MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::magnitude() const return ret; } -MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::maxPerTuple() const throw(INTERP_KERNEL::Exception) +MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::maxPerTuple() const { std::vector arrays; getArrays(arrays); std::vector< MEDCouplingAutoRefCountObjectPtr > arrays2(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;jmaxPerTuple(); @@ -530,7 +557,7 @@ MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::maxPerTuple() cons arrays2[j]=0; } std::vector arrays3(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;jsetTimeUnit(getTimeUnit()); @@ -538,20 +565,20 @@ MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::maxPerTuple() cons return ret; } -MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::keepSelectedComponents(const std::vector& compoIds) const throw(INTERP_KERNEL::Exception) +MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::keepSelectedComponents(const std::vector& compoIds) const { std::vector arrays; getArrays(arrays); std::vector< MEDCouplingAutoRefCountObjectPtr > arrays2(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;jkeepSelectedComponents(compoIds); + arrays2[j]=static_cast(arrays[j]->keepSelectedComponents(compoIds)); else arrays2[j]=0; } std::vector arrays3(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;jsetTimeUnit(getTimeUnit()); @@ -559,14 +586,14 @@ MEDCouplingTimeDiscretization *MEDCouplingTimeDiscretization::keepSelectedCompon return ret; } -void MEDCouplingTimeDiscretization::setSelectedComponents(const MEDCouplingTimeDiscretization *other, const std::vector& compoIds) throw(INTERP_KERNEL::Exception) +void MEDCouplingTimeDiscretization::setSelectedComponents(const MEDCouplingTimeDiscretization *other, const std::vector& compoIds) { std::vector arrays1,arrays2; getArrays(arrays1); other->getArrays(arrays2); if(arrays1.size()!=arrays2.size()) throw INTERP_KERNEL::Exception("TimeDiscretization::setSelectedComponents : number of arrays mismatch !"); - for(unsigned int i=0;isetSelectedComponents(arrays2[i],compoIds); @@ -575,12 +602,12 @@ void MEDCouplingTimeDiscretization::setSelectedComponents(const MEDCouplingTimeD } } -void MEDCouplingTimeDiscretization::changeNbOfComponents(int newNbOfComp, double dftValue) throw(INTERP_KERNEL::Exception) +void MEDCouplingTimeDiscretization::changeNbOfComponents(int newNbOfComp, double dftValue) { std::vector arrays; getArrays(arrays); std::vector< MEDCouplingAutoRefCountObjectPtr > arrays2(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;jchangeNbOfComponents(newNbOfComp,dftValue); @@ -588,16 +615,16 @@ void MEDCouplingTimeDiscretization::changeNbOfComponents(int newNbOfComp, double arrays2[j]=0; } std::vector arrays3(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;j arrays; getArrays(arrays); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;jsortPerTuple(asc); @@ -609,33 +636,61 @@ void MEDCouplingTimeDiscretization::setUniformValue(int nbOfTuple, int nbOfCompo std::vector arrays; getArrays(arrays); std::vector< MEDCouplingAutoRefCountObjectPtr > arrays2(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;jincrRef(); - arrays[j]->fillWithValue(value); - arrays2[j]=arrays[j]; + arrays2[j]=arrays[j]->changeNbOfComponents(nbOfCompo,value); + arrays2[j]->fillWithValue(value); } else { - DataArrayDouble *tmp=DataArrayDouble::New(); - tmp->alloc(nbOfTuple,nbOfCompo); - tmp->fillWithValue(value); - arrays2[j]=tmp; + arrays2[j]=DataArrayDouble::New(); + arrays2[j]->alloc(nbOfTuple,nbOfCompo); + arrays2[j]->fillWithValue(value); } } std::vector arrays3(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;j arrays; + getArrays(arrays); + std::vector< MEDCouplingAutoRefCountObjectPtr > arrays2(arrays.size()); + bool newArr=false; + for(std::size_t j=0;jincrRef(); + arrays2[j]->fillWithValue(value); + } + else + { + newArr=true; + arrays2[j]=DataArrayDouble::New(); + arrays2[j]->alloc(nbOfTuple,1); + arrays2[j]->fillWithValue(value); + } + } + if(newArr) + { + std::vector arrays3(arrays.size()); + for(std::size_t j=0;j arrays; getArrays(arrays); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;japplyLin(a,b,compoId); @@ -647,7 +702,7 @@ void MEDCouplingTimeDiscretization::applyFunc(int nbOfComp, FunctionToEvaluate f std::vector arrays; getArrays(arrays); std::vector< MEDCouplingAutoRefCountObjectPtr > arrays2(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;japplyFunc(nbOfComp,func); @@ -655,17 +710,17 @@ void MEDCouplingTimeDiscretization::applyFunc(int nbOfComp, FunctionToEvaluate f arrays2[j]=0; } std::vector arrays3(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;j arrays; getArrays(arrays); std::vector< MEDCouplingAutoRefCountObjectPtr > arrays2(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;japplyFunc(nbOfComp,func); @@ -673,17 +728,17 @@ void MEDCouplingTimeDiscretization::applyFunc(int nbOfComp, const char *func) arrays2[j]=0; } std::vector arrays3(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;j arrays; getArrays(arrays); std::vector< MEDCouplingAutoRefCountObjectPtr > arrays2(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;japplyFunc2(nbOfComp,func); @@ -691,17 +746,17 @@ void MEDCouplingTimeDiscretization::applyFunc2(int nbOfComp, const char *func) arrays2[j]=0; } std::vector arrays3(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;j& varsOrder, const char *func) +void MEDCouplingTimeDiscretization::applyFunc3(int nbOfComp, const std::vector& varsOrder, const std::string& func) { std::vector arrays; getArrays(arrays); std::vector< MEDCouplingAutoRefCountObjectPtr > arrays2(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;japplyFunc3(nbOfComp,varsOrder,func); @@ -709,17 +764,17 @@ void MEDCouplingTimeDiscretization::applyFunc3(int nbOfComp, const std::vector arrays3(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;j arrays; getArrays(arrays); std::vector< MEDCouplingAutoRefCountObjectPtr > arrays2(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;japplyFunc(func); @@ -727,81 +782,81 @@ void MEDCouplingTimeDiscretization::applyFunc(const char *func) arrays2[j]=0; } std::vector arrays3(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;j arrays; getArrays(arrays); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;japplyFuncFast32(func); } } -void MEDCouplingTimeDiscretization::applyFuncFast64(const char *func) +void MEDCouplingTimeDiscretization::applyFuncFast64(const std::string& func) { std::vector arrays; getArrays(arrays); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;japplyFuncFast64(func); } } -void MEDCouplingTimeDiscretization::fillFromAnalytic(const DataArrayDouble *loc, int nbOfComp, FunctionToEvaluate func) throw(INTERP_KERNEL::Exception) +void MEDCouplingTimeDiscretization::fillFromAnalytic(const DataArrayDouble *loc, int nbOfComp, FunctionToEvaluate func) { std::vector arrays; getArrays(arrays); std::vector< MEDCouplingAutoRefCountObjectPtr > arrays2(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;japplyFunc(nbOfComp,func); std::vector arrays3(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;j arrays; getArrays(arrays); std::vector< MEDCouplingAutoRefCountObjectPtr > arrays2(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;japplyFunc(nbOfComp,func); std::vector arrays3(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;j arrays; getArrays(arrays); std::vector< MEDCouplingAutoRefCountObjectPtr > arrays2(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;japplyFunc2(nbOfComp,func); std::vector arrays3(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;j& varsOrder, const char *func) throw(INTERP_KERNEL::Exception) +void MEDCouplingTimeDiscretization::fillFromAnalytic3(const DataArrayDouble *loc, int nbOfComp, const std::vector& varsOrder, const std::string& func) { std::vector arrays; getArrays(arrays); std::vector< MEDCouplingAutoRefCountObjectPtr > arrays2(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;japplyFunc3(nbOfComp,varsOrder,func); std::vector arrays3(arrays.size()); - for(int j=0;j<(int)arrays.size();j++) + for(std::size_t j=0;jdivideEqual(other->getArray()); } +MEDCouplingTimeDiscretization *MEDCouplingNoTimeLabel::pow(const MEDCouplingTimeDiscretization *other) const +{ + const MEDCouplingNoTimeLabel *otherC=dynamic_cast(other); + if(!otherC) + throw INTERP_KERNEL::Exception("pow on mismatched time discretization !"); + MEDCouplingAutoRefCountObjectPtr arr=DataArrayDouble::Pow(getArray(),other->getArray()); + MEDCouplingNoTimeLabel *ret=new MEDCouplingNoTimeLabel; + ret->setArray(arr,0); + return ret; +} + +void MEDCouplingNoTimeLabel::powEqual(const MEDCouplingTimeDiscretization *other) +{ + const MEDCouplingNoTimeLabel *otherC=dynamic_cast(other); + if(!otherC) + throw INTERP_KERNEL::Exception("NoTimeLabel::powEqual on mismatched time discretization !"); + if(!getArray()) + throw INTERP_KERNEL::Exception("MEDCouplingNoTimeLabel::powEqual : Data Array is NULL !"); + getArray()->powEqual(other->getArray()); +} + MEDCouplingTimeDiscretization *MEDCouplingNoTimeLabel::performCpy(bool deepCpy) const { return new MEDCouplingNoTimeLabel(*this,deepCpy); } -void MEDCouplingNoTimeLabel::checkTimePresence(double time) const throw(INTERP_KERNEL::Exception) +void MEDCouplingNoTimeLabel::checkTimePresence(double time) const { throw INTERP_KERNEL::Exception(EXCEPTION_MSG); } -std::vector< const DataArrayDouble *> MEDCouplingNoTimeLabel::getArraysForTime(double time) const throw(INTERP_KERNEL::Exception) +std::vector< const DataArrayDouble *> MEDCouplingNoTimeLabel::getArraysForTime(double time) const { throw INTERP_KERNEL::Exception(EXCEPTION_MSG); } @@ -1079,72 +1155,72 @@ void MEDCouplingNoTimeLabel::getValueForTime(double time, const std::vector& tiny } MEDCouplingWithTimeStep::MEDCouplingWithTimeStep(const MEDCouplingWithTimeStep& other, bool deepCpy):MEDCouplingTimeDiscretization(other,deepCpy), - _time(other._time),_iteration(other._iteration),_order(other._order) + _time(other._time),_iteration(other._iteration),_order(other._order) { } @@ -1191,7 +1267,7 @@ std::string MEDCouplingWithTimeStep::getStringRepr() const return stream.str(); } -void MEDCouplingWithTimeStep::synchronizeTimeWith(const MEDCouplingMesh *mesh) throw(INTERP_KERNEL::Exception) +void MEDCouplingWithTimeStep::synchronizeTimeWith(const MEDCouplingMesh *mesh) { if(!mesh) throw INTERP_KERNEL::Exception("MEDCouplingWithTimeStep::synchronizeTimeWith : mesh instance is NULL ! Impossible to synchronize time !"); @@ -1341,7 +1417,7 @@ bool MEDCouplingWithTimeStep::isEqualWithoutConsideringStr(const MEDCouplingTime return MEDCouplingTimeDiscretization::isEqualWithoutConsideringStr(other,prec); } -void MEDCouplingWithTimeStep::copyTinyAttrFrom(const MEDCouplingTimeDiscretization& other) throw(INTERP_KERNEL::Exception) +void MEDCouplingWithTimeStep::copyTinyAttrFrom(const MEDCouplingTimeDiscretization& other) { MEDCouplingTimeDiscretization::copyTinyAttrFrom(other); const MEDCouplingWithTimeStep *otherC=dynamic_cast(&other); @@ -1531,17 +1607,41 @@ void MEDCouplingWithTimeStep::divideEqual(const MEDCouplingTimeDiscretization *o getArray()->divideEqual(other->getArray()); } +MEDCouplingTimeDiscretization *MEDCouplingWithTimeStep::pow(const MEDCouplingTimeDiscretization *other) const +{ + const MEDCouplingWithTimeStep *otherC=dynamic_cast(other); + if(!otherC) + throw INTERP_KERNEL::Exception("WithTimeStep::pow on mismatched time discretization !"); + MEDCouplingAutoRefCountObjectPtr arr=DataArrayDouble::Pow(getArray(),other->getArray()); + MEDCouplingWithTimeStep *ret=new MEDCouplingWithTimeStep; + ret->setArray(arr,0); + int tmp1,tmp2; + double tmp3=getStartTime(tmp1,tmp2); + ret->setStartTime(tmp3,tmp1,tmp2); + return ret; +} + +void MEDCouplingWithTimeStep::powEqual(const MEDCouplingTimeDiscretization *other) +{ + const MEDCouplingWithTimeStep *otherC=dynamic_cast(other); + if(!otherC) + throw INTERP_KERNEL::Exception("WithTimeStep::powEqual on mismatched time discretization !"); + if(!getArray()) + throw INTERP_KERNEL::Exception("MEDCouplingWithTimeLabel::powEqual : Data Array is NULL !"); + getArray()->powEqual(other->getArray()); +} + MEDCouplingTimeDiscretization *MEDCouplingWithTimeStep::performCpy(bool deepCpy) const { return new MEDCouplingWithTimeStep(*this,deepCpy); } -void MEDCouplingWithTimeStep::checkNoTimePresence() const throw(INTERP_KERNEL::Exception) +void MEDCouplingWithTimeStep::checkNoTimePresence() const { throw INTERP_KERNEL::Exception("No time specified on a field defined on one time"); } -void MEDCouplingWithTimeStep::checkTimePresence(double time) const throw(INTERP_KERNEL::Exception) +void MEDCouplingWithTimeStep::checkTimePresence(double time) const { if(std::fabs(time-_time)>_time_tolerance) { @@ -1551,7 +1651,7 @@ void MEDCouplingWithTimeStep::checkTimePresence(double time) const throw(INTERP_ } } -std::vector< const DataArrayDouble *> MEDCouplingWithTimeStep::getArraysForTime(double time) const throw(INTERP_KERNEL::Exception) +std::vector< const DataArrayDouble *> MEDCouplingWithTimeStep::getArraysForTime(double time) const { if(std::fabs(time-_time)<=_time_tolerance) { @@ -1568,7 +1668,7 @@ void MEDCouplingWithTimeStep::getValueForTime(double time, const std::vector(&other); @@ -1673,8 +1773,8 @@ void MEDCouplingConstOnTimeInterval::finishUnserialization2(const std::vector MEDCouplingConstOnTimeInterval::getArraysForTime(double time) const throw(INTERP_KERNEL::Exception) +std::vector< const DataArrayDouble *> MEDCouplingConstOnTimeInterval::getArraysForTime(double time) const { if(time>_start_time-_time_tolerance && time<_end_time+_time_tolerance) { @@ -1832,7 +1932,7 @@ bool MEDCouplingConstOnTimeInterval::isEqualWithoutConsideringStr(const MEDCoupl return MEDCouplingTimeDiscretization::isEqualWithoutConsideringStr(other,prec); } -void MEDCouplingConstOnTimeInterval::getValueOnTime(int eltId, double time, double *value) const throw(INTERP_KERNEL::Exception) +void MEDCouplingConstOnTimeInterval::getValueOnTime(int eltId, double time, double *value) const { if(time>_start_time-_time_tolerance && time<_end_time+_time_tolerance) if(_array) @@ -1843,7 +1943,7 @@ void MEDCouplingConstOnTimeInterval::getValueOnTime(int eltId, double time, doub throw INTERP_KERNEL::Exception(EXCEPTION_MSG); } -void MEDCouplingConstOnTimeInterval::getValueOnDiscTime(int eltId, int iteration, int order, double *value) const throw(INTERP_KERNEL::Exception) +void MEDCouplingConstOnTimeInterval::getValueOnDiscTime(int eltId, int iteration, int order, double *value) const { if(iteration>=_start_iteration && iteration<=_end_iteration) if(_array) @@ -1854,12 +1954,12 @@ void MEDCouplingConstOnTimeInterval::getValueOnDiscTime(int eltId, int iteration throw INTERP_KERNEL::Exception(EXCEPTION_MSG); } -void MEDCouplingConstOnTimeInterval::checkNoTimePresence() const throw(INTERP_KERNEL::Exception) +void MEDCouplingConstOnTimeInterval::checkNoTimePresence() const { throw INTERP_KERNEL::Exception("No time specified on a field defined as constant on one time interval"); } -void MEDCouplingConstOnTimeInterval::checkTimePresence(double time) const throw(INTERP_KERNEL::Exception) +void MEDCouplingConstOnTimeInterval::checkTimePresence(double time) const { if(time<_start_time-_time_tolerance || time>_end_time+_time_tolerance) { @@ -1979,7 +2079,7 @@ void MEDCouplingConstOnTimeInterval::addEqual(const MEDCouplingTimeDiscretizatio throw INTERP_KERNEL::Exception("MEDCouplingConstOnTimeInterval::substractaddEqual : Data Array is NULL !"); getArray()->addEqual(other->getArray()); } - + MEDCouplingTimeDiscretization *MEDCouplingConstOnTimeInterval::substract(const MEDCouplingTimeDiscretization *other) const { const MEDCouplingConstOnTimeInterval *otherC=dynamic_cast(other); @@ -2058,10 +2158,36 @@ void MEDCouplingConstOnTimeInterval::divideEqual(const MEDCouplingTimeDiscretiza getArray()->divideEqual(other->getArray()); } +MEDCouplingTimeDiscretization *MEDCouplingConstOnTimeInterval::pow(const MEDCouplingTimeDiscretization *other) const +{ + const MEDCouplingConstOnTimeInterval *otherC=dynamic_cast(other); + if(!otherC) + throw INTERP_KERNEL::Exception("pow on mismatched time discretization !"); + MEDCouplingAutoRefCountObjectPtr arr=DataArrayDouble::Pow(getArray(),other->getArray()); + MEDCouplingConstOnTimeInterval *ret=new MEDCouplingConstOnTimeInterval; + ret->setArray(arr,0); + int tmp1,tmp2; + double tmp3=getStartTime(tmp1,tmp2); + ret->setStartTime(tmp3,tmp1,tmp2); + tmp3=getEndTime(tmp1,tmp2); + ret->setEndTime(tmp3,tmp1,tmp2); + return ret; +} + +void MEDCouplingConstOnTimeInterval::powEqual(const MEDCouplingTimeDiscretization *other) +{ + const MEDCouplingConstOnTimeInterval *otherC=dynamic_cast(other); + if(!otherC) + throw INTERP_KERNEL::Exception("ConstOnTimeInterval::powEqual on mismatched time discretization !"); + if(!getArray()) + throw INTERP_KERNEL::Exception("MEDCouplingConstOnTimeInterval::powEqual : Data Array is NULL !"); + getArray()->powEqual(other->getArray()); +} + MEDCouplingTwoTimeSteps::MEDCouplingTwoTimeSteps(const MEDCouplingTwoTimeSteps& other, bool deepCpy):MEDCouplingTimeDiscretization(other,deepCpy), - _start_time(other._start_time),_end_time(other._end_time), - _start_iteration(other._start_iteration),_end_iteration(other._end_iteration), - _start_order(other._start_order),_end_order(other._end_order) + _start_time(other._start_time),_end_time(other._end_time), + _start_iteration(other._start_iteration),_end_iteration(other._end_iteration), + _start_order(other._start_order),_end_order(other._end_order) { if(other._end_array) _end_array=other._end_array->performCpy(deepCpy); @@ -2076,7 +2202,7 @@ void MEDCouplingTwoTimeSteps::updateTime() const updateTimeWith(*_end_array); } -void MEDCouplingTwoTimeSteps::synchronizeTimeWith(const MEDCouplingMesh *mesh) throw(INTERP_KERNEL::Exception) +void MEDCouplingTwoTimeSteps::synchronizeTimeWith(const MEDCouplingMesh *mesh) { if(!mesh) throw INTERP_KERNEL::Exception("MEDCouplingTwoTimeSteps::synchronizeTimeWith : mesh instance is NULL ! Impossible to synchronize time !"); @@ -2088,15 +2214,20 @@ void MEDCouplingTwoTimeSteps::synchronizeTimeWith(const MEDCouplingMesh *mesh) t _time_unit=tUnit; } -std::size_t MEDCouplingTwoTimeSteps::getHeapMemorySize() const +std::size_t MEDCouplingTwoTimeSteps::getHeapMemorySizeWithoutChildren() const +{ + return MEDCouplingTimeDiscretization::getHeapMemorySizeWithoutChildren(); +} + +std::vector MEDCouplingTwoTimeSteps::getDirectChildren() const { - std::size_t ret=0; + std::vector ret(MEDCouplingTimeDiscretization::getDirectChildren()); if(_end_array) - ret+=_end_array->getHeapMemorySize(); - return MEDCouplingTimeDiscretization::getHeapMemorySize()+ret; + ret.push_back(_end_array); + return ret; } -void MEDCouplingTwoTimeSteps::copyTinyAttrFrom(const MEDCouplingTimeDiscretization& other) throw(INTERP_KERNEL::Exception) +void MEDCouplingTwoTimeSteps::copyTinyAttrFrom(const MEDCouplingTimeDiscretization& other) { MEDCouplingTimeDiscretization::copyTinyAttrFrom(other); const MEDCouplingTwoTimeSteps *otherC=dynamic_cast(&other); @@ -2130,7 +2261,7 @@ DataArrayDouble *MEDCouplingTwoTimeSteps::getEndArray() return _end_array; } -void MEDCouplingTwoTimeSteps::checkCoherency() const throw(INTERP_KERNEL::Exception) +void MEDCouplingTwoTimeSteps::checkCoherency() const { MEDCouplingTimeDiscretization::checkCoherency(); if(!_end_array) @@ -2228,12 +2359,12 @@ MEDCouplingTwoTimeSteps::~MEDCouplingTwoTimeSteps() _end_array->decrRef(); } -void MEDCouplingTwoTimeSteps::checkNoTimePresence() const throw(INTERP_KERNEL::Exception) +void MEDCouplingTwoTimeSteps::checkNoTimePresence() const { throw INTERP_KERNEL::Exception("The field presents a time to be specified in every access !"); } -void MEDCouplingTwoTimeSteps::checkTimePresence(double time) const throw(INTERP_KERNEL::Exception) +void MEDCouplingTwoTimeSteps::checkTimePresence(double time) const { if(time<_start_time-_time_tolerance || time>_end_time+_time_tolerance) { @@ -2373,9 +2504,9 @@ void MEDCouplingTwoTimeSteps::finishUnserialization2(const std::vector& tin _end_time=tinyInfoD[2]; } -std::vector< const DataArrayDouble *> MEDCouplingTwoTimeSteps::getArraysForTime(double time) const throw(INTERP_KERNEL::Exception) +std::vector< const DataArrayDouble *> MEDCouplingTwoTimeSteps::getArraysForTime(double time) const { - if(time>_start_time-_time_tolerance && time<_end_time+_time_tolerance) + if(time>_start_time-_time_tolerance && time<_end_time+_time_tolerance) { std::vector< const DataArrayDouble *> ret(2); ret[0]=_array; @@ -2386,7 +2517,7 @@ std::vector< const DataArrayDouble *> MEDCouplingTwoTimeSteps::getArraysForTime( throw INTERP_KERNEL::Exception(EXCEPTION_MSG); } -void MEDCouplingTwoTimeSteps::setArrays(const std::vector& arrays, TimeLabel *owner) throw(INTERP_KERNEL::Exception) +void MEDCouplingTwoTimeSteps::setArrays(const std::vector& arrays, TimeLabel *owner) { if(arrays.size()!=2) throw INTERP_KERNEL::Exception("MEDCouplingTwoTimeSteps::setArrays : number of arrays must be two."); @@ -2411,7 +2542,7 @@ std::string MEDCouplingLinearTime::getStringRepr() const return stream.str(); } -void MEDCouplingLinearTime::checkCoherency() const throw(INTERP_KERNEL::Exception) +void MEDCouplingLinearTime::checkCoherency() const { MEDCouplingTwoTimeSteps::checkCoherency(); if(std::fabs(_start_time-_end_time)<_time_tolerance) @@ -2497,7 +2628,7 @@ void MEDCouplingLinearTime::getValueForTime(double time, const std::vector()); } -void MEDCouplingLinearTime::getValueOnTime(int eltId, double time, double *value) const throw(INTERP_KERNEL::Exception) +void MEDCouplingLinearTime::getValueOnTime(int eltId, double time, double *value) const { double alpha=(_end_time-time)/(_end_time-_start_time); int nbComp; @@ -2516,7 +2647,7 @@ void MEDCouplingLinearTime::getValueOnTime(int eltId, double time, double *value std::transform(tmp.begin(),tmp.end(),value,value,std::plus()); } -void MEDCouplingLinearTime::getValueOnDiscTime(int eltId, int iteration, int order, double *value) const throw(INTERP_KERNEL::Exception) +void MEDCouplingLinearTime::getValueOnDiscTime(int eltId, int iteration, int order, double *value) const { if(iteration==_start_iteration && order==_start_order) { @@ -2739,3 +2870,29 @@ void MEDCouplingLinearTime::divideEqual(const MEDCouplingTimeDiscretization *oth getArray()->divideEqual(other->getArray()); getEndArray()->divideEqual(other->getEndArray()); } + +MEDCouplingTimeDiscretization *MEDCouplingLinearTime::pow(const MEDCouplingTimeDiscretization *other) const +{ + const MEDCouplingLinearTime *otherC=dynamic_cast(other); + if(!otherC) + throw INTERP_KERNEL::Exception("LinearTime::pow on mismatched time discretization !"); + MEDCouplingAutoRefCountObjectPtr arr1=DataArrayDouble::Pow(getArray(),other->getArray()); + MEDCouplingAutoRefCountObjectPtr arr2=DataArrayDouble::Pow(getEndArray(),other->getEndArray()); + MEDCouplingLinearTime *ret=new MEDCouplingLinearTime; + ret->setArray(arr1,0); + ret->setEndArray(arr2,0); + return ret; +} + +void MEDCouplingLinearTime::powEqual(const MEDCouplingTimeDiscretization *other) +{ + const MEDCouplingLinearTime *otherC=dynamic_cast(other); + if(!otherC) + throw INTERP_KERNEL::Exception("LinearTime::addEqual on mismatched time discretization !"); + if(!getArray()) + throw INTERP_KERNEL::Exception("MEDCouplingLinearTime::powEqual : Data Array is NULL !"); + if(!getEndArray()) + throw INTERP_KERNEL::Exception("MEDCouplingLinearTime::powEqual : Data Array (end) is NULL !"); + getArray()->powEqual(other->getArray()); + getEndArray()->powEqual(other->getEndArray()); +}