AFEPack
|
00001 00002 // Operator.h : 00003 // 00004 00005 #ifndef _Operator_h_ 00006 #define _Operator_h_ 00007 00008 #include <typeinfo> 00009 #include <iostream> 00010 #include <fstream> 00011 #include <string> 00012 #include <vector> 00013 #include <list> 00014 #include <iterator> 00015 #include <algorithm> 00016 00017 #include <base/exceptions.h> 00018 #include <lac/vector.h> 00019 #include <lac/sparsity_pattern.h> 00020 #include <lac/sparse_matrix.h> 00021 00022 #include "AMGSolver.h" 00023 #include "Geometry.h" 00024 #include "TemplateElement.h" 00025 #include "FEMSpace.h" 00026 #include "HGeometry.h" 00027 #include "BilinearOperator.h" 00028 00037 namespace Operator { 00038 typedef int Method; 00039 static const Method MASS_ACCUMULATION = 1; 00040 static const Method LEAST_SQUARE = 2; 00041 static const Method LOCAL_LEAST_SQUARE = 3; 00042 00047 template <class value_type, int DIM> 00048 void L2Interpolate(const FEMFunction<value_type, DIM>& src, FEMFunction<value_type, DIM>& des); 00053 template <class value_type, int DIM> 00054 void L2Interpolate(value_type (*)(const double *), FEMFunction<value_type, DIM>& fun); 00059 template <class value_type, int DIM> 00060 void L2Interpolate(value_type (*)(const afepack::Point<DIM>&), FEMFunction<value_type, DIM>& fun); 00065 template <class value_type, int DIM> 00066 void L2Interpolate(const Function<value_type>&, FEMFunction<value_type, DIM>& fun); 00067 00073 template <class value_type, int DIM> 00074 void L2Project(const FEMFunction<value_type, DIM>& src, FEMFunction<value_type, DIM>& des, 00075 Method method, int algebric_accuracy); 00081 template <class value_type, int DIM> 00082 void L2Project(value_type (*)(const double *), FEMFunction<value_type, DIM>& fun, 00083 Method method, int algebric_accuracy); 00089 template <class value_type, int DIM> 00090 void L2Project(value_type (*)(const afepack::Point<DIM>&), FEMFunction<value_type, DIM>& fun, 00091 Method method, int algebric_accuracy); 00097 template <class value_type, int DIM> 00098 void L2Project(const Function<value_type>&, FEMFunction<value_type, DIM>& fun, 00099 Method method, int algebric_accuracy); 00100 00106 template <class value_type, int DIM> 00107 void L2Project(value_type (*f)(const value_type&), const FEMFunction<value_type,DIM>& src, 00108 FEMFunction<value_type,DIM>& des, Method method, int algebric_accuracy); 00117 template <class value_type, int DIM> 00118 void L2Project(value_type (*f)(const value_type&,const value_type&), 00119 const FEMFunction<value_type,DIM>& src0, const FEMFunction<value_type,DIM>& src1, 00120 FEMFunction<value_type,DIM>& des, Method method, int algebric_accuracy); 00121 00125 template <class value_type, int DIM> 00126 void L2Discretize(const FEMFunction<value_type, DIM>& src, Vector<double>& des, int algebric_accuracy); 00130 template <class value_type, int DIM> 00131 void L2Discretize(const FEMFunction<value_type, DIM>& src, const FEMSpace<value_type, DIM>& space, 00132 Vector<double>& des, int algebric_accuracy); 00136 template <class value_type, int DIM> 00137 void L2Discretize(value_type (*)(const double *), const FEMSpace<value_type, DIM>& space, 00138 Vector<double>& des, int algebric_accuracy); 00142 template <class value_type, int DIM> 00143 void L2Discretize(value_type (*)(const afepack::Point<DIM>&), const FEMSpace<value_type, DIM>& space, 00144 Vector<double>& des, int algebric_accuracy); 00148 template <class value_type, int DIM> 00149 void L2Discretize(const Function<value_type>&, const FEMSpace<value_type, DIM>& space, 00150 Vector<double>& des, int algebric_accuracy); 00151 00156 template <class value_type, int DIM> 00157 void L2Discretize(value_type (*f)(const value_type&), const FEMFunction<value_type, DIM>& src, 00158 Vector<double>& des, int algebric_accuracy); 00163 template <class value_type, int DIM> 00164 void L2Discretize(value_type (*f)(const value_type&), const FEMFunction<value_type, DIM>& src, 00165 const FEMSpace<value_type, DIM>& space, Vector<double>& des, int algebric_accuracy); 00174 template <class value_type, int DIM> 00175 void L2Discretize(value_type (*f)(const value_type&, const value_type&), 00176 const FEMFunction<value_type, DIM>& src0, const FEMFunction<value_type, DIM>& src1, 00177 const FEMSpace<value_type, DIM>& space, Vector<double>& des, int algebric_accuracy); 00178 }; 00179 00180 00181 00182 #endif 00183 00184 // 00185 // end of file