00001 #ifdef CH_LANG_CC 00002 /* 00003 * _______ __ 00004 * / ___/ / ___ __ _ / / ___ 00005 * / /__/ _ \/ _ \/ V \/ _ \/ _ \ 00006 * \___/_//_/\___/_/_/_/_.__/\___/ 00007 * Please refer to Copyright.txt, in Chombo's root directory. 00008 */ 00009 #endif 00010 00011 // ANAG, LBNL 00012 00013 #ifndef _BASEIVFACTORY_H_ 00014 #define _BASEIVFACTORY_H_ 00015 00016 #include <cmath> 00017 #include <cstdlib> 00018 #include "Vector.H" 00019 #include "EBISLayout.H" 00020 #include "BaseIVFAB.H" 00021 #include "DataIndex.H" 00022 #include "NamespaceHeader.H" 00023 00024 00025 /// Factory class to produce BaseIVFABs. 00026 /** 00027 Factory class to produce BaseIVFABs. 00028 This is needed for LevelData construction. 00029 */ 00030 template <class T> 00031 class BaseIVFactory 00032 : public DataFactory<BaseIVFAB <T> > 00033 { 00034 public: 00035 00036 /// factory function. 00037 /** 00038 Creates a new baseivfab object 00039 and returns a pointer to it. Responsiblitly 00040 for calling operator 'delete' on this pointer 00041 is passed to the user. 00042 Intersects a_sets[a_dit] from construction 00043 with input box because leveldata will expect 00044 that anyway when it tries to do a copy or a linearization. 00045 */ 00046 virtual BaseIVFAB<T>* create(const Box& a_box, int a_ncomps, 00047 const DataIndex& a_dit) const; 00048 00049 /// 00050 /** 00051 fills internal data with inputs 00052 */ 00053 BaseIVFactory(const EBISLayout& a_ebisl, 00054 const LayoutData<IntVectSet>& a_sets); 00055 00056 /// 00057 /** 00058 builds BaseIVFAB objects defined at all boundary irregular cells. 00059 */ 00060 BaseIVFactory(const EBISLayout& a_ebisl); 00061 00062 /// 00063 virtual ~BaseIVFactory(); 00064 00065 private: 00066 /// 00067 EBISLayout m_ebisl; 00068 00069 /// 00070 LayoutData<IntVectSet> m_sets; 00071 00072 //disallowed constructors and all that 00073 BaseIVFactory(const BaseIVFactory<T>& a_inputs) 00074 { 00075 MayDay::Error("disallowed constructor"); 00076 } 00077 BaseIVFactory() 00078 { 00079 MayDay::Error("disallowed constructor"); 00080 } 00081 void operator=(const BaseIVFactory<T>& a_inputs) 00082 { 00083 MayDay::Error("disallowed constructor"); 00084 } 00085 00086 }; 00087 00088 #include "NamespaceFooter.H" 00089 00090 //implementation 00091 #include "BaseIVFactoryI.H" 00092 00093 #endif