1 /* 2 * Copyright (c) 2004-2007 The Trustees of Indiana University and Indiana 3 * University Research and Technology 4 * Corporation. All rights reserved. 5 * Copyright (c) 2004-2005 The University of Tennessee and The University 6 * of Tennessee Research Foundation. All rights 7 * reserved. 8 * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, 9 * University of Stuttgart. All rights reserved. 10 * Copyright (c) 2004-2005 The Regents of the University of California. 11 * All rights reserved. 12 * Copyright (c) 2015 Los Alamos National Security, LLC. All rights 13 * reserved. 14 * $COPYRIGHT$ 15 * 16 * Additional copyrights may follow 17 * 18 * $HEADER$ 19 * 20 * 21 * This file is almost a complete re-write for Open MPI compared to the 22 * original mpiJava package. Its license and copyright are listed below. 23 * See <path to ompi/mpi/java/README> for more information. 24 * 25 * 26 * Licensed under the Apache License, Version 2.0 (the "License"); 27 * you may not use this file except in compliance with the License. 28 * You may obtain a copy of the License at 29 * 30 * http://www.apache.org/licenses/LICENSE-2.0 31 * 32 * Unless required by applicable law or agreed to in writing, software 33 * distributed under the License is distributed on an "AS IS" BASIS, 34 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 35 * See the License for the specific language governing permissions and 36 * limitations under the License. 37 * 38 * 39 * File : Intercomm.java 40 * Author : Xinying Li 41 * Created : Thu Apr 9 12:22:15 1998 42 * Revision : $Revision: 1.5 $ 43 * Updated : $Date: 1999/09/14 20:50:11 $ 44 * Copyright: Northeast Parallel Architectures Center 45 * at Syracuse University 1998 46 */ 47 48 package mpi; 49 50 /** 51 * This class represents intercommunicators. 52 */ 53 public final class Intercomm extends Comm 54 { Intercomm(long handle)55 protected Intercomm(long handle) 56 { 57 super(handle); 58 } 59 Intercomm(long[] commRequest)60 protected Intercomm(long[] commRequest) 61 { 62 super(commRequest); 63 } 64 65 /** 66 * Duplicates this communicator. 67 * <p>Java binding of {@code MPI_COMM_DUP}. 68 * <p>It is recommended to use {@link #dup} instead of {@link #clone} 69 * because the last can't throw an {@link mpi.MPIException}. 70 * @return copy of this communicator 71 */ clone()72 @Override public Intercomm clone() 73 { 74 try 75 { 76 return dup(); 77 } 78 catch(MPIException e) 79 { 80 throw new RuntimeException(e.getMessage()); 81 } 82 } 83 84 /** 85 * Duplicates this communicator. 86 * <p>Java binding of {@code MPI_COMM_DUP}. 87 * @return copy of this communicator 88 * @throws MPIException Signals that an MPI exception of some sort has occurred. 89 */ dup()90 @Override public Intercomm dup() throws MPIException 91 { 92 MPI.check(); 93 return new Intercomm(dup(handle)); 94 } 95 96 /** 97 * Duplicates this communicator. 98 * <p>Java binding of {@code MPI_COMM_IDUP}. 99 * <p>The new communicator can't be used before the operation completes. 100 * The request object must be obtained calling {@link #getRequest}. 101 * @return copy of this communicator 102 * @throws MPIException Signals that an MPI exception of some sort has occurred. 103 */ iDup()104 @Override public Intercomm iDup() throws MPIException 105 { 106 MPI.check(); 107 return new Intercomm(iDup(handle)); 108 } 109 110 /** 111 * Duplicates this communicator with the info object used in the call. 112 * <p>Java binding of {@code MPI_COMM_DUP_WITH_INFO}. 113 * @param info info object to associate with the new communicator 114 * @return copy of this communicator 115 * @throws MPIException Signals that an MPI exception of some sort has occurred. 116 */ dupWithInfo(Info info)117 @Override public Intercomm dupWithInfo(Info info) throws MPIException 118 { 119 MPI.check(); 120 return new Intercomm(dupWithInfo(handle, info.handle)); 121 } 122 123 // Inter-Communication 124 125 /** 126 * Size of remote group. 127 * <p>Java binding of the MPI operation {@code MPI_COMM_REMOTE_SIZE}. 128 * @return number of process in remote group of this communicator 129 * @throws MPIException Signals that an MPI exception of some sort has occurred. 130 */ getRemoteSize()131 public int getRemoteSize() throws MPIException 132 { 133 MPI.check(); 134 return getRemoteSize_jni(); 135 } 136 getRemoteSize_jni()137 private native int getRemoteSize_jni() throws MPIException; 138 139 /** 140 * Return the remote group. 141 * <p>Java binding of the MPI operation {@code MPI_COMM_REMOTE_GROUP}. 142 * @return remote group of this communicator 143 * @throws MPIException Signals that an MPI exception of some sort has occurred. 144 */ getRemoteGroup()145 public Group getRemoteGroup() throws MPIException 146 { 147 MPI.check(); 148 return new Group(getRemoteGroup_jni()); 149 } 150 getRemoteGroup_jni()151 private native long getRemoteGroup_jni(); 152 153 /** 154 * Creates an intracommuncator from an intercommunicator 155 * <p>Java binding of the MPI operation {@code MPI_INTERCOMM_MERGE}. 156 * @param high true if the local group has higher ranks in combined group 157 * @return new intra-communicator 158 * @throws MPIException Signals that an MPI exception of some sort has occurred. 159 */ merge(boolean high)160 public Intracomm merge(boolean high) throws MPIException 161 { 162 MPI.check(); 163 return new Intracomm(merge_jni(high)); 164 } 165 merge_jni(boolean high)166 private native long merge_jni(boolean high); 167 168 /** 169 * Java binding of {@code MPI_COMM_GET_PARENT}. 170 * @return the parent communicator 171 * @throws MPIException Signals that an MPI exception of some sort has occurred. 172 */ getParent()173 public static Intercomm getParent() throws MPIException 174 { 175 MPI.check(); 176 return new Intercomm(getParent_jni()); 177 } 178 getParent_jni()179 private native static long getParent_jni() throws MPIException; 180 181 } // Intercomm 182