00001 00005 class Multigrid : public MLSolver 00006 00007 { 00008 protected: 00009 VecSimplest(Handle(LinEqVector)) linearSubproblemRes; 00010 virtual bool cycle(SpaceId space, StartVectorMode start); 00011 public: 00012 00013 Multigrid (const MLSolver_prm& pm); 00014 ~Multigrid () {} 00015 00016 virtual bool solve (StartVectorMode start); 00017 virtual void init (); 00018 00019 virtual String description () const; 00020 virtual int getWork (const PrecondWork work_tp) const; 00021 virtual real getStorage () const; 00022 00023 CLASS_INFO 00024 }; 00025 00026 00027 00098 class AddMultigrid : public Multigrid 00099 00100 { 00101 public: 00102 00103 AddMultigrid (const MLSolver_prm& pm); 00104 ~AddMultigrid () {} 00105 00106 virtual String description () const; 00107 virtual int getWork (const PrecondWork work_tp) const; 00108 virtual bool solve (StartVectorMode start); 00109 00110 CLASS_INFO 00111 }; 00112 00113 00114 00180 class NestedMultigrid : public Multigrid 00181 00182 { 00183 public: 00184 00185 NestedMultigrid (const MLSolver_prm& pm); 00186 ~NestedMultigrid () {} 00187 00188 virtual String description () const; 00189 virtual int getWork (const PrecondWork work_tp) const; 00190 virtual bool solve (StartVectorMode start); 00191 virtual void init (); 00192 virtual void initRes (SpaceId i); 00193 00194 CLASS_INFO 00195 }; 00196 00197 00293 class NonlinearMultigrid : public Multigrid 00294 00295 { 00296 protected: 00297 VecSimplest(Handle(LinEqVector)) linearOldSol; 00298 VecSimplest(Handle(LinEqVector)) linearOldRes; 00299 virtual bool cycle(SpaceId space, StartVectorMode start); 00300 public: 00301 00302 NonlinearMultigrid (const MLSolver_prm& pm); 00303 ~NonlinearMultigrid () {} 00304 00305 virtual bool solve (StartVectorMode start); 00306 virtual void init (); 00307 virtual void initRes (SpaceId i); 00308 virtual void initRhs (SpaceId i); 00309 00310 virtual String description () const; 00311 virtual int getWork (const PrecondWork work_tp) const; 00312 virtual real getStorage () const; 00313 00314 CLASS_INFO 00315 }; 00316 00317 00388 class NestedFASMultigrid : public NonlinearMultigrid 00389 00390 { 00391 protected: 00392 virtual bool cycle(SpaceId space, StartVectorMode start); 00393 public: 00394 00395 NestedFASMultigrid (const MLSolver_prm& pm); 00396 ~NestedFASMultigrid () {} 00397 00398 virtual bool solve (StartVectorMode start); 00399 00400 virtual String description () const; 00401 00402 CLASS_INFO 00403 }; 00404 00405 00476 class FASMultigrid : public NestedFASMultigrid 00477 00478 { 00479 public: 00480 00481 FASMultigrid (const MLSolver_prm& pm); 00482 ~FASMultigrid () {} 00483 00484 virtual bool solve (StartVectorMode start); 00485 00486 virtual String description () const; 00487 00488 CLASS_INFO 00489 }; 00490 00491 00562 class NestedFASDampedMultigrid : public NestedFASMultigrid 00563 00564 { 00565 protected: 00566 VecSimplest(real) sigma; 00567 virtual void init (); 00568 virtual bool cycle(SpaceId space, StartVectorMode start); 00569 virtual real getSigma(SpaceId space, LinEqVector& d); 00570 public: 00571 00572 NestedFASDampedMultigrid (const MLSolver_prm& pm); 00573 ~NestedFASDampedMultigrid () {} 00574 00575 virtual String description () const; 00576 00577 CLASS_INFO 00578 }; 00579 00580 00581 00582 class FASDampedMultigrid : public FASMultigrid 00583 00584 { 00585 protected: 00586 VecSimplest(real) sigma; 00587 virtual void init (); 00588 virtual bool cycle(SpaceId space, StartVectorMode start); 00589 virtual real getSigma(SpaceId space, LinEqVector& d); 00590 public: 00591 00592 FASDampedMultigrid (const MLSolver_prm& pm); 00593 ~FASDampedMultigrid () {} 00594 00595 virtual String description () const; 00596 00597 CLASS_INFO 00598 }; 00599 00600 00601 00602 class NonlinearDampedMultigrid : public NonlinearMultigrid 00603 00604 { 00605 protected: 00606 VecSimplest(real) sigma; 00607 virtual void init (); 00608 virtual bool cycle(SpaceId space, StartVectorMode start); 00609 virtual real getSigma(SpaceId space, LinEqVector& d); 00610 public: 00611 00612 NonlinearDampedMultigrid (const MLSolver_prm& pm); 00613 ~NonlinearDampedMultigrid () {} 00614 00615 virtual String description () const; 00616 00617 CLASS_INFO 00618 }; 00619 00620