Changeset dfed1c for src/mg.cpp
- Timestamp:
- Nov 22, 2011, 9:22:10 PM (14 years ago)
- Children:
- facba0
- Parents:
- 66f24d
- File:
-
- 1 edited
-
src/mg.cpp (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/mg.cpp
r66f24d rdfed1c 21 21 #include <string> 22 22 #include <fstream> 23 #include <iostream>24 23 #include <sstream> 24 25 #ifdef DEBUG_MEASURE_TIME 26 #ifdef HAVE_MPI 27 #include <mpi.h> 28 #endif 29 #endif 25 30 26 31 #include "base/command_list.hpp" 27 32 #include "base/discretization.hpp" 28 33 #include "base/factory.hpp" 34 #include "base/timer.hpp" 29 35 #include "comm/comm.hpp" 36 #include "grid/grid.hpp" 30 37 #include "grid/tempgrid.hpp" 31 38 #include "interface/interface.hpp" 39 #include "interface/interface_particles_cf.hpp" 32 40 #include "level/level_operator.hpp" 33 41 #include "smoother/smoother.hpp" … … 39 47 #define REGISTER_COMMAND(a) extern void Initialize##a();Initialize##a(); 40 48 41 Factory MG::factory;49 VMG::CommandFactory MG::command_factory; 42 50 43 51 static void VMGRegisterBuiltinCommands() … … 49 57 REGISTER_COMMAND(VMGCommandClearCoarseLevels); 50 58 REGISTER_COMMAND(VMGCommandClearGrid); 59 REGISTER_COMMAND(VMGCommandComputeResidualNorm); 51 60 REGISTER_COMMAND(VMGCommandCopyBoundary); 52 61 REGISTER_COMMAND(VMGCommandExecuteCycle); … … 58 67 REGISTER_COMMAND(VMGCommandImportRightHandSide); 59 68 REGISTER_COMMAND(VMGCommandInterpolateFMG); 69 REGISTER_COMMAND(VMGCommandInitializeIterationCounter); 60 70 REGISTER_COMMAND(VMGCommandInitializeResidualNorm); 71 REGISTER_COMMAND(VMGCommandNOP); 72 REGISTER_COMMAND(VMGCommandPrintAllSettings); 61 73 REGISTER_COMMAND(VMGCommandPrintDefect); 62 74 REGISTER_COMMAND(VMGCommandPrintGridStructure); … … 64 76 REGISTER_COMMAND(VMGCommandPrintInnerGrid); 65 77 REGISTER_COMMAND(VMGCommandPrintResidualNorm); 78 REGISTER_COMMAND(VMGCommandPrintRunningTime); 66 79 REGISTER_COMMAND(VMGCommandProlongate); 67 80 REGISTER_COMMAND(VMGCommandRestrict); … … 75 88 MG::MG() 76 89 { 90 state = 0; 77 91 VMGRegisterBuiltinCommands(); 78 92 } … … 86 100 void MG::Destroy() 87 101 { 88 MG::factory.Destroy(); 102 MG::Instance()->factories.clear(); 103 MG::Instance()->state = 0; 104 Timer::Clear(); 89 105 } 90 106 … … 95 111 Multigrid* sol = new Multigrid(comm, interface); 96 112 Multigrid* rhs = new Multigrid(comm, interface); 97 VMG::TempGrid* temp = new VMG::TempGrid(); 113 TempGrid* temp = new TempGrid(); 114 TempGrid* global_grid = new TempGrid(); 115 116 global_grid->SetPropertiesToGlobalCoarseGrid(); 98 117 99 118 sol->Register("SOL"); 100 119 rhs->Register("RHS"); 101 120 temp->Register("TEMPGRID"); 121 global_grid->Register("GLOBAL_COARSE_GRID"); 102 122 103 123 new ObjectStorage<int>("GLOBAL_MAXLEVEL", sol->GlobalMaxLevel()); … … 106 126 } 107 127 128 void MG::InitializeFromParticleConfigFile(const char* filename) 129 { 130 InterfaceParticlesCF interface_particles(filename); 131 } 132 108 133 /** 109 134 * Solves a given system with a multigrid method … … 112 137 void MG::Solve() 113 138 { 114 CommandList* cl_init = factory.GetObject("COMMANDLIST_INIT")->Cast<CommandList>(); 115 CommandList* cl_loop = factory.GetObject("COMMANDLIST_LOOP")->Cast<CommandList>(); 116 CommandList* cl_finalize = factory.GetObject("COMMANDLIST_FINALIZE")->Cast<CommandList>(); 139 #ifdef DEBUG_MEASURE_TIME 140 #ifdef HAVE_MPI 141 MPI_Barrier(MPI_COMM_WORLD); 142 Timer::Start("CompleteRunningTime"); 143 #endif 144 #endif 145 146 CommandList* cl_init = MG::GetFactory().Get("COMMANDLIST_INIT")->Cast<CommandList>(); 147 CommandList* cl_loop = MG::GetFactory().Get("COMMANDLIST_LOOP")->Cast<CommandList>(); 148 CommandList* cl_finalize = MG::GetFactory().Get("COMMANDLIST_FINALIZE")->Cast<CommandList>(); 117 149 118 150 cl_init->ExecuteList(); … … 121 153 122 154 cl_finalize->ExecuteList(); 155 156 #ifdef DEBUG_MEASURE_TIME 157 #ifdef HAVE_MPI 158 MPI_Barrier(MPI_COMM_WORLD); 159 Timer::Stop("CompleteRunningTime"); 160 GetComm()->PrintXMLAll("time.xml", Timer::ToString()); 161 #ifdef DEBUG_OUTPUT 162 Timer::Print(); 163 #endif 164 #endif 165 #endif 166 } 167 168 void MG::SetState(const int& state_) 169 { 170 MG::Instance()->state = state_; 171 } 172 173 VMG::Factory& MG::GetFactory() 174 { 175 std::map<int, VMG::Factory>::iterator iter = MG::Instance()->factories.find(MG::Instance()->state); 176 177 if (iter == MG::Instance()->factories.end()) 178 iter = MG::Instance()->factories.insert(std::make_pair(MG::Instance()->state, Factory())).first; 179 180 assert(iter != MG::Instance()->factories.end()); 181 182 return iter->second; 183 } 184 185 VMG::CommandFactory& MG::GetCommands() 186 { 187 return MG::command_factory; 123 188 } 124 189 125 190 Comm* MG::GetComm() 126 191 { 127 return factory.GetObject("COMM")->Cast<VMG::Comm>();192 return MG::GetFactory().Get("COMM")->Cast<VMG::Comm>(); 128 193 } 129 194 130 195 Discretization* MG::GetDiscretization() 131 196 { 132 return factory.GetObject("DISCRETIZATION")->Cast<VMG::Discretization>();197 return MG::GetFactory().Get("DISCRETIZATION")->Cast<VMG::Discretization>(); 133 198 } 134 199 135 200 LevelOperator* MG::GetLevelOperator() 136 201 { 137 return factory.GetObject("LEVEL_OPERATOR")->Cast<VMG::LevelOperator>();202 return MG::GetFactory().Get("LEVEL_OPERATOR")->Cast<VMG::LevelOperator>(); 138 203 } 139 204 140 205 Multigrid* MG::GetRhs() 141 206 { 142 return factory.GetObject("RHS")->Cast<VMG::Multigrid>();207 return MG::GetFactory().Get("RHS")->Cast<VMG::Multigrid>(); 143 208 } 144 209 145 210 Multigrid* MG::GetSol() 146 211 { 147 return factory.GetObject("SOL")->Cast<VMG::Multigrid>();212 return MG::GetFactory().Get("SOL")->Cast<VMG::Multigrid>(); 148 213 } 149 214 150 215 Smoother* MG::GetSmoother() 151 216 { 152 return factory.GetObject("SMOOTHER")->Cast<VMG::Smoother>();217 return MG::GetFactory().Get("SMOOTHER")->Cast<VMG::Smoother>(); 153 218 } 154 219 155 220 Solver* MG::GetSolver() 156 221 { 157 return factory.GetObject("SOLVER")->Cast<VMG::Solver>();222 return MG::GetFactory().Get("SOLVER")->Cast<VMG::Solver>(); 158 223 } 159 224 160 225 TempGrid* MG::GetTempGrid() 161 226 { 162 return factory.GetObject("TEMPGRID")->Cast<VMG::TempGrid>();163 } 164 165 Factory& MG::GetFactory()166 { 167 return MG:: factory;227 return MG::GetFactory().Get("TEMPGRID")->Cast<VMG::TempGrid>(); 228 } 229 230 Grid* MG::GetGlobalCoarseGrid() 231 { 232 return MG::GetFactory().Get("GLOBAL_COARSE_GRID")->Cast<VMG::Grid>(); 168 233 } 169 234 170 235 Interface* MG::GetInterface() 171 236 { 172 return factory.GetObject("INTERFACE")->Cast<VMG::Interface>();237 return MG::GetFactory().Get("INTERFACE")->Cast<VMG::Interface>(); 173 238 } 174 239 175 240 static bool CheckObject(std::string id) 176 241 { 177 Object *obj = MG::GetFactory().Get Object(id);178 179 #ifdef DEBUG 242 Object *obj = MG::GetFactory().Get(id); 243 244 #ifdef DEBUG_OUTPUT 180 245 if (obj == NULL) 181 246 printf("\nMultigrid: CLASS %s NOT INITIALIZED\n\n", id.c_str());
Note:
See TracChangeset
for help on using the changeset viewer.
