Disk.h

00001 #ifndef gridripper_phys_gr_fixmp_kerrhiggshyp_Disk_h
00002 #define gridripper_phys_gr_fixmp_kerrhiggshyp_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 kerrhiggshyp {
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     // The field is f=(phi-phi0)*r if selfinteraction is on, 
00049     // otherwise f=phi*r.
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     //GReal_t getTime() const;
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     //string getMessage() const;
00135 
00136 };
00137 
00138 
00139 } } } } } // namespace gridripper::phys::gr::fixmp::kerrhiggshyp
00140 
00141 
00142 #endif /* gridripper_phys_gr_fixmp_kerrhiggshyp_Disk_h */