00001 /* 00002 * Copyright (c) 2001 The AUTHORS 00003 * Romeu Andre' Pieritz, Ph.D. - romeu_pieritz@hotmail.com 00004 * Rafael Mendes, Eng. – mendes_rafael@yahoo.com 00005 * Rodrigo Ferraz de Andrade, Eng. – rferraz@iname.com 00006 * All rights reserved. 00007 * 00008 * Permission to use, copy and distribute this software and its 00009 * documentation for educational and personal use, without fee is hereby granted, 00010 * provided that the above copyright notice and the following 00011 * two paragraphs appear in all copies of this software. 00012 * 00013 * IN NO EVENT SHALL THE AUTHORS BE LIABLE TO ANY PARTY FOR 00014 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT 00015 * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS 00016 * HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00017 * 00018 * THE AUTHORS SPECIFICALLY DISCLAIMS ANY WARRANTIES, 00019 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 00020 * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HERE UNDER IS 00021 * ON AN "AS IS" BASIS, AND THE AUTHORS HAVE NO OBLIGATION TO 00022 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 00023 * 00024 * SINMEC Lab. - CFD Sinflow Project - http://www.sinmec.ufsc.br/cfd 00025 */ 00026 00027 00028 // File Define 00029 #ifndef __CSFL_MATH_EQUATION_EQPARAM_ATRACTION_H__ 00030 #define __CSFL_MATH_EQUATION_EQPARAM_ATRACTION_H__ 00031 00032 00033 // Include 00034 #include <csfl/geom/metric/metric.h> 00035 00036 00037 // Include 00038 #include <csfl/math/equation/eqparam/eqparam.h> 00039 00040 00041 // Namespace 00042 namespace csfl { 00043 00044 00045 //============================================================================== 00046 // enum TLineAtracted 00047 //============================================================================== 00048 typedef 00049 enum _TLineAtracted { 00050 laKsi, 00051 laEta 00052 } 00053 TLineAtracted; 00054 00055 //============================================================================== 00056 // Class IAtraction 00057 // Description: Base class for mesh Atraction 00058 //============================================================================== 00059 class IAtraction : public IParameter 00060 { 00061 public: 00062 IAtraction( const IString & = IString::empty, 00063 TParameterType = ptAtract ); 00064 IAtraction( IAtraction * ); 00065 ~IAtraction(); 00066 00067 public: 00068 virtual double EvaluateX( const int &, const int & ){ return 0.0; } 00069 virtual double EvaluateY( const int &, const int & ){ return 0.0; } 00070 00071 }; 00072 00073 //============================================================================== 00074 // Class ILineAtraction 00075 // Description: class for line Atraction 00076 //============================================================================== 00077 00078 class ILineAtraction : public IAtraction 00079 { 00080 public: 00081 ILineAtraction( const int &, const TLineAtracted &, 00082 const double &, const double & = 1.0, const IString & = IString::empty); 00083 ILineAtraction( ILineAtraction * ); 00084 ~ILineAtraction(); 00085 00086 public: 00087 virtual inline double EvaluateX( const int &, const int &); 00088 virtual inline double EvaluateY( const int &, const int &); 00089 00090 private: 00091 int line; 00092 TLineAtracted linetype; 00093 double a, c; 00094 00095 }; 00096 00097 //============================================================================== 00098 // Class INodeAtraction 00099 // Description: class for node Atraction 00100 //============================================================================== 00101 00102 class INodeAtraction : public IAtraction 00103 { 00104 public: 00105 INodeAtraction( const IPoint &, const double &, const double & = 1.0, 00106 const IString & = IString::empty); 00107 INodeAtraction( INodeAtraction * ); 00108 ~INodeAtraction(); 00109 00110 public: 00111 virtual inline double EvaluateX( const int &, const int & ); 00112 virtual inline double EvaluateY( const int &, const int & ); 00113 00114 private: 00115 double b, d; 00116 IPoint patract; 00117 00118 }; 00119 // ============================================================================= 00120 // Inline functions 00121 // ============================================================================= 00122 00123 inline double ILineAtraction::EvaluateX( const int & ksi, const int & eta ) 00124 { 00125 if( linetype == laEta ) 00126 return 0.0; 00127 00128 else{ 00129 if( ksi == line ) return 0.0; 00130 double expo = exp( c * fabs( double( ksi - line ))); 00131 double A = a * ((ksi > line )? 1.0: -1.0 ); 00132 return A / expo; 00133 //return(a * ((ksi > line )? 1.0: -1.0 ) / //(double( ksi - line )/fabs( double(ksi - line ))) / 00134 // exp( c * fabs( double( ksi - line )))); 00135 } 00136 } 00137 00138 inline double ILineAtraction::EvaluateY( const int & ksi, const int & eta ) 00139 { 00140 if( linetype == laKsi ) 00141 return 0.0; 00142 else{ 00143 if( eta == line ) return 0.0; 00144 double expo = exp( c * fabs( double( eta - line ))); 00145 double A = a * ((eta > line )? 1.0: -1.0 ); 00146 return A / expo; 00147 //return( a * ((eta > line )? 1.0 : -1.0 ) / //( double( eta - line )/fabs(double(eta - line) )) / 00148 // exp( c * fabs( double( eta - line )))); 00149 } 00150 } 00151 00152 inline double INodeAtraction::EvaluateX( const int & ksi, const int & eta ) 00153 { 00154 if( ksi == patract.x ) 00155 return 0.0 ;//b / exp( d * ( eta - patract.y )); 00156 00157 return( b * ((ksi > patract.x)? 1.0 : -1.0 ) / //(( double(ksi - patract.x ))/fabs( double( ksi - patract.x ))) / 00158 exp( d * sqrt( pow(double( ksi - patract.x ), 2.0 ) + 00159 pow(double( eta - patract.y ), 2.0 )))); 00160 } 00161 00162 inline double INodeAtraction::EvaluateY( const int & ksi, const int & eta ) 00163 { 00164 if( eta == patract.y ) 00165 return 0.0; //b / exp( d * ( ksi - patract.x )); 00166 00167 return( b * ((eta > patract.y)? 1.0 : -1.0 ) / //( double( eta - patract.y )/fabs( double(eta - patract.y) )) / 00168 exp( d * sqrt( pow(double( ksi - patract.x ), 2.0 ) + 00169 pow(double( eta - patract.y ), 2.0 )))); 00170 } 00171 } // csfl namespace 00172 00173 #endif// __CSFL_MATH_EQUATION_EQPARAM_ATRACTION_H__ 00174
CFD Project
|
Documents |
Downloads |
Contact us |
Use Terms |
|
|||
© SINMEC/EMC/UFSC,
2001. |
All rights
reserved. |
Last Update: Jan. 18, 2002 |
|