50 ScipParaDiffSubproblemMpi::createDatatypeCounters(
56 MPI_Datatype datatype;
58 MPI_Aint startAddress = 0;
61 #ifndef UG_DEBUG_SOLUTION 63 MPI_Aint displacements[9];
64 MPI_Datatype types[9];
67 MPI_Aint displacements[10];
68 MPI_Datatype types[10];
72 MPI_Get_address( &localInfoIncluded, &startAddress )
74 blockLengths[nBlocks] = 1;
75 displacements[nBlocks] = 0;
76 types[nBlocks] = MPI_INT;
80 MPI_Get_address( &nBoundChanges, &address )
82 blockLengths[nBlocks] = 1;
83 displacements[nBlocks] = address - startAddress;
84 types[nBlocks] = MPI_INT;
88 MPI_Get_address( &nBranchLinearConss, &address )
90 blockLengths[nBlocks] = 1;
91 displacements[nBlocks] = address - startAddress;
92 types[nBlocks] = MPI_INT;
96 MPI_Get_address( &nBranchSetppcConss, &address )
98 blockLengths[nBlocks] = 1;
99 displacements[nBlocks] = address - startAddress;
100 types[nBlocks] = MPI_INT;
104 MPI_Get_address( &nLinearConss, &address )
106 blockLengths[nBlocks] = 1;
107 displacements[nBlocks] = address - startAddress;
108 types[nBlocks] = MPI_INT;
112 MPI_Get_address( &nBendersLinearConss, &address )
114 blockLengths[nBlocks] = 1;
115 displacements[nBlocks] = address - startAddress;
116 types[nBlocks] = MPI_INT;
120 MPI_Get_address( &nBoundDisjunctions, &address )
122 blockLengths[nBlocks] = 1;
123 displacements[nBlocks] = address - startAddress;
124 types[nBlocks] = MPI_INT;
128 MPI_Get_address( &nVarBranchStats, &address )
130 blockLengths[nBlocks] = 1;
131 displacements[nBlocks] = address - startAddress;
132 types[nBlocks] = MPI_INT;
136 MPI_Get_address( &nVarValueVars, &address )
138 blockLengths[nBlocks] = 1;
139 displacements[nBlocks] = address - startAddress;
140 types[nBlocks] = MPI_INT;
143 #ifdef UG_DEBUG_SOLUTION 145 MPI_Get_address( &includeOptimalSol, &address )
147 blockLengths[nBlocks] = 1;
148 displacements[nBlocks] = address - startAddress;
149 types[nBlocks] = MPI_INT;
151 assert( nBlocks == 10 );
153 assert( nBlocks == 9 );
157 MPI_Type_create_struct(nBlocks, blockLengths, displacements, types, &datatype)
165 ScipParaDiffSubproblemMpi::createDatatypeBoundChnages(
166 bool memAllocNecessary
169 assert( nBoundChanges > 0 );
173 MPI_Datatype datatype;
175 MPI_Aint startAddress = 0;
176 MPI_Aint address = 0;
179 MPI_Aint displacements[3];
180 MPI_Datatype types[3];
183 if( memAllocNecessary )
185 indicesAmongSolvers =
new int[nBoundChanges];
186 branchBounds =
new SCIP_Real[nBoundChanges];
187 boundTypes =
new SCIP_BOUNDTYPE[nBoundChanges];
191 MPI_Get_address( indicesAmongSolvers, &startAddress )
193 displacements[nBlocks] = 0;
194 blockLengths[nBlocks] = nBoundChanges;
195 types[nBlocks] = MPI_INT;
199 MPI_Get_address( branchBounds, &address )
201 displacements[nBlocks] = address - startAddress;
202 blockLengths[nBlocks] = nBoundChanges;
203 types[nBlocks] = MPI_DOUBLE;
207 MPI_Get_address( boundTypes, &address )
209 displacements[nBlocks] = address - startAddress;
210 blockLengths[nBlocks] = nBoundChanges;
211 types[nBlocks] = MPI_INT;
215 MPI_Type_create_struct(nBlocks, blockLengths, displacements, types, &datatype)
223 ScipParaDiffSubproblemMpi::createDatatypeBranchLinearConss1(
224 bool memAllocNecessary
227 assert(nBranchLinearConss > 0);
231 MPI_Datatype datatype;
233 MPI_Aint startAddress = 0;
234 MPI_Aint address = 0;
237 MPI_Aint displacements[4];
238 MPI_Datatype types[4];
240 if( memAllocNecessary )
243 branchLinearConss->nLinearConss = nBranchLinearConss;
244 branchLinearConss->linearLhss =
new SCIP_Real[nBranchLinearConss];
245 branchLinearConss->linearRhss =
new SCIP_Real[nBranchLinearConss];
246 branchLinearConss->nLinearCoefs =
new int[nBranchLinearConss];
249 MPI_Get_address( branchLinearConss->linearLhss, &startAddress )
251 displacements[nBlocks] = 0;
252 blockLengths[nBlocks] = branchLinearConss->nLinearConss;
253 types[nBlocks] = MPI_DOUBLE;
257 MPI_Get_address( branchLinearConss->linearRhss, &address )
259 displacements[nBlocks] = address - startAddress;;
260 blockLengths[nBlocks] = branchLinearConss->nLinearConss;
261 types[nBlocks] = MPI_DOUBLE;
265 MPI_Get_address( branchLinearConss->nLinearCoefs, &address )
267 displacements[nBlocks] = address - startAddress;;
268 blockLengths[nBlocks] = branchLinearConss->nLinearConss;
269 types[nBlocks] = MPI_INT;
273 MPI_Get_address( &(branchLinearConss->lConsNames), &address )
275 displacements[nBlocks] = address - startAddress;;
276 blockLengths[nBlocks] = 1;
277 types[nBlocks] = MPI_INT;
281 MPI_Type_create_struct(nBlocks, blockLengths, displacements, types, &datatype)
289 ScipParaDiffSubproblemMpi::createDatatypeBranchLinearConss2(
290 bool memAllocNecessary
293 assert(nBranchLinearConss > 0 && branchLinearConss);
297 MPI_Datatype datatype;
299 MPI_Aint startAddress = 0;
300 MPI_Aint address = 0;
302 int nTotalBlocks = (nBranchLinearConss*2) + 1;
303 int *blockLengths =
new int[nTotalBlocks];
304 MPI_Aint *displacements =
new MPI_Aint[nTotalBlocks];
305 MPI_Datatype *types =
new MPI_Datatype[nTotalBlocks];
307 if( memAllocNecessary )
309 branchLinearConss->linearCoefs =
new SCIP_Real*[nBranchLinearConss];
310 branchLinearConss->idxLinearCoefsVars =
new int*[nBranchLinearConss];
311 branchLinearConss->consNames =
new char[branchLinearConss->lConsNames];
314 for(
int i = 0; i < nBranchLinearConss; i++ )
316 if( memAllocNecessary )
318 branchLinearConss->linearCoefs[i] =
new SCIP_Real[branchLinearConss->nLinearCoefs[i]];
319 branchLinearConss->idxLinearCoefsVars[i] =
new int[branchLinearConss->nLinearCoefs[i]];
324 MPI_Get_address( branchLinearConss->linearCoefs[i], &startAddress )
326 displacements[nBlocks] = 0;
327 blockLengths[nBlocks] = branchLinearConss->nLinearCoefs[i];
328 types[nBlocks] = MPI_DOUBLE;
334 MPI_Get_address( branchLinearConss->linearCoefs[i], &address )
336 displacements[nBlocks] = address - startAddress;
337 blockLengths[nBlocks] = branchLinearConss->nLinearCoefs[i];
338 types[nBlocks] = MPI_DOUBLE;
343 MPI_Get_address( branchLinearConss->idxLinearCoefsVars[i], &address )
345 displacements[nBlocks] = address - startAddress;
346 blockLengths[nBlocks] = branchLinearConss->nLinearCoefs[i];
347 types[nBlocks] = MPI_INT;
351 MPI_Get_address( branchLinearConss->consNames, &address )
353 displacements[nBlocks] = address - startAddress;
354 blockLengths[nBlocks] = branchLinearConss->lConsNames;
355 types[nBlocks] = MPI_CHAR;
359 MPI_Type_create_struct(nBlocks, blockLengths, displacements, types, &datatype)
362 delete [] blockLengths;
363 delete [] displacements;
371 ScipParaDiffSubproblemMpi::createDatatypeBranchSetppcConss1(
372 bool memAllocNecessary
375 assert(nBranchSetppcConss > 0);
379 MPI_Datatype datatype;
381 MPI_Aint startAddress = 0;
382 MPI_Aint address = 0;
385 MPI_Aint displacements[3];
386 MPI_Datatype types[3];
388 if( memAllocNecessary )
391 branchSetppcConss->nSetppcConss = nBranchSetppcConss;
392 branchSetppcConss->nSetppcVars =
new int[nBranchSetppcConss];
393 branchSetppcConss->setppcTypes =
new int[nBranchSetppcConss];
396 MPI_Get_address( branchSetppcConss->nSetppcVars, &startAddress )
398 displacements[nBlocks] = 0;
399 blockLengths[nBlocks] = branchSetppcConss->nSetppcConss;
400 types[nBlocks] = MPI_INT;
404 MPI_Get_address( branchSetppcConss->setppcTypes, &address )
406 displacements[nBlocks] = address - startAddress;
407 blockLengths[nBlocks] = branchSetppcConss->nSetppcConss;
408 types[nBlocks] = MPI_INT;
412 MPI_Get_address( &(branchSetppcConss->lConsNames), &address )
414 displacements[nBlocks] = address - startAddress;
415 blockLengths[nBlocks] = 1;
416 types[nBlocks] = MPI_INT;
420 MPI_Type_create_struct(nBlocks, blockLengths, displacements, types, &datatype)
428 ScipParaDiffSubproblemMpi::createDatatypeBranchSetppcConss2(
429 bool memAllocNecessary
432 assert(nBranchSetppcConss > 0 && branchSetppcConss);
436 MPI_Datatype datatype;
438 MPI_Aint startAddress = 0;
439 MPI_Aint address = 0;
441 int nTotalBlocks = nBranchSetppcConss + 1;
442 int *blockLengths =
new int[nTotalBlocks];
443 MPI_Aint *displacements =
new MPI_Aint[nTotalBlocks];
444 MPI_Datatype *types =
new MPI_Datatype[nTotalBlocks];
446 if( memAllocNecessary )
448 assert(branchSetppcConss);
449 branchSetppcConss->idxSetppcVars =
new int*[nBranchSetppcConss];
450 branchSetppcConss->consNames =
new char[branchSetppcConss->lConsNames];
453 for(
int i = 0; i < nBranchSetppcConss; i++ )
455 if( memAllocNecessary )
457 branchSetppcConss->idxSetppcVars[i] =
new int[branchSetppcConss->nSetppcVars[i]];
462 MPI_Get_address( branchSetppcConss->idxSetppcVars[i], &startAddress )
464 displacements[nBlocks] = 0;
465 blockLengths[nBlocks] = branchSetppcConss->nSetppcVars[i];
466 types[nBlocks] = MPI_INT;
472 MPI_Get_address( branchSetppcConss->idxSetppcVars[i], &address )
474 displacements[nBlocks] = address - startAddress;
475 blockLengths[nBlocks] = branchSetppcConss->nSetppcVars[i];
476 types[nBlocks] = MPI_INT;
481 MPI_Get_address( branchSetppcConss->consNames, &address )
483 displacements[nBlocks] = address - startAddress;
484 blockLengths[nBlocks] = branchSetppcConss->lConsNames;
485 types[nBlocks] = MPI_CHAR;
489 MPI_Type_create_struct(nBlocks, blockLengths, displacements, types, &datatype)
492 delete [] blockLengths;
493 delete [] displacements;
501 ScipParaDiffSubproblemMpi::createDatatypeLinearConss1(
502 bool memAllocNecessary
505 assert(nLinearConss > 0);
509 MPI_Datatype datatype;
511 MPI_Aint startAddress = 0;
512 MPI_Aint address = 0;
515 MPI_Aint displacements[3];
516 MPI_Datatype types[3];
518 if( memAllocNecessary )
521 linearConss->nLinearConss = nLinearConss;
522 linearConss->linearLhss =
new SCIP_Real[nLinearConss];
523 linearConss->linearRhss =
new SCIP_Real[nLinearConss];
524 linearConss->nLinearCoefs =
new int[nLinearConss];
527 MPI_Get_address( linearConss->linearLhss, &startAddress )
529 displacements[nBlocks] = 0;
530 blockLengths[nBlocks] = linearConss->nLinearConss;
531 types[nBlocks] = MPI_DOUBLE;
535 MPI_Get_address( linearConss->linearRhss, &address )
537 displacements[nBlocks] = address - startAddress;
538 blockLengths[nBlocks] = linearConss->nLinearConss;
539 types[nBlocks] = MPI_DOUBLE;
543 MPI_Get_address( linearConss->nLinearCoefs, &address )
545 displacements[nBlocks] = address - startAddress;
546 blockLengths[nBlocks] = linearConss->nLinearConss;
547 types[nBlocks] = MPI_INT;
551 MPI_Type_create_struct(nBlocks, blockLengths, displacements, types, &datatype)
559 ScipParaDiffSubproblemMpi::createDatatypeLinearConss2(
560 bool memAllocNecessary
563 assert(nLinearConss > 0 && linearConss);
567 MPI_Datatype datatype;
569 MPI_Aint startAddress = 0;
570 MPI_Aint address = 0;
572 int nTotalBlocks = nLinearConss*2;
573 int *blockLengths =
new int[nTotalBlocks];
574 MPI_Aint *displacements =
new MPI_Aint[nTotalBlocks];
575 MPI_Datatype *types =
new MPI_Datatype[nTotalBlocks];
577 if( memAllocNecessary )
579 linearConss->linearCoefs =
new SCIP_Real*[nLinearConss];
580 linearConss->idxLinearCoefsVars =
new int*[nLinearConss];
583 for(
int i = 0; i < nLinearConss; i++ )
585 if( memAllocNecessary )
587 linearConss->linearCoefs[i] =
new SCIP_Real[linearConss->nLinearCoefs[i]];
588 linearConss->idxLinearCoefsVars[i] =
new int[linearConss->nLinearCoefs[i]];
593 MPI_Get_address( linearConss->linearCoefs[i], &startAddress )
595 displacements[nBlocks] = 0;
596 blockLengths[nBlocks] = linearConss->nLinearCoefs[i];
597 types[nBlocks] = MPI_DOUBLE;
603 MPI_Get_address( linearConss->linearCoefs[i], &address )
605 displacements[nBlocks] = address - startAddress;
606 blockLengths[nBlocks] = linearConss->nLinearCoefs[i];
607 types[nBlocks] = MPI_DOUBLE;
613 MPI_Get_address( linearConss->idxLinearCoefsVars[i], &address )
615 displacements[nBlocks] = address - startAddress;
616 blockLengths[nBlocks] = linearConss->nLinearCoefs[i];
617 types[nBlocks] = MPI_INT;
622 MPI_Type_create_struct(nBlocks, blockLengths, displacements, types, &datatype)
625 delete [] blockLengths;
626 delete [] displacements;
634 ScipParaDiffSubproblemMpi::createDatatypeBendersLinearConss1(
635 bool memAllocNecessary
638 assert(nBendersLinearConss > 0);
642 MPI_Datatype datatype;
644 MPI_Aint startAddress = 0;
645 MPI_Aint address = 0;
648 MPI_Aint displacements[3];
649 MPI_Datatype types[3];
651 if( memAllocNecessary )
654 bendersLinearConss->nLinearConss = nBendersLinearConss;
655 bendersLinearConss->linearLhss =
new SCIP_Real[nBendersLinearConss];
656 bendersLinearConss->linearRhss =
new SCIP_Real[nBendersLinearConss];
657 bendersLinearConss->nLinearCoefs =
new int[nBendersLinearConss];
660 MPI_Get_address( bendersLinearConss->linearLhss, &startAddress )
662 displacements[nBlocks] = 0;
663 blockLengths[nBlocks] = bendersLinearConss->nLinearConss;
664 types[nBlocks] = MPI_DOUBLE;
668 MPI_Get_address( bendersLinearConss->linearRhss, &address )
670 displacements[nBlocks] = address - startAddress;
671 blockLengths[nBlocks] = bendersLinearConss->nLinearConss;
672 types[nBlocks] = MPI_DOUBLE;
676 MPI_Get_address( bendersLinearConss->nLinearCoefs, &address )
678 displacements[nBlocks] = address - startAddress;
679 blockLengths[nBlocks] = bendersLinearConss->nLinearConss;
680 types[nBlocks] = MPI_INT;
684 MPI_Type_create_struct(nBlocks, blockLengths, displacements, types, &datatype)
692 ScipParaDiffSubproblemMpi::createDatatypeBendersLinearConss2(
693 bool memAllocNecessary
696 assert(nBendersLinearConss > 0 && bendersLinearConss);
700 MPI_Datatype datatype;
702 MPI_Aint startAddress = 0;
703 MPI_Aint address = 0;
705 int nTotalBlocks = nBendersLinearConss*2;
706 int *blockLengths =
new int[nTotalBlocks];
707 MPI_Aint *displacements =
new MPI_Aint[nTotalBlocks];
708 MPI_Datatype *types =
new MPI_Datatype[nTotalBlocks];
710 if( memAllocNecessary )
712 bendersLinearConss->linearCoefs =
new SCIP_Real*[nBendersLinearConss];
713 bendersLinearConss->idxLinearCoefsVars =
new int*[nBendersLinearConss];
716 for(
int i = 0; i < nBendersLinearConss; i++ )
718 if( memAllocNecessary )
720 bendersLinearConss->linearCoefs[i] =
new SCIP_Real[bendersLinearConss->nLinearCoefs[i]];
721 bendersLinearConss->idxLinearCoefsVars[i] =
new int[bendersLinearConss->nLinearCoefs[i]];
726 MPI_Get_address( bendersLinearConss->linearCoefs[i], &startAddress )
728 displacements[nBlocks] = 0;
729 blockLengths[nBlocks] = bendersLinearConss->nLinearCoefs[i];
730 types[nBlocks] = MPI_DOUBLE;
736 MPI_Get_address( bendersLinearConss->linearCoefs[i], &address )
738 displacements[nBlocks] = address - startAddress;
739 blockLengths[nBlocks] = bendersLinearConss->nLinearCoefs[i];
740 types[nBlocks] = MPI_DOUBLE;
746 MPI_Get_address( bendersLinearConss->idxLinearCoefsVars[i], &address )
748 displacements[nBlocks] = address - startAddress;
749 blockLengths[nBlocks] = bendersLinearConss->nLinearCoefs[i];
750 types[nBlocks] = MPI_INT;
755 MPI_Type_create_struct(nBlocks, blockLengths, displacements, types, &datatype)
758 delete [] blockLengths;
759 delete [] displacements;
767 ScipParaDiffSubproblemMpi::createDatatypeBoundDisjunctions1(
768 bool memAllocNecessary
771 assert( nBoundDisjunctions > 0 );
775 MPI_Datatype datatype;
777 MPI_Aint startAddress = 0;
778 MPI_Aint address = 0;
780 int blockLengths[12];
781 MPI_Aint displacements[12];
782 MPI_Datatype types[12];
784 if( memAllocNecessary )
787 boundDisjunctions->nBoundDisjunctions = nBoundDisjunctions;
788 boundDisjunctions->nVarsBoundDisjunction =
new int[nBoundDisjunctions];
789 boundDisjunctions->flagBoundDisjunctionInitial =
new SCIP_Bool[nBoundDisjunctions];
790 boundDisjunctions->flagBoundDisjunctionSeparate =
new SCIP_Bool[nBoundDisjunctions];
791 boundDisjunctions->flagBoundDisjunctionEnforce =
new SCIP_Bool[nBoundDisjunctions];
792 boundDisjunctions->flagBoundDisjunctionCheck =
new SCIP_Bool[nBoundDisjunctions];
793 boundDisjunctions->flagBoundDisjunctionPropagate =
new SCIP_Bool[nBoundDisjunctions];
794 boundDisjunctions->flagBoundDisjunctionLocal =
new SCIP_Bool[nBoundDisjunctions];
795 boundDisjunctions->flagBoundDisjunctionModifiable =
new SCIP_Bool[nBoundDisjunctions];
796 boundDisjunctions->flagBoundDisjunctionDynamic =
new SCIP_Bool[nBoundDisjunctions];
797 boundDisjunctions->flagBoundDisjunctionRemovable =
new SCIP_Bool[nBoundDisjunctions];
798 boundDisjunctions->flagBoundDisjunctionStickingatnode =
new SCIP_Bool[nBoundDisjunctions];
801 MPI_Get_address( &(boundDisjunctions->nTotalVarsBoundDisjunctions), &startAddress )
803 displacements[nBlocks] = 0;
804 blockLengths[nBlocks] = 1;
805 types[nBlocks] = MPI_INT;
809 MPI_Get_address( boundDisjunctions->nVarsBoundDisjunction, &address )
811 displacements[nBlocks] = address - startAddress;
812 blockLengths[nBlocks] = boundDisjunctions->nBoundDisjunctions;
813 types[nBlocks] = MPI_UNSIGNED;
817 MPI_Get_address( boundDisjunctions->flagBoundDisjunctionInitial, &address )
819 displacements[nBlocks] = address - startAddress;
820 blockLengths[nBlocks] = boundDisjunctions->nBoundDisjunctions;
821 types[nBlocks] = MPI_UNSIGNED;
825 MPI_Get_address( boundDisjunctions->flagBoundDisjunctionSeparate, &address )
827 displacements[nBlocks] = address - startAddress;
828 blockLengths[nBlocks] = boundDisjunctions->nBoundDisjunctions;
829 types[nBlocks] = MPI_UNSIGNED;
833 MPI_Get_address( boundDisjunctions->flagBoundDisjunctionEnforce, &address )
835 displacements[nBlocks] = address - startAddress;
836 blockLengths[nBlocks] = boundDisjunctions->nBoundDisjunctions;
837 types[nBlocks] = MPI_UNSIGNED;
841 MPI_Get_address( boundDisjunctions->flagBoundDisjunctionCheck, &address )
843 displacements[nBlocks] = address - startAddress;
844 blockLengths[nBlocks] = boundDisjunctions->nBoundDisjunctions;
845 types[nBlocks] = MPI_UNSIGNED;
849 MPI_Get_address( boundDisjunctions->flagBoundDisjunctionPropagate, &address )
851 displacements[nBlocks] = address - startAddress;
852 blockLengths[nBlocks] = boundDisjunctions->nBoundDisjunctions;
853 types[nBlocks] = MPI_UNSIGNED;
857 MPI_Get_address( boundDisjunctions->flagBoundDisjunctionLocal, &address )
859 displacements[nBlocks] = address - startAddress;
860 blockLengths[nBlocks] = boundDisjunctions->nBoundDisjunctions;
861 types[nBlocks] = MPI_UNSIGNED;
865 MPI_Get_address( boundDisjunctions->flagBoundDisjunctionModifiable, &address )
867 displacements[nBlocks] = address - startAddress;
868 blockLengths[nBlocks] = boundDisjunctions->nBoundDisjunctions;
869 types[nBlocks] = MPI_UNSIGNED;
873 MPI_Get_address( boundDisjunctions->flagBoundDisjunctionDynamic, &address )
875 displacements[nBlocks] = address - startAddress;
876 blockLengths[nBlocks] = boundDisjunctions->nBoundDisjunctions;
877 types[nBlocks] = MPI_UNSIGNED;
881 MPI_Get_address( boundDisjunctions->flagBoundDisjunctionRemovable, &address )
883 displacements[nBlocks] = address - startAddress;
884 blockLengths[nBlocks] = boundDisjunctions->nBoundDisjunctions;
885 types[nBlocks] = MPI_UNSIGNED;
889 MPI_Get_address( boundDisjunctions->flagBoundDisjunctionStickingatnode, &address )
891 displacements[nBlocks] = address - startAddress;
892 blockLengths[nBlocks] = boundDisjunctions->nBoundDisjunctions;
893 types[nBlocks] = MPI_UNSIGNED;
896 assert(nBlocks == 12);
899 MPI_Type_create_struct(nBlocks, blockLengths, displacements, types, &datatype)
907 ScipParaDiffSubproblemMpi::createDatatypeBoundDisjunctions2(
908 bool memAllocNecessary
911 assert( nBoundDisjunctions > 0 && boundDisjunctions );
915 MPI_Datatype datatype;
917 MPI_Aint startAddress = 0;
918 MPI_Aint address = 0;
920 int nTotalBlocks = nBoundDisjunctions*3;
921 int *blockLengths =
new int[nTotalBlocks];
922 MPI_Aint *displacements =
new MPI_Aint[nTotalBlocks];
923 MPI_Datatype *types =
new MPI_Datatype[nTotalBlocks];
925 if( memAllocNecessary )
927 boundDisjunctions->idxBoundDisjunctionVars =
new int*[nBoundDisjunctions];
928 boundDisjunctions->boundTypesBoundDisjunction =
new SCIP_BOUNDTYPE*[nBoundDisjunctions];
929 boundDisjunctions->boundsBoundDisjunction =
new SCIP_Real*[nBoundDisjunctions];
932 for(
int i = 0; i < nBoundDisjunctions; i++ )
934 if( memAllocNecessary )
936 boundDisjunctions->idxBoundDisjunctionVars[i] =
new int[boundDisjunctions->nVarsBoundDisjunction[i]];
937 boundDisjunctions->boundTypesBoundDisjunction[i] =
new SCIP_BOUNDTYPE[boundDisjunctions->nVarsBoundDisjunction[i]];
938 boundDisjunctions->boundsBoundDisjunction[i] =
new SCIP_Real[boundDisjunctions->nVarsBoundDisjunction[i]];
943 MPI_Get_address( boundDisjunctions->idxBoundDisjunctionVars[i], &startAddress )
945 displacements[nBlocks] = 0;
946 blockLengths[nBlocks] = boundDisjunctions->nVarsBoundDisjunction[i];
947 assert( blockLengths[nBlocks] > 0 );
948 types[nBlocks] = MPI_INT;
954 MPI_Get_address( boundDisjunctions->idxBoundDisjunctionVars[i], &address )
956 displacements[nBlocks] = address - startAddress;
957 blockLengths[nBlocks] = boundDisjunctions->nVarsBoundDisjunction[i];
958 assert( blockLengths[nBlocks] > 0 );
959 types[nBlocks] = MPI_INT;
965 MPI_Get_address( boundDisjunctions->boundTypesBoundDisjunction[i], &address )
967 displacements[nBlocks] = address - startAddress;
968 blockLengths[nBlocks] = boundDisjunctions->nVarsBoundDisjunction[i];
969 assert( blockLengths[nBlocks] > 0 );
970 assert(
sizeof(SCIP_BOUNDTYPE) ==
sizeof(
unsigned int));
971 types[nBlocks] = MPI_UNSIGNED;
975 MPI_Get_address( boundDisjunctions->boundsBoundDisjunction[i], &address )
977 displacements[nBlocks] = address - startAddress;
978 blockLengths[nBlocks] = boundDisjunctions->nVarsBoundDisjunction[i];
979 assert( blockLengths[nBlocks] > 0 );
980 types[nBlocks] = MPI_DOUBLE;
985 MPI_Type_create_struct(nBlocks, blockLengths, displacements, types, &datatype)
988 delete [] blockLengths;
989 delete [] displacements;
997 ScipParaDiffSubproblemMpi::createDatatypeVarBranchStats(
998 bool memAllocNecessary
1001 assert( nVarBranchStats > 0 );
1005 MPI_Datatype datatype;
1007 MPI_Aint startAddress = 0;
1008 MPI_Aint address = 0;
1010 int blockLengths[12];
1011 MPI_Aint displacements[12];
1012 MPI_Datatype types[12];
1014 if( memAllocNecessary )
1017 varBranchStats->nVarBranchStats = nVarBranchStats;
1018 varBranchStats->idxBranchStatsVars =
new int[nVarBranchStats];
1019 varBranchStats->downpscost =
new SCIP_Real[nVarBranchStats];
1020 varBranchStats->uppscost =
new SCIP_Real[nVarBranchStats];
1021 varBranchStats->downvsids =
new SCIP_Real[nVarBranchStats];
1022 varBranchStats->upvsids =
new SCIP_Real[nVarBranchStats];
1023 varBranchStats->downconflen =
new SCIP_Real[nVarBranchStats];
1024 varBranchStats->upconflen =
new SCIP_Real[nVarBranchStats];
1025 varBranchStats->downinfer =
new SCIP_Real[nVarBranchStats];
1026 varBranchStats->upinfer =
new SCIP_Real[nVarBranchStats];
1027 varBranchStats->downcutoff =
new SCIP_Real[nVarBranchStats];
1028 varBranchStats->upcutoff =
new SCIP_Real[nVarBranchStats];
1032 MPI_Get_address( &(varBranchStats->offset), &startAddress )
1034 displacements[nBlocks] = 0;
1035 blockLengths[nBlocks] = 1;
1036 types[nBlocks] = MPI_INT;
1040 MPI_Get_address( varBranchStats->idxBranchStatsVars, &address )
1042 displacements[nBlocks] = address - startAddress;
1043 blockLengths[nBlocks] = varBranchStats->nVarBranchStats;
1044 types[nBlocks] = MPI_INT;
1048 MPI_Get_address( varBranchStats->downpscost, &address )
1050 displacements[nBlocks] = address - startAddress;
1051 blockLengths[nBlocks] = varBranchStats->nVarBranchStats;
1052 types[nBlocks] = MPI_DOUBLE;
1056 MPI_Get_address( varBranchStats->uppscost, &address )
1058 displacements[nBlocks] = address - startAddress;
1059 blockLengths[nBlocks] = varBranchStats->nVarBranchStats;
1060 types[nBlocks] = MPI_DOUBLE;
1064 MPI_Get_address( varBranchStats->downvsids, &address )
1066 displacements[nBlocks] = address - startAddress;
1067 blockLengths[nBlocks] = varBranchStats->nVarBranchStats;
1068 types[nBlocks] = MPI_DOUBLE;
1072 MPI_Get_address( varBranchStats->upvsids, &address )
1074 displacements[nBlocks] = address - startAddress;
1075 blockLengths[nBlocks] = varBranchStats->nVarBranchStats;
1076 types[nBlocks] = MPI_DOUBLE;
1080 MPI_Get_address( varBranchStats->downconflen, &address )
1082 displacements[nBlocks] = address - startAddress;
1083 blockLengths[nBlocks] = varBranchStats->nVarBranchStats;
1084 types[nBlocks] = MPI_DOUBLE;
1088 MPI_Get_address( varBranchStats->upconflen, &address )
1090 displacements[nBlocks] = address - startAddress;
1091 blockLengths[nBlocks] = varBranchStats->nVarBranchStats;
1092 types[nBlocks] = MPI_DOUBLE;
1096 MPI_Get_address( varBranchStats->downinfer, &address )
1098 displacements[nBlocks] = address - startAddress;
1099 blockLengths[nBlocks] = varBranchStats->nVarBranchStats;
1100 types[nBlocks] = MPI_DOUBLE;
1104 MPI_Get_address( varBranchStats->upinfer, &address )
1106 displacements[nBlocks] = address - startAddress;
1107 blockLengths[nBlocks] = varBranchStats->nVarBranchStats;
1108 types[nBlocks] = MPI_DOUBLE;
1112 MPI_Get_address( varBranchStats->downcutoff, &address )
1114 displacements[nBlocks] = address - startAddress;
1115 blockLengths[nBlocks] = varBranchStats->nVarBranchStats;
1116 types[nBlocks] = MPI_DOUBLE;
1120 MPI_Get_address( varBranchStats->upcutoff, &address )
1122 displacements[nBlocks] = address - startAddress;
1123 blockLengths[nBlocks] = varBranchStats->nVarBranchStats;
1124 types[nBlocks] = MPI_DOUBLE;
1127 assert( nBlocks == 12 );
1130 MPI_Type_create_struct(nBlocks, blockLengths, displacements, types, &datatype)
1138 ScipParaDiffSubproblemMpi::createDatatypeVarValueVars1(
1139 bool memAllocNecessary
1142 assert( nVarValueVars > 0 );
1146 MPI_Datatype datatype;
1148 MPI_Aint startAddress = 0;
1149 MPI_Aint address = 0;
1151 int blockLengths[3];
1152 MPI_Aint displacements[3];
1153 MPI_Datatype types[3];
1155 if( memAllocNecessary )
1158 varValues->nVarValueVars = nVarValueVars;
1159 varValues->idxVarValueVars =
new int[nVarValueVars];
1160 varValues->nVarValueValues =
new int[nVarValueVars];
1164 MPI_Get_address( &(varValues->nVarValues), &startAddress )
1166 displacements[nBlocks] = 0;
1167 blockLengths[nBlocks] = 1;
1168 types[nBlocks] = MPI_INT;
1172 MPI_Get_address( varValues->idxVarValueVars, &address )
1174 displacements[nBlocks] = address - startAddress;;
1175 blockLengths[nBlocks] = varValues->nVarValueVars;
1176 types[nBlocks] = MPI_INT;
1180 MPI_Get_address( varValues->nVarValueValues, &address )
1182 displacements[nBlocks] = address - startAddress;;
1183 blockLengths[nBlocks] = varValues->nVarValueVars;
1184 types[nBlocks] = MPI_INT;
1187 assert( nBlocks == 3);
1190 MPI_Type_create_struct(nBlocks, blockLengths, displacements, types, &datatype)
1198 ScipParaDiffSubproblemMpi::createDatatypeVarValueVars2(
1199 bool memAllocNecessary
1202 assert( nVarValueVars > 0 && varValues);
1206 MPI_Datatype datatype;
1208 MPI_Aint startAddress = 0;
1209 MPI_Aint address = 0;
1211 int nVarValueBlock = 0;
1212 if( nVarValueVars > 0 )
1214 for(
int i = 0; i < varValues->nVarValueVars; i++ )
1216 if( varValues->nVarValueValues[i] > 0 )
1218 nVarValueBlock += 9;
1223 int *blockLengths =
new int[nVarValueBlock + 1];
1224 MPI_Aint *displacements =
new MPI_Aint[nVarValueBlock + 1];
1225 MPI_Datatype *types =
new MPI_Datatype[nVarValueBlock + 1];
1229 MPI_Get_address( &nVarValueVars, &startAddress )
1231 blockLengths[nBlocks] = 1;
1232 displacements[nBlocks] = 0;
1233 types[nBlocks] = MPI_INT;
1236 if( memAllocNecessary )
1239 varValues->varValue =
new SCIP_Real*[nVarValueVars];
1240 varValues->varValueDownvsids =
new SCIP_Real*[nVarValueVars];
1241 varValues->varVlaueUpvsids =
new SCIP_Real*[nVarValueVars];
1242 varValues->varValueDownconflen =
new SCIP_Real*[nVarValueVars];
1243 varValues->varValueUpconflen =
new SCIP_Real*[nVarValueVars];
1244 varValues->varValueDowninfer =
new SCIP_Real*[nVarValueVars];
1245 varValues->varValueUpinfer =
new SCIP_Real*[nVarValueVars];
1246 varValues->varValueDowncutoff =
new SCIP_Real*[nVarValueVars];
1247 varValues->varValueUpcutoff =
new SCIP_Real*[nVarValueVars];
1250 for(
int i = 0; i < nVarValueVars; i++ )
1252 if(varValues-> nVarValueValues[i] > 0 )
1254 if( memAllocNecessary )
1256 varValues->varValue[i] =
new SCIP_Real[varValues->nVarValueValues[i]];
1257 varValues->varValueDownvsids[i] =
new SCIP_Real[varValues->nVarValueValues[i]];
1258 varValues->varVlaueUpvsids[i] =
new SCIP_Real[varValues->nVarValueValues[i]];
1259 varValues->varValueDownconflen[i] =
new SCIP_Real[varValues->nVarValueValues[i]];
1260 varValues->varValueUpconflen[i] =
new SCIP_Real[varValues->nVarValueValues[i]];
1261 varValues->varValueDowninfer[i] =
new SCIP_Real[varValues->nVarValueValues[i]];
1262 varValues->varValueUpinfer[i] =
new SCIP_Real[varValues->nVarValueValues[i]];
1263 varValues->varValueDowncutoff[i] =
new SCIP_Real[varValues->nVarValueValues[i]];
1264 varValues->varValueUpcutoff[i] =
new SCIP_Real[varValues->nVarValueValues[i]];
1268 MPI_Get_address( varValues->varValue[i], &address )
1270 displacements[nBlocks] = address - startAddress;
1271 blockLengths[nBlocks] = varValues->nVarValueValues[i];
1272 types[nBlocks] = MPI_DOUBLE;
1276 MPI_Get_address( varValues->varValueDownvsids[i], &address )
1278 displacements[nBlocks] = address - startAddress;
1279 blockLengths[nBlocks] = varValues->nVarValueValues[i];
1280 types[nBlocks] = MPI_DOUBLE;
1284 MPI_Get_address( varValues->varVlaueUpvsids[i], &address )
1286 displacements[nBlocks] = address - startAddress;
1287 blockLengths[nBlocks] = varValues->nVarValueValues[i];
1288 types[nBlocks] = MPI_DOUBLE;
1292 MPI_Get_address( varValues->varValueDownconflen[i], &address )
1294 displacements[nBlocks] = address - startAddress;
1295 blockLengths[nBlocks] = varValues->nVarValueValues[i];
1296 types[nBlocks] = MPI_DOUBLE;
1300 MPI_Get_address( varValues->varValueUpconflen[i], &address )
1302 displacements[nBlocks] = address - startAddress;
1303 blockLengths[nBlocks] = varValues->nVarValueValues[i];
1304 types[nBlocks] = MPI_DOUBLE;
1308 MPI_Get_address( varValues->varValueDowninfer[i], &address )
1310 displacements[nBlocks] = address - startAddress;
1311 blockLengths[nBlocks] = varValues->nVarValueValues[i];
1312 types[nBlocks] = MPI_DOUBLE;
1316 MPI_Get_address( varValues->varValueUpinfer[i], &address )
1318 displacements[nBlocks] = address - startAddress;
1319 blockLengths[nBlocks] = varValues->nVarValueValues[i];
1320 types[nBlocks] = MPI_DOUBLE;
1324 MPI_Get_address( varValues->varValueDowncutoff[i], &address )
1326 displacements[nBlocks] = address - startAddress;
1327 blockLengths[nBlocks] = varValues->nVarValueValues[i];
1328 types[nBlocks] = MPI_DOUBLE;
1332 MPI_Get_address( varValues->varValueUpcutoff[i], &address )
1334 displacements[nBlocks] = address - startAddress;
1335 blockLengths[nBlocks] = varValues->nVarValueValues[i];
1336 types[nBlocks] = MPI_DOUBLE;
1343 MPI_Type_create_struct(nBlocks, blockLengths, displacements, types, &datatype)
1346 delete [] blockLengths;
1347 delete [] displacements;
1358 if( branchLinearConss )
1360 nBranchLinearConss = branchLinearConss->nLinearConss;
1362 if( branchSetppcConss )
1364 nBranchSetppcConss = branchSetppcConss->nSetppcConss;
1368 nLinearConss = linearConss->nLinearConss;
1370 if( bendersLinearConss )
1372 nBendersLinearConss = bendersLinearConss->nLinearConss;
1374 if( boundDisjunctions )
1376 nBoundDisjunctions = boundDisjunctions->nBoundDisjunctions;
1378 if( varBranchStats )
1380 nVarBranchStats = varBranchStats->nVarBranchStats;
1384 nVarValueVars = varValues->nVarValueVars;
1387 MPI_Datatype datatypeCounters;
1388 datatypeCounters = createDatatypeCounters();
1390 MPI_Type_commit( &datatypeCounters )
1393 commMpi->ubcast(&localInfoIncluded, 1, datatypeCounters, root)
1396 MPI_Type_free( &datatypeCounters )
1399 if( nBoundChanges > 0 )
1401 MPI_Datatype datatypeBoundChanges;
1404 datatypeBoundChanges = createDatatypeBoundChnages(
false);
1408 datatypeBoundChanges = createDatatypeBoundChnages(
true);
1411 MPI_Type_commit( &datatypeBoundChanges )
1414 commMpi->ubcast(indicesAmongSolvers, 1, datatypeBoundChanges, root)
1418 MPI_Type_free( &datatypeBoundChanges )
1422 if( nBranchLinearConss > 0 )
1424 MPI_Datatype datatypeBranchLinearConss1;
1427 datatypeBranchLinearConss1 = createDatatypeBranchLinearConss1(
false);
1431 datatypeBranchLinearConss1 = createDatatypeBranchLinearConss1(
true);
1434 MPI_Type_commit( &datatypeBranchLinearConss1 )
1437 commMpi->ubcast(branchLinearConss->linearLhss, 1, datatypeBranchLinearConss1, root)
1441 MPI_Type_free( &datatypeBranchLinearConss1 )
1444 MPI_Datatype datatypeBranchLinearConss2;
1447 datatypeBranchLinearConss2 = createDatatypeBranchLinearConss2(
false);
1451 datatypeBranchLinearConss2 = createDatatypeBranchLinearConss2(
true);
1454 MPI_Type_commit( &datatypeBranchLinearConss2 )
1457 commMpi->ubcast(branchLinearConss->linearCoefs[0], 1, datatypeBranchLinearConss2, root)
1461 MPI_Type_free( &datatypeBranchLinearConss2 )
1465 if( nBranchSetppcConss > 0 )
1467 MPI_Datatype datatypeBranchSetppcConss1;
1470 datatypeBranchSetppcConss1 = createDatatypeBranchSetppcConss1(
false);
1474 datatypeBranchSetppcConss1 = createDatatypeBranchSetppcConss1(
true);
1477 MPI_Type_commit( &datatypeBranchSetppcConss1 )
1480 commMpi->ubcast(branchSetppcConss->nSetppcVars, 1, datatypeBranchSetppcConss1, root)
1484 MPI_Type_free( &datatypeBranchSetppcConss1 )
1487 MPI_Datatype datatypeBranchSetppcConss2;
1490 datatypeBranchSetppcConss2 = createDatatypeBranchSetppcConss2(
false);
1494 datatypeBranchSetppcConss2 = createDatatypeBranchSetppcConss2(
true);
1497 MPI_Type_commit( &datatypeBranchSetppcConss2 )
1500 commMpi->ubcast(branchSetppcConss->idxSetppcVars[0], 1, datatypeBranchSetppcConss2, root)
1504 MPI_Type_free( &datatypeBranchSetppcConss2 )
1508 if( nLinearConss > 0 )
1510 MPI_Datatype datatypeLinearConss1;
1513 datatypeLinearConss1 = createDatatypeLinearConss1(
false);
1517 datatypeLinearConss1 = createDatatypeLinearConss1(
true);
1520 MPI_Type_commit( &datatypeLinearConss1 )
1523 commMpi->ubcast(linearConss->linearLhss, 1, datatypeLinearConss1, root)
1527 MPI_Type_free( &datatypeLinearConss1 )
1530 MPI_Datatype datatypeLinearConss2;
1533 datatypeLinearConss2 = createDatatypeLinearConss2(
false);
1537 datatypeLinearConss2 = createDatatypeLinearConss2(
true);
1540 MPI_Type_commit( &datatypeLinearConss2 )
1543 commMpi->ubcast(linearConss->linearCoefs[0], 1, datatypeLinearConss2, root)
1547 MPI_Type_free( &datatypeLinearConss2 )
1551 if( nBendersLinearConss > 0 )
1553 MPI_Datatype datatypeBendersLinearConss1;
1556 datatypeBendersLinearConss1 = createDatatypeBendersLinearConss1(
false);
1560 datatypeBendersLinearConss1 = createDatatypeBendersLinearConss1(
true);
1563 MPI_Type_commit( &datatypeBendersLinearConss1 )
1566 commMpi->ubcast(bendersLinearConss->linearLhss, 1, datatypeBendersLinearConss1, root)
1570 MPI_Type_free( &datatypeBendersLinearConss1 )
1573 MPI_Datatype datatypeBendersLinearConss2;
1576 datatypeBendersLinearConss2 = createDatatypeBendersLinearConss2(
false);
1580 datatypeBendersLinearConss2 = createDatatypeBendersLinearConss2(
true);
1583 MPI_Type_commit( &datatypeBendersLinearConss2 )
1586 commMpi->ubcast(bendersLinearConss->linearCoefs[0], 1, datatypeBendersLinearConss2, root)
1590 MPI_Type_free( &datatypeBendersLinearConss2 )
1594 if( nBoundDisjunctions > 0 )
1596 MPI_Datatype datatypeBoundDisjunctions1;
1599 datatypeBoundDisjunctions1 = createDatatypeBoundDisjunctions1(
false);
1603 datatypeBoundDisjunctions1 = createDatatypeBoundDisjunctions1(
true);
1606 MPI_Type_commit( &datatypeBoundDisjunctions1 )
1609 commMpi->ubcast(&(boundDisjunctions->nTotalVarsBoundDisjunctions), 1, datatypeBoundDisjunctions1, root)
1613 MPI_Type_free( &datatypeBoundDisjunctions1 )
1616 MPI_Datatype datatypeBoundDisjunctions2;
1619 datatypeBoundDisjunctions2 = createDatatypeBoundDisjunctions2(
false);
1623 datatypeBoundDisjunctions2 = createDatatypeBoundDisjunctions2(
true);
1626 MPI_Type_commit( &datatypeBoundDisjunctions2 )
1629 commMpi->ubcast(boundDisjunctions->idxBoundDisjunctionVars[0], 1, datatypeBoundDisjunctions2, root)
1633 MPI_Type_free( &datatypeBoundDisjunctions2 )
1637 if( nVarBranchStats > 0 )
1639 MPI_Datatype datatypeVarBranchStats;
1642 datatypeVarBranchStats = createDatatypeVarBranchStats(
false);
1646 datatypeVarBranchStats = createDatatypeVarBranchStats(
true);
1649 MPI_Type_commit( &datatypeVarBranchStats )
1652 commMpi->ubcast(&(varBranchStats->offset), 1, datatypeVarBranchStats, root)
1656 MPI_Type_free( &datatypeVarBranchStats )
1660 if( nVarValueVars > 0 )
1662 MPI_Datatype datatypeVarValueVars1;
1665 datatypeVarValueVars1 = createDatatypeVarValueVars1(
false);
1669 datatypeVarValueVars1 = createDatatypeVarValueVars1(
true);
1672 MPI_Type_commit( &datatypeVarValueVars1 )
1675 commMpi->ubcast(&(varValues->nVarValues), 1, datatypeVarValueVars1, root)
1679 MPI_Type_free( &datatypeVarValueVars1 )
1682 MPI_Datatype datatypeBoundDisjunctions2;
1685 datatypeBoundDisjunctions2 = createDatatypeBoundDisjunctions2(
false);
1689 datatypeBoundDisjunctions2 = createDatatypeBoundDisjunctions2(
true);
1692 MPI_Type_commit( &datatypeBoundDisjunctions2 )
1695 commMpi->ubcast(&nVarValueVars, 1, datatypeBoundDisjunctions2, root)
1699 MPI_Type_free( &datatypeBoundDisjunctions2 )
1711 if( branchLinearConss )
1713 nBranchLinearConss = branchLinearConss->nLinearConss;
1715 if( branchSetppcConss )
1717 nBranchSetppcConss = branchSetppcConss->nSetppcConss;
1721 nLinearConss = linearConss->nLinearConss;
1723 if( bendersLinearConss )
1725 nBendersLinearConss = bendersLinearConss->nLinearConss;
1727 if( boundDisjunctions )
1729 nBoundDisjunctions = boundDisjunctions->nBoundDisjunctions;
1731 if( varBranchStats )
1733 nVarBranchStats = varBranchStats->nVarBranchStats;
1737 nVarValueVars = varValues->nVarValueVars;
1741 MPI_Datatype datatypeCounters;
1742 datatypeCounters = createDatatypeCounters();
1744 MPI_Type_commit( &datatypeCounters )
1747 commMpi->usend(&localInfoIncluded, 1, datatypeCounters, dest,
TagDiffSubproblem)
1750 MPI_Type_free( &datatypeCounters )
1753 if( nBoundChanges > 0 )
1755 MPI_Datatype datatypeBoundChanges;
1756 datatypeBoundChanges = createDatatypeBoundChnages(
false);
1758 MPI_Type_commit( &datatypeBoundChanges )
1761 commMpi->usend(indicesAmongSolvers, 1, datatypeBoundChanges, dest, TagDiffSubproblem1)
1765 MPI_Type_free( &datatypeBoundChanges )
1769 if( nBranchLinearConss > 0 )
1771 MPI_Datatype datatypeBranchLinearConss1;
1772 datatypeBranchLinearConss1 = createDatatypeBranchLinearConss1(
false);
1774 MPI_Type_commit( &datatypeBranchLinearConss1 )
1777 commMpi->usend(branchLinearConss->linearLhss, 1, datatypeBranchLinearConss1, dest, TagDiffSubproblem2)
1781 MPI_Type_free( &datatypeBranchLinearConss1 )
1784 MPI_Datatype datatypeBranchLinearConss2;
1785 datatypeBranchLinearConss2 = createDatatypeBranchLinearConss2(
false);
1787 MPI_Type_commit( &datatypeBranchLinearConss2 )
1790 commMpi->usend(branchLinearConss->linearCoefs[0], 1, datatypeBranchLinearConss2, dest, TagDiffSubproblem3)
1794 MPI_Type_free( &datatypeBranchLinearConss2 )
1798 if( nBranchSetppcConss > 0 )
1800 MPI_Datatype datatypeBranchSetppcConss1;
1801 datatypeBranchSetppcConss1 = createDatatypeBranchSetppcConss1(
false);
1803 MPI_Type_commit( &datatypeBranchSetppcConss1 )
1806 commMpi->usend(branchSetppcConss->nSetppcVars, 1, datatypeBranchSetppcConss1, dest, TagDiffSubproblem4)
1810 MPI_Type_free( &datatypeBranchSetppcConss1 )
1813 MPI_Datatype datatypeBranchSetppcConss2;
1814 datatypeBranchSetppcConss2 = createDatatypeBranchSetppcConss2(
false);
1816 MPI_Type_commit( &datatypeBranchSetppcConss2 )
1819 commMpi->usend(branchSetppcConss->idxSetppcVars[0], 1, datatypeBranchSetppcConss2, dest, TagDiffSubproblem5)
1823 MPI_Type_free( &datatypeBranchSetppcConss2 )
1827 if( nLinearConss > 0 )
1829 MPI_Datatype datatypeLinearConss1;
1830 datatypeLinearConss1 = createDatatypeLinearConss1(
false);
1832 MPI_Type_commit( &datatypeLinearConss1 )
1835 commMpi->usend(linearConss->linearLhss, 1, datatypeLinearConss1, dest, TagDiffSubproblem6)
1839 MPI_Type_free( &datatypeLinearConss1 )
1842 MPI_Datatype datatypeLinearConss2;
1843 datatypeLinearConss2 = createDatatypeLinearConss2(
false);
1845 MPI_Type_commit( &datatypeLinearConss2 )
1848 commMpi->usend(linearConss->linearCoefs[0], 1, datatypeLinearConss2, dest, TagDiffSubproblem7)
1852 MPI_Type_free( &datatypeLinearConss2 )
1856 if( nBendersLinearConss > 0 )
1858 MPI_Datatype datatypeBendersLinearConss1;
1859 datatypeBendersLinearConss1 = createDatatypeBendersLinearConss1(
false);
1861 MPI_Type_commit( &datatypeBendersLinearConss1 )
1864 commMpi->usend(bendersLinearConss->linearLhss, 1, datatypeBendersLinearConss1, dest, TagDiffSubproblem8)
1868 MPI_Type_free( &datatypeBendersLinearConss1 )
1871 MPI_Datatype datatypeBendersLinearConss2;
1872 datatypeBendersLinearConss2 = createDatatypeBendersLinearConss2(
false);
1874 MPI_Type_commit( &datatypeBendersLinearConss2 )
1877 commMpi->usend(bendersLinearConss->linearCoefs[0], 1, datatypeBendersLinearConss2, dest, TagDiffSubproblem9)
1881 MPI_Type_free( &datatypeBendersLinearConss2 )
1885 if( nBoundDisjunctions > 0 )
1887 MPI_Datatype datatypeBoundDisjunctions1;
1888 datatypeBoundDisjunctions1 = createDatatypeBoundDisjunctions1(
false);
1890 MPI_Type_commit( &datatypeBoundDisjunctions1 )
1893 commMpi->usend(&(boundDisjunctions->nTotalVarsBoundDisjunctions), 1, datatypeBoundDisjunctions1, dest, TagDiffSubproblem10)
1897 MPI_Type_free( &datatypeBoundDisjunctions1 )
1900 MPI_Datatype datatypeBoundDisjunctions2;
1901 datatypeBoundDisjunctions2 = createDatatypeBoundDisjunctions2(
false);
1903 MPI_Type_commit( &datatypeBoundDisjunctions2 )
1906 commMpi->usend(boundDisjunctions->idxBoundDisjunctionVars[0], 1, datatypeBoundDisjunctions2, dest, TagDiffSubproblem11)
1911 MPI_Type_free( &datatypeBoundDisjunctions2 )
1915 if( nVarBranchStats > 0 )
1917 MPI_Datatype datatypeVarBranchStats;
1918 datatypeVarBranchStats = createDatatypeVarBranchStats(
false);
1920 MPI_Type_commit( &datatypeVarBranchStats )
1923 commMpi->usend(&(varBranchStats->offset), 1, datatypeVarBranchStats, dest, TagDiffSubproblem12)
1927 MPI_Type_free( &datatypeVarBranchStats )
1931 if( nVarValueVars > 0 )
1933 MPI_Datatype datatypeVarValueVars1;
1934 datatypeVarValueVars1 = createDatatypeVarValueVars1(
false);
1936 MPI_Type_commit( &datatypeVarValueVars1 )
1939 commMpi->usend(&(varValues->nVarValues), 1, datatypeVarValueVars1, dest, TagDiffSubproblem13)
1943 MPI_Type_free( &datatypeVarValueVars1 )
1946 MPI_Datatype datatypeBoundDisjunctions2;
1947 datatypeBoundDisjunctions2 = createDatatypeBoundDisjunctions2(
false);
1949 MPI_Type_commit( &datatypeBoundDisjunctions2 )
1952 commMpi->usend(&nVarValueVars, 1, datatypeBoundDisjunctions2, dest, TagDiffSubproblem14)
1956 MPI_Type_free( &datatypeBoundDisjunctions2 )
1967 MPI_Datatype datatypeCounters;
1968 datatypeCounters = createDatatypeCounters();
1970 MPI_Type_commit( &datatypeCounters )
1973 commMpi->ureceive(&localInfoIncluded, 1, datatypeCounters, source,
TagDiffSubproblem)
1976 MPI_Type_free( &datatypeCounters )
1979 if( nBoundChanges > 0 )
1981 MPI_Datatype datatypeBoundChanges;
1982 datatypeBoundChanges = createDatatypeBoundChnages(
true);
1984 MPI_Type_commit( &datatypeBoundChanges )
1987 commMpi->ureceive(indicesAmongSolvers, 1, datatypeBoundChanges, source, TagDiffSubproblem1)
1991 MPI_Type_free( &datatypeBoundChanges )
1995 if( nBranchLinearConss > 0 )
1997 MPI_Datatype datatypeBranchLinearConss1;
1998 datatypeBranchLinearConss1 = createDatatypeBranchLinearConss1(
true);
2000 MPI_Type_commit( &datatypeBranchLinearConss1 )
2003 commMpi->ureceive(branchLinearConss->linearLhss, 1, datatypeBranchLinearConss1, source, TagDiffSubproblem2)
2007 MPI_Type_free( &datatypeBranchLinearConss1 )
2010 MPI_Datatype datatypeBranchLinearConss2;
2011 datatypeBranchLinearConss2 = createDatatypeBranchLinearConss2(
true);
2013 MPI_Type_commit( &datatypeBranchLinearConss2 )
2016 commMpi->ureceive(branchLinearConss->linearCoefs[0], 1, datatypeBranchLinearConss2, source, TagDiffSubproblem3)
2020 MPI_Type_free( &datatypeBranchLinearConss2 )
2024 if( nBranchSetppcConss > 0 )
2026 MPI_Datatype datatypeBranchSetppcConss1;
2027 datatypeBranchSetppcConss1 = createDatatypeBranchSetppcConss1(
true);
2029 MPI_Type_commit( &datatypeBranchSetppcConss1 )
2032 commMpi->ureceive(branchSetppcConss->nSetppcVars, 1, datatypeBranchSetppcConss1, source, TagDiffSubproblem4)
2036 MPI_Type_free( &datatypeBranchSetppcConss1 )
2039 MPI_Datatype datatypeBranchSetppcConss2;
2040 datatypeBranchSetppcConss2 = createDatatypeBranchSetppcConss2(
true);
2042 MPI_Type_commit( &datatypeBranchSetppcConss2 )
2045 commMpi->ureceive(branchSetppcConss->idxSetppcVars[0], 1, datatypeBranchSetppcConss2, source, TagDiffSubproblem5)
2049 MPI_Type_free( &datatypeBranchSetppcConss2 )
2053 if( nLinearConss > 0 )
2055 MPI_Datatype datatypeLinearConss1;
2056 datatypeLinearConss1 = createDatatypeLinearConss1(
true);
2058 MPI_Type_commit( &datatypeLinearConss1 )
2061 commMpi->ureceive(linearConss->linearLhss, 1, datatypeLinearConss1, source, TagDiffSubproblem6)
2065 MPI_Type_free( &datatypeLinearConss1 )
2068 MPI_Datatype datatypeLinearConss2;
2069 datatypeLinearConss2 = createDatatypeLinearConss2(
true);
2071 MPI_Type_commit( &datatypeLinearConss2 )
2074 commMpi->ureceive(linearConss->linearCoefs[0], 1, datatypeLinearConss2, source, TagDiffSubproblem7)
2078 MPI_Type_free( &datatypeLinearConss2 )
2082 if( nBendersLinearConss > 0 )
2084 MPI_Datatype datatypeBendersLinearConss1;
2085 datatypeBendersLinearConss1 = createDatatypeBendersLinearConss1(
true);
2087 MPI_Type_commit( &datatypeBendersLinearConss1 )
2090 commMpi->ureceive(bendersLinearConss->linearLhss, 1, datatypeBendersLinearConss1, source, TagDiffSubproblem8)
2094 MPI_Type_free( &datatypeBendersLinearConss1 )
2097 MPI_Datatype datatypeBendersLinearConss2;
2098 datatypeBendersLinearConss2 = createDatatypeBendersLinearConss2(
true);
2100 MPI_Type_commit( &datatypeBendersLinearConss2 )
2103 commMpi->ureceive(bendersLinearConss->linearCoefs[0], 1, datatypeBendersLinearConss2, source, TagDiffSubproblem9)
2107 MPI_Type_free( &datatypeBendersLinearConss2 )
2111 if( nBoundDisjunctions > 0 )
2113 MPI_Datatype datatypeBoundDisjunctions1;
2114 datatypeBoundDisjunctions1 = createDatatypeBoundDisjunctions1(
true);
2116 MPI_Type_commit( &datatypeBoundDisjunctions1 )
2119 commMpi->ureceive(&(boundDisjunctions->nTotalVarsBoundDisjunctions), 1, datatypeBoundDisjunctions1, source, TagDiffSubproblem10)
2123 MPI_Type_free( &datatypeBoundDisjunctions1 )
2126 MPI_Datatype datatypeBoundDisjunctions2;
2127 datatypeBoundDisjunctions2 = createDatatypeBoundDisjunctions2(
true);
2129 MPI_Type_commit( &datatypeBoundDisjunctions2 )
2132 commMpi->ureceive(boundDisjunctions->idxBoundDisjunctionVars[0], 1, datatypeBoundDisjunctions2, source, TagDiffSubproblem11)
2137 MPI_Type_free( &datatypeBoundDisjunctions2 )
2141 if( nVarBranchStats > 0 )
2143 MPI_Datatype datatypeVarBranchStats;
2144 datatypeVarBranchStats = createDatatypeVarBranchStats(
true);
2146 MPI_Type_commit( &datatypeVarBranchStats )
2149 commMpi->ureceive(&(varBranchStats->offset), 1, datatypeVarBranchStats, source, TagDiffSubproblem12)
2153 MPI_Type_free( &datatypeVarBranchStats )
2157 if( nVarValueVars > 0 )
2159 MPI_Datatype datatypeVarValueVars1;
2160 datatypeVarValueVars1 = createDatatypeVarValueVars1(
true);
2162 MPI_Type_commit( &datatypeVarValueVars1 )
2165 commMpi->ureceive(&(varValues->nVarValues), 1, datatypeVarValueVars1, source, TagDiffSubproblem13)
2169 MPI_Type_free( &datatypeVarValueVars1 )
2172 MPI_Datatype datatypeBoundDisjunctions2;
2173 datatypeBoundDisjunctions2 = createDatatypeBoundDisjunctions2(
true);
2175 MPI_Type_commit( &datatypeBoundDisjunctions2 )
2178 commMpi->ureceive(&nVarValueVars, 1, datatypeBoundDisjunctions2, source, TagDiffSubproblem14)
2182 MPI_Type_free( &datatypeBoundDisjunctions2 )
static ScipParaCommTh * comm
SCIP ParaComm extension for MPI communication.
#define PARA_COMM_CALL(paracommcall)
virtual int getRank()=0
get rank of this process or this thread depending on run-time environment
#define DEF_PARA_COMM(para_comm, comm)
ScipParaDiffSubproblem extension for MPI communication.
static const int TagDiffSubproblem
#define MPI_CALL(mpicall)
Base class of communicator object.