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     // The field is f=(Phi-Phi0)*r if selfinteraction is on, 
00048     // otherwise f=Phi*r.
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 } } } } } // namespace gridripper::phys::gr::fixmp::kerrhiggs
00143 
00144 
00145 #endif /* gridripper_phys_gr_fixmp_kerrhiggs_Disk_h */