+//************************************
+bool ghs3dprl_mesh_wrap::ReadFileMESH(const QString FileName)
+//read file .mesh from tetra_hpc (with volume)
+{
+ std::string line(" ");
+ QString tmp;
+ std::fstream Ff(FileName.toLatin1().constData(),std::ios_base::in);
+ long Mversion=0,Mdim=0,Mvert=0,Mtria=0,Mtetra=0;
+ med_int garbage;
+ //long ne,np,npfixe,subnumber,reste;
+ bool ok;
+ if (verbose>=6)std::cout<<"Read File '"<<FileName.toLatin1().constData()<<std::endl;
+ if (!Ff.is_open()){
+ std::cerr<<"Problem File '"<<FileName.toLatin1().constData()<<"' not open\n"<<std::endl;
+ return false;
+ }
+
+ //lit les données :
+ if (getline(Ff,line) && (line.find("MeshVersionFormatted")==0))
+ {
+ tmp=line.c_str();
+ Mversion=tmp.section(' ',1,1).toLong(&ok);
+ }
+ else
+ {
+ std::cerr<<"Problem on line 1 of file: 'MeshVersionFormatted' expected"<<std::endl;
+ return false;
+ }
+
+ getline(Ff,line);
+
+ if (getline(Ff,line) && (line.find("Dimension 3")==0))
+ {
+ tmp=line.c_str();
+ Mdim=tmp.section(' ',1,1).toLong(&ok);
+ }
+ else
+ {
+ std::cerr<<"Problem on line 3 of file: Dimension 3 expected"<<std::endl;
+ return false;
+ }
+
+ getline(Ff,line);
+
+ if (!(getline(Ff,line) && (line.find("Vertices")==0)))
+ {
+ std::cerr<<"Problem on line 5 of file: 'Vertices' expected"<<std::endl;
+ return false;
+ }
+ if (getline(Ff,line))
+ {
+ tmp=line.c_str();
+ Mvert=tmp.toLong(&ok);
+ }
+ else
+ {
+ std::cerr<<"Problem on line 6 of file: a positive integer is expected"<<std::endl;
+ return false;
+ }
+ if (Mvert<=0)
+ {
+ std::cerr<<"Problem on line 6 of file: a positive integer is expected"<<std::endl;
+ return false;
+ }
+
+ med_float *tmflo=new med_float[Mvert*3];
+ for (int i=0; i<Mvert*3; i=i+3) Ff>>tmflo[i]>>tmflo[i+1]>>tmflo[i+2]>>garbage;
+ if (verbose>4) std::cout<<"Vertices "<<tmflo[0]<<" "<<tmflo[1]<<"... "<<tmflo[Mvert*3-1]<<std::endl;
+
+ CVWtab *montab=new CVWtab(Mvert*3,tmflo);
+ tmp=tmp.sprintf("NB%ld VC",this->nofile);
+ ok=this->insert_key(tmp,montab);
+
+ getline(Ff,line);
+ getline(Ff,line);
+
+ if (!(getline(Ff,line) && (line.find("Triangles")==0)))
+ {
+ std::cerr<<"Problem on line 'Triangles' of file: not found"<<line<<std::endl;
+ return false;
+ }
+ if (getline(Ff,line))
+ {
+ tmp=line.c_str();
+ Mtria=tmp.toLong(&ok);
+ }
+ else
+ {
+ std::cerr<<"Problem on line 'Triangles' of file: a positive integer is expected"<<std::endl;
+ return false;
+ }
+ if (Mtria<=0)
+ {
+ std::cerr<<"Problem on line 'Triangles' of file: a positive integer is expected"<<std::endl;
+ return false;
+ }
+
+ med_int *tmint=new med_int[Mtria*7]; //*7 as older files .faces
+ for (int i=0; i<Mtria*7; i=i+7) {
+ Ff>>tmint[i]>>tmint[i+1]>>tmint[i+2]>>garbage;
+ tmint[i+3]=0;
+ tmint[i+4]=0;
+ tmint[i+5]=0;
+ tmint[i+6]=0;
+ }
+ if (verbose>4) std::cout<<"Triangles "<<tmint[0]<<" "<<tmint[1]<<"... "<<
+ tmint[Mtria*7-5]<<" "<<tmint[Mtria*7-4]<<" "<<tmint[Mtria*7-3]<<" "<<
+ tmint[Mtria*7-2]<<" "<<tmint[Mtria*7-1]<<std::endl;
+
+ montab=new CVWtab(Mtria*7,tmint);
+ tmp=tmp.sprintf("FC%ld",this->nofile);
+ ok=this->insert_key(tmp,montab);
+
+ getline(Ff,line);
+ getline(Ff,line);
+
+ if (!(getline(Ff,line) && (line.find("Tetrahedra")==0)))
+ {
+ std::cerr<<"Problem on line 'Tetrahedra' of file: not found"<<std::endl;
+ return false;
+ }
+ if (getline(Ff,line))
+ {
+ tmp=line.c_str();
+ Mtetra=tmp.toLong(&ok);
+ }
+ else
+ {
+ std::cerr<<"Problem on line 'Tetrahedra' of file: a positive integer is expected"<<std::endl;
+ return false;
+ }
+ if (Mtetra<=0)
+ {
+ std::cerr<<"Problem on line 'Tetrahedra' of file: a positive integer is expected"<<std::endl;
+ return false;
+ }
+
+ if (verbose>=2)
+ {
+ std::cout<<"MeshVersionFormatted="<<Mversion<<std::endl;
+ std::cout<<"MeshDimension="<<Mdim<<std::endl;
+ std::cout<<"MeshNumberOfVertices="<<Mvert<<std::endl;
+ std::cout<<"MeshNumberOfTriangles="<<Mtria<<std::endl;
+ std::cout<<"MeshNumberOfTetrahedra="<<Mtetra<<std::endl;
+ }
+
+ tmint=new med_int[Mtetra*4];
+ for (int i=0; i<Mtetra*4; i=i+4) Ff>>tmint[i]>>tmint[i+1]>>tmint[i+2]>>tmint[i+3]>>garbage;
+ if (verbose>4) std::cout<<"Tetrahedra "<<tmint[0]<<" "<<tmint[1]<<"... "<<tmint[Mtetra*4-1]<<std::endl;
+
+ montab=new CVWtab(Mtetra*4,tmint);
+ tmp=tmp.sprintf("NB%ld EV",this->nofile);
+ ok=this->insert_key(tmp,montab);
+
+ //swap on file if too big for memory in one cpu
+ //default 1GOctet/8(for double)/10(for arrays in memory at the same time)
+ if (Mvert*3>this->nbelem_limit_swap)
+ this->SwapOutOfMemory_key_mesh_wrap(QRegExp("NB",Qt::CaseSensitive,QRegExp::RegExp));
+ //beware record 6 lenght 1
+ //ferme le fichier :
+ Ff.close();
+ this->nbfiles++;
+ return true;
+}
+