Salome HOME
0020832: EDF 1359 SMESH : Automatic meshing of boundary layers
authoreap <eap@opencascade.com>
Tue, 18 Jan 2011 12:21:27 +0000 (12:21 +0000)
committereap <eap@opencascade.com>
Tue, 18 Jan 2011 12:21:27 +0000 (12:21 +0000)
+ StdMeshers_ViscousLayers_i.hxx

src/StdMeshers_I/Makefile.am
src/StdMeshers_I/StdMeshers_ViscousLayers_i.cxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_ViscousLayers_i.hxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_i.cxx

index ab1e6c9c0156ed2af1d160e9f18832a9eabf3fa7..d669bd7f211d60c7ab175818b2e2ba9f6b22b00d 100644 (file)
@@ -67,7 +67,8 @@ salomeinclude_HEADERS = \
        StdMeshers_ImportSource1D_i.hxx \
        StdMeshers_ImportSource2D_i.hxx \
        StdMeshers_Import_1D_i.hxx \
-       StdMeshers_Import_1D2D_i.hxx
+       StdMeshers_Import_1D2D_i.hxx \
+       StdMeshers_ViscousLayers_i.hxx
 
 # Libraries targets
 lib_LTLIBRARIES = libStdMeshersEngine.la
@@ -113,7 +114,8 @@ dist_libStdMeshersEngine_la_SOURCES = \
        StdMeshers_ImportSource1D_i.cxx \
        StdMeshers_ImportSource2D_i.cxx \
        StdMeshers_Import_1D_i.cxx \
-       StdMeshers_Import_1D2D_i.cxx
+       StdMeshers_Import_1D2D_i.cxx \
+       StdMeshers_ViscousLayers_i.cxx
 
 # additionnal information to compil and link file
 libStdMeshersEngine_la_CPPFLAGS = \
