00001 #ifndef gridripper_phys_gr_fixmp_kerrhiggs_Disk_h
00002 #define gridripper_phys_gr_fixmp_kerrhiggs_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 kerrhiggs {
00014
00015
00016 using namespace gridripper;
00017 using namespace gridripper::util;
00018 using namespace gridripper::amr1d;
00019 using namespace std;
00020
00021
00030 class Disk: public FuncInitCond
00031 {
00032 private:
00034 int maxOrder;
00036 int maxOrderInit;
00038 int arraySize;
00039
00041 bool selfInteraction;
00046 GReal_t Phi0;
00047
00048
00049
00052 GReal_t amplitudeF, amplitudeFt;
00054 GReal_t centerxF, centerxFt;
00056 GReal_t widthxF, widthxFt;
00058 GReal_t rampxF, rampxFt;
00060 GReal_t centerzF, centerzFt;
00062 GReal_t widthzF, widthzFt;
00064 GReal_t rampzF, rampzFt;
00066 GReal_t omegaInit;
00067 int 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 minrh;
00083 GReal_t maxrh;
00084
00086 GReal_t t0;
00087
00089 string normName;
00090 enum norm_t { None, L2, C0, Bound };
00091 enum norm_t Norm;
00092 #ifdef HAVE_AGM
00093 GReal_t agmTolerance;
00094 #else
00095 tvector<GReal_t> theta;
00096 tvector<GReal_t> phih;
00097 tvector< tvector<GComplex_t> > field;
00098 tvector< tvector<GComplex_t> > fieldt;
00099 tvector< tvector<GReal_t> > fieldBuff;
00100 tvector< tvector<GReal_t> > fieldtBuff;
00101 tvector< tvector<GReal_t> > fieldBuffDiff;
00102 tvector< tvector<GReal_t> > fieldtBuffDiff;
00103 tvector<GReal_t> intdphiF;
00104 tvector<GReal_t> intdphiFt;
00105 tvector<GReal_t> intdphiDiffF;
00106 tvector<GReal_t> intdphiDiffFt;
00107 #endif
00108
00110 GReal_t t, r;
00111
00113 unsigned int tstart, tnow;
00114
00116 GReal_t maxNormF;
00117 GReal_t maxNormFt;
00118 GReal_t maxNormDiffF;
00119 GReal_t maxNormDiffFt;
00120
00122 mutable ostringstream message;
00123
00124 public:
00125 Disk(string& args, const Parameters* p, const PDE& pde)
00126 throw(InitCond::Exception&, IllegalArgumentException&);
00127 ~Disk();
00128 GReal_t getTime() const;
00129
00130 void init(PDE* pde, GReal_t rh, FieldWrapper& v)
00131 throw(InitCond::Exception&);
00132
00134 GComplex_t funcF(const GReal_t theta, const GReal_t phih) const;
00135 GComplex_t funcFt(const GReal_t theta, const GReal_t phih) const;
00136
00137 string getMessage() const;
00138
00139 };
00140
00141
00142 } } } } }
00143
00144
00145 #endif