00001 #ifndef _MY__DoublePorosityDiff_ 00002 #define _MY_DoublePorosityDiff_ 00003 #include "diffusivestep.h" 00004 #include "sfunctions.h" 00005 #include "orthomesh.h" 00006 #include "blockmatrixmodule.h" 00007 00011 class DoublePorosityDiff : public DiffusiveStep 00012 { 00013 private: 00014 OrthoMesh &mesh; 00015 const VecDouble &_por; 00016 const VecDouble &_K; 00017 Function1D &_fmob; 00018 Function1D &_dPC; 00019 Function1D &_PC; 00020 VecDouble S_new; 00021 VecDouble _S_oldTime; 00022 VecDouble _vPot; 00023 BlockMatrixModule &_blockMatrix; 00024 double q_mf, dq_mf; 00025 unsigned _numTimeStep; 00026 00027 protected: 00028 00029 public: 00030 DoublePorosityDiff(OrthoMesh &mesh, const VecDouble &K,const VecDouble &por, Function1D &fmob, Function1D & dPC,Function1D &_PC,BlockMatrixModule& blockMatrix); 00031 virtual ~DoublePorosityDiff(){printf("I HAVE BEEN CALLED \n");} 00032 virtual void iterate(double dt); 00033 void iterate_linear(double dt); 00034 double fracturePc(double sat); 00035 VecDouble& fracturePot(const VecDouble &sat,VecDouble &C); 00036 virtual void printOutput(); 00037 }; 00038 00039 class block_mat 00040 { 00041 private: 00042 double _potBar; // in reality it should be of VecDouble type 00043 double _potHat; // in reality it should be of VecDouble type 00044 public: 00045 block_mat() 00046 { 00047 _potBar = 0; 00048 _potHat = 0; 00049 } 00050 ~block_mat(){} 00051 void basis_fcts(double potAt_n) 00052 { 00053 _potBar = potAt_n; 00054 _potHat = potAt_n; 00055 } 00056 double getSourceTerm(double potAt_n1) 00057 { 00058 return 0.0001;//_potBar+potAt_n1*_potHat; 00059 } 00060 }; 00061 00062 00063 #endif