diff --git a/src/StdMeshers_I/StdMeshers_ViscousLayers_i.cxx b/src/StdMeshers_I/StdMeshers_ViscousLayers_i.cxx
new file mode 100644 (file)
index 0000000..b461843
--- /dev/null
@@ -0,0 +1,215 @@
+//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+//  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
+//  File   : StdMeshers_ViscousLayers_i.cxx
+//  Module : SMESH
+//
+#include "StdMeshers_ViscousLayers_i.hxx"
+
+#include "SMESH_Gen.hxx"
+#include "SMESH_Gen_i.hxx"
+#include "SMESH_PythonDump.hxx"
+//#include "StdMeshers_ObjRefUlils.hxx"
+
+#include "Utils_CorbaException.hxx"
+#include "utilities.h"
+
+#include <TCollection_AsciiString.hxx>
+
+#include CORBA_SERVER_HEADER(SMESH_Group)
+
+using namespace std;
+
+//=============================================================================
+/*!
+ *  StdMeshers_ViscousLayers_i::StdMeshers_ViscousLayers_i
+ *
+ *  Constructor
+ */
+//=============================================================================
+
+StdMeshers_ViscousLayers_i::StdMeshers_ViscousLayers_i( PortableServer::POA_ptr thePOA,
+                                                        int                     theStudyId,
+                                                        ::SMESH_Gen*            theGenImpl )
+  : SALOME::GenericObj_i( thePOA ), 
+    SMESH_Hypothesis_i( thePOA )
+{
+  MESSAGE( "StdMeshers_ViscousLayers_i::StdMeshers_ViscousLayers_i" );
+  myBaseImpl = new ::StdMeshers_ViscousLayers( theGenImpl->GetANewId(),
+                                               theStudyId,
+                                               theGenImpl );
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_ViscousLayers_i::~StdMeshers_ViscousLayers_i
+ *
+ *  Destructor
+ */
+//=============================================================================
+
+StdMeshers_ViscousLayers_i::~StdMeshers_ViscousLayers_i()
+{
+  MESSAGE( "StdMeshers_ViscousLayers_i::~StdMeshers_ViscousLayers_i" );
+}
+
+//================================================================================
+/*!
+ * \brief 
+ */
+//================================================================================
+
+void StdMeshers_ViscousLayers_i::SetIgnoreFaces(const ::SMESH::long_array& faceIDs)
+throw ( SALOME::SALOME_Exception )
+{
+  vector<int> ids( faceIDs.length() );
+  for ( unsigned i = 0; i < ids.size(); ++i )
+    if (( ids[i] = faceIDs[i] ) < 1 )
+      THROW_SALOME_CORBA_EXCEPTION( "Invalid face id", SALOME::BAD_PARAM );
+  GetImpl()->SetIgnoreFaces( ids );
+  SMESH::TPythonDump() << _this() << ".SetIgnoreFaces( " << faceIDs << " )";
+}
+
+//================================================================================
+/*!
+ * \brief 
+ */
+//================================================================================
+
+SMESH::long_array* StdMeshers_ViscousLayers_i::GetIgnoreFaces()
+{
+  vector<int> idsVec = GetImpl()->GetIgnoreFaces();
+  SMESH::long_array_var ids = new SMESH::long_array;
+  ids->length( idsVec.size() );
+  for ( unsigned i = 0; i < idsVec.size(); ++i )
+    ids[i] = idsVec[i];
+  return ids._retn();
+}
+
+//================================================================================
+/*!
+ * \brief 
+ */
+//================================================================================
+
+void StdMeshers_ViscousLayers_i::SetTotalThickness(::CORBA::Double thickness)
+throw ( SALOME::SALOME_Exception )
+{
+  if ( thickness < 1e-100 )
+    THROW_SALOME_CORBA_EXCEPTION( "Invalid thickness", SALOME::BAD_PARAM );
+  GetImpl()->SetTotalThickness(thickness);
+  SMESH::TPythonDump() << _this() << ".SetTotalThickness( " << thickness << " )";
+}
+
+//================================================================================
+/*!
+ * \brief 
+ */
+//================================================================================
+
+::CORBA::Double StdMeshers_ViscousLayers_i::GetTotalThickness()
+{
+  return GetImpl()->GetTotalThickness();
+}
+
+//================================================================================
+/*!
+ * \brief 
+ *  \param nb - 
+ */
+//================================================================================
+
+void StdMeshers_ViscousLayers_i::SetNumberLayers(::CORBA::Short nb)
+throw ( SALOME::SALOME_Exception )
+{
+  if ( nb < 1 )
+    THROW_SALOME_CORBA_EXCEPTION( "Invalid number of layers", SALOME::BAD_PARAM );
+  GetImpl()->SetNumberLayers( nb );
+  SMESH::TPythonDump() << _this() << ".SetNumberLayers( " << nb << " )";
+}
+
+//================================================================================
+/*!
+ * \brief 
+ */
+//================================================================================
+
+::CORBA::Short StdMeshers_ViscousLayers_i::GetNumberLayers()
+{
+  return CORBA::Short( GetImpl()->GetNumberLayers() );
+}
+
+//================================================================================
+/*!
+ * \brief 
+ *  \param factor - 
+ */
+//================================================================================
+
+void StdMeshers_ViscousLayers_i::SetStretchFactor(::CORBA::Double factor)
+throw ( SALOME::SALOME_Exception )
+{
+  if ( factor < 1 )
+    THROW_SALOME_CORBA_EXCEPTION( "Invalid stretch factor, it must be >= 1.0", SALOME::BAD_PARAM );
+  GetImpl()->SetStretchFactor(factor);
+  SMESH::TPythonDump() << _this() << ".SetStretchFactor( " << factor << " )";
+}
+
+//================================================================================
+/*!
+ * \brief 
+ * 
+ */
+//================================================================================
+
+::CORBA::Double StdMeshers_ViscousLayers_i::GetStretchFactor()
+{
+  return GetImpl()->GetStretchFactor();
+}
+
+//=============================================================================
+/*!
+ *  Get implementation
+ */
+//=============================================================================
+
+::StdMeshers_ViscousLayers* StdMeshers_ViscousLayers_i::GetImpl()
+{
+  MESSAGE( "StdMeshers_ViscousLayers_i::GetImpl" );
+  return ( ::StdMeshers_ViscousLayers* )myBaseImpl;
+}
+
+//================================================================================
+/*!
+ * \brief Verify whether hypothesis supports given entity type 
+  * \param type - dimension (see SMESH::Dimension enumeration)
+  * \retval CORBA::Boolean - TRUE if dimension is supported, FALSE otherwise
+ * 
+ * Verify whether hypothesis supports given entity type (see SMESH::Dimension enumeration)
+ */
+//================================================================================  
+CORBA::Boolean StdMeshers_ViscousLayers_i::IsDimSupported( SMESH::Dimension type )
+{
+  return type == SMESH::DIM_3D;
+}
+
diff --git a/src/StdMeshers_I/StdMeshers_ViscousLayers_i.hxx b/src/StdMeshers_I/StdMeshers_ViscousLayers_i.hxx
new file mode 100644 (file)
index 0000000..29699eb
--- /dev/null
@@ -0,0 +1,81 @@
+//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+//  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
+//  File   : StdMeshers_ViscousLayers_i.hxx
+//  Module : SMESH
+//
+#ifndef _SMESH_ViscousLayers_I_HXX_
+#define _SMESH_ViscousLayers_I_HXX_
+
+#include "SMESH_StdMeshers_I.hxx"
+
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
+
+#include "SMESH_Hypothesis_i.hxx"
+#include "StdMeshers_ViscousLayers.hxx"
+
+class SMESH_Gen;
+
+class STDMESHERS_I_EXPORT StdMeshers_ViscousLayers_i:
+  public virtual POA_StdMeshers::StdMeshers_ViscousLayers,
+  public virtual SMESH_Hypothesis_i
+{
+ public:
+  // Constructor
+  StdMeshers_ViscousLayers_i( PortableServer::POA_ptr thePOA,
+                              int                     theStudyId,
+                              ::SMESH_Gen*            theGenImpl );
+  // Destructor
+  virtual ~StdMeshers_ViscousLayers_i();
+
+  void SetIgnoreFaces(const ::SMESH::long_array& faceIDs) throw ( SALOME::SALOME_Exception );
+  SMESH::long_array* GetIgnoreFaces();
+
+  void SetTotalThickness(::CORBA::Double thickness) throw ( SALOME::SALOME_Exception );
+  ::CORBA::Double GetTotalThickness();
+
+  void SetNumberLayers(::CORBA::Short nb) throw ( SALOME::SALOME_Exception );
+  ::CORBA::Short GetNumberLayers();
+
+  void SetStretchFactor(::CORBA::Double factor) throw ( SALOME::SALOME_Exception );
+  ::CORBA::Double GetStretchFactor();
+
+  // Get implementation
+  ::StdMeshers_ViscousLayers* GetImpl();
+
+  // Verify whether hypothesis supports given entity type 
+  CORBA::Boolean IsDimSupported( SMESH::Dimension type );
+
+  // Redefined Persistence
+//   virtual char* SaveTo();
+//   virtual void  LoadFrom( const char* theStream );
+//   virtual void  UpdateAsMeshesRestored();
+
+ private:
+  //SMESH::string_array_var _groupEntries;
+  //std::vector< std::string > _groupIDs;
+};
+
+#endif
+
index a8f6a9824f19d2fa46cf8bb0d67375b3c7d1f6e6..ffeabda545346d1cf25774c5f9fa14f32adab1df 100644 (file)
@@ -71,7 +71,7 @@
 #include "StdMeshers_RadialQuadrangle_1D2D_i.hxx"
 #include "StdMeshers_Import_1D_i.hxx"
 #include "StdMeshers_Import_1D2D_i.hxx"
-
+#include "StdMeshers_ViscousLayers_i.hxx"
 
 template <class T> class StdHypothesisCreator_i:public HypothesisCreator_i<T>
 {
@@ -149,6 +149,8 @@ STDMESHERS_I_EXPORT
       aCreator = new StdHypothesisCreator_i<StdMeshers_ImportSource1D_i>;
     else if (strcmp(aHypName, "ImportSource2D") == 0)
       aCreator = new StdHypothesisCreator_i<StdMeshers_ImportSource2D_i>;
+    else if (strcmp(aHypName, "ViscousLayers") == 0)
+      aCreator = new StdHypothesisCreator_i<StdMeshers_ViscousLayers_i>;
 
     // Algorithms
     else if (strcmp(aHypName, "Regular_1D") == 0)