00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef FILE_SPEEDFUNCTIONS_PIECEWISECONSTANTSPEED_HXX
00021
00022
00023 #include "../errors.cxx"
00024 #include <stdio.h>
00025
00026
00027 namespace Multivac
00028 {
00029
00030
00032
00034
00036
00050 template <class T>
00051 class CPiecewiseConstantSpeed: public CSpeedFunction<T>
00052 {
00053
00054
00055
00056
00057
00058
00059 protected:
00060
00062 T SpeedRate;
00064 T SpeedRate0;
00065
00067 T Limit;
00069 int LimitIndex;
00070
00071
00072
00073
00074
00075
00076 public:
00077
00078 CPiecewiseConstantSpeed() throw();
00079 CPiecewiseConstantSpeed(T SpeedRate_, T SpeedRate0_, T Limit_) throw();
00080
00081 ~CPiecewiseConstantSpeed() throw();
00082
00083
00084
00085
00086
00087
00088 public:
00089
00090 virtual void Init(CMesh<T>& Mesh);
00091
00092 virtual inline T operator() (T x, T y, T time) const;
00093 virtual inline T operator() (T x, T y, T time,
00094 T nx, T ny, T curvature) const;
00095
00096 virtual T GetMaxF1(T Xmin, T Xmax, T Ymin, T Ymax, T norm2) const;
00097 virtual T GetMaxF2(T Xmin, T Xmax, T Ymin, T Ymax, T norm2) const;
00098
00099 virtual inline T operator() (int i, int j) const;
00100
00101 virtual T GetDerivatives(T x, T y, T nx, T ny, T t,
00102 T& dFdp, T& dFdx, T& dFdy,
00103 T& dFdnx, T& dFdny) const;
00104 virtual T Get2ndDerivatives(T x, T y, T nx, T ny, T t,
00105 T& dFdpdp, T& dFdpdx, T& dFdpdy,
00106 T& dFdpdnx, T& dFdpdny,
00107 T& dFdxdx, T& dFdxdy,
00108 T& dFdxdnx, T& dFdxdny,
00109 T& dFdydy, T& dFdydnx,
00110 T& dFdydny, T& dFdnxdnx,
00111 T& dFdnxdny, T& dFdnydny) const;
00112
00113 };
00114
00115
00116 }
00117
00118
00119 #define FILE_MESHES_PIECEWISECONSTANTSPEED_HXX
00120 #endif