| 99 | } |
| 100 | |
| 101 | static int |
| 102 | partitionModel(PartitionRuntime& part, int eleTag) |
| 103 | { |
| 104 | if (part.partitioned == true) |
| 105 | return 0; |
| 106 | |
| 107 | int result = 0; |
| 108 | |
| 109 | if (part.channels != nullptr) |
| 110 | delete[] part.channels; |
| 111 | |
| 112 | part.channels = new Channel *[part.num_subdomains]; |
| 113 | |
| 114 | // create some subdomains |
| 115 | for (int i = 1; i <= part.num_subdomains; i++) { |
| 116 | if (i != part.main_partition) { |
| 117 | ShadowSubdomain *theSubdomain = |
| 118 | new ShadowSubdomain(i, *part.machine, *part.broker); |
| 119 | part.theDomain.addSubdomain(theSubdomain); |
| 120 | part.channels[i - 1] = theSubdomain->getChannelPtr(); |
| 121 | } |
| 122 | } |
| 123 | |
| 124 | // create a partitioner & partition the domain |
| 125 | if (part.DOMAIN_partitioner == nullptr) { |
| 126 | // part.balancer = new ShedHeaviest(); |
| 127 | // OPS_DOMAIN_partitioner = new DomainPartitioner(*OPS_GRAPH_partitioner, *part.balancer); |
| 128 | part.GRAPH_partitioner = new Metis; |
| 129 | part.DOMAIN_partitioner = new DomainPartitioner(*part.GRAPH_partitioner); |
| 130 | part.theDomain.setPartitioner(part.DOMAIN_partitioner); |
| 131 | } |
| 132 | |
| 133 | result = part.theDomain.partition(part.num_subdomains, part.using_main_domain, |
| 134 | part.main_partition, eleTag); |
| 135 | |
| 136 | if (result < 0) |
| 137 | return result; |
| 138 | |
| 139 | part.partitioned = true; |
| 140 | |
| 141 | DomainDecompositionAnalysis *theSubAnalysis; |
| 142 | SubdomainIter &theSubdomains = part.theDomain.getSubdomains(); |
| 143 | Subdomain *theSub = nullptr; |
| 144 | |
| 145 | void* the_static_analysis = nullptr; |
| 146 | |
| 147 | return result; |
| 148 | } |
| 149 | |
| 150 | |
| 151 | static int |
no test coverage detected