mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2025-01-19 06:50: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);
|
||||
}
|
||||
|
||||
/*!
|
||||
* 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
|
||||
@ -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
|
||||
* 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
|
||||
* 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,
|
||||
std::vector<MESHJOB::MeshJobParameter> listSteelBarMesh) {
|
||||
@ -147,27 +171,29 @@ const char * MeshJobManager_i::_writeDataFile(std::vector<MESHJOB::MeshJobParame
|
||||
// Make it static so that it's allocated once (constant name)
|
||||
static std::string * dataFilename = new std::string(LOCAL_INPUTDIR+"/"+DATAFILE);
|
||||
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;
|
||||
|
||||
// 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];
|
||||
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);
|
||||
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
|
||||
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
|
||||
int nbSteelBarMesh=listSteelBarMesh.size();
|
||||
line = std::string("nbSteelbarMesh") + SEPARATOR + ToString(nbSteelBarMesh);
|
||||
int nbSteelBarMeshes=listSteelBarMesh.size();
|
||||
line = std::string("nbSteelBarMeshes") + SEPARATOR + ToString(nbSteelBarMeshes);
|
||||
dataFile << line.c_str() << std::endl;
|
||||
for (int i=0; i<nbSteelBarMesh; i++) {
|
||||
for (int i=0; i<nbSteelBarMeshes; i++) {
|
||||
#ifdef WIN32
|
||||
char fname[ _MAX_FNAME ];
|
||||
_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)
|
||||
{
|
||||
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
|
||||
//
|
||||
@ -350,24 +373,37 @@ CORBA::Long MeshJobManager_i::initialize(const MESHJOB::MeshJobParameterList & m
|
||||
// We specify the input files that are required to execute the
|
||||
// job_file. If basenames are specified, then the files are supposed
|
||||
// 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:
|
||||
// (nb. of steelbar meshfile)
|
||||
// + (1 concrete meshfile)
|
||||
// + (1 or 0 concrete meshfile)
|
||||
// + (1 padder input file)
|
||||
// = nb steelbar meshfile + 2
|
||||
jobParameters->in_files.length(nbFiles);
|
||||
jobParameters->in_files[0] = CORBA::string_dup(listConcreteMesh[0].file_name);
|
||||
for (int i=0; i<listSteelBarMesh.size(); i++) {
|
||||
jobParameters->in_files[1+i] = CORBA::string_dup(listSteelBarMesh[i].file_name);
|
||||
for (int i=0; i<nbcmesh; i++) {
|
||||
jobParameters->in_files[i] = CORBA::string_dup(listConcreteMesh[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
|
||||
// REMOTE_WORKDIR on the remote host
|
||||
|
||||
// Then, we have to specify the existance of an output
|
||||
// filenames. The path is supposed to be a path on the remote
|
||||
// resource, i.e. where the job is executed.
|
||||
// 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 filename. The
|
||||
// path is supposed to be a path on the remote resource, i.e. where
|
||||
// the job is executed.
|
||||
jobParameters->out_files.length(1);
|
||||
std::string outputfile_name = std::string(jobPaths->remote_workdir)+"/"+OUTPUTFILE;
|
||||
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
|
||||
window point of view.
|
||||
"""
|
||||
if self.__nbConcreteMesh < 1:
|
||||
self.checkDataMessage = "You must define at least one CONCRETE mesh"
|
||||
if self.__nbConcreteMesh == 0 and self.__nbSteelbarMesh == 0:
|
||||
self.checkDataMessage = "You must define at least one mesh (CONCRETE or STEELBAR)"
|
||||
return False
|
||||
if self.__nbConcreteMesh > 1:
|
||||
self.checkDataMessage = "You define multiple CONCRETE meshes."
|
||||
@ -321,9 +321,7 @@ class InputDialog(GenericDialog):
|
||||
# just warn the user, but don't block
|
||||
QMessageBox.information(self, "Info", self.checkDataMessage)
|
||||
return True
|
||||
if self.__nbSteelbarMesh < 1:
|
||||
self.checkDataMessage = "You must define at least one STEELBAR mesh"
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
|
||||
|
@ -33,3 +33,9 @@ envpath = /usr/local/share/envPadder.sh
|
||||
resname = nepal@nepal
|
||||
binpath = /usr/local/bin/padder.exe
|
||||
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
|
||||
# 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
|
||||
# =======================================================================
|
||||
#
|
||||
import sys
|
||||
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():
|
||||
"""Test using a concrete mesh and a single steelbar mesh"""
|
||||
file_concrete=os.path.join(spadder.getTestDataDir(),"concrete.med")
|
||||
@ -127,13 +138,16 @@ def test03_parameters():
|
||||
return meshJobParameterList
|
||||
|
||||
#
|
||||
# Choose here the use case
|
||||
# =======================================================================
|
||||
# Prepare the job parameters and initialize the job
|
||||
# =======================================================================
|
||||
#
|
||||
|
||||
# Choose here the use case
|
||||
#meshJobParameterList = test00_parameters()
|
||||
#meshJobParameterList = test01_parameters()
|
||||
meshJobParameterList = test02_parameters()
|
||||
#meshJobParameterList = test03_parameters()
|
||||
#meshJobParameterList = test02_parameters()
|
||||
meshJobParameterList = test03_parameters()
|
||||
|
||||
#
|
||||
# Prepare, start and follow-up the job
|
||||
@ -154,6 +168,11 @@ while not created:
|
||||
time.sleep(0.5)
|
||||
nbiter+=1
|
||||
|
||||
|
||||
#
|
||||
# =======================================================================
|
||||
# Submit the job and start the supervision
|
||||
# =======================================================================
|
||||
#
|
||||
# Start the execution of the job identified by its job id.
|
||||
#
|
||||
|
Loading…
Reference in New Issue
Block a user