Changeset dfed1c for src/mg.cpp


Ignore:
Timestamp:
Nov 22, 2011, 9:22:10 PM (14 years ago)
Author:
Julian Iseringhausen <isering@…>
Children:
facba0
Parents:
66f24d
Message:

Major vmg update.

git-svn-id: https://svn.version.fz-juelich.de/scafacos/trunk@1136 5161e1c8-67bf-11de-9fd5-51895aff932f

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/mg.cpp

    r66f24d rdfed1c  
    2121#include <string>
    2222#include <fstream>
    23 #include <iostream>
    2423#include <sstream>
     24
     25#ifdef DEBUG_MEASURE_TIME
     26#ifdef HAVE_MPI
     27#include <mpi.h>
     28#endif
     29#endif
    2530
    2631#include "base/command_list.hpp"
    2732#include "base/discretization.hpp"
    2833#include "base/factory.hpp"
     34#include "base/timer.hpp"
    2935#include "comm/comm.hpp"
     36#include "grid/grid.hpp"
    3037#include "grid/tempgrid.hpp"
    3138#include "interface/interface.hpp"
     39#include "interface/interface_particles_cf.hpp"
    3240#include "level/level_operator.hpp"
    3341#include "smoother/smoother.hpp"
     
    3947#define REGISTER_COMMAND(a) extern void Initialize##a();Initialize##a();
    4048
    41 Factory MG::factory;
     49VMG::CommandFactory MG::command_factory;
    4250
    4351static void VMGRegisterBuiltinCommands()
     
    4957  REGISTER_COMMAND(VMGCommandClearCoarseLevels);
    5058  REGISTER_COMMAND(VMGCommandClearGrid);
     59  REGISTER_COMMAND(VMGCommandComputeResidualNorm);
    5160  REGISTER_COMMAND(VMGCommandCopyBoundary);
    5261  REGISTER_COMMAND(VMGCommandExecuteCycle);
     
    5867  REGISTER_COMMAND(VMGCommandImportRightHandSide);
    5968  REGISTER_COMMAND(VMGCommandInterpolateFMG);
     69  REGISTER_COMMAND(VMGCommandInitializeIterationCounter);
    6070  REGISTER_COMMAND(VMGCommandInitializeResidualNorm);
     71  REGISTER_COMMAND(VMGCommandNOP);
     72  REGISTER_COMMAND(VMGCommandPrintAllSettings);
    6173  REGISTER_COMMAND(VMGCommandPrintDefect);
    6274  REGISTER_COMMAND(VMGCommandPrintGridStructure);
     
    6476  REGISTER_COMMAND(VMGCommandPrintInnerGrid);
    6577  REGISTER_COMMAND(VMGCommandPrintResidualNorm);
     78  REGISTER_COMMAND(VMGCommandPrintRunningTime);
    6679  REGISTER_COMMAND(VMGCommandProlongate);
    6780  REGISTER_COMMAND(VMGCommandRestrict);
     
    7588MG::MG()
    7689{
     90  state = 0;
    7791  VMGRegisterBuiltinCommands();
    7892}
     
    86100void MG::Destroy()
    87101{
    88   MG::factory.Destroy();
     102  MG::Instance()->factories.clear();
     103  MG::Instance()->state = 0;
     104  Timer::Clear();
    89105}
    90106
     
    95111  Multigrid* sol = new Multigrid(comm, interface);
    96112  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();
    98117
    99118  sol->Register("SOL");
    100119  rhs->Register("RHS");
    101120  temp->Register("TEMPGRID");
     121  global_grid->Register("GLOBAL_COARSE_GRID");
    102122
    103123  new ObjectStorage<int>("GLOBAL_MAXLEVEL", sol->GlobalMaxLevel());
     
    106126}
    107127
     128void MG::InitializeFromParticleConfigFile(const char* filename)
     129{
     130  InterfaceParticlesCF interface_particles(filename);
     131}
     132
    108133/**
    109134 * Solves a given system with a multigrid method
     
    112137void MG::Solve()
    113138{
    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>();
    117149
    118150  cl_init->ExecuteList();
     
    121153
    122154  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
     168void MG::SetState(const int& state_)
     169{
     170  MG::Instance()->state = state_;
     171}
     172
     173VMG::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
     185VMG::CommandFactory& MG::GetCommands()
     186{
     187  return MG::command_factory;
    123188}
    124189
    125190Comm* MG::GetComm()
    126191{
    127   return factory.GetObject("COMM")->Cast<VMG::Comm>();
     192  return MG::GetFactory().Get("COMM")->Cast<VMG::Comm>();
    128193}
    129194
    130195Discretization* MG::GetDiscretization()
    131196{
    132   return factory.GetObject("DISCRETIZATION")->Cast<VMG::Discretization>();
     197  return MG::GetFactory().Get("DISCRETIZATION")->Cast<VMG::Discretization>();
    133198}
    134199
    135200LevelOperator* MG::GetLevelOperator()
    136201{
    137   return factory.GetObject("LEVEL_OPERATOR")->Cast<VMG::LevelOperator>();
     202  return MG::GetFactory().Get("LEVEL_OPERATOR")->Cast<VMG::LevelOperator>();
    138203}
    139204
    140205Multigrid* MG::GetRhs()
    141206{
    142   return factory.GetObject("RHS")->Cast<VMG::Multigrid>();
     207  return MG::GetFactory().Get("RHS")->Cast<VMG::Multigrid>();
    143208}
    144209
    145210Multigrid* MG::GetSol()
    146211{
    147   return factory.GetObject("SOL")->Cast<VMG::Multigrid>();
     212  return MG::GetFactory().Get("SOL")->Cast<VMG::Multigrid>();
    148213}
    149214
    150215Smoother* MG::GetSmoother()
    151216{
    152   return factory.GetObject("SMOOTHER")->Cast<VMG::Smoother>();
     217  return MG::GetFactory().Get("SMOOTHER")->Cast<VMG::Smoother>();
    153218}
    154219
    155220Solver* MG::GetSolver()
    156221{
    157   return factory.GetObject("SOLVER")->Cast<VMG::Solver>();
     222  return MG::GetFactory().Get("SOLVER")->Cast<VMG::Solver>();
    158223}
    159224
    160225TempGrid* MG::GetTempGrid()
    161226{
    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
     230Grid* MG::GetGlobalCoarseGrid()
     231{
     232  return MG::GetFactory().Get("GLOBAL_COARSE_GRID")->Cast<VMG::Grid>();
    168233}
    169234
    170235Interface* MG::GetInterface()
    171236{
    172   return factory.GetObject("INTERFACE")->Cast<VMG::Interface>();
     237  return MG::GetFactory().Get("INTERFACE")->Cast<VMG::Interface>();
    173238}
    174239
    175240static bool CheckObject(std::string id)
    176241{
    177   Object *obj = MG::GetFactory().GetObject(id);
    178 
    179 #ifdef DEBUG
     242  Object *obj = MG::GetFactory().Get(id);
     243
     244#ifdef DEBUG_OUTPUT
    180245  if (obj == NULL)
    181246    printf("\nMultigrid: CLASS %s NOT INITIALIZED\n\n", id.c_str());
Note: See TracChangeset for help on using the changeset viewer.