mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2025-01-19 13:30:36 +05:00
PADDER FIX: run with the plugin all the unit tests of the executable programs (SpherePadder).
This commit is contained in:
parent
a6bc2b5a1c
commit
ee5cb3d25c
@ -67,6 +67,21 @@ static bool myStartsWith(const std::string& text,const std::string& token){
|
|||||||
return (text.compare(0, token.length(), token) == 0);
|
return (text.compare(0, token.length(), token) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* This function returns true if the file exists on the local file
|
||||||
|
* system.
|
||||||
|
*/
|
||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
static bool fexists(const char *filename)
|
||||||
|
{
|
||||||
|
std::ifstream ifile(filename);
|
||||||
|
if ((bool)ifile && ifile.good()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// ====================================================================
|
// ====================================================================
|
||||||
// Constructor/Destructor
|
// Constructor/Destructor
|
||||||
@ -134,7 +149,16 @@ static std::string REMOTE_WORKDIR("/tmp/spadder.remote.workdir."+USER);
|
|||||||
* input data (list of filenames and groupnames) and returns the path
|
* input data (list of filenames and groupnames) and returns the path
|
||||||
* of the created file. This function is the one that knows the format
|
* of the created file. This function is the one that knows the format
|
||||||
* of the padder input file. If the input file format changes, then
|
* of the padder input file. If the input file format changes, then
|
||||||
* this function (and only this one) should be updated.
|
* this function (and only this one) should be updated. The file
|
||||||
|
* format is the following ([] means that the variable is optional):
|
||||||
|
*
|
||||||
|
* [<concreteMeshFile> <concreteGroupName>]
|
||||||
|
* nbSteelBarMeshes <N>
|
||||||
|
* <steelBarMeshFile_1> <steelBarGroupName_1>
|
||||||
|
* <steelBarMeshFile_2> <steelBarGroupName_2>
|
||||||
|
* ...
|
||||||
|
* <steelBarMeshFile_N> <steelBarGroupName_N>
|
||||||
|
* <outputMedFile>
|
||||||
*/
|
*/
|
||||||
const char * MeshJobManager_i::_writeDataFile(std::vector<MESHJOB::MeshJobParameter> listConcreteMesh,
|
const char * MeshJobManager_i::_writeDataFile(std::vector<MESHJOB::MeshJobParameter> listConcreteMesh,
|
||||||
std::vector<MESHJOB::MeshJobParameter> listSteelBarMesh) {
|
std::vector<MESHJOB::MeshJobParameter> listSteelBarMesh) {
|
||||||
@ -148,26 +172,28 @@ const char * MeshJobManager_i::_writeDataFile(std::vector<MESHJOB::MeshJobParame
|
|||||||
static std::string * dataFilename = new std::string(LOCAL_INPUTDIR+"/"+DATAFILE);
|
static std::string * dataFilename = new std::string(LOCAL_INPUTDIR+"/"+DATAFILE);
|
||||||
std::ofstream dataFile(dataFilename->c_str());
|
std::ofstream dataFile(dataFilename->c_str());
|
||||||
|
|
||||||
// We first specify the concrete mesh data (filename and groupname)
|
// Note that we use here the basename of the files because the files
|
||||||
|
// are supposed to be copied in the REMOTE_WORKDIR for execution.
|
||||||
std::string line;
|
std::string line;
|
||||||
#ifdef WIN32
|
|
||||||
char fname[ _MAX_FNAME ];
|
|
||||||
_splitpath( listConcreteMesh[0].file_name, NULL, NULL, fname, NULL );
|
|
||||||
char* bname = &fname[0];
|
|
||||||
#else
|
|
||||||
char* bname = basename(listConcreteMesh[0].file_name);
|
|
||||||
#endif
|
|
||||||
line = std::string(bname) + " " + std::string(listConcreteMesh[0].group_name);
|
|
||||||
dataFile << line.c_str() << std::endl;
|
|
||||||
// Note that we use here the basename because the files are supposed
|
|
||||||
// to be copied in the REMOTE_WORKDIR for execution.
|
|
||||||
|
|
||||||
// The, we can specify the steelbar mesh data, starting by the
|
// We first specify the concrete mesh data (filename and groupname)
|
||||||
|
if ( listConcreteMesh.size() > 0 ) {
|
||||||
|
#ifdef WIN32
|
||||||
|
char fname[ _MAX_FNAME ];
|
||||||
|
_splitpath( listConcreteMesh[0].file_name, NULL, NULL, fname, NULL );
|
||||||
|
char* bname = &fname[0];
|
||||||
|
#else
|
||||||
|
char* bname = basename(listConcreteMesh[0].file_name);
|
||||||
|
#endif
|
||||||
|
line = std::string(bname) + " " + std::string(listConcreteMesh[0].group_name);
|
||||||
|
dataFile << line.c_str() << std::endl;
|
||||||
|
}
|
||||||
|
// Then, we can specify the steelbar mesh data, starting by the
|
||||||
// number of meshes
|
// number of meshes
|
||||||
int nbSteelBarMesh=listSteelBarMesh.size();
|
int nbSteelBarMeshes=listSteelBarMesh.size();
|
||||||
line = std::string("nbSteelbarMesh") + SEPARATOR + ToString(nbSteelBarMesh);
|
line = std::string("nbSteelBarMeshes") + SEPARATOR + ToString(nbSteelBarMeshes);
|
||||||
dataFile << line.c_str() << std::endl;
|
dataFile << line.c_str() << std::endl;
|
||||||
for (int i=0; i<nbSteelBarMesh; i++) {
|
for (int i=0; i<nbSteelBarMeshes; i++) {
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
char fname[ _MAX_FNAME ];
|
char fname[ _MAX_FNAME ];
|
||||||
_splitpath( listSteelBarMesh[i].file_name, NULL, NULL, fname, NULL );
|
_splitpath( listSteelBarMesh[i].file_name, NULL, NULL, fname, NULL );
|
||||||
@ -252,9 +278,6 @@ CORBA::Long MeshJobManager_i::initialize(const MESHJOB::MeshJobParameterList & m
|
|||||||
const char * configId)
|
const char * configId)
|
||||||
{
|
{
|
||||||
beginService("MeshJobManager_i::initialize");
|
beginService("MeshJobManager_i::initialize");
|
||||||
std::cerr << "##################################### initialize" << std::endl;
|
|
||||||
std::cerr << "#####################################" << std::endl;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// We first analyse the CORBA sequence to store data in C++ vectors
|
// We first analyse the CORBA sequence to store data in C++ vectors
|
||||||
//
|
//
|
||||||
@ -350,24 +373,37 @@ CORBA::Long MeshJobManager_i::initialize(const MESHJOB::MeshJobParameterList & m
|
|||||||
// We specify the input files that are required to execute the
|
// We specify the input files that are required to execute the
|
||||||
// job_file. If basenames are specified, then the files are supposed
|
// job_file. If basenames are specified, then the files are supposed
|
||||||
// to be located in local_directory.
|
// to be located in local_directory.
|
||||||
int nbFiles = listSteelBarMesh.size()+2;
|
int nbcmesh = listConcreteMesh.size();
|
||||||
|
int nbsmesh = listSteelBarMesh.size();
|
||||||
|
int nbFiles = nbsmesh+nbcmesh+1;
|
||||||
// The number of input file is:
|
// The number of input file is:
|
||||||
// (nb. of steelbar meshfile)
|
// (nb. of steelbar meshfile)
|
||||||
// + (1 concrete meshfile)
|
// + (1 or 0 concrete meshfile)
|
||||||
// + (1 padder input file)
|
// + (1 padder input file)
|
||||||
// = nb steelbar meshfile + 2
|
|
||||||
jobParameters->in_files.length(nbFiles);
|
jobParameters->in_files.length(nbFiles);
|
||||||
jobParameters->in_files[0] = CORBA::string_dup(listConcreteMesh[0].file_name);
|
for (int i=0; i<nbcmesh; i++) {
|
||||||
for (int i=0; i<listSteelBarMesh.size(); i++) {
|
jobParameters->in_files[i] = CORBA::string_dup(listConcreteMesh[i].file_name);
|
||||||
jobParameters->in_files[1+i] = CORBA::string_dup(listSteelBarMesh[i].file_name);
|
|
||||||
}
|
}
|
||||||
jobParameters->in_files[1+listSteelBarMesh.size()] = CORBA::string_dup(dataFilename);
|
for (int i=0; i<nbsmesh; i++) {
|
||||||
|
jobParameters->in_files[nbcmesh+i] = CORBA::string_dup(listSteelBarMesh[i].file_name);
|
||||||
|
}
|
||||||
|
jobParameters->in_files[nbcmesh+nbsmesh] = CORBA::string_dup(dataFilename);
|
||||||
// Note that all these input files will be copied in the
|
// Note that all these input files will be copied in the
|
||||||
// REMOTE_WORKDIR on the remote host
|
// REMOTE_WORKDIR on the remote host. At this step, they should
|
||||||
|
// all exist, so we can check their presence on the local
|
||||||
|
// filesystem.
|
||||||
|
for (int i=0; i<nbFiles; i++) {
|
||||||
|
if ( fexists(jobParameters->in_files[i]) != true ) {
|
||||||
|
_lastErrorMessage = std::string("The input file ") + std::string(jobParameters->in_files[i]);
|
||||||
|
_lastErrorMessage+= std::string(" does not exists. Can't initialize the job");
|
||||||
|
LOG(_lastErrorMessage);
|
||||||
|
return JOBID_UNDEFINED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Then, we have to specify the existance of an output
|
// Then, we have to specify the existance of an output filename. The
|
||||||
// filenames. The path is supposed to be a path on the remote
|
// path is supposed to be a path on the remote resource, i.e. where
|
||||||
// resource, i.e. where the job is executed.
|
// the job is executed.
|
||||||
jobParameters->out_files.length(1);
|
jobParameters->out_files.length(1);
|
||||||
std::string outputfile_name = std::string(jobPaths->remote_workdir)+"/"+OUTPUTFILE;
|
std::string outputfile_name = std::string(jobPaths->remote_workdir)+"/"+OUTPUTFILE;
|
||||||
jobParameters->out_files[0] = CORBA::string_dup(outputfile_name.c_str());
|
jobParameters->out_files[0] = CORBA::string_dup(outputfile_name.c_str());
|
||||||
|
@ -312,8 +312,8 @@ class InputDialog(GenericDialog):
|
|||||||
This function checks if the data are valid, from the dialog
|
This function checks if the data are valid, from the dialog
|
||||||
window point of view.
|
window point of view.
|
||||||
"""
|
"""
|
||||||
if self.__nbConcreteMesh < 1:
|
if self.__nbConcreteMesh == 0 and self.__nbSteelbarMesh == 0:
|
||||||
self.checkDataMessage = "You must define at least one CONCRETE mesh"
|
self.checkDataMessage = "You must define at least one mesh (CONCRETE or STEELBAR)"
|
||||||
return False
|
return False
|
||||||
if self.__nbConcreteMesh > 1:
|
if self.__nbConcreteMesh > 1:
|
||||||
self.checkDataMessage = "You define multiple CONCRETE meshes."
|
self.checkDataMessage = "You define multiple CONCRETE meshes."
|
||||||
@ -321,9 +321,7 @@ class InputDialog(GenericDialog):
|
|||||||
# just warn the user, but don't block
|
# just warn the user, but don't block
|
||||||
QMessageBox.information(self, "Info", self.checkDataMessage)
|
QMessageBox.information(self, "Info", self.checkDataMessage)
|
||||||
return True
|
return True
|
||||||
if self.__nbSteelbarMesh < 1:
|
|
||||||
self.checkDataMessage = "You must define at least one STEELBAR mesh"
|
|
||||||
return False
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
@ -33,3 +33,9 @@ envpath = /usr/local/share/envPadder.sh
|
|||||||
resname = nepal@nepal
|
resname = nepal@nepal
|
||||||
binpath = /usr/local/bin/padder.exe
|
binpath = /usr/local/bin/padder.exe
|
||||||
envpath = /usr/local/share/envPadder.sh
|
envpath = /usr/local/share/envPadder.sh
|
||||||
|
|
||||||
|
[devel]
|
||||||
|
resname = localhost
|
||||||
|
binpath = /opt/programs/padder/subversion/trunk/padder.exe
|
||||||
|
envpath = /opt/programs/padder/subversion/trunk/padder.env
|
||||||
|
|
||||||
|
@ -21,10 +21,13 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
# This script illustrates the standard use case of the component
|
# This script illustrates the standard use case of the component
|
||||||
# MeshJobManager from within a SALOME script.
|
# MeshJobManager from within a SALOME script. It could be used as a
|
||||||
|
# unit test of the component.
|
||||||
|
|
||||||
#
|
#
|
||||||
|
# =======================================================================
|
||||||
# Preparing the configuration parameters
|
# Preparing the configuration parameters
|
||||||
|
# =======================================================================
|
||||||
#
|
#
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
@ -58,8 +61,16 @@ component.configure(configId,config)
|
|||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Prepare the job parameters and initialize the job
|
# =======================================================================
|
||||||
|
# Define several datasets for the different use cases
|
||||||
|
# =======================================================================
|
||||||
#
|
#
|
||||||
|
|
||||||
|
# We define several functions that create each a dataset of med files
|
||||||
|
# for testing the component. The test function number corresponds to
|
||||||
|
# the number of the test defined in the SpherePadder installation
|
||||||
|
# directory.
|
||||||
|
|
||||||
def test00_parameters():
|
def test00_parameters():
|
||||||
"""Test using a concrete mesh and a single steelbar mesh"""
|
"""Test using a concrete mesh and a single steelbar mesh"""
|
||||||
file_concrete=os.path.join(spadder.getTestDataDir(),"concrete.med")
|
file_concrete=os.path.join(spadder.getTestDataDir(),"concrete.med")
|
||||||
@ -127,13 +138,16 @@ def test03_parameters():
|
|||||||
return meshJobParameterList
|
return meshJobParameterList
|
||||||
|
|
||||||
#
|
#
|
||||||
# Choose here the use case
|
# =======================================================================
|
||||||
|
# Prepare the job parameters and initialize the job
|
||||||
|
# =======================================================================
|
||||||
#
|
#
|
||||||
|
|
||||||
|
# Choose here the use case
|
||||||
#meshJobParameterList = test00_parameters()
|
#meshJobParameterList = test00_parameters()
|
||||||
#meshJobParameterList = test01_parameters()
|
#meshJobParameterList = test01_parameters()
|
||||||
meshJobParameterList = test02_parameters()
|
#meshJobParameterList = test02_parameters()
|
||||||
#meshJobParameterList = test03_parameters()
|
meshJobParameterList = test03_parameters()
|
||||||
|
|
||||||
#
|
#
|
||||||
# Prepare, start and follow-up the job
|
# Prepare, start and follow-up the job
|
||||||
@ -154,6 +168,11 @@ while not created:
|
|||||||
time.sleep(0.5)
|
time.sleep(0.5)
|
||||||
nbiter+=1
|
nbiter+=1
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# =======================================================================
|
||||||
|
# Submit the job and start the supervision
|
||||||
|
# =======================================================================
|
||||||
#
|
#
|
||||||
# Start the execution of the job identified by its job id.
|
# Start the execution of the job identified by its job id.
|
||||||
#
|
#
|
||||||
|
Loading…
Reference in New Issue
Block a user