- Timestamp:
- 12/07/21 12:00:23 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_ym/XIOS_COUPLING/extern/remap/src/mapper.cpp
r1639 r2269 11 11 #include "gridRemap.hpp" 12 12 13 #include <fstream> 14 #include "client.hpp" 15 13 16 #include "mapper.hpp" 17 18 namespace MemTrack 19 { 20 void TrackDumpBlocks(std::ofstream& memReport, size_t memtrack_blocks, size_t memtrack_size); 21 } 14 22 15 23 namespace sphereRemap { … … 57 65 elt.src_id.globalId = sourceGlobalId[i]; 58 66 sourceElements.push_back(elt); 59 sourceMesh.push_back( Node(elt.x, cptRadius(elt), &sourceElements.back()));67 sourceMesh.push_back(make_shared<Node>(elt.x, cptRadius(elt), &sourceElements.back())); 60 68 cptEltGeom(sourceElements[i], Coord(pole[0], pole[1], pole[2])); 61 69 if (area!=NULL) sourceElements[i].given_area=area[i] ; … … 92 100 Elt elt(boundsLon + offs, boundsLat + offs, nVertex); 93 101 targetElements.push_back(elt); 94 targetMesh.push_back( Node(elt.x, cptRadius(elt), &sourceElements.back()));102 targetMesh.push_back(make_shared<Node>(elt.x, cptRadius(elt), &sourceElements.back())); 95 103 cptEltGeom(targetElements[i], Coord(pole[0], pole[1], pole[2])); 96 104 if (area!=NULL) targetElements[i].given_area=area[i] ; … … 121 129 122 130 this->buildSSTree(sourceMesh, targetMesh); 131 123 132 124 133 if (mpiRank == 0 && verbose) cout << "Computing intersections ..." << endl; … … 460 469 delete[] recvElement; 461 470 delete[] sendValue; 471 delete[] sendArea ; 472 delete[] sendGivenArea ; 462 473 delete[] recvValue; 474 delete[] recvArea ; 475 delete[] recvGivenArea ; 463 476 delete[] sendGrad; 464 477 delete[] recvGrad; … … 490 503 MPI_Comm_rank(communicator, &mpiRank); 491 504 492 vector<Node > *routingList = new vector<Node>[mpiSize];505 vector<NodePtr> *routingList = new vector<NodePtr>[mpiSize]; 493 506 vector<vector<int> > routes(sstree.localTree.leafs.size()); 494 507 … … 517 530 for (size_t j = 0; j < routingList[rank].size(); j++) 518 531 { 519 Elt *elt = (Elt *) (routingList[rank][j] .data);532 Elt *elt = (Elt *) (routingList[rank][j]->data); 520 533 sendMessageSize[rank] += packedPolygonSize(*elt); 521 534 } … … 540 553 for (size_t j = 0; j < routingList[rank].size(); j++) 541 554 { 542 Elt *elt = (Elt *) (routingList[rank][j] .data);555 Elt *elt = (Elt *) (routingList[rank][j]->data); 543 556 packPolygon(*elt, sendBuffer[rank], pos[rank]); 544 557 } … … 590 603 Elt elt; 591 604 unpackPolygon(elt, recvBuffer[rank], pos[rank]); 592 Node node(elt.x, cptRadius(elt), &elt);593 findNeighbour(sstree.localTree.root, &node, neighbourList);605 NodePtr node=make_shared<Node>(elt.x, cptRadius(elt), &elt); 606 findNeighbour(sstree.localTree.root, node, neighbourList); 594 607 } 595 608 nbSendNode[rank] = neighbourList.size(); … … 678 691 /* re-compute on received elements to avoid having to send this information */ 679 692 neighbourNodes.resize(nbNeighbourNodes); 693 for(int i=0;i<neighbourNodes.size();i++) neighbourNodes[i]=make_shared<Node>() ; 680 694 setCirclesAndLinks(neighbourElements, neighbourNodes); 681 695 cptAllEltsGeom(neighbourElements, nbNeighbourNodes, srcGrid.pole); … … 692 706 for (int j = 0; j < sstree.localTree.leafs.size(); j++) 693 707 { 694 Node &node = sstree.localTree.leafs[j];708 NodePtr node = sstree.localTree.leafs[j]; 695 709 696 710 /* find all leafs whoes circles that intersect node's circle and save into node->intersectors */ 697 node .search(sstree.localTree.root);698 699 Elt *elt = (Elt *)(node .data);711 node->search(sstree.localTree.root); 712 713 Elt *elt = (Elt *)(node->data); 700 714 701 715 for (int i = 0; i < elt->n; i++) elt->neighbour[i] = NOT_FOUND; … … 705 719 and check if they are neighbours in the sense that the two elements share an edge. 706 720 If they do, save this information for elt */ 707 for (list<NodePtr>::iterator it = (node .intersectors).begin(); it != (node.intersectors).end(); ++it)721 for (list<NodePtr>::iterator it = (node->intersectors).begin(); it != (node->intersectors).end(); ++it) 708 722 { 709 723 Elt *elt2 = (Elt *)((*it)->data); … … 730 744 MPI_Barrier(communicator); 731 745 732 vector<Node > *routingList = new vector<Node>[mpiSize];733 734 vector<Node > routeNodes; routeNodes.reserve(nbElements);746 vector<NodePtr> *routingList = new vector<NodePtr>[mpiSize]; 747 748 vector<NodePtr> routeNodes; routeNodes.reserve(nbElements); 735 749 for (int j = 0; j < nbElements; j++) 736 750 { 737 751 elements[j].id.ind = j; 738 752 elements[j].id.rank = mpiRank; 739 routeNodes.push_back( Node(elements[j].x, cptRadius(elements[j]), &elements[j]));753 routeNodes.push_back(make_shared<Node>(elements[j].x, cptRadius(elements[j]), &elements[j])); 740 754 } 741 755 … … 766 780 for (size_t j = 0; j < routingList[rank].size(); j++) 767 781 { 768 Elt *elt = (Elt *) (routingList[rank][j] .data);782 Elt *elt = (Elt *) (routingList[rank][j]->data); 769 783 sentMessageSize[rank] += packedPolygonSize(*elt); 770 784 } … … 797 811 for (size_t j = 0; j < routingList[rank].size(); j++) 798 812 { 799 Elt* elt = (Elt *) (routingList[rank][j] .data);813 Elt* elt = (Elt *) (routingList[rank][j]->data); 800 814 packPolygon(*elt, sendBuffer[rank], pos[rank]); 801 815 } … … 841 855 unpackPolygon(recvElt[j], recvBuffer[rank], pos[rank]); 842 856 cptEltGeom(recvElt[j], tgtGrid.pole); 843 Node recvNode(recvElt[j].x, cptRadius(recvElt[j]), &recvElt[j]);844 recvNode .search(sstree.localTree.root);857 NodePtr recvNode = make_shared<Node>(recvElt[j].x, cptRadius(recvElt[j]), &recvElt[j]); 858 recvNode->search(sstree.localTree.root); 845 859 /* for a node holding an element of the target, loop throught candidates for intersecting source */ 846 for (list<NodePtr>::iterator it = (recvNode .intersectors).begin(); it != (recvNode.intersectors).end(); ++it)860 for (list<NodePtr>::iterator it = (recvNode->intersectors).begin(); it != (recvNode->intersectors).end(); ++it) 847 861 { 848 862 Elt *elt2 = (Elt *) ((*it)->data); … … 869 883 } 870 884 } 885 886 for (int j = 0; j < nbRecvNode[rank]; j++) recvElt[j].delete_intersections(); 887 871 888 delete [] recvElt; 872 889 … … 943 960 delete [] srcRank; 944 961 delete [] dstAddress; 962 delete [] sourceWeightId ; 963 delete [] targetWeightId ; 945 964 if (neighbourElements) delete [] neighbourElements; 946 } 947 948 } 965 CTimer::release() ; 966 } 967 968 }
Note: See TracChangeset
for help on using the changeset viewer.