00001 #ifndef GDIFF_UTIL_H
00002 #define GDIFF_UTIL_H
00003
00004 #include "GMatrix.h"
00005
00006 namespace GMathLib
00007 {
00008
00009 namespace GDiff_Util{
00010
00025 inline double CentralDiff1D(double* discre_data, int no, double del_x, bool periodic_bound_condition=false, int d_size=0){
00026
00027 if(periodic_bound_condition){
00028 if(no == 0){
00029 return (discre_data[d_size-1] - discre_data[1])/(2 * del_x);
00030 }else if(no == d_size-1){
00031 return (discre_data[0] - discre_data[d_size-2])/(2 * del_x);
00032 }
00033 }
00034
00035 return (discre_data[no+1] - discre_data[no-1])/(2 * del_x);
00036 }
00037
00038
00039
00040
00055 inline double Diff_2Times1D(double* discre_data, int no, double del_x, bool periodic_bound_condition=false, int d_size=0){
00056
00057 if(periodic_bound_condition){
00058 if(no == 0){
00059 return (discre_data[1] - 2 * discre_data[no] + discre_data[d_size-1])/(del_x * del_x);
00060 }else if(no == d_size-1){
00061 return (discre_data[0] - 2 * discre_data[d_size-1] + discre_data[d_size-2])/(del_x * del_x);
00062 }
00063 }
00064
00065 return (discre_data[no+1] - 2 * discre_data[no] + discre_data[no-1])/(del_x * del_x);
00066 }
00067
00068
00083 inline void BoundaryCondition2D_For_MatrixId(
00084 int i, int j, int &iup, int &idown, int &jup, int &jdown, int matrix_isize, int matrix_jsize
00085 )
00086 {
00087
00088 if(i == 0){
00089 idown = matrix_isize-1;
00090 iup = i+1;
00091 }else if(i == matrix_isize-1){
00092 iup = 0;
00093 idown=i-1;
00094 }else{
00095 iup = i+1;
00096 idown = i-1;
00097 }
00098
00099 if(j == 0){
00100 jdown = matrix_jsize-1;
00101 jup = j+1;
00102 }else if(j == matrix_jsize-1){
00103 jup = 0;
00104 jdown = j-1;
00105 }else{
00106 jup = j+1;
00107 jdown = j-1;
00108 }
00109 }
00110
00111 }
00112 }
00113 #endif