Changeset a24b80
- Timestamp:
- Jun 11, 2012, 3:01:12 PM (13 years ago)
- Children:
- 290aa3
- Parents:
- 2d4211
- Files:
-
- 14 edited
-
src/mg.cpp (modified) (2 diffs)
-
src/mg.hpp (modified) (1 diff)
-
src/units/particle/interface_fcs.cpp (modified) (3 diffs)
-
test/unit_test/library/dirichlet_cs.cpp (modified) (2 diffs)
-
test/unit_test/library/dirichlet_cs_mpi.cpp (modified) (2 diffs)
-
test/unit_test/library/dirichlet_fas.cpp (modified) (2 diffs)
-
test/unit_test/library/dirichlet_fas_lr.cpp (modified) (2 diffs)
-
test/unit_test/library/dirichlet_fas_lr_mpi.cpp (modified) (2 diffs)
-
test/unit_test/library/dirichlet_fas_mpi.cpp (modified) (2 diffs)
-
test/unit_test/library/periodic_cs.cpp (modified) (2 diffs)
-
test/unit_test/library/periodic_cs_mpi.cpp (modified) (2 diffs)
-
test/unit_test/library/periodic_fas.cpp (modified) (2 diffs)
-
test/unit_test/library/periodic_fas_mpi.cpp (modified) (2 diffs)
-
test/unit_test/unit_test/smoother_test.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/mg.cpp
r2d4211 ra24b80 125 125 } 126 126 127 void MG::SetInterface(VMG::Interface* interface, VMG::Comm* comm) 128 { 129 interface->Register("INTERFACE"); 130 131 Multigrid* sol = new Multigrid(comm, interface); 132 Multigrid* rhs = new Multigrid(comm, interface); 127 /* 128 * Post init communication class 129 */ 130 void MG::PostInit() 131 { 132 Multigrid* sol = new Multigrid(GetComm(), GetInterface()); 133 sol->Register("SOL"); 134 135 Multigrid* rhs = new Multigrid(GetComm(), GetInterface()); 136 rhs->Register("RHS"); 137 133 138 TempGrid* temp = new TempGrid(); 134 135 sol->Register("SOL");136 rhs->Register("RHS");137 139 temp->Register("TEMPGRID"); 138 140 … … 140 142 new ObjectStorage<int>("MINLEVEL", sol->MinLevel()); 141 143 new ObjectStorage<int>("MAXLEVEL", sol->MaxLevel()); 142 } 143 144 /* 145 * Post init communication class 146 */ 147 void MG::PostInit() 148 { 144 149 145 GetComm()->PostInit(*GetSol(), *GetRhs()); 150 146 } -
src/mg.hpp
r2d4211 ra24b80 57 57 } 58 58 59 static void SetInterface(Interface* interface, Comm* comm);60 61 59 static VMG::Comm* GetComm(); 62 60 static VMG::Discretization* GetDiscretization(); -
src/units/particle/interface_fcs.cpp
r2d4211 ra24b80 54 54 #include "smoother/gsrb_poisson_2.hpp" 55 55 #include "smoother/gsrb_poisson_4.hpp" 56 #ifdef HAVE_LAPACK57 #include "solver/dgesv.hpp"58 #include "solver/dsysv.hpp"59 #else60 56 #include "solver/givens.hpp" 61 #endif62 57 #include "solver/solver_regular.hpp" 63 58 #include "solver/solver_singular.hpp" … … 116 111 const bool singular = periodic[0] * periodic[1] * periodic[2]; 117 112 118 /* 119 * Register communication class. 120 */ 121 Comm* comm = new Particle::CommMPI(boundary, new DomainDecompositionMPI(), mpi_comm); 113 Comm* comm; 114 Discretization* discretization; 115 Interface* interface; 116 LevelOperator* lop; 117 Smoother* smoother; 118 Solver* solver; 119 120 /* 121 * Choose multigrid components 122 */ 123 if (singular) { 124 125 comm = new Particle::CommMPI(boundary, new DomainDecompositionMPI(), mpi_comm); 126 discretization = new DiscretizationPoissonFD(discretization_order); 127 interface = new InterfaceParticles(boundary, 2, level, Vector(box_offset), box_size, near_field_cells, 0, 1.0); 128 lop = new LevelOperatorCS(Stencils::RestrictionFullWeight, Stencils::InterpolationTrilinear); 129 solver = new Givens<SolverSingular>(); 130 131 Techniques::SetCorrectionSchemePeriodic(interface->MinLevel(), interface->MaxLevel(), cycle_type); 132 133 }else { 134 135 comm = new Particle::CommMPI(boundary, new DomainDecompositionMPI(), mpi_comm); 136 discretization = new DiscretizationPoissonFV(discretization_order); 137 interface = new InterfaceParticles(boundary, 2, level, Vector(box_offset), box_size, near_field_cells, 2, 1.6); 138 lop = new LevelOperatorFAS(Stencils::RestrictionFullWeight, Stencils::Injection, Stencils::InterpolationTrilinear); 139 solver = new Givens<SolverRegular>(); 140 141 Techniques::SetFullApproximationSchemeDirichlet(interface->MinLevel(), interface->MaxLevel(), cycle_type); 142 143 } 144 145 /* 146 * Use Gauss-Seidel Red-Black ordering 147 */ 148 if (discretization_order == 2) 149 smoother = new GaussSeidelRBPoisson2(); 150 else 151 smoother = new GaussSeidelRBPoisson4(); 152 153 /* 154 * Register multigrid components 155 */ 122 156 comm->Register("COMM"); 123 124 /*125 * Register particle interface.126 */127 Interface* interface;128 if (singular)129 interface = new InterfaceParticles(boundary, 2, level, Vector(box_offset), box_size, near_field_cells, 0, 1.0);130 else131 interface = new InterfaceParticles(boundary, 2, level, Vector(box_offset), box_size, near_field_cells, 2, 1.6);132 MG::SetInterface(interface, comm);133 134 /*135 * Define discretization of the Poisson equation.136 * Finite volumes for locally refined grids and137 * finite differences otherwise.138 */139 Discretization* discretization;140 if (singular)141 discretization = new DiscretizationPoissonFD(discretization_order);142 else143 discretization = new DiscretizationPoissonFV(discretization_order);144 157 discretization->Register("DISCRETIZATION"); 145 146 /* 147 * Use a correction scheme multigrid algorithm with full weight stencils. 148 * Since we use the Gauss-Seidel RB smoother here, this may be replaced 149 * with a half-weight version once debugging is finished. 150 */ 151 LevelOperator* lop; 152 if (singular) 153 lop = new LevelOperatorCS(Stencils::RestrictionFullWeight, Stencils::InterpolationTrilinear); 154 else 155 lop = new LevelOperatorFAS(Stencils::RestrictionFullWeight, Stencils::Injection, Stencils::InterpolationTrilinear); 158 interface->Register("INTERFACE"); 156 159 lop->Register("LEVEL_OPERATOR"); 157 158 /* 159 * Use Gauss-Seidel Red-Black ordering 160 */ 161 if (discretization_order == 2) { 162 Smoother* smoother = new GaussSeidelRBPoisson2(); 163 smoother->Register("SMOOTHER"); 164 }else { 165 Smoother* smoother = new GaussSeidelRBPoisson4(); 166 smoother->Register("SMOOTHER"); 167 } 168 169 /* 170 * Use LAPACK solver when available, otherwise use Givens rotations. 171 */ 172 #ifdef HAVE_LAPACK 173 Solver* solver = (singular ? 174 static_cast<Solver*>(new DSYSV<SolverSingular>()) : 175 static_cast<Solver*>(new DGESV<SolverRegular>())); 176 #else 177 Solver* solver = (singular ? 178 static_cast<Solver*>(new Givens<SolverSingular>()) : 179 static_cast<Solver*>(new Givens<SolverRegular>())); 180 #endif 160 smoother->Register("SMOOTHER"); 181 161 solver->Register("SOLVER"); 182 183 /*184 * Set commands for the actual multigrid cycle185 */186 if (singular)187 Techniques::SetCorrectionSchemePeriodic(interface->MinLevel(), interface->MaxLevel(), cycle_type);188 else189 Techniques::SetFullApproximationSchemeDirichlet(interface->MinLevel(), interface->MaxLevel(), cycle_type);190 162 191 163 /* … … 200 172 201 173 /* 174 * Post init 175 */ 176 MG::PostInit(); 177 178 /* 202 179 * Check whether the library is correctly initialized now. 203 180 */ 204 181 MG::IsInitialized(); 205 206 /*207 * Post init communication class208 */209 MG::PostInit();210 182 } 211 183 -
test/unit_test/library/dirichlet_cs.cpp
r2d4211 ra24b80 64 64 65 65 Interface* interface = new VMGInterfaces::InterfaceSinus(sine_factor, comm->BoundaryConditions(), 2, 6, 0.0, 1.0); 66 MG::SetInterface(interface, comm);66 interface->Register("INTERFACE"); 67 67 68 68 Discretization* discretization = new DiscretizationPoissonFD(2); … … 89 89 factory.RegisterObjectStorage("MAX_ITERATION", 7); 90 90 91 MG::PostInit(); 92 91 93 MG::IsInitialized(); 92 94 } -
test/unit_test/library/dirichlet_cs_mpi.cpp
r2d4211 ra24b80 71 71 72 72 Interface* interface = new VMGInterfaces::InterfaceSinus(sine_factor, comm->BoundaryConditions(), 2, 6, 0.0, 1.0); 73 MG::SetInterface(interface, comm);73 interface->Register("INTERFACE"); 74 74 75 75 Discretization* discretization = new DiscretizationPoissonFD(2); … … 96 96 factory.RegisterObjectStorage("MAX_ITERATION", 7); 97 97 98 MG::PostInit(); 99 98 100 MG::IsInitialized(); 99 100 MG::PostInit();101 101 } 102 102 -
test/unit_test/library/dirichlet_fas.cpp
r2d4211 ra24b80 63 63 64 64 Interface* interface = new VMGInterfaces::InterfaceSinus(sine_factor, comm->BoundaryConditions(), 2, 6, 0.0, 1.0); 65 MG::SetInterface(interface, comm);65 interface->Register("INTERFACE"); 66 66 67 67 Discretization* discretization = new DiscretizationPoissonFD(2); … … 89 89 factory.RegisterObjectStorage("MAX_ITERATION", 7); 90 90 91 MG::PostInit(); 92 91 93 MG::IsInitialized(); 92 94 } -
test/unit_test/library/dirichlet_fas_lr.cpp
r2d4211 ra24b80 63 63 64 64 Interface* interface = new VMGInterfaces::InterfaceSinus(sine_factor, comm->BoundaryConditions(), 2, 6, 0.0, 1.0, 2, 1.6); 65 MG::SetInterface(interface, comm);65 interface->Register("INTERFACE"); 66 66 67 67 Discretization* discretization = new DiscretizationPoissonFV(2); … … 89 89 factory.RegisterObjectStorage("MAX_ITERATION", 8); 90 90 91 MG::PostInit(); 92 91 93 MG::IsInitialized(); 92 94 } -
test/unit_test/library/dirichlet_fas_lr_mpi.cpp
r2d4211 ra24b80 72 72 73 73 Interface* interface = new VMGInterfaces::InterfaceSinus(sine_factor, comm->BoundaryConditions(), 2, 6, 0.0, 1.0, 2, 1.6); 74 MG::SetInterface(interface, comm);74 interface->Register("INTERFACE"); 75 75 76 76 Discretization* discretization = new DiscretizationPoissonFV(2); … … 98 98 factory.RegisterObjectStorage("MAX_ITERATION", 8); 99 99 100 MG::PostInit(); 101 100 102 MG::IsInitialized(); 101 102 MG::PostInit();103 103 } 104 104 -
test/unit_test/library/dirichlet_fas_mpi.cpp
r2d4211 ra24b80 72 72 73 73 Interface* interface = new VMGInterfaces::InterfaceSinus(sine_factor, comm->BoundaryConditions(), 2, 6, 0.0, 1.0); 74 MG::SetInterface(interface, comm);74 interface->Register("INTERFACE"); 75 75 76 76 Discretization* discretization = new DiscretizationPoissonFD(2); … … 98 98 factory.RegisterObjectStorage("MAX_ITERATION", 7); 99 99 100 MG::PostInit(); 101 100 102 MG::IsInitialized(); 101 102 MG::PostInit();103 103 } 104 104 -
test/unit_test/library/periodic_cs.cpp
r2d4211 ra24b80 63 63 64 64 Interface* interface = new VMGInterfaces::InterfaceSinus(sine_factor, comm->BoundaryConditions(), 2, 6, 0.0, 1.0); 65 MG::SetInterface(interface, comm);65 interface->Register("INTERFACE"); 66 66 67 67 Discretization* discretization = new DiscretizationPoissonFD(2); … … 88 88 factory.RegisterObjectStorage("MAX_ITERATION", 7); 89 89 90 MG::PostInit(); 91 90 92 MG::IsInitialized(); 91 93 } -
test/unit_test/library/periodic_cs_mpi.cpp
r2d4211 ra24b80 71 71 72 72 Interface* interface = new VMGInterfaces::InterfaceSinus(sine_factor, comm->BoundaryConditions(), 2, 6, 0.0, 1.0); 73 MG::SetInterface(interface, comm);73 interface->Register("INTERFACE"); 74 74 75 75 Discretization* discretization = new DiscretizationPoissonFD(2); … … 96 96 factory.RegisterObjectStorage("MAX_ITERATION", 7); 97 97 98 MG::PostInit(); 99 98 100 MG::IsInitialized(); 99 100 MG::PostInit();101 101 } 102 102 -
test/unit_test/library/periodic_fas.cpp
r2d4211 ra24b80 62 62 63 63 Interface* interface = new VMGInterfaces::InterfaceSinus(sine_factor, comm->BoundaryConditions(), 2, 6, 0.0, 1.0); 64 MG::SetInterface(interface, comm);64 interface->Register("INTERFACE"); 65 65 66 66 Discretization* discretization = new DiscretizationPoissonFD(2); … … 87 87 factory.RegisterObjectStorage("MAX_ITERATION", 7); 88 88 89 MG::PostInit(); 90 89 91 MG::IsInitialized(); 90 92 } -
test/unit_test/library/periodic_fas_mpi.cpp
r2d4211 ra24b80 71 71 72 72 Interface* interface = new VMGInterfaces::InterfaceSinus(sine_factor, comm->BoundaryConditions(), 2, 6, 0.0, 1.0); 73 MG::SetInterface(interface, comm);73 interface->Register("INTERFACE"); 74 74 75 75 Discretization* discretization = new DiscretizationPoissonFD(2); … … 96 96 factory.RegisterObjectStorage("MAX_ITERATION", 7); 97 97 98 MG::PostInit(); 99 98 100 MG::IsInitialized(); 99 100 MG::PostInit();101 101 } 102 102 -
test/unit_test/unit_test/smoother_test.cpp
r2d4211 ra24b80 56 56 57 57 Interface* interface = new VMGInterfaces::InterfaceSinus(2.0*Math::pi, boundary, 4, 4, 0.0, 1.0); 58 MG::SetInterface(interface, comm); 58 interface->Register("INTERFACE"); 59 60 MG::PostInit(); 59 61 60 62 interface->ImportRightHandSide(*MG::GetRhs());
Note:
See TracChangeset
for help on using the changeset viewer.
