Changeset ac6d04 for src/comm/domain_decomposition_mpi.cpp
- Timestamp:
- Apr 10, 2012, 1:55:49 PM (14 years ago)
- Children:
- a40eea
- Parents:
- d24c2f
- File:
-
- 1 edited
-
src/comm/domain_decomposition_mpi.cpp (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/comm/domain_decomposition_mpi.cpp
rd24c2f rac6d04 25 25 GlobalIndices global_l; 26 26 Index remainder, procs; 27 Index begin_finest, end_finest;28 27 Index last_procs = comm->GlobalProcs(); 29 28 … … 32 31 for (unsigned int i=0; i<interface->Global().size(); ++i) { 33 32 34 global_l.BeginFinest() = interface->Global()[i].BeginFinest(); 35 global_l.EndFinest() = interface->Global()[i].EndFinest(); 36 global_l.SizeFinest() = interface->Global()[i].SizeFinest(); 37 global_l.SizeGlobal() = interface->Global()[i].SizeGlobal(); 38 33 /* 34 * Inherit global properties from interface 35 */ 36 global_l.GlobalFinerBegin() = interface->Global()[i].GlobalFinerBegin(); 37 global_l.GlobalFinerEnd() = interface->Global()[i].GlobalFinerEnd(); 38 global_l.GlobalFinerSize() = interface->Global()[i].GlobalFinerSize(); 39 global_l.FinestAbsBegin() = interface->Global()[i].FinestAbsBegin(); 40 global_l.FinestAbsEnd() = interface->Global()[i].FinestAbsEnd(); 41 global_l.FinestAbsSize() = interface->Global()[i].FinestAbsSize(); 42 global_l.GlobalSize() = interface->Global()[i].GlobalSize(); 39 43 global_l.BoundaryType() = interface->Global()[i].BoundaryType(); 40 44 41 if (IsActive(comm, global_l. SizeGlobal(), procs)) {45 if (IsActive(comm, global_l.GlobalSize(), procs)) { 42 46 43 47 if (i == 0) { 44 48 45 global_l.SizeLocal() = global_l.SizeGlobal() / procs; 46 remainder = global_l.SizeGlobal() % procs; 49 global_l.LocalSize() = global_l.GlobalSize() / procs; 47 50 51 remainder = global_l.GlobalSize() % procs; 48 52 for (int j=0; j<3; ++j) 49 53 if (comm->GlobalPos()[j] < remainder[j]) 50 ++(global_l. SizeLocal()[j]);54 ++(global_l.LocalSize()[j]); 51 55 52 global_l. BeginLocal() = comm->GlobalPos() * global_l.SizeLocal();56 global_l.LocalBegin() = comm->GlobalPos() * global_l.LocalSize(); 53 57 54 58 for (int j=0; j<3; ++j) 55 59 if (comm->GlobalPos()[j] >= remainder[j]) 56 global_l.BeginLocal()[j] += remainder[j];60 global_l.LocalBegin()[j] += remainder[j]; 57 61 58 global_l.EndLocal() = global_l.BeginLocal() + global_l.SizeLocal(); 62 global_l.LocalEnd() = global_l.LocalBegin() + global_l.LocalSize(); 63 64 global_l.LocalFinerBegin() = 0; 65 global_l.LocalFinerEnd() = 0; 66 global_l.LocalFinerSize() = 0; 59 67 60 68 }else { … … 64 72 if (procs[j] == last_procs[j]) { 65 73 66 begin_finest[j] = (global.back().BeginFinest() +67 GridIndexTranslations::GlobalToFiner(global.back().BeginLocal(), i-1))[j];68 e nd_finest[j] = (global.back().BeginFinest() +69 GridIndexTranslations::GlobalToFiner(global.back().EndLocal(), i-1))[j];74 if (global.back().LocalBegin()[j] == 0) 75 global_l.LocalBegin()[j] = 0; 76 else 77 global_l.LocalBegin()[j] = global.back().LocalBegin()[j] / 2 + global_l.GlobalFinerBegin()[j]; 70 78 71 if (global.back().BeginLocal()[j] == 0) 72 begin_finest[j] = global_l.BeginFinest()[j]; 79 if (global.back().LocalEnd()[j] == global.back().GlobalSize()[j]) 80 global_l.LocalEnd()[j] = global_l.GlobalSize()[j]; 81 else 82 global_l.LocalEnd()[j] = global.back().LocalEnd()[j] / 2 + global_l.GlobalFinerBegin()[j]; 73 83 74 if (global.back().EndLocal()[j] == global.back().SizeGlobal()[j]) 75 end_finest[j] = global_l.EndFinest()[j]; 76 77 begin_finest[j] -= global_l.BeginFinest()[j]; 78 end_finest[j] -= global_l.BeginFinest()[j]; 79 80 FineToCoarse(comm, begin_finest[j], end_finest[j], i); 81 82 global_l.BeginLocal()[j] = begin_finest[j]; 83 global_l.EndLocal()[j] = end_finest[j]; 84 global_l.SizeLocal()[j] = end_finest[j] - begin_finest[j]; 84 global_l.LocalSize()[j] = global_l.LocalEnd()[j] - global_l.LocalBegin()[j]; 85 85 86 86 }else { 87 87 88 global_l.SizeLocal()[j] = global_l.SizeGlobal()[j] / procs[j]; 89 remainder[j] = global_l.SizeGlobal()[j] % procs[j]; 88 global_l.LocalSize()[j] = global_l.GlobalSize()[j] / procs[j]; 90 89 90 remainder[j] = global_l.GlobalSize()[j] % procs[j]; 91 if (comm->GlobalPos()[j] < remainder[j]) 92 ++(global_l.LocalSize()[j]); 91 93 92 if (comm->GlobalPos()[j] < remainder[j]) 93 ++(global_l.SizeLocal()[j]); 94 95 global_l.BeginLocal()[j] = comm->GlobalPos()[j] * global_l.SizeLocal()[j]; 96 94 global_l.LocalBegin()[j] = comm->GlobalPos()[j] * global_l.LocalSize()[j]; 97 95 98 96 if (comm->GlobalPos()[j] >= remainder[j]) 99 global_l. BeginLocal()[j] += remainder[j];97 global_l.LocalBegin()[j] += remainder[j]; 100 98 101 global_l. EndLocal()[j] = global_l.BeginLocal()[j] + global_l.SizeLocal()[j];99 global_l.LocalEnd()[j] = global_l.LocalBegin()[j] + global_l.LocalSize()[j]; 102 100 103 101 } 104 102 } 103 104 global_l.LocalFinerBegin() = global_l.LocalBegin().Clamp(global_l.GlobalFinerBegin(), global_l.GlobalFinerEnd()); 105 global_l.LocalFinerEnd() = global_l.LocalEnd().Clamp(global_l.GlobalFinerBegin(), global_l.GlobalFinerEnd()); 106 global_l.LocalFinerSize() = global_l.LocalFinerEnd() - global_l.LocalFinerBegin(); 107 105 108 } 109 106 110 }else { 107 111 108 global_l.BeginLocal() = 0; 109 global_l.EndLocal() = 0; 110 global_l.SizeLocal() = 0; 112 global_l.LocalBegin() = 0; 113 global_l.LocalEnd() = 0; 114 global_l.LocalSize() = 0; 115 global_l.LocalFinerBegin() = 0; 116 global_l.LocalFinerEnd() = 0; 117 global_l.LocalFinerSize() = 0; 111 118 112 119 }
Note:
See TracChangeset
for help on using the changeset viewer.
