diff --git a/Geo/GModelIO_MSH.cpp b/Geo/GModelIO_MSH.cpp index 848688c2fb4327bb1fae6e47440647d2c69ad61d..4279d7817ca0886333a513c7e95d334f53ad3870 100644 --- a/Geo/GModelIO_MSH.cpp +++ b/Geo/GModelIO_MSH.cpp @@ -126,7 +126,7 @@ void readMSHPeriodicNodes(FILE *fp, GModel *gm) fgetpos(fp, &pos); if(fscanf(fp, "%s", token) != 1) return; if(strcmp(token, "Affine") == 0) { - std::vector<double> tfo; + std::vector<double> tfo(16); for(int i = 0; i < 16; i++){ if(fscanf(fp, "%lf", &tfo[i]) != 1) return; } diff --git a/Geo/GModelIO_MSH2.cpp b/Geo/GModelIO_MSH2.cpp index 322c7520a380b118bde62c61e11cbe80cfc7ce65..3725973cb52f4fd5e9ff860e0bb8eebc2c34806b 100644 --- a/Geo/GModelIO_MSH2.cpp +++ b/Geo/GModelIO_MSH2.cpp @@ -31,6 +31,8 @@ extern void writeMSHPeriodicNodes (FILE *fp, std::vector<GEntity*> &entities); +extern void readMSHPeriodicNodes(FILE *fp, GModel *gm); + static bool getVertices(int num, int *indices, std::map<int, MVertex*> &map, std::vector<MVertex*> &vertices) { @@ -690,6 +692,29 @@ int GModel::_readMSH2(const std::string &name) _storePhysicalTagsInEntities(i, physicals[i]); _createGeometryOfDiscreteEntities() ; + + + // copying periodic information from the mesh + + rewind(fp); + + while(1) { + + while(str[0] != '$'){ + if(!fgets(str, sizeof(str), fp) || feof(fp)) + break; + } + + if(!strncmp(&str[1], "Periodic",8)) { + readMSHPeriodicNodes(fp,this); + break; + } + do { + if(!fgets(str, sizeof(str), fp) || feof(fp)) + break; + } while(str[0] != '$'); + } + fclose(fp); return postpro ? 2 : 1;