Skip to content

Commit

Permalink
Merge pull request #94 from laetitia-m/feature/fix-citest-pvtu-output
Browse files Browse the repository at this point in the history
Fix some bugs in *.pvtu output
  • Loading branch information
Algiane authored Jun 8, 2023
2 parents 0f1a896 + 433e637 commit 306b3f0
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 38 deletions.
36 changes: 26 additions & 10 deletions cmake/testing/pmmg_tests.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,26 @@ IF( BUILD_TESTING )
${myargs}
)

# Tests for distributed pvtu output with dots in filename.
# Replacement of dots by dashes.
IF ( (NOT VTK_FOUND) OR USE_VTK MATCHES OFF )
set(OutputVtkErr "VTK library not found.")
ENDIF ( )

set(OutputVtkRenameFilename "3D-cube-PvtuOut-2-a-o.pvtu")
set(OutputVtkRenameWarning "## WARNING: Filename has been changed.")

add_test( NAME PvtuOut-RenameOut-2
COMMAND ${MPIEXEC} ${MPI_ARGS} ${MPIEXEC_NUMPROC_FLAG} 2 $<TARGET_FILE:${PROJECT_NAME}>
${CI_DIR}/LevelSet/centralized/3D-cube.mesh
-out ${CI_DIR_RESULTS}/3D-cube-PvtuOut-2.a.o.pvtu)

set_property(TEST PvtuOut-RenameOut-2
PROPERTY PASS_REGULAR_EXPRESSION
"${OutputVtkRenameFilename}.*${OutputVtkRenameWarning}.*${OutputVtkErr};
${OutputVtkRenameWarning}.*${OutputVtkErr}.*${OutputVtkRenameFilename};
${OutputVtkRenameFilename}.*${OutputVtkErr}.*${OutputVtkRenameWarning}")

###############################################################################
#####
##### Tests fields interpolation with or without metric
Expand Down Expand Up @@ -390,18 +410,14 @@ IF( BUILD_TESTING )
-out ${CI_DIR_RESULTS}/3D-cube-ls-CenIn-met-${NP}.o.mesh)
endforeach()

# Tests of pvtu output when ls mode
IF ( (NOT VTK_FOUND) OR USE_VTK MATCHES OFF )
set(OutputVtkErr "VTK library not founded.")
ENDIF ( )

# Tests of distributed pvtu output when ls mode
foreach( NP 1 2 4 8 )
add_test( NAME ls-CenIn-DisOut-${NP}
COMMAND ${MPIEXEC} ${MPI_ARGS} ${MPIEXEC_NUMPROC_FLAG} ${NP} $<TARGET_FILE:${PROJECT_NAME}>
${CI_DIR}/LevelSet/centralized/3D-cube.mesh
-ls 0.0
-sol ${CI_DIR}/LevelSet/centralized/3D-cube-ls.sol
-out ${CI_DIR_RESULTS}/3D-cube-ls-CenIn-DisOut-${NP}.o.pvtu)
-out ${CI_DIR_RESULTS}/3D-cube-ls-CenIn-DisOut-${NP}-out.pvtu)

set_property(TEST ls-CenIn-DisOut-${NP}
PROPERTY PASS_REGULAR_EXPRESSION "${OutputVtkErr}")
Expand Down Expand Up @@ -518,18 +534,18 @@ IF( BUILD_TESTING )
set_property(TEST fields-DisIn-DisOutVTK-2
PROPERTY PASS_REGULAR_EXPRESSION
"${InputDistributedFields}.*${OutputVtkFields}.*${OutputVtkErr};
${OutputVtkFields}.*${OutputVtkErr}.*${InputDistributedFields};
${InputDistributedFields}.*${OutputVtkErr}.*${OutputVtkFields}")
${OutputVtkFields}.*${OutputVtkErr}.*${InputDistributedFields};
${InputDistributedFields}.*${OutputVtkErr}.*${OutputVtkFields}")

# Test to write distributed output fields and metric in Medit format
add_test( NAME fields-DisIn-DisOutMesh-2
COMMAND ${MPIEXEC} ${MPI_ARGS} ${MPIEXEC_NUMPROC_FLAG} 2 $<TARGET_FILE:${PROJECT_NAME}>
${CI_DIR}/LevelSet/distributed/3D-cube.mesh
-field ${CI_DIR}/LevelSet/distributed/3D-cube-fields.sol
-out ${CI_DIR_RESULTS}/3D-cube-fields-DisIn-DisOutMesh-2-out.mesh)
-out ${CI_DIR_RESULTS}/3D-cube-fields-DisIn-DisOutMesh-2.o.mesh)

