40 setHasBeenRefined( copy.getHasBeenRefined() );
41 setWillBeRefined( copy.getWillBeRefined() );
42 setIsVertexLocal( copy.getIsVertexLocal() );
43 setIsParentVertexLocal( copy.getIsParentVertexLocal() );
44 setIsVertexParentOfSubtree( copy.getIsVertexParentOfSubtree() );
45 setIsFaceLocal( copy.getIsFaceLocal() );
46 setIsCellLocal( copy.getIsCellLocal() );
47 setIsParentCellLocal( copy.getIsParentCellLocal() );
48 setIsVertexAdjacentToParallelDomainBoundary( copy.getIsVertexAdjacentToParallelDomainBoundary() );
49 setIsFaceAdjacentToParallelDomainBoundary( copy.getIsFaceAdjacentToParallelDomainBoundary() );
50 setNumberOfAdjacentTreesPerVertex( copy.getNumberOfAdjacentTreesPerVertex() );
51 setIsAdjacentCellLocal( copy.getIsAdjacentCellLocal() );
52 setVertexDataFrom( copy.getVertexDataFrom() );
53 setVertexDataTo( copy.getVertexDataTo() );
54 setFaceDataFrom( copy.getFaceDataFrom() );
55 setFaceDataTo( copy.getFaceDataTo() );
56 setCellData( copy.getCellData() );
57 setRelativePositionToFather( copy.getRelativePositionToFather() );
58 setInvokingSpacetree( copy.getInvokingSpacetree() );
59 setInvokingSpacetreeIsNotInvolvedInAnyDynamicLoadBalancing( copy.getInvokingSpacetreeIsNotInvolvedInAnyDynamicLoadBalancing() );
708 #if !defined(__MPI_ATTRIBUTES_LANGUAGE_EXTENSION__)
711 int NumberOfAttributes = 0;
712 NumberOfAttributes++;
713 NumberOfAttributes++;
714 NumberOfAttributes++;
715 NumberOfAttributes++;
716 NumberOfAttributes++;
717 NumberOfAttributes++;
718 NumberOfAttributes++;
719 NumberOfAttributes++;
720 NumberOfAttributes++;
721 NumberOfAttributes++;
722 NumberOfAttributes++;
723 NumberOfAttributes++;
724 NumberOfAttributes++;
725 NumberOfAttributes++;
726 NumberOfAttributes++;
727 NumberOfAttributes++;
728 NumberOfAttributes++;
729 NumberOfAttributes++;
730 NumberOfAttributes++;
731 NumberOfAttributes++;
732 NumberOfAttributes++;
733 NumberOfAttributes++;
735 MPI_Datatype* subtypes =
new MPI_Datatype[NumberOfAttributes];
736 int* blocklen =
new int[NumberOfAttributes];
737 MPI_Aint* disp =
new MPI_Aint[NumberOfAttributes];
740 subtypes[counter] = MPI_DOUBLE;
741 blocklen[counter] = Dimensions;
743 subtypes[counter] = MPI_DOUBLE;
744 blocklen[counter] = Dimensions;
746 subtypes[counter] = MPI_UNSIGNED_LONG;
747 blocklen[counter] = 1;
749 subtypes[counter] = MPI_UNSIGNED_LONG;
750 blocklen[counter] = 1;
752 subtypes[counter] = MPI_UNSIGNED_LONG;
753 blocklen[counter] = 1;
755 subtypes[counter] = MPI_UNSIGNED_LONG;
756 blocklen[counter] = 1;
758 subtypes[counter] = MPI_UNSIGNED_LONG;
759 blocklen[counter] = 1;
761 subtypes[counter] = MPI_UNSIGNED_LONG;
762 blocklen[counter] = 1;
764 subtypes[counter] = MPI_BYTE;
765 blocklen[counter] = 1;
767 subtypes[counter] = MPI_BYTE;
768 blocklen[counter] = 1;
770 subtypes[counter] = MPI_UNSIGNED_LONG;
771 blocklen[counter] = 1;
773 subtypes[counter] = MPI_UNSIGNED_LONG;
774 blocklen[counter] = 1;
776 subtypes[counter] = MPI_INT;
779 subtypes[counter] = MPI_UNSIGNED_LONG;
780 blocklen[counter] = 1;
782 subtypes[counter] = MPI_INT;
785 subtypes[counter] = MPI_INT;
788 subtypes[counter] = MPI_INT;
791 subtypes[counter] = MPI_INT;
794 subtypes[counter] = MPI_INT;
795 blocklen[counter] = 1;
797 subtypes[counter] = MPI_INT;
798 blocklen[counter] = Dimensions;
800 subtypes[counter] = MPI_INT;
801 blocklen[counter] = 1;
803 subtypes[counter] = MPI_BYTE;
804 blocklen[counter] = 1;
807 MPI_Aint baseFirstInstance;
808 MPI_Aint baseSecondInstance;
809 MPI_Get_address( &instances[0], &baseFirstInstance );
810 MPI_Get_address( &instances[1], &baseSecondInstance );
813 MPI_Get_address( &(instances[0]._x.data()[0]), &disp[counter] );
815 MPI_Get_address( &(instances[0]._h.data()[0]), &disp[counter] );
817 MPI_Get_address( &(instances[0]._hasBeenRefined), &disp[counter] );
819 MPI_Get_address( &(instances[0]._willBeRefined), &disp[counter] );
821 MPI_Get_address( &(instances[0]._isVertexLocal), &disp[counter] );
823 MPI_Get_address( &(instances[0]._isParentVertexLocal), &disp[counter] );
825 MPI_Get_address( &(instances[0]._isVertexParentOfSubtree), &disp[counter] );
827 MPI_Get_address( &(instances[0]._isFaceLocal), &disp[counter] );
829 MPI_Get_address( &(instances[0]._isCellLocal), &disp[counter] );
831 MPI_Get_address( &(instances[0]._isParentCellLocal), &disp[counter] );
833 MPI_Get_address( &(instances[0]._isVertexAdjacentToParallelDomainBoundary), &disp[counter] );
835 MPI_Get_address( &(instances[0]._isFaceAdjacentToParallelDomainBoundary), &disp[counter] );
837 MPI_Get_address( &(instances[0]._numberOfAdjacentTreesPerVertex.data()[0]), &disp[counter] );
839 MPI_Get_address( &(instances[0]._isAdjacentCellLocal), &disp[counter] );
841 MPI_Get_address( &(instances[0]._vertexDataFrom.data()[0]), &disp[counter] );
843 MPI_Get_address( &(instances[0]._vertexDataTo.data()[0]), &disp[counter] );
845 MPI_Get_address( &(instances[0]._faceDataFrom.data()[0]), &disp[counter] );
847 MPI_Get_address( &(instances[0]._faceDataTo.data()[0]), &disp[counter] );
849 MPI_Get_address( &(instances[0]._cellData), &disp[counter] );
851 MPI_Get_address( &(instances[0]._relativePositionToFather.data()[0]), &disp[counter] );
853 MPI_Get_address( &(instances[0]._invokingSpacetree), &disp[counter] );
855 MPI_Get_address( &(instances[0]._invokingSpacetreeIsNotInvolvedInAnyDynamicLoadBalancing), &disp[counter] );
858 MPI_Aint offset = disp[0] - baseFirstInstance;
859 MPI_Aint extent = baseSecondInstance - baseFirstInstance - offset;
860 for (
int i=NumberOfAttributes-1; i>=0; i--) {
861 disp[i] = disp[i] - disp[0];
865 MPI_Datatype tmpType;
866 errorCode += MPI_Type_create_struct( NumberOfAttributes, blocklen, disp, subtypes, &tmpType );
867 errorCode += MPI_Type_create_resized( tmpType, offset, extent, &Datatype );
868 errorCode += MPI_Type_commit( &Datatype );
869 errorCode += MPI_Type_free( &tmpType );
870 if (errorCode) std::cerr <<
"error constructing MPI datatype in " << __FILE__ <<
":" << __LINE__ << std::endl;
880 getBoundaryExchangeDatatype();
881 getMultiscaleDataExchangeDatatype();
882 getGlobalCommunciationDatatype();