Disk.h
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 energy, angmom;
00068 int fieldDiscret;
00070 GReal_t normLimit;
00072 GReal_t tailErrorTolerance;
00073
00075 GReal_t M;
00076 GReal_t a;
00077 GReal_t e;
00078 bool isMinkowski;
00079
00081 GReal_t minrh;
00082 GReal_t maxrh;
00083
00085 GReal_t t0;
00086
00088 enum norm_t { None, L2, C0, Bound };
00089 enum norm_t Norm;
00090 #ifndef HAVE_AGM
00091 tvector<GReal_t> theta;
00092 tvector<GReal_t> phi;
00093 tvector< tvector<GComplex_t> > field;
00094 tvector< tvector<GComplex_t> > fieldt;
00095 tvector< tvector<GReal_t> > fieldBuff;
00096 tvector< tvector<GReal_t> > fieldtBuff;
00097 tvector< tvector<GReal_t> > fieldBuffDiff;
00098 tvector< tvector<GReal_t> > fieldtBuffDiff;
00099 tvector<GReal_t> intdphiF;
00100 tvector<GReal_t> intdphiFt;
00101 tvector<GReal_t> intdphiDiffF;
00102 tvector<GReal_t> intdphiDiffFt;
00103 #endif
00104
00106 GReal_t t, r;
00107
00109 unsigned int tstart, tnow;
00110
00112 ostringstream message;
00113
00114 public:
00115 Disk(string& args, const Parameters* p, const PDE& pde)
00116 throw(InitCond::Exception&, IllegalArgumentException&);
00117 ~Disk();
00118 GReal_t getTime() const;
00119
00120 void init(PDE* pde, GReal_t rh, FieldWrapper& v)
00121 throw(InitCond::Exception&);
00122
00124 GComplex_t funcF(const GReal_t theta, const GReal_t phi) const;
00125 GComplex_t funcFt(const GReal_t theta, const GReal_t phi) const;
00126
00127 string getMessage() const;
00128
00129 };
00130
00131
00132 } } } } }
00133
00134
00135 #endif