00001 #ifndef gridripper_phys_gr_fixmp_kerrkgaxhyp_Disk_h
00002 #define gridripper_phys_gr_fixmp_kerrkgaxhyp_Disk_h
00003
00004
00005 #include <gridripper/Parameters.h>
00006 #include <gridripper/amr1d/PDE.h>
00007 #include <gridripper/amr1d/FuncInitCond.h>
00008 #include <gridripper/math.h>
00009 #include <sstream>
00010
00011
00012 namespace gridripper { namespace phys { namespace gr { namespace fixmp {
00013 namespace kerrkgaxhyp {
00014
00015
00016 using namespace gridripper;
00017 using namespace gridripper::util;
00018 using namespace gridripper::amr1d;
00019 using namespace std;
00020
00021
00031 class Disk: public FuncInitCond
00032 {
00033 private:
00035 int maxOrder;
00037 int maxOrderInit;
00039 int arraySize;
00040
00042 bool selfInteraction;
00047 GReal_t phi0;
00048
00049
00050
00053 GReal_t amplitudeF, amplitudeFt;
00055 GReal_t centerxF, centerxFt;
00057 GReal_t widthxF, widthxFt;
00059 GReal_t rampxF, rampxFt;
00061 GReal_t centerzF, centerzFt;
00063 GReal_t widthzF, widthzFt;
00065 GReal_t rampzF, rampzFt;
00067 GReal_t omegaInit, mInit;
00069 int fieldDiscret;
00071 GReal_t normLimit;
00073 GReal_t tailErrorTolerance;
00074
00076 GReal_t M;
00077 GReal_t a;
00078 GReal_t e;
00079 bool isMinkowski;
00080
00082 GReal_t minR;
00083 GReal_t maxR;
00084
00086 GReal_t T0;
00087
00089 enum norm_T { None, L2, C0, Bound };
00090 enum norm_T Norm;
00091 #ifndef HAVE_AGM
00092 tvector<GReal_t> theta;
00093 tvector<GReal_t> phi;
00094 tvector< tvector<GComplex_t> > field;
00095 tvector< tvector<GComplex_t> > fieldt;
00096 tvector< tvector<GReal_t> > fieldBuff;
00097 tvector< tvector<GReal_t> > fieldTBuff;
00098 tvector< tvector<GReal_t> > fieldBuffDiff;
00099 tvector< tvector<GReal_t> > fieldtBuffDiff;
00100 tvector<GReal_t> intdphiF;
00101 tvector<GReal_t> intdphiFt;
00102 tvector<GReal_t> intdphiDiffF;
00103 tvector<GReal_t> intdphiDiffFt;
00104 #endif
00105
00107 GReal_t t, r;
00108
00110 unsigned int tstart, tnow;
00111
00113 GReal_t maxNormF;
00114 GReal_t maxNormFt;
00115 GReal_t maxNormDiffF;
00116 GReal_t maxNormDiffFt;
00117
00119 ostringstream message;
00120
00121 public:
00122 Disk(string& args, const Parameters* p, const PDE& pde)
00123 throw(InitCond::Exception&, IllegalArgumentException&);
00124 ~Disk();
00125
00126
00127 void init(PDE* pde, GReal_t rh, FieldWrapper& v)
00128 throw(InitCond::Exception&);
00129
00131 GComplex_t funcF(const GReal_t theta, const GReal_t phi) const;
00132 GComplex_t funcFt(const GReal_t theta, const GReal_t phi) const;
00133
00134
00135
00136 };
00137
00138
00139 } } } } }
00140
00141
00142 #endif