void InvalideIter (in string IterName) raises (SALOME::SALOME_Exception);
void InvalideIterOption (in string IterName, in long Option)
raises(SALOME::SALOME_Exception);
+ void InvalideYACS (in string YacsName) raises (SALOME::SALOME_Exception);
void InvalideZone (in string ZoneName) raises (SALOME::SALOME_Exception);
long DeleteBoundary (in string BoundaryName) raises (SALOME::SALOME_Exception);
void SetType (in long Type) raises (SALOME::SALOME_Exception);
long GetType() raises (SALOME::SALOME_Exception);
+ void SetMaxIter (in long MaxIter) raises (SALOME::SALOME_Exception);
+ long GetMaxIter() raises (SALOME::SALOME_Exception);
+ void SetMaxNode (in long MaxNode) raises (SALOME::SALOME_Exception);
+ long GetMaxNode() raises (SALOME::SALOME_Exception);
+ void SetMaxElem (in long MaxElem) raises (SALOME::SALOME_Exception);
+ long GetMaxElem() raises (SALOME::SALOME_Exception);
+
void SetDirName(in string NomDir) raises (SALOME::SALOME_Exception);
string GetDirName() raises (SALOME::SALOME_Exception);
NumCalcP1 = NumCalc + 1
FileName = " "
#
-NbCalcMax = 5
+Analyse_Test_Convergence
#
MessInfo = None
Error = 0
#
# If the maximum number of adaptations is reached, stop:
#
- if NumCalc > NbCalcMax :
- MessInfo = "The maximum number of adaptations is reached: %d" % NbCalcMax
- Error = -1
- break
+ if MaxIter > 0 :
+ if NumCalc >= MaxIter :
+ MessInfo = "The maximum number of adaptations is reached: %d" % (MaxIter+1)
+ Error = -1
+ break
#
break
]]></code></script>
NumCalcP1 = NumCalc + 1
FileName = " "
#
-NbCalcMax = 5
+Analyse_Test_Convergence
#
MessInfo = None
Error = 0
#
# Si on depasse le maximum, on arrete :
#
- if NumCalc > NbCalcMax :
- MessInfo = "La limite en nombre de calculs a ete atteinte : %d" % NbCalcMax
- Error = -1
- break
+ if MaxIter > 0 :
+ if NumCalc >= MaxIter :
+ MessInfo = "La limite en nombre de calculs a ete atteinte : %d" % (MaxIter+1)
+ Error = -1
+ break
#
break
]]></code></script>
_NomCas( "" ),
_NomDir( "" ),
_MeshFile( "" ),
- _ScriptFile( "" ),
- _Type( 1 )
+ _ScriptFile( "" )
{
MESSAGE("HOMARD_YACS");
}
aScript << "\t" << _Name << " = " << _NomCas << ".CreateYACSSchema(\"" << _Name << "\", \"" << _ScriptFile << "\", \"" << _NomDir << "\", \"" << _MeshFile << "\")\n";
// Le type de schema
aScript << "\t" << _Name << ".SetType(" << _Type << ")\n";
+// Les controles de convergences
+ if ( _MaxIter > 0 ) { aScript << "\t" << _Name << ".SetMaxIter(" << _MaxIter << ")\n"; }
+ if ( _MaxNode > 0 ) { aScript << "\t" << _Name << ".SetMaxNode(" << _MaxNode << ")\n"; }
+ if ( _MaxElem > 0 ) { aScript << "\t" << _Name << ".SetMaxElem(" << _MaxElem << ")\n"; }
// L'ecriture du schema
aScript << "\tcodret = " << _Name << ".Write()\n";
return _Type;
}
//=============================================================================
+void HOMARD_YACS::SetMaxIter( int MaxIter )
+{
+ _MaxIter = MaxIter;
+}
+//=============================================================================
+int HOMARD_YACS::GetMaxIter() const
+{
+ return _MaxIter;
+}
+//=============================================================================
+void HOMARD_YACS::SetMaxNode( int MaxNode )
+{
+ _MaxNode = MaxNode;
+}
+//=============================================================================
+int HOMARD_YACS::GetMaxNode() const
+{
+ return _MaxNode;
+}
+//=============================================================================
+void HOMARD_YACS::SetMaxElem( int MaxElem )
+{
+ _MaxElem = MaxElem;
+}
+//=============================================================================
+int HOMARD_YACS::GetMaxElem() const
+{
+ return _MaxElem;
+}
+//=============================================================================
void HOMARD_YACS::SetDirName( const char* NomDir )
{
_NomDir = std::string( NomDir );
void SetType( int Type );
int GetType() const;
+ void SetMaxIter( int MaxIter );
+ int GetMaxIter() const;
+ void SetMaxNode( int MaxNode );
+ int GetMaxNode() const;
+ void SetMaxElem( int MaxElem );
+ int GetMaxElem() const;
+
void SetDirName( const char* NomDir );
std::string GetDirName() const;
std::string _MeshFile;
std::string _ScriptFile;
int _Type;
+ int _MaxIter;
+ int _MaxNode;
+ int _MaxElem;
std::string _XMLFile;
};
//
}
//===============================================================================
+// Parametres de tests de convergence
+//===============================================================================
+void YACSDriver::TexteAnalyse_Test_Convergence( int MaxIter, int MaxNode, int MaxElem )
+{
+//
+// MESSAGE("TexteAnalyse_Test_Convergence");
+ std::string chaine ;
+ std::ostringstream oss1;
+ oss1 << MaxIter;
+ chaine = oss1.str();
+ _Texte += "MaxIter = " + chaine + "\n" ;
+ std::ostringstream oss2;
+ oss2 << MaxNode;
+ chaine = oss2.str();
+ _Texte += "MaxNode = " + chaine + "\n" ;
+ std::ostringstream oss3;
+ oss3 << MaxElem;
+ chaine = oss3.str();
+ _Texte += "MaxElem = " + chaine + "\n" ;
+//
+}
+//===============================================================================
// Creation d'un parametre
//===============================================================================
void YACSDriver::TexteParametre( const std::string node, const std::string port, const std::string type_value, const std::string value )
void Texte_python_1( const std::string pythonTexte, int indice, const std::string concept ) ;
void Texte_python_2( const std::string pythonTexte, const std::string mot_cle, const std::string concept ) ;
void TexteParametre( const std::string node, const std::string port, const std::string type_value, const std::string value ) ;
+ void TexteAnalyse_Test_Convergence( int MaxIter, int MaxNode, int MaxElem ) ;
void TexteAddParametres( ) ;
void CreeFichier() ;
//
/********************************************************************************
** Form generated from reading UI file 'CreateYACS.ui'
**
-** Created: Wed Jan 15 08:42:01 2014
+** Created: Mon Jan 20 13:23:30 2014
** by: Qt User Interface Compiler version 4.6.3
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
SpinBoxMaxNode->setObjectName(QString::fromUtf8("SpinBoxMaxNode"));
SpinBoxMaxNode->setMinimum(0);
SpinBoxMaxNode->setMaximum(999999999);
+ SpinBoxMaxNode->setSingleStep(1000);
SpinBoxMaxNode->setValue(0);
gridLayout_3->addWidget(SpinBoxMaxNode, 1, 1, 1, 1);
SpinBoxMaxElem->setObjectName(QString::fromUtf8("SpinBoxMaxElem"));
SpinBoxMaxElem->setMinimum(0);
SpinBoxMaxElem->setMaximum(999999999);
+ SpinBoxMaxElem->setSingleStep(1000);
SpinBoxMaxElem->setValue(0);
gridLayout_3->addWidget(SpinBoxMaxElem, 1, 3, 1, 1);
<property name="maximum">
<number>999999999</number>
</property>
+ <property name="singleStep">
+ <number>1000</number>
+ </property>
<property name="value">
<number>0</number>
</property>
<property name="maximum">
<number>999999999</number>
</property>
+ <property name="singleStep">
+ <number>1000</number>
+ </property>
<property name="value">
<number>0</number>
</property>
_aScriptFile(""),
_aDirName(""),
_aMeshFile(""),
- _Type(1),
- _MaxIter(0),
- _MaxNode(0),
- _MaxElem(0)
+ _Type(1)
// Les valeurs de _Type, _MaxIter, _MaxNode, _MaxElem doivent etre les memes que celles dans HOMARD_Gen_i::CreateYACSSchema
// et doivent correspondre aux defauts des boutons
{
if (_aCaseName != QString("")) { SetCaseName(); }
else { setWindowModality(Qt::NonModal); /* permet selection du cas dans l arbre d etude */}
+//
+// Les valeurs definies dans les preferences
+ _MaxIter = myHomardGen->GetYACSMaxIter();
+ _MaxNode = myHomardGen->GetYACSMaxNode();
+ _MaxElem = myHomardGen->GetYACSMaxElem();
+ MESSAGE ("Valeur par defaut de MaxIter = " << _MaxIter<<", MaxNode = "<< _MaxNode<<", MaxElem = "<< _MaxElem);
+ SpinBoxMaxIter->setValue(_MaxIter) ;
+ SpinBoxMaxNode->setValue(_MaxNode) ;
+ SpinBoxMaxElem->setValue(_MaxElem) ;
//
adjustSize();
}
// 3.2. Les maximums
_MaxIter = SpinBoxMaxIter->value() ;
-// aYACS->SetMaxIter(_MaxIter) ;
+ aYACS->SetMaxIter(_MaxIter) ;
_MaxNode = SpinBoxMaxNode->value() ;
-// aYACS->SetMaxNode(_MaxNode) ;
+ aYACS->SetMaxNode(_MaxNode) ;
_MaxElem = SpinBoxMaxElem->value() ;
-// aYACS->SetMaxElem(_MaxElem) ;
+ aYACS->SetMaxElem(_MaxElem) ;
}
LEName->setText(_Name);
LEName->setReadOnly(true);
- QString _aCaseName = aYACS->GetCaseName();
+ _aCaseName = aYACS->GetCaseName();
LECaseName->setText(_aCaseName);
LECaseName->setReadOnly(true);
PBCaseName->setVisible(0);
- QString aScriptFile = aYACS->GetScriptFile();
- LEScriptFile->setText(aScriptFile);
+ _aScriptFile = aYACS->GetScriptFile();
+ LEScriptFile->setText(_aScriptFile);
- QString aDirName = aYACS->GetDirName();
- LEDirName->setText(aDirName);
+ _aDirName = aYACS->GetDirName();
+ LEDirName->setText(_aDirName);
+ LEDirName->setReadOnly(true);
- QString aMeshFile = aYACS->GetMeshFile();
- LEMeshFile->setText(aMeshFile);
+ _aMeshFile = aYACS->GetMeshFile();
+ LEMeshFile->setText(_aMeshFile);
- int Type=aYACS->GetType();
- if(Type==1) { RBConstant->setChecked(true); }
- else { RBVariable->setChecked(true); };
+ _Type=aYACS->GetType();
+ if(_Type==1) { RBConstant->setChecked(true); }
+ else { RBVariable->setChecked(true); };
RBConstant->setEnabled(false);
RBVariable->setEnabled(false);
+
+ _MaxIter = aYACS->GetMaxIter();
+ SpinBoxMaxIter->setValue(_MaxIter) ;
+ _MaxNode = aYACS->GetMaxNode();
+ SpinBoxMaxNode->setValue(_MaxNode) ;
+ _MaxElem = aYACS->GetMaxElem();
+ SpinBoxMaxElem->setValue(_MaxElem) ;
//
}
// ---------------------------------------------------
bool MonEditYACS:: CreateOrUpdate()
//----------------------------------------------------
-// Modification du schema
+// Edition/modification du schema
{
MESSAGE("CreateOrUpdate");
-
- // Les donnees
+ bool chgt = false ;
+ int valeur_i ;
+ // A. Recuperation et comparaison des valeurs
+ // A.1. Le script de lancement
QString aScriptFile=LEScriptFile->text().trimmed();
if ( aScriptFile != _aScriptFile )
{
+// MESSAGE("modification de ScriptFile : "<<_aScriptFile.toStdString()<<" devient "<<aScriptFile.toStdString());
_aScriptFile = aScriptFile ;
aYACS->SetScriptFile(CORBA::string_dup(_aScriptFile.toStdString().c_str())) ;
+ chgt = true ;
}
- QString aDirName=LEDirName->text().trimmed();
- if ( aDirName != _aDirName )
- {
- _aDirName = aDirName ;
- aYACS->SetDirName(CORBA::string_dup(_aDirName.toStdString().c_str())) ;
- }
+ // A.2. Le maillage initial
QString aMeshFile=LEMeshFile->text().trimmed();
if ( aMeshFile != _aMeshFile )
{
+// MESSAGE("modification de aMeshFile : "<<_aMeshFile.toStdString()<<" devient "<<aMeshFile.toStdString());
_aMeshFile = aMeshFile ;
aYACS->SetMeshFile(CORBA::string_dup(_aMeshFile.toStdString().c_str())) ;
+ chgt = true ;
+ }
+ // A.3. La convergence
+ valeur_i = SpinBoxMaxIter->value() ;
+ if ( valeur_i != _MaxIter )
+ {
+// MESSAGE("modification de MaxIter : "<<_MaxIter<<" devient "<<valeur_i);
+ _MaxIter = valeur_i ;
+ aYACS->SetMaxIter(_MaxIter) ;
+ chgt = true ;
+ }
+ valeur_i = SpinBoxMaxNode->value() ;
+ if ( valeur_i != _MaxNode )
+ {
+// MESSAGE("modification de MaxNode : "<<_MaxNode<<" devient "<<valeur_i);
+ _MaxNode = valeur_i ;
+ aYACS->SetMaxNode(_MaxNode) ;
+ chgt = true ;
+ }
+ valeur_i = SpinBoxMaxElem->value() ;
+ if ( valeur_i != _MaxElem )
+ {
+// MESSAGE("modification de MaxElem : "<<_MaxElem<<" devient "<<valeur_i);
+ _MaxElem = valeur_i ;
+ aYACS->SetMaxElem(_MaxElem) ;
+ chgt = true ;
+ }
+// B. Si changement
+ if ( chgt )
+ {
+ myHomardGen->InvalideYACS(_Name.toStdString().c_str());
}
+ HOMARD_UTILS::updateObjBrowser();
return true ;
}
if (!so->FindAttribute(anAttr, "AttributeComment")) continue;
SALOMEDS::AttributeComment_var aCommentAttr = SALOMEDS::AttributeComment::_narrow(anAttr);
std::string value (aCommentAttr->Value());
+ if(value == std::string("IterationHomard")) continue;
if(value == std::string("HypoHomard")) continue;
SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder();
aStudyBuilder->RemoveObject(so);
}
}
//=============================================================================
+void HOMARD_Gen_i::InvalideYACS(const char* YACSName)
+{
+ MESSAGE( "InvalideYACS : YACSName = " << YACSName );
+ HOMARD::HOMARD_YACS_var myYACS = myContextMap[GetCurrentStudyID()]._mesYACSs[YACSName];
+ if (CORBA::is_nil(myYACS))
+ {
+ SALOME::ExceptionStruct es;
+ es.type = SALOME::BAD_PARAM;
+ es.text = "Invalid schema YACS";
+ throw SALOME::SALOME_Exception(es);
+ return ;
+ };
+ //
+ SALOMEDS::SObject_var aYACSSO = SALOMEDS::SObject::_narrow(myCurrentStudy->FindObjectIOR(_orb->object_to_string(myYACS)));
+ SALOMEDS::ChildIterator_var aYACS = myCurrentStudy->NewChildIterator(aYACSSO);
+ for (; aYACS->More(); aYACS->Next())
+ {
+ SALOMEDS::SObject_var so = aYACS->Value();
+ SALOMEDS::GenericAttribute_var anAttr;
+ if (!so->FindAttribute(anAttr, "AttributeComment")) continue;
+ SALOMEDS::AttributeComment_var aCommentAttr = SALOMEDS::AttributeComment::_narrow(anAttr);
+ std::string value (aCommentAttr->Value());
+ if( value == std::string("xml") )
+ {
+ SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder();
+ aStudyBuilder->RemoveObject(so);
+ }
+ }
+ std::string nomFichier = myYACS->GetXMLFile();
+ std::string commande = "rm -rf " + std::string(nomFichier) ;
+ MESSAGE ( "commande = " << commande );
+ if ((system(commande.c_str())) != 0)
+ {
+ SALOME::ExceptionStruct es;
+ es.type = SALOME::BAD_PARAM;
+ es.text = "The XML file for the schema YACS cannot be removed." ;
+ throw SALOME::SALOME_Exception(es);
+ return ;
+ }
+}
+//=============================================================================
void HOMARD_Gen_i::InvalideZone(const char* ZoneName)
{
MESSAGE( "InvalideZone : ZoneName = " << ZoneName );
myYACS->SetScriptFile( ScriptFile ) ;
myYACS->SetCaseName( nomCas ) ;
// D.2. Defaut
+ int defaut_i ;
// D.2.1. Type constant
myYACS->SetType( 1 ) ;
- // D.2.2. Fichier de sauvegarde dans le repertoire du cas
+ // D.2.2. Convergence
+ defaut_i = GetYACSMaxIter() ;
+ myYACS->SetMaxIter( defaut_i ) ;
+ defaut_i = GetYACSMaxNode() ;
+ myYACS->SetMaxNode( defaut_i ) ;
+ defaut_i = GetYACSMaxElem() ;
+ myYACS->SetMaxElem( defaut_i ) ;
+ // D.3. Fichier de sauvegarde dans le repertoire du cas
HOMARD::HOMARD_Cas_ptr caseyacs = GetCase(nomCas) ;
std::string dirnamecase = caseyacs->GetDirName() ;
std::string XMLFile ;
std::string DirName = myYACS->GetDirName() ;
std::string MeshFile = myYACS->GetMeshFile() ;
std::string ScriptFile = myYACS->GetScriptFile() ;
+ // B.3. Les caracteristiques de convergence
+ int MaxIter = myYACS->GetMaxIter() ;
+ int MaxNode = myYACS->GetMaxNode() ;
+ int MaxElem = myYACS->GetMaxElem() ;
// C. Le cas
// C.1. L'objet cas
texte_control += YACSDriverTexteBoundary( myCase, myDriver ) ;
myDriver->TexteAdd(texte_control);
}
- // G.1.10. Les parametres
+ // G.1.10. Les tests de convergence
+ else if ( mot_cle == "Analyse_Test_Convergence" )
+ { myDriver->TexteAnalyse_Test_Convergence(MaxIter, MaxNode, MaxElem); }
+ // G.1.11. Les parametres
else if ( mot_cle == "PARAMETRES" )
{ myDriver->TexteAddParametres(); }
// G.1.n. La ligne est recopiee telle quelle
void InvalideIter(const char* nomIter);
void InvalideIterOption(const char* nomIter, CORBA::Long Option);
void InvalideIterInfo(const char* nomIter);
+ void InvalideYACS(const char* nomYACS);
void InvalideZone(const char* nomZone);
CORBA::Long DeleteBoundary(const char* nomBoundary);
return CORBA::Long( myHomardYACS->GetType() );
}
//=============================================================================
+void HOMARD_YACS_i::SetMaxIter( CORBA::Long MaxIter )
+{
+ ASSERT( myHomardYACS );
+ myHomardYACS->SetMaxIter( MaxIter );
+}
+//=============================================================================
+CORBA::Long HOMARD_YACS_i::GetMaxIter()
+{
+ ASSERT( myHomardYACS );
+ return CORBA::Long( myHomardYACS->GetMaxIter() );
+}
+//=============================================================================
+void HOMARD_YACS_i::SetMaxNode( CORBA::Long MaxNode )
+{
+ ASSERT( myHomardYACS );
+ myHomardYACS->SetMaxNode( MaxNode );
+}
+//=============================================================================
+CORBA::Long HOMARD_YACS_i::GetMaxNode()
+{
+ ASSERT( myHomardYACS );
+ return CORBA::Long( myHomardYACS->GetMaxNode() );
+}
+//=============================================================================
+void HOMARD_YACS_i::SetMaxElem( CORBA::Long MaxElem )
+{
+ ASSERT( myHomardYACS );
+ myHomardYACS->SetMaxElem( MaxElem );
+}
+//=============================================================================
+CORBA::Long HOMARD_YACS_i::GetMaxElem()
+{
+ ASSERT( myHomardYACS );
+ return CORBA::Long( myHomardYACS->GetMaxElem() );
+}
+//=============================================================================
void HOMARD_YACS_i::SetDirName( const char* NomDir )
{
ASSERT( myHomardYACS );
void SetType( CORBA::Long Type );
CORBA::Long GetType();
+ void SetMaxIter( CORBA::Long MaxIter );
+ CORBA::Long GetMaxIter();
+ void SetMaxNode( CORBA::Long MaxNode );
+ CORBA::Long GetMaxNode();
+ void SetMaxElem( CORBA::Long MaxElem );
+ CORBA::Long GetMaxElem();
+
void SetDirName( const char* NomDir );
char* GetDirName();