X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMEDLoader%2FMEDFileFieldMultiTS.cxx;h=fc243e844b32f72455ab32965a6308db6263f5f1;hb=3ccbd6672d4cab9ddd873774deb1276b43ccb621;hp=117d84d63b68e2ded256bef253e9171e7341abac;hpb=e0c843a1fe827a90af91ada8d2033ffb3a7dd1d8;p=tools%2Fmedcoupling.git diff --git a/src/MEDLoader/MEDFileFieldMultiTS.cxx b/src/MEDLoader/MEDFileFieldMultiTS.cxx index 117d84d63..fc243e844 100644 --- a/src/MEDLoader/MEDFileFieldMultiTS.cxx +++ b/src/MEDLoader/MEDFileFieldMultiTS.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2017-2020 CEA/DEN, EDF R&D +// Copyright (C) 2017-2024 CEA, EDF // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -31,19 +31,23 @@ using namespace MEDCoupling; -template class MEDCoupling::MEDFileTemplateFieldMultiTSWithoutSDA; +template class MEDCoupling::MEDFileTemplateFieldMultiTSWithoutSDA; +template class MEDCoupling::MEDFileTemplateFieldMultiTSWithoutSDA; template class MEDCoupling::MEDFileTemplateFieldMultiTSWithoutSDA; template class MEDCoupling::MEDFileTemplateFieldMultiTSWithoutSDA; -template class MEDCoupling::MEDFileNDTemplateFieldMultiTSWithoutSDA; +template class MEDCoupling::MEDFileNDTemplateFieldMultiTSWithoutSDA; +template class MEDCoupling::MEDFileNDTemplateFieldMultiTSWithoutSDA; template class MEDCoupling::MEDFileNDTemplateFieldMultiTSWithoutSDA; -template class MEDCoupling::MEDFileTemplateFieldMultiTS; +template class MEDCoupling::MEDFileTemplateFieldMultiTS; +template class MEDCoupling::MEDFileTemplateFieldMultiTS; template class MEDCoupling::MEDFileTemplateFieldMultiTS; template class MEDCoupling::MEDFileTemplateFieldMultiTS; -template class MEDCoupling::MEDFileNDTemplateFieldMultiTS; +template class MEDCoupling::MEDFileNDTemplateFieldMultiTS; +template class MEDCoupling::MEDFileNDTemplateFieldMultiTS; template class MEDCoupling::MEDFileNDTemplateFieldMultiTS; extern INTERP_KERNEL::NormalizedCellType ConvertGeometryType(med_geometry_type geotype); - + //= MEDFileAnyTypeFieldMultiTSWithoutSDA MEDFileAnyTypeFieldMultiTSWithoutSDA::MEDFileAnyTypeFieldMultiTSWithoutSDA() @@ -143,7 +147,7 @@ MEDFileAnyTypeFieldMultiTSWithoutSDA *MEDFileAnyTypeFieldMultiTSWithoutSDA::buil std::size_t j=bg; for(int i=0;i=0 && j tse2; @@ -414,7 +418,7 @@ void MEDFileAnyTypeFieldMultiTSWithoutSDA::simpleRepr(int bkOffset, std::ostream int i=0; for(std::vector< MCAuto >::const_iterator it=_time_steps.begin();it!=_time_steps.end();it++,i++) { - std::string chapter(17,'0'+i); + std::string chapter(17,(char)('0'+i)); oss << startLine << chapter << std::endl; const MEDFileAnyTypeField1TSWithoutSDA *cur=(*it); if(cur) @@ -492,18 +496,18 @@ void MEDFileAnyTypeFieldMultiTSWithoutSDA::loadStructureOrStructureAndBigArraysR MEDFileCapability mfcap(fid); if( ( !entities || entities->areAllStaticPresentAndNoDyn() ) && mfcap.isFastReader()) {// no entities - int nentitype(MEDfieldnEntityType(fid,_name.c_str(),MED_ALL_DT,MED_ALL_IT)); + med_int nentitype(MEDfieldnEntityType(fid,_name.c_str(),MED_ALL_DT,MED_ALL_IT)); INTERP_KERNEL::AutoPtr types(new med_entity_type[nentitype]); med_int usedbyncs; MEDFILESAFECALLERRD0(MEDfieldEntityType,(fid,_name.c_str(),MED_ALL_DT,MED_ALL_IT,types,&usedbyncs)); std::vector< std::pair > entitiesFastP; for(int i=0;i geotypes(new med_geometry_type[ngeotype]); med_int geousedbyncs; MEDFILESAFECALLERRD0(MEDfieldGeometryType,(fid,_name.c_str(),MED_ALL_DT,MED_ALL_IT,types[i],geotypes,&geousedbyncs)); - for(int j=0;j p(MEDFileMesh::ConvertFromMEDFileEntity(types[i]),ConvertGeometryType(geotypes[j])); entitiesFastP.push_back(p); @@ -527,7 +531,12 @@ void MEDFileAnyTypeFieldMultiTSWithoutSDA::loadStructureOrStructureAndBigArraysR } case MED_INT32: { - _time_steps[i]=MEDFileIntField1TSWithoutSDA::New(getName(),getMeshName(),i+1,FromMedInt(numdt),FromMedInt(numo),_infos); + _time_steps[i]=MEDFileInt32Field1TSWithoutSDA::New(getName(),getMeshName(),i+1,FromMedInt(numdt),FromMedInt(numo),_infos); + break; + } + case MED_INT64: + { + _time_steps[i]=MEDFileInt64Field1TSWithoutSDA::New(getName(),getMeshName(),i+1,FromMedInt(numdt),FromMedInt(numo),_infos); break; } case MED_FLOAT32: @@ -539,12 +548,12 @@ void MEDFileAnyTypeFieldMultiTSWithoutSDA::loadStructureOrStructureAndBigArraysR { if(sizeof(med_int)==sizeof(int)) { - _time_steps[i]=MEDFileIntField1TSWithoutSDA::New(getName(),getMeshName(),i+1,FromMedInt(numdt),FromMedInt(numo),_infos); + _time_steps[i]=MEDFileInt32Field1TSWithoutSDA::New(getName(),getMeshName(),i+1,FromMedInt(numdt),FromMedInt(numo),_infos); break; } } default: - throw INTERP_KERNEL::Exception("MEDFileAnyTypeFieldMultiTSWithoutSDA::loadStructureOrStructureAndBigArraysRecursively : managed field type are : FLOAT64, INT32, FLOAT32 !"); + throw INTERP_KERNEL::Exception("MEDFileAnyTypeFieldMultiTSWithoutSDA::loadStructureOrStructureAndBigArraysRecursively : managed field type are : FLOAT64, INT32, FLOAT32, INT64 !"); } if(loadAll) _time_steps[i]->loadStructureAndBigArraysRecursively(fid,*this,ms,entitiesForSubInstances); @@ -671,7 +680,7 @@ void MEDFileAnyTypeFieldMultiTSWithoutSDA::eraseTimeStepIds2(int bg, int end, in int MEDFileAnyTypeFieldMultiTSWithoutSDA::getPosOfTimeStep(int iteration, int order) const { int ret=0; - std::ostringstream oss; oss << "MEDFileFieldMultiTSWithoutSDA::getPosOfTimeStep : No such time step (" << iteration << "," << order << ") !\nPossibilities are : "; + std::ostringstream oss; oss << "MEDFileFieldMultiTSWithoutSDA::getPosOfTimeStep : No such time step (" << iteration << "," << order << ") !\nPossibilities are : "; for(std::vector< MCAuto >::const_iterator it=_time_steps.begin();it!=_time_steps.end();it++,ret++) { const MEDFileAnyTypeField1TSWithoutSDA *tmp(*it); @@ -721,7 +730,7 @@ std::vector< std::pair > MEDFileAnyTypeFieldMultiTSWithoutSDA::getItera /*! * This method has 3 inputs 'iteration' 'order' 'mname'. 'mname' can be null if the user is the general case where there is only one meshName lying on 'this' * This method returns two things. - * - The absolute dimension of 'this' in first parameter. + * - The absolute dimension of 'this' in first parameter. * - The available ext levels relative to the absolute dimension returned in first parameter. These relative levels are relative * to the first output parameter. The values in 'levs' will be returned in decreasing order. * @@ -734,7 +743,7 @@ std::vector< std::pair > MEDFileAnyTypeFieldMultiTSWithoutSDA::getItera * * This method is useful to make the link between meshDimension of the underlying mesh in 'this' and the levels on 'this'. * It is possible (even if it is not common) that the highest level in 'this' were not equal to the meshDimension of the underlying mesh in 'this'. - * + * * Let's consider the typical following case : * - a mesh 'm1' has a meshDimension 3 and has the following non empty levels * [0,-1,-2] for example 'm1' lies on TETRA4, HEXA8 TRI3 and SEG2 @@ -743,7 +752,7 @@ std::vector< std::pair > MEDFileAnyTypeFieldMultiTSWithoutSDA::getItera * - 'f2' lies on 'm1' too and is defined on 2D and 1D cells for example TRI3 and SEG2 * * In this case f1->getNonEmptyLevelsExt will return (3,[0,-2]) and f2->getNonEmptyLevelsExt will return (2,[0,-1]) - * + * * To retrieve the highest level of f1 it should be done, f1->getFieldAtLevel(ON_CELLS,3-3+0);//absDim-meshDim+relativeLev * To retrieve the lowest level of f1 it should be done, f1->getFieldAtLevel(ON_CELLS,3-3+(-2));//absDim-meshDim+relativeLev * To retrieve the highest level of f2 it should be done, f1->getFieldAtLevel(ON_CELLS,2-3+0);//absDim-meshDim+relativeLev @@ -924,10 +933,10 @@ std::vector< MCAuto > MEDFileAnyTypeFieldM const MEDFileAnyTypeField1TSWithoutSDA *timeStep(_time_steps[i]); if(!timeStep) { - std::ostringstream oss; oss << "MEDFileAnyTypeFieldMultiTSWithoutSDA::splitDiscretizations : time step #" << i << " is null !"; + std::ostringstream oss; oss << "MEDFileAnyTypeFieldMultiTSWithoutSDA::splitDiscretizations : time step #" << i << " is null !"; throw INTERP_KERNEL::Exception(oss.str()); } - items[i]=timeStep->splitDiscretizations(); + items[i]=timeStep->splitDiscretizations(); } // std::vector< MCAuto > ret; @@ -1080,7 +1089,7 @@ void MEDFileAnyTypeFieldMultiTSWithoutSDA::appendFieldNoProfileSBT(const MEDCoup void MEDFileAnyTypeFieldMultiTSWithoutSDA::appendFieldProfile(const MEDCouplingFieldDouble *field, const DataArray *arr, const MEDFileMesh *mesh, int meshDimRelToMax, const DataArrayIdType *profile, MEDFileFieldGlobsReal& glob, bool smartPflKiller) { if(!field) - throw INTERP_KERNEL::Exception("MEDFileIntFieldMultiTSWithoutSDA::appendFieldNoProfileSBT : input field is NULL !"); + throw INTERP_KERNEL::Exception("MEDFileAnyTypeFieldMultiTSWithoutSDA::appendFieldNoProfileSBT : input field is NULL !"); if(!_time_steps.empty()) checkCoherencyOfTinyInfo(field,arr); MCAuto obj(createNew1TSWithoutSDAEmptyInstance()); @@ -1128,9 +1137,9 @@ std::vector< std::vector > MEDFileFieldMultiTSWithoutSDA::get return myF1TSC->getFieldSplitedByType2(mname,types,typesF,pfls,locs); } -MEDFileIntFieldMultiTSWithoutSDA *MEDFileFieldMultiTSWithoutSDA::convertToInt() const +MEDFileInt32FieldMultiTSWithoutSDA *MEDFileFieldMultiTSWithoutSDA::convertToInt() const { - MCAuto ret(new MEDFileIntFieldMultiTSWithoutSDA); + MCAuto ret(new MEDFileInt32FieldMultiTSWithoutSDA); ret->MEDFileAnyTypeFieldMultiTSWithoutSDA::operator =(*this); int i=0; for(std::vector< MCAuto >::const_iterator it=_time_steps.begin();it!=_time_steps.end();it++,i++) @@ -1148,6 +1157,36 @@ MEDFileIntFieldMultiTSWithoutSDA *MEDFileFieldMultiTSWithoutSDA::convertToInt() return ret.retn(); } +MCAuto MEDFileFieldMultiTSWithoutSDA::createNewWithSDA() const +{ + MCAuto ret(MEDFileFieldMultiTS::New()); + return DynamicCast(ret); +} + +//= + +MCAuto MEDFileInt32FieldMultiTSWithoutSDA::createNewWithSDA() const +{ + MCAuto ret(MEDFileInt32FieldMultiTS::New()); + return DynamicCast(ret); +} + +//= + +MCAuto MEDFileInt64FieldMultiTSWithoutSDA::createNewWithSDA() const +{ + MCAuto ret(MEDFileInt64FieldMultiTS::New()); + return DynamicCast(ret); +} + +//= + +MCAuto MEDFileFloatFieldMultiTSWithoutSDA::createNewWithSDA() const +{ + MCAuto ret(MEDFileFloatFieldMultiTS::New()); + return DynamicCast(ret); +} + //= MEDFileAnyTypeFieldMultiTS MEDFileAnyTypeFieldMultiTS::MEDFileAnyTypeFieldMultiTS() @@ -1183,7 +1222,12 @@ MEDFileAnyTypeFieldMultiTSWithoutSDA *MEDFileAnyTypeFieldMultiTS::BuildContentFr } case MED_INT32: { - ret=new MEDFileIntFieldMultiTSWithoutSDA(fid,i,loadAll,ms,entities); + ret=new MEDFileInt32FieldMultiTSWithoutSDA(fid,i,loadAll,ms,entities); + break; + } + case MED_INT64: + { + ret=new MEDFileInt64FieldMultiTSWithoutSDA(fid,i,loadAll,ms,entities); break; } case MED_FLOAT32: @@ -1195,13 +1239,13 @@ MEDFileAnyTypeFieldMultiTSWithoutSDA *MEDFileAnyTypeFieldMultiTS::BuildContentFr { if(sizeof(med_int)==sizeof(int)) { - ret=new MEDFileIntFieldMultiTSWithoutSDA(fid,i,loadAll,ms,entities); + ret=new MEDFileInt32FieldMultiTSWithoutSDA(fid,i,loadAll,ms,entities); break; } } default: { - std::ostringstream oss; oss << "MEDFileAnyTypeFieldMultiTS::BuildContentFrom(fid,fieldName) : file \'" << FileNameFromFID(fid) << "\' contains field with name \'" << fieldName << "\' but the type of field is not in [MED_FLOAT64, MED_INT32, MED_FLOAT32] !"; + std::ostringstream oss; oss << "MEDFileAnyTypeFieldMultiTS::BuildContentFrom(fid,fieldName) : file \'" << FileNameFromFID(fid) << "\' contains field with name \'" << fieldName << "\' but the type of field is not in [MED_FLOAT64, MED_INT32, MED_FLOAT32, MED_INT64] !"; throw INTERP_KERNEL::Exception(oss.str()); } } @@ -1227,7 +1271,12 @@ MEDFileAnyTypeFieldMultiTSWithoutSDA *MEDFileAnyTypeFieldMultiTS::BuildContentFr } case MED_INT32: { - ret=new MEDFileIntFieldMultiTSWithoutSDA(fid,0,loadAll,ms,0); + ret=new MEDFileInt32FieldMultiTSWithoutSDA(fid,0,loadAll,ms,0); + break; + } + case MED_INT64: + { + ret=new MEDFileInt64FieldMultiTSWithoutSDA(fid,0,loadAll,ms,0); break; } case MED_FLOAT32: @@ -1239,13 +1288,13 @@ MEDFileAnyTypeFieldMultiTSWithoutSDA *MEDFileAnyTypeFieldMultiTS::BuildContentFr { if(sizeof(med_int)==sizeof(int)) { - ret=new MEDFileIntFieldMultiTSWithoutSDA(fid,0,loadAll,ms,0); + ret=new MEDFileInt32FieldMultiTSWithoutSDA(fid,0,loadAll,ms,0); break; } } default: { - std::ostringstream oss; oss << "MEDFileAnyTypeFieldMultiTS::BuildContentFrom(fid) : file \'" << FileNameFromFID(fid) << "\' contains field with name \'" << fieldName << "\' but the type of the first field is not in [MED_FLOAT64, MED_INT32, MED_FLOAT32] !"; + std::ostringstream oss; oss << "MEDFileAnyTypeFieldMultiTS::BuildContentFrom(fid) : file \'" << FileNameFromFID(fid) << "\' contains field with name \'" << fieldName << "\' but the type of the first field is not in [MED_FLOAT64, MED_INT32, MED_FLOAT32, MED_INT64] !"; throw INTERP_KERNEL::Exception(oss.str()); } } @@ -1264,9 +1313,15 @@ MEDFileAnyTypeFieldMultiTS *MEDFileAnyTypeFieldMultiTS::BuildNewInstanceFromCont ret->_content=c; c->incrRef(); return ret.retn(); } - if(dynamic_cast(c)) + if(dynamic_cast(c)) { - MCAuto ret(MEDFileIntFieldMultiTS::New()); + MCAuto ret(MEDFileInt32FieldMultiTS::New()); + ret->_content=c; c->incrRef(); + return ret.retn(); + } + if(dynamic_cast(c)) + { + MCAuto ret(MEDFileInt64FieldMultiTS::New()); ret->_content=c; c->incrRef(); return ret.retn(); } @@ -1276,7 +1331,7 @@ MEDFileAnyTypeFieldMultiTS *MEDFileAnyTypeFieldMultiTS::BuildNewInstanceFromCont ret->_content=c; c->incrRef(); return ret.retn(); } - throw INTERP_KERNEL::Exception("MEDFileAnyTypeFieldMultiTS::BuildNewInstanceFromContent : internal error ! a content of type different from FLOAT64 FLOAT32 and INT32 has been built but not intercepted !"); + throw INTERP_KERNEL::Exception("MEDFileAnyTypeFieldMultiTS::BuildNewInstanceFromContent : internal error ! a content of type different from FLOAT64 FLOAT32 INT32 and INT64 has been built but not intercepted !"); } MEDFileAnyTypeFieldMultiTS *MEDFileAnyTypeFieldMultiTS::BuildNewInstanceFromContent(MEDFileAnyTypeFieldMultiTSWithoutSDA *c, med_idt fid) @@ -1301,10 +1356,10 @@ catch(INTERP_KERNEL::Exception& e) //= MEDFileAnyTypeFieldMultiTS /*! - * Returns a new instance of MEDFileFieldMultiTS or MEDFileIntFieldMultiTS holding data of the first field + * Returns a new instance of MEDFileFieldMultiTS or MEDFileInt32FieldMultiTS holding data of the first field * that has been read from a specified MED file. * \param [in] fileName - the name of the MED file to read. - * \return MEDFileFieldMultiTS * - a new instance of MEDFileFieldMultiTS or MEDFileIntFieldMultiTS. The caller + * \return MEDFileFieldMultiTS * - a new instance of MEDFileFieldMultiTS or MEDFileInt32FieldMultiTS. The caller * is to delete this field using decrRef() as it is no more needed. * \throw If reading the file fails. */ @@ -1323,11 +1378,11 @@ MEDFileAnyTypeFieldMultiTS *MEDFileAnyTypeFieldMultiTS::New(med_idt fid, bool lo } /*! - * Returns a new instance of MEDFileFieldMultiTS or MEDFileIntFieldMultiTS holding data of a given field + * Returns a new instance of MEDFileFieldMultiTS or MEDFileInt32FieldMultiTS holding data of a given field * that has been read from a specified MED file. * \param [in] fileName - the name of the MED file to read. * \param [in] fieldName - the name of the field to read. - * \return MEDFileFieldMultiTS * - a new instance of MEDFileFieldMultiTS or MEDFileIntFieldMultiTS. The caller + * \return MEDFileFieldMultiTS * - a new instance of MEDFileFieldMultiTS or MEDFileInt32FieldMultiTS. The caller * is to delete this field using decrRef() as it is no more needed. * \throw If reading the file fails. * \throw If there is no field named \a fieldName in the file. @@ -1593,7 +1648,7 @@ void MEDFileAnyTypeFieldMultiTS::writeLL(med_idt fid) const * This method alloc the arrays and load potentially huge arrays contained in this field. * This method should be called when a MEDFileAnyTypeFieldMultiTS::New constructor has been with false as the last parameter. * This method can be also called to refresh or reinit values from a file. - * + * * \throw If the fileName is not set or points to a non readable MED file. */ void MEDFileAnyTypeFieldMultiTS::loadArrays() @@ -1607,7 +1662,7 @@ void MEDFileAnyTypeFieldMultiTS::loadArrays() /*! * This method behaves as MEDFileAnyTypeFieldMultiTS::loadArrays does, the first call, if \a this was built using a file without loading big arrays. * But once data loaded once, this method does nothing. - * + * * \throw If the fileName is not set or points to a non readable MED file. * \sa MEDFileAnyTypeFieldMultiTS::loadArrays, MEDFileAnyTypeFieldMultiTS::unloadArrays */ @@ -1624,7 +1679,7 @@ void MEDFileAnyTypeFieldMultiTS::loadArraysIfNecessary() * This method releases potentially big data arrays and so returns to the same heap memory than status loaded with 'loadAll' parameter set to false. * \b WARNING, this method does release arrays even if \a this does not come from a load of a MED file. * So this method can lead to a loss of data. If you want to unload arrays safely call MEDFileAnyTypeFieldMultiTS::unloadArraysWithoutDataLoss instead. - * + * * \sa MEDFileAnyTypeFieldMultiTS::loadArrays, MEDFileAnyTypeFieldMultiTS::loadArraysIfNecessary, MEDFileAnyTypeFieldMultiTS::unloadArraysWithoutDataLoss */ void MEDFileAnyTypeFieldMultiTS::unloadArrays() @@ -1636,7 +1691,7 @@ void MEDFileAnyTypeFieldMultiTS::unloadArrays() * This method potentially releases big data arrays if \a this is coming from a file. If \a this has been built from scratch this method will have no effect. * This method is the symmetrical method of MEDFileAnyTypeFieldMultiTS::loadArraysIfNecessary. * This method is useful to reduce \b safely amount of heap memory necessary for \a this by using MED file as database. - * + * * \sa MEDFileAnyTypeFieldMultiTS::loadArraysIfNecessary */ void MEDFileAnyTypeFieldMultiTS::unloadArraysWithoutDataLoss() @@ -1741,10 +1796,10 @@ MCAuto MEDFileAnyTypeFieldMultiTS::getCont } /*! - * Returns a new MEDFileField1TS or MEDFileIntField1TS holding data of a given time step of \a this field. + * Returns a new MEDFileField1TS or MEDFileInt32Field1TS holding data of a given time step of \a this field. * \param [in] iteration - the iteration number of a required time step. * \param [in] order - the iteration order number of required time step. - * \return MEDFileField1TS * or MEDFileIntField1TS *- a new instance of MEDFileField1TS or MEDFileIntField1TS. The caller is to + * \return MEDFileField1TS * or MEDFileInt32Field1TS *- a new instance of MEDFileField1TS or MEDFileInt32Field1TS. The caller is to * delete this field using decrRef() as it is no more needed. * \throw If there is no required time step in \a this field. */ @@ -1755,7 +1810,7 @@ MEDFileAnyTypeField1TS *MEDFileAnyTypeFieldMultiTS::getTimeStep(int iteration, i } /*! - * Returns a new MEDFileField1TS or MEDFileIntField1TS holding data of a given time step of \a this field. + * Returns a new MEDFileField1TS or MEDFileInt32Field1TS holding data of a given time step of \a this field. * \param [in] time - the time of the time step of interest. * \param [in] eps - a precision used to compare time values. * \return MEDFileField1TS * - a new instance of MEDFileField1TS. The caller is to @@ -2034,6 +2089,7 @@ MCAuto< MEDFileAnyTypeFieldMultiTS > AggregateHelperFMTS(const std::vector< type /*! * \a dts and \a ftmss are expected to have same size. + * see MEDFileFieldPerMeshPerTypePerDisc::Aggregate for description of \a dts. */ MCAuto MEDFileAnyTypeFieldMultiTS::Aggregate(const std::vector& fmtss, const std::vector< std::vector< std::pair > >& dts) { @@ -2041,7 +2097,8 @@ MCAuto MEDFileAnyTypeFieldMultiTS::Aggregate(const s throw INTERP_KERNEL::Exception("MEDFileAnyTypeFieldMultiTS::Aggregate : input vector is empty !"); std::size_t sz(fmtss.size()); std::vector fmtss1; - std::vector fmtss2; + std::vector fmtss2; + std::vector fmtss3; for(std::vector::const_iterator it=fmtss.begin();it!=fmtss.end();it++) { if(!(*it)) @@ -2052,20 +2109,28 @@ MCAuto MEDFileAnyTypeFieldMultiTS::Aggregate(const s fmtss1.push_back(elt1); continue; } - const MEDFileIntFieldMultiTS *elt2(dynamic_cast(*it)); + const MEDFileInt32FieldMultiTS *elt2(dynamic_cast(*it)); if(elt2) { fmtss2.push_back(elt2); continue; } + const MEDFileInt64FieldMultiTS *elt3(dynamic_cast(*it)); + if(elt3) + { + fmtss3.push_back(elt3); + continue; + } throw INTERP_KERNEL::Exception("MEDFileAnyTypeFieldMultiTS::Aggregate : not recognized type !"); } - if(fmtss1.size()!=sz && fmtss2.size()!=sz) + if(fmtss1.size()!=sz && fmtss2.size()!=sz && fmtss3.size()!=sz) throw INTERP_KERNEL::Exception("MEDFileAnyTypeFieldMultiTS::Aggregate : type of data is not homogeneous !"); if(fmtss1.size()==sz) return AggregateHelperFMTS(fmtss1,dts); if(fmtss2.size()!=sz) - return AggregateHelperFMTS(fmtss2,dts); + return AggregateHelperFMTS(fmtss2,dts); + if(fmtss3.size()!=sz) + return AggregateHelperFMTS(fmtss3,dts); throw INTERP_KERNEL::Exception("MEDFileAnyTypeFieldMultiTS::Aggregate : not implemented yet !"); } @@ -2087,22 +2152,22 @@ MEDFileAnyTypeFieldMultiTS *MEDFileFieldMultiTS::shallowCpy() const * * \param [in] isDeepCpyGlobs - a boolean that indicates the behaviour concerning globals (profiles and localizations) * By default (true) the globals are deeply copied. - * \return MEDFileIntFieldMultiTS * - a new object that is the result of the conversion of \a this to int32 field. + * \return MEDFileInt32FieldMultiTS * - a new object that is the result of the conversion of \a this to int32 field. */ -MEDFileIntFieldMultiTS *MEDFileFieldMultiTS::convertToInt(bool isDeepCpyGlobs) const +MEDFileInt32FieldMultiTS *MEDFileFieldMultiTS::convertToInt(bool isDeepCpyGlobs) const { - MCAuto ret; + MCAuto ret; const MEDFileAnyTypeFieldMultiTSWithoutSDA *content(_content); if(content) { const MEDFileFieldMultiTSWithoutSDA *contc=dynamic_cast(content); if(!contc) throw INTERP_KERNEL::Exception("MEDFileFieldMultiTS::convertToInt : the content inside this is not FLOAT64 ! This is incoherent !"); - MCAuto newc(contc->convertToInt()); - ret=static_cast(MEDFileAnyTypeFieldMultiTS::BuildNewInstanceFromContent((MEDFileIntFieldMultiTSWithoutSDA *)newc)); + MCAuto newc(contc->convertToInt()); + ret=static_cast(MEDFileAnyTypeFieldMultiTS::BuildNewInstanceFromContent((MEDFileInt32FieldMultiTSWithoutSDA *)newc)); } else - ret=MEDFileIntFieldMultiTS::New(); + ret=MEDFileInt32FieldMultiTS::New(); if(isDeepCpyGlobs) ret->deepCpyGlobs(*this); else @@ -2144,7 +2209,7 @@ MEDFileAnyTypeFieldMultiTSIterator::MEDFileAnyTypeFieldMultiTSIterator(MEDFileAn } } -MEDFileAnyTypeFieldMultiTSIterator::~MEDFileAnyTypeFieldMultiTSIterator() +MEDFileAnyTypeFieldMultiTSIterator::~MEDFileAnyTypeFieldMultiTSIterator() { } @@ -2162,4 +2227,4 @@ MEDFileAnyTypeField1TS *MEDFileAnyTypeFieldMultiTSIterator::nextt() return 0; } -//= MEDFileIntFieldMultiTS +//= MEDFileInt32FieldMultiTS