BIE |
/home/weinberg/src/BIE/include/BIEACG.h00001 // This is really -*- C++ -*- 00002 00003 #ifndef BIEACG_H 00004 #define BIEACG_H 00005 00006 #include "Serializable.h" 00007 00008 00009 #include "BIEmpi.h" 00010 #include "ACG.h" 00011 00012 using namespace std; 00013 00014 namespace BIE { 00015 00016 extern int myid; 00017 extern int numprocs; 00018 extern bool mpi_used; 00019 extern streambuf * checkTable(const char *function_name); 00020 00021 //+ CLASS BIEACG SUPER ACG 00025 class BIEACG : public ACG 00026 { 00027 00028 private: 00029 00030 vector< vector<unsigned> > states; 00031 vector<unsigned> seeds, lcgs; 00032 vector<unsigned short> statesizes, auxsizes; 00033 vector<short> js, ks; 00034 00040 00041 void pre_clean() const; 00043 void send_state() const; 00045 void pack_state(const int) const; 00047 void unpack_state(const int) const; 00049 void recv_state() const; 00051 00052 public: 00053 00055 BIEACG(); 00056 00058 BIEACG(uint32_t seed, int size = 55); 00059 00061 virtual ~BIEACG() {} 00062 00064 void dump_acg(string); 00065 00066 private: 00067 00068 template<class Archive> 00069 void pre_save(Archive & ar, const unsigned int version) const 00070 { 00071 if (mpi_used) { 00072 if (myid==0) { 00073 pre_clean(); 00074 for (int n=1; n<numprocs; n++) pack_state(n); 00075 } else { 00076 send_state(); 00077 } 00078 } 00079 } 00080 00081 00082 template<class Archive> 00083 void post_load(Archive & ar, const unsigned int version) 00084 { 00085 if (mpi_used) { 00086 // Allow a consistent restore if numprocs 00087 // has a different value 00088 int lprocs = min<int>(numprocs, seeds.size()+1); 00089 if (myid==0) { 00090 for (int n=1; n<lprocs; n++) unpack_state(n); 00091 } else { 00092 if (myid<lprocs) recv_state(); 00093 } 00094 } 00095 } 00096 00097 // AUTO GENERATED BY ../persistence/autopersist.py 00098 private: 00099 friend class boost::serialization::access; 00100 BOOST_SERIALIZATION_SPLIT_MEMBER(); 00101 00102 template<class Archive> 00103 void save(Archive & ar, const unsigned int version) const { 00104 this->pre_save(ar, version); 00105 try { 00106 ar << BOOST_SERIALIZATION_BASE_OBJECT_NVP(ACG); 00107 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00108 } 00109 try { 00110 ar << BOOST_SERIALIZATION_NVP(states); 00111 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00112 } 00113 try { 00114 ar << BOOST_SERIALIZATION_NVP(seeds); 00115 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00116 } 00117 try { 00118 ar << BOOST_SERIALIZATION_NVP(lcgs); 00119 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00120 } 00121 try { 00122 ar << BOOST_SERIALIZATION_NVP(statesizes); 00123 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00124 } 00125 try { 00126 ar << BOOST_SERIALIZATION_NVP(auxsizes); 00127 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00128 } 00129 try { 00130 ar << BOOST_SERIALIZATION_NVP(js); 00131 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00132 } 00133 try { 00134 ar << BOOST_SERIALIZATION_NVP(ks); 00135 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00136 } 00137 this->post_save(ar, version); 00138 } 00139 00140 template<class Archive> 00141 void load(Archive & ar, const unsigned int version) { 00142 this->pre_load(ar, version); 00143 try { 00144 ar >> BOOST_SERIALIZATION_BASE_OBJECT_NVP(ACG); 00145 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00146 } 00147 try { 00148 ar >> BOOST_SERIALIZATION_NVP(states); 00149 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00150 } 00151 try { 00152 ar >> BOOST_SERIALIZATION_NVP(seeds); 00153 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00154 } 00155 try { 00156 ar >> BOOST_SERIALIZATION_NVP(lcgs); 00157 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00158 } 00159 try { 00160 ar >> BOOST_SERIALIZATION_NVP(statesizes); 00161 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00162 } 00163 try { 00164 ar >> BOOST_SERIALIZATION_NVP(auxsizes); 00165 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00166 } 00167 try { 00168 ar >> BOOST_SERIALIZATION_NVP(js); 00169 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00170 } 00171 try { 00172 ar >> BOOST_SERIALIZATION_NVP(ks); 00173 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00174 } 00175 this->post_load(ar, version); 00176 } 00177 00178 }; 00179 } 00180 00181 BIE_CLASS_TYPE_INFO(BIE::BIEACG) 00182 BIE_CLASS_EXPORT_KEY(BIE::BIEACG) 00183 #endif Send suggestions, questions, and feedback to WEINBERG at ASTRO dot UMASS dot EDU. Documentation generated at Fri Mar 26 00:35:09 2010 by
|