set(OutputFieldsName "3D-cube-fields.o.0.sol OPENED.")
set(OutputMetricName "3D-cube-fields-DisIn-DisOutMesh-2-out.0.sol OPENED.")
set(OutputMetricName "3D-cube-fields-DisIn-DisOutMesh-2.o.0.sol OPENED.")
set_property(TEST fields-DisIn-DisOutMesh-2
PROPERTY PASS_REGULAR_EXPRESSION
"${OutputFieldsName}.*${OutputMetricName};${OutputMetricName}.*${OutputFieldsName}")
Expand Down
52 changes: 43 additions & 9 deletions src/inoutcpp_pmmg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ int PMMG_loadVtuMesh_centralized(PMMG_pParMesh parmesh,const char *filename) {

#ifndef USE_VTK

fprintf(stderr," ** VTK library not founded. Unavailable file format.\n");
fprintf(stderr," ** VTK library not found. Unavailable file format.\n");
return -1;

#else
Expand Down Expand Up @@ -84,18 +84,34 @@ int PMMG_savePvtuMesh(PMMG_pParMesh parmesh, const char * filename) {

#ifndef USE_VTK
if ( parmesh->myrank == parmesh->info.root ) {
fprintf(stderr," ** VTK library not founded. Unavailable file format.\n");
fprintf(stderr," ** VTK library not found. Unavailable file format.\n");
}
return -1;

#else
char* mdata=NULL; // master file name
char* mdata=NULL; // master file name
char* sdata=NULL; // secondary file name
int i;
MMG5_SAFE_CALLOC(mdata,strlen(filename)+6,char,return 0);
MMG5_SAFE_CALLOC(sdata,strlen(filename)+6,char,return 0);

strcpy(mdata,filename);
char *ptr = MMG5_Get_filenameExt(mdata);
*ptr = '\0'; // get basename
snprintf( mdata,strlen(mdata), "%s.pvtu",mdata);

// If the output *.pvtu filename has dots "." in the basename,
// replace them with dashes "-".
// Why? In VTK function SetFileName(filename), the first dot "." in the
// filename is interpreted as the extension start. So, whatever the
// user specifies after the first dot "." will be ignored by VTK. To overcome
// this, dots are replaced by dashes.
for(i=0;mdata[i]!='\0';i++) {
if(mdata[i]=='.') {
mdata[i] = '-';
}
}

snprintf( sdata,strlen(mdata)+6, "%s.pvtu",mdata);

MMG5_pMesh mesh = parmesh->listgrp[0].mesh;
MMG5_pSol met = parmesh->listgrp[0].met;
Expand All @@ -106,9 +122,10 @@ int PMMG_savePvtuMesh(PMMG_pParMesh parmesh, const char * filename) {
vtkMultiProcessController::SetGlobalController(vtkController);

return MMG5_saveVtkMesh_i<vtkUnstructuredGrid,vtkXMLUnstructuredGridWriter,vtkXMLPUnstructuredGridWriter>
(mesh,&met,mdata,1,0,parmesh->nprocs,parmesh->myrank,parmesh->info.root);
(mesh,&met,sdata,1,0,parmesh->nprocs,parmesh->myrank,parmesh->info.root);

MMG5_SAFE_FREE(mdata);
MMG5_SAFE_FREE(sdata);

#endif
return 1;
Expand All @@ -124,18 +141,34 @@ int PMMG_savePvtuMesh_and_allData(PMMG_pParMesh parmesh, const char * filename)

#ifndef USE_VTK
if ( parmesh->myrank == parmesh->info.root ) {
fprintf(stderr," ** VTK library not founded. Unavailable file format.\n");
fprintf(stderr," ** VTK library not found. Unavailable file format.\n");
}
return -1;

#else
char* mdata=NULL; // master file name
char* mdata=NULL; // master file name
char* sdata=NULL; // secondary file name
int i;
MMG5_SAFE_CALLOC(mdata,strlen(filename)+6,char,return 0);
MMG5_SAFE_CALLOC(sdata,strlen(filename)+6,char,return 0);

strcpy(mdata,filename);
char *ptr = MMG5_Get_filenameExt(mdata);
*ptr = '\0'; // get basename
snprintf( mdata,strlen(mdata), "%s.pvtu",mdata);

// If the output *.pvtu filename has dots "." in the basename,
// replace them with dashes "-".
// Why? In VTK function SetFileName(filename), the first dot "." in the
// filename is interpreted as the extension start. So, whatever the
// user specifies after the first dot "." will be ignored by VTK. To overcome
// this, dots are replaced by dashes.
for(i=0;mdata[i]!='\0';i++) {
if(mdata[i]=='.') {
mdata[i] = '-';
}
}

snprintf( sdata,strlen(mdata)+6, "%s.pvtu",mdata);

mesh = parmesh->listgrp[0].mesh;
// Add met at the end of field to be able to save everything in the pvtu file
Expand All @@ -161,9 +194,10 @@ int PMMG_savePvtuMesh_and_allData(PMMG_pParMesh parmesh, const char * filename)
vtkMultiProcessController::SetGlobalController(vtkController);

return MMG5_saveVtkMesh_i<vtkUnstructuredGrid,vtkXMLUnstructuredGridWriter,vtkXMLPUnstructuredGridWriter>
(mesh,allSol,mdata,metricData,0,parmesh->nprocs,parmesh->myrank,parmesh->info.root);
(mesh,allSol,sdata,metricData,0,parmesh->nprocs,parmesh->myrank,parmesh->info.root);

MMG5_SAFE_FREE(mdata);
MMG5_SAFE_FREE(sdata);

#endif
return 1;
Expand Down
39 changes: 20 additions & 19 deletions src/parmmg.c
Original file line number Diff line number Diff line change
Expand Up @@ -385,33 +385,34 @@ int main( int argc, char *argv[] )
char *basename = MMG5_Remove_ext ( parmesh->meshout,".mesh" );
fprintf(stdout,"\n -- WRITING DATA FILE %s.<rankid>.mesh\n",basename);
MMG5_SAFE_FREE ( basename );
if (grp->field) {
fprintf(stdout," Writing mesh, metric and fields.\n");
}
else {
fprintf(stdout," Writing mesh and metric.\n");
}
}
else if ( parmesh->info.fmtout == PMMG_FMT_DistributedMeditBinary ) {
char *basename = MMG5_Remove_ext ( parmesh->meshout,".meshb" );
fprintf(stdout,"\n -- WRITING DATA FILE %s.<rankid>.meshb\n",basename);
MMG5_SAFE_FREE ( basename );
if (grp->field) {
fprintf(stdout," Writing mesh, metric and fields.\n");
}
else {
fprintf(stdout," Writing mesh and metric.\n");
}
else if ( parmesh->info.fmtout == MMG5_FMT_VtkPvtu ) {
char *basename = MMG5_Remove_ext ( parmesh->meshout,".pvtu" );
int i, rename=0;
for(i=0;basename[i]!='\0';i++) {
if(basename[i]=='.') {
basename[i] = '-';
rename = 1;
}
}
fprintf(stdout,"\n -- WRITING DATA FILES %s.pvtu\n",basename);
if (rename) fprintf(stdout," ## WARNING: Filename has been changed: "
"%s => %s.pvtu\n",parmesh->meshout,basename);
MMG5_SAFE_FREE ( basename );
}
else {
if (grp->field) {
fprintf(stdout,"\n -- WRITING DATA FILE %s\n"
" Writing mesh, metric and fields.\n",parmesh->meshout);
}
else {
fprintf(stdout,"\n -- WRITING DATA FILE %s\n"
" Writing mesh and metric.\n",parmesh->meshout);
}
fprintf(stdout,"\n -- WRITING DATA FILE %s\n",parmesh->meshout);
}
if (grp->field) {
fprintf(stdout," Writing mesh, metric and fields.\n");
}
else {
fprintf(stdout," Writing mesh and metric.\n");
}
}

Expand Down

0 comments on commit 306b3f0

Please sign in to comment.