Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members  

atraction.h

Go to the documentation of this file.
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

 Webmaster