#include "SALOME_LifeCycleCORBA.hxx"
#include "SALOMEconfig.h"
+// Have to be included before std headers
+#include <Python.h>
+#include <structmember.h>
+
#include <vector>
#include <cmath>
#include <cstdlib>
std::vector<double> LesExtremes = myHomardCas->GetBoundingBox();
ASSERT(LesExtremes.size() == 10);
aResult->length(10);
- for (int i = 0; i < (int)LesExtremes.size(); i++) {
+ for (unsigned int i = 0; i < LesExtremes.size(); i++) {
aResult[i] = LesExtremes[i];
}
return aResult._retn();
{
ASSERT(myHomardCas);
std::list<std::string> ListString;
- for (int i = 0; i < ListGroup.length(); i++)
+ for (unsigned int i = 0; i < ListGroup.length(); i++)
{
ListString.push_back(std::string(ListGroup[i]));
}
//=============================================================================
HOMARD_Gen_i::~HOMARD_Gen_i()
{
+ MESSAGE ("HOMARD_Gen_i::~HOMARD_Gen_i()");
if (!myCase->_is_nil()) {
CleanCase();
}
MESSAGE ("DeleteIteration : numIter = " << numIter);
if (numIter == 0) {
- if (!CORBA::is_nil(myIteration1)) DeleteIteration(1);
- myIteration0 = SMESHHOMARD::HOMARD_Iteration::_nil();
+ if (CORBA::is_nil(myIteration1))
+ myIteration0 = SMESHHOMARD::HOMARD_Iteration::_nil();
}
else {
if (!CORBA::is_nil(myIteration1)) {
throw SALOME::SALOME_Exception(es);
}
- SMESHHOMARD::HOMARD_Iteration_var myIteration;
- if (numIter == 0) myIteration = myIteration0;
- else myIteration = myIteration1;
- if (CORBA::is_nil(myIteration)) {
- SALOME::ExceptionStruct es;
- es.type = SALOME::BAD_PARAM;
- es.text = "Invalid iteration";
- throw SALOME::SALOME_Exception(es);
+ if (numIter == 0) {
+ if (CORBA::is_nil(myIteration0)) {
+ SALOME::ExceptionStruct es;
+ es.type = SALOME::BAD_PARAM;
+ es.text = "Invalid iteration";
+ throw SALOME::SALOME_Exception(es);
+ }
+
+ myCase->AddIteration(myIteration0->GetName());
+ myIteration0->SetCaseName("Case_1");
}
+ else {
+ if (CORBA::is_nil(myIteration1)) {
+ SALOME::ExceptionStruct es;
+ es.type = SALOME::BAD_PARAM;
+ es.text = "Invalid iteration";
+ throw SALOME::SALOME_Exception(es);
+ }
- myCase->AddIteration(myIteration->GetName());
- myIteration->SetCaseName("Case_1");
+ myCase->AddIteration(myIteration1->GetName());
+ myIteration1->SetCaseName("Case_1");
+ }
}
//=============================================================================
SMESHHOMARD::extrema_var aSeq = new SMESHHOMARD::extrema();
if (LesExtremes.size() != 10) { return 0; }
aSeq->length(10);
- for (int i = 0; i < LesExtremes.size(); i++)
+ for (unsigned int i = 0; i < LesExtremes.size(); i++)
aSeq[i] = LesExtremes[i];
myCase->SetBoundingBox(aSeq);
// Les groupes
SMESHHOMARD::extrema_var aSeq = new SMESHHOMARD::extrema();
if (LesExtremes.size() != 10) { return 0; }
aSeq->length(10);
- for (int i = 0; i < LesExtremes.size(); i++)
+ for (unsigned int i = 0; i < LesExtremes.size(); i++)
aSeq[i] = LesExtremes[i];
myCase->SetBoundingBox(aSeq);
// Les groupes
}
// Delete all boundaries
- std::map<std::string, SMESHHOMARD::HOMARD_Boundary_var>::const_iterator it_boundary;
- for (it_boundary = _mesBoundarys.begin();
- it_boundary != _mesBoundarys.end(); ++it_boundary) {
- DeleteBoundary((*it_boundary).first.c_str());
- }
+ //std::map<std::string, SMESHHOMARD::HOMARD_Boundary_var>::const_iterator it_boundary;
+ //for (it_boundary = _mesBoundarys.begin();
+ // it_boundary != _mesBoundarys.end(); ++it_boundary) {
+ // DeleteBoundary((*it_boundary).first.c_str());
+ //}
+ _mesBoundarys.clear();
// Delete iteration
DeleteIteration(1);
if (!_CaseOnMedFile && !_TmpMeshFile.empty()) {
SMESH_File aFile (_TmpMeshFile, false);
if (aFile.exists()) aFile.remove();
+ _TmpMeshFile = "";
}
_SmeshMesh = SMESH::SMESH_Mesh::_nil();
}
ASSERT(!CORBA::is_nil(myHypothesis));
// B. L'iteration parent
- //const char* nomIterationParent = myIteration->GetIterParentName();
- SMESHHOMARD::HOMARD_Iteration_var myIterationParent = myIteration0;
- ASSERT(!CORBA::is_nil(myIterationParent));
- // Si l'iteration parent n'est pas calculee, on le fait (recursivite amont)
- //if (myIterationParent->GetState() == 1) {
- // int codret = Compute(nomIterationParent);
- // if (codret != 0) VERIFICATION("Pb au calcul de l'iteration precedente" == 0);
- //}
+ ASSERT(!CORBA::is_nil(myIteration0));
// C. Le sous-répertoire de l'iteration precedente
char* DirComputePa = ComputeDirPaManagement(myCase, myIteration);
MESSAGE (". ConfType = " << ConfType);
// D.3. Le maillage de depart
- const char* NomMeshParent = myIterationParent->GetMeshName();
+ const char* NomMeshParent = myIteration0->GetMeshName();
MESSAGE (". NomMeshParent = " << NomMeshParent);
- const char* MeshFileParent = myIterationParent->GetMeshFile();
+ const char* MeshFileParent = myIteration0->GetMeshFile();
MESSAGE (". MeshFileParent = " << MeshFileParent);
// D.4. Le maillage associe a l'iteration
// C. Lancement des projections
MESSAGE (". Lancement des projections");
- // TODO?
- SMESHHOMARDImpl::FrontTrack* myFrontTrack = new SMESHHOMARDImpl::FrontTrack();
- myFrontTrack->track(theInputMedFile, theOutputMedFile,
- theInputNodeFiles, theXaoFileName, theIsParallel);
+
+ assert(Py_IsInitialized());
+ PyGILState_STATE gstate;
+ gstate = PyGILState_Ensure();
+ PyRun_SimpleString("from FrontTrack import FrontTrack");
+ // FrontTrack().track( fic_med_brut, fic_med_new, l_fr, xao_file )
+ std::string pyCommand ("FrontTrack().track( \"");
+ pyCommand += theInputMedFile + "\", \"" + theOutputMedFile + "\", [";
+ for (int i = 0; i < icpt; i++) {
+ if (i > 0) pyCommand += ", ";
+ pyCommand += "\"";
+ pyCommand += theInputNodeFiles[i];
+ pyCommand += "\"";
+ }
+ pyCommand += "], \"" + theXaoFileName + "\", False )";
+ MESSAGE (". Lancement des projections: pyCommand = " << pyCommand);
+ PyRun_SimpleString(pyCommand.c_str());
+ PyGILState_Release(gstate);
+
+ //SMESHHOMARDImpl::FrontTrack* myFrontTrack = new SMESHHOMARDImpl::FrontTrack();
+ //myFrontTrack->track(theInputMedFile, theOutputMedFile,
+ // theInputNodeFiles, theXaoFileName, theIsParallel);
// D. Transfert des coordonnées modifiées dans le fichier historique de HOMARD
// On lance une exécution spéciale de HOMARD en attendant
//=============================================================================
// Calcul d'une iteration : gestion du répertoire de calcul de l'iteration parent
//=============================================================================
-char* HOMARD_Gen_i::ComputeDirPaManagement(SMESHHOMARD::HOMARD_Cas_var myCase, SMESHHOMARD::HOMARD_Iteration_var myIteration)
+char* HOMARD_Gen_i::ComputeDirPaManagement(SMESHHOMARD::HOMARD_Cas_var myCase,
+ SMESHHOMARD::HOMARD_Iteration_var myIteration)
{
MESSAGE ("ComputeDirPaManagement : répertoires pour le calcul");
// Le répertoire du cas
// Le sous-répertoire de l'iteration precedente
- SMESHHOMARD::HOMARD_Iteration_var myIterationParent = myIteration0;
- const char* nomDirItPa = myIterationParent->GetDirNameLoc();
+ const char* nomDirItPa = myIteration0->GetDirNameLoc();
std::stringstream DirComputePa;
DirComputePa << nomDirCase << "/" << nomDirItPa;
MESSAGE(". nomDirItPa = " << nomDirItPa);
for (it_boundary = _mesBoundarys.begin();
it_boundary != _mesBoundarys.end(); ++it_boundary) {
SMESHHOMARD::HOMARD_Boundary_var maBoundary = (*it_boundary).second;
+ //MESSAGE ("PythonDump of boundary " << (*it_boundary).first <<
+ // " : " << maBoundary->GetDumpPython());
pd << maBoundary->GetDumpPython();
}