     TCGMSG Routines   % The following routine are available:          INTEGER FUNCTION NNODES()                 long NNODES_()              Returns no. of processes                INTEGER FUNCTION NODEID()                        long NODEID_()        5      Returns logical node no. of the current process        (0,1,...,NNODES()-1)                SUBROUTINE LLOG()                        void LLOG_()        ?      Opens separate logfiles in the current directory for each  1      proce. The files are named log.<NODEID()>.                 SUBROUTINE STATS()                       void STATS_()         ?      Print out summary of communication statistics for calling        process.                INTEGER FUNCTION MTIME()                       long MTIME_()         @      Return wall time from an arbitrary origin in centi-seconds          )      DOUBLE PRECISION FUNCITON TCGTIME()                        double TCGTIME_()         E      Return wall  time  from  an  arbitrary  origin  in  seconds  as        accurately as possible          3      SUBROUTINE SND(TYPE, BUF, LENBUF, NODE, SYNC)                  INTEGER TYPE       [input]        BYTE BUF(LENBUF)   [input]        INTEGER LENBUF     [input]        INTEGER NODE       [input]        INTEGER SYNC       [input]        @      void SND_(long *type, char *buf, long *lenbuf, long *node,                 long *sync)         E      Send a message of type TYPE to node NODE. LENBUF is the  length  E      of  the  message  in  bytes.  BUF  may be any type other than a  E      FORTRAN  CHARACTER  variable  or   constant.   SYNC   indicates  E      synchronous   (1)   or   asynchronous   (0)  communication.  If  E      aynchronous communication is requested the buffer  may  not  be  E      modified  until  WAITCOM is called. This avoids having to waste  E      valuable local memory taking a copy of the message. If a bit is  E      set  in  the TYPE matching MSGDBL, MSGINT or MSGCHR then XDR is  ,      used if communication is over sockets.       !  @      ! Requests for asynchronous communication on UNIX machines 6      ! where it is not supported are quietly ignored.       !           B      SUBROUTINE RCV(TYPE,BUF,LENBUF,LENMES,NODESEL,NODEFROM,SYNC)                 INTEGER TYPE       [input] !      BYTE BUF(LENBUF)   [output]         INTEGER LENBUF     [input] !      INTEGER LENMES     [output]         INTEGER NODESEL    [input] !      INTEGER NODEFROM   [output]         INTEGER SYNC       [input]        B      void RCV_(long *type, char *buf, long *lenbuf, long *lenmes, :                long *nodesel, long *nodefrom, long *sync)        E      Receive a message of type TYPE from node NODESEL. LENBUF is the  E      length  of  the  receiving  buffer in bytes. LENMES returns the  E      length of the message received. An error results if the  buffer  E      is  not  large enough. NODEFROM returns the node from which the  E      message was received. If the NODESEL is specified  as  -1  then  E      the  next node to send to this process is chosen. The selection  E      of the 'next' process is guaranteed to be fair. The  length  of  E      the  buffer  is  checked and the type of the message must agree  E      with that being received (there is  only  one  channel  between  E      processes  so messages are received in the order send). BUF may  E      be of any type other than CHARACTER. SYNC indicates synchronous  ,      (1) or asynchronous (0) communication. E      If a bit is set in the TYPE matching MSGDBL, MSGINT  or  MSGCHR  8      then XDR is used if communication is over sockets.       !  @      ! Requests for asynchronous communication on UNIX machines 6      ! where it is not supported are quietly ignored.       !           (      INTEGER FUNCTION PROBE(TYPE, NODE)                 INTEGER TYPE       [input]        INTEGER NODE       [input]        )      long PROBE_(long *type, long *node)         E      Return 1/0 for TRUE/FALSE if a message of  the  given  type  is  E      available  from the given node. If node is specified as -1 then  E      a message of the given type from any node will match (note that  E      a wildcard probe is much more expensive than probing a specific        node).          1      SUBROUTINE BRDCST(TYPE, BUF, LENBUF, IFROM)                  INTEGER TYPE       [input] '      BYTE BUF(LENBUF)   [input/output]         INTEGER LENBUF     [input]        INTEGER IFROM      [input]        D      void BRDCST_(long *type, char *buf, long *lenbuf, long *ifrom)        E      Broadcast from process IFROM to all other processes  a  message  E      of type TYPE and length LENBUF. All processes call this routine  E      which uses an optimized algorithm to  distribute  the  data  in        O(log p) time. E      If a bit is set in the TYPE matching MSGDBL, MSGINT  or  MSGCHR  E      then  XDR  is  used if communication is over sockets. Note that  E      LENBUF presently must have the correct value on the originating  E      and  receiving  nodes.  This call may be modified to include an  E      extra parameter with  the  function  of  LENMES  in  the  RCV()  
      syntax.                 SUBROUTINE SYNCH(TYPE)                 INTEGER TYPE       [input]              void SYNCH_(long *type)         C      Synchronize all processes by exchanging messages of the given        type in time O(log p).                SUBROUTINE SETDBG(ONOFF)                 INTEGER ONOFF      [input]              void SETDBG_(long *onoff        E      Switch debugging output on (ONOFF=1)  or  off  (ONOFF=0).  This  E      output  is  useful  to  trace messages being passed and also to  .      help debug the message passing software.          $      INTEGER FUNCTION NXTVAL(MPROC)                 INTEGER MPROC      [input]              long NXTVAL_(long *mproc)         E      This call simulates a simple shared  counter  by  communicating  E      with  a  dedicated  server process. It returns the next counter  E      associated with a single active loop (0,1,2,...). MPROC is  the  E      number  of  processes actively requesting values. After the end  E      of the loop each process calls NXTVAL(-MPROC) which  implements  '      a barrier. It is used as follows:         
      FORTRAN        -------------------------        next = nxtval(mproc)       do 10 i = 0,big          if (i .eq. next) then  %          ... do work for iteration i            next = nxtval(mproc)       endif        10  continue       c  D      call with negative mproc to indicate end of loop ... processes A      block here until mproc processes have registered completion        c        junk = nxtval(-mproc)        -------------------------               C        -------------------------  -      while ( (i = NXTVAL_(&mproc)) < big ) {  #        ... do work for iteration i        }        mproc = -mproc;        (void) NXTVAL_(&mproc);        -------------------------         E      On most UNIX machines the cost is approx. 0.05s  per  call.  On  E      the  DELTA  and  IPSC the cost is less than 0.0003s assuming no  E      contention. Clearly the  value  from  NXTVAL  can  be  used  to  E      indicate  that some locally determined no. of iterations should  E      be done as the overhead of NXTVAL may be relatively large. Have  E      a  look  inside  examples/scf.f  at the function NXTASK() for a  E      simple way of doing this while preserving the simple  semantics        of NXTVAL().                SUBROUTINE PARERR(CODE)                  INTEGER CODE       [input]        +      void ERROR_(char *message, long code)         E      Call to request error termination .. it tries to  zap  all  the  E      other  processes  and  generally  tidy up. The value of code is  '      printed out in the error message.  7      C should call ERROR_(char *message, long status).                 SUBROUTINE WAITCOM(NODE)                 INTEGER NODE       [input]              void WAITCOM_(long *node)                E      Wait for all asynchronous communication with node  NODE  to  be  +      completed. NODE=-1 implies all nodes.  @      !! Currently this is only applicable to the iPSC and DELTA B      !! where the actual value of NODE is ignored and -1 assumed.          %      SUBROUTINE DGOP(TYPE, X, N, OP)           &      INTEGER TYPE             [input] -      DOUBLE PRECISION X(N)    [input/output]  &      CHARACTER*(*) OP         [input]        :      void DGOP_(long *type, double *x, long *n, char *op)              Double Global OPeration. E      X(1:N) is  a  vector  present  on  each  process.  DGOP  'sums'  E      elements  of X accross all nodes using the commutative operator  E      OP. The result is broadcast to all nodes. Supported  operations  E      include  '+', '*', 'max', 'min', 'absmax', 'absmin'. The use of  E      lowerecase is presently necessary. The routine is derived  from  E      one  by  Martyn Guest which in turn is modelled after the Intel  E      iPSC  GXXXX  routines.  XDR  data  translation  is   internally        enabled.          %      SUBROUTINE IGOP(TYPE, X, N, OP)           &      INTEGER TYPE             [input] -      INTEGER X(N)             [input/output]  &      CHARACTER*(*) OP         [input]        8      void IGOP_(long *type, long *x, long *n, char *op)              Integer Global OPeration.  2      The integer version of DGOP described above.                INTEGER FUNCTION MITOB(N)           &      INTEGER N                [input]        3      long MITOB_(long *n) ... better to use sizeof         A      Returns the no. of bytes that N integers (C longs)  occupy.                 INTEGER FUNCTION MDTOB(N)           &      INTEGER N                [input]        3      long MDTOB_(long *n) ... better to use sizeof         C      Returns the no. of bytes that N DOUBLE PRECISIONs (C doubles)  
      occupy.                 INTEGER FUNCTION MITOD(N)           &      INTEGER N                [input]        3      long MITOD_(long *n) ... better to use sizeof         @      Returns the minimum no. of DOUBLRE PRECSIONs that can hold       N INTEGERs.                 INTEGER FUNCTION MDTOI(N)           &      INTEGER N                [input]        3      long MDTOI_(long *n) ... better to use sizeof         7      Returns the minimum no. of INTEGERs that can hold        N DOUBLE PRECISIONs.          .      SUBROUTINE PFCOPY(TYPE, NODE0, FILENAME)          &      INTEGER TYPE             [input] &      INTEGER NODE0            [input] &      CHARACTER*(*) FILENAME   [input]        @      (void) PFILECOPY_(long *type, long *node0, char *filename)        E      Process NODE0 has access to the  unopened  file  with  name  in  E      FILENAME  the contents of which are to be copied to files known  E      to all  other  processes  using  messages  of  type  TYPE.  All  E      processes  call PFCOPY() simultaneously, as for BRDCST(). Since  E      processes may be working in the same directory it is  advisable  E      to have each process use a unique file name. The file is closed  "      at the end of the operation.        E      If the data in the file is  all  of  the  same  type  (integer,  E      double  etc.) AND there is no additional record structure (such  E      as that imposed by FORTRAN) TYPE should be set to reflect  this  E      so  that  data translation can occur between different machines  E      (the blocking is set to accomodate this). Otherwise  if  binary  E      transfer  is  not  meaningful  U'll  have  to  write  your  own  #      application specific routine.           $      INTEGER FUNCTION NICEFTN(INCR)                INTEGER INCR    [input]         E      Portable rapper around nice for FORTRAN users.  See  the  local  E      nice() system call man page for info. On the IPSC/DELTA this is  %      a null operation and returns 0.                                                                                                                                                                                                                                                                                                                                  ena.dgac.fr>8             <200003140539.GAA16810@estelle.cena.dgac.fr>8             <200003140548.GAA16895@estelle.cena.dgac.fr>8             <200003140558.GAA16960@estelle.cena.dgac.fr>8             <200003140609.HAA17039@estelle.cena.dgac.fr>8             <200003140620.HAA17107@estelle.cena.dgac.fr>8             <200003140640.HAA17215@estelle.cena.dgac.fr>8             <200003140656.HAA17293@estelle.cena.dgac.fr>8             <200003140709.IAA17368@estelle.cena.dgac.fr>8             <200003140725.IAA17435@estelle.cena.dgac.fr>8             <200003140747.IAA17528@estelle.cena.dgac.fr>8             <200003140800.JAA17678@estelle.cena.dgac.fr>8             <200003140813.JAA17756@estelle.cena.dgac.fr>8             <200003140835.JAA17864@estelle.cena.dgac.fr>8             <200003140911.KAA18105@estelle.cena.dgac.fr>8             <200003140938.KAA18311@estelle.cena.dgac.fr>9 In-Reply-To: <200003140938.KAA18311@estelle.cena.dgac.fr>  Precedence: listF List-Subscribe: <mailto:VMS-MOSAIC-request@LEVITTE.ORG?body=subscribe>J List-Unsubscribe: <mailto:VMS-MOSAIC-request@LEVITTE.ORG?body=unsubscribe>  2 L'adresse de votre destinataire n'est plus valide.  0 Vous devez utiliser une des adresses suivantes :  	 	@cena.fr  	@cena.dgac.fr  
 Cordialement,   + L'administrateur reseau du CENA Athis-Mons.    		  ----  / Your recipient's address is not valid any more.   * Please use one of the folowing addresses :  	 	@cena.fr  	@cena.dgac.fr   Regards,   The CENA Athis-Mons netmaster.                                         <<< PORT 134,34,7,106,8,192 3 >>> 200 Port 8.192 at Host 134.34.7.106 accepted.R* <<< RETR V36USER:[WEYPRIV.GAMESS]DMU.008F >>> 150 IMAGE retrieve of V36USER:[WEYPRIV.GAMESS]DMU.008;1 started.: >>> 226 Transfer completed.  1829 (8) bytes transferred. <<< PORT 134,34,7,106,8,193 3 >>> 200 Port 8.193 at Host 134.34.7.106 accepted.R* <<< RETR V36USER:[WEYPRIV.GAMESS]DMU.009F >>> 150 IMAGE retrieve of V36USER:[WEYPRIV.GAMESS]DMU.009;1 started.: >>> 226 Transfer completed.  1829 (8) bytes transferred. <<< PORT 134,34,7,106,8,194 3 >>> 200 Port 8.194 at Host 134.34.7.106 accepted.R* <<< RETR V36USER:[WEYPRIV.GAMESS]DMU.010F >>> 150 IMAGE retrieve of V36USER:[WEYPRIV.GAMESS]DMU.010;1 started.: >>> 226 Transfer completed.  1829 (8) bytes transferred. <<< PORT 134,34,7,106,8,195 3 >>> 200 Port 8.195 at Host 134.34.7.106 accepted.R* <<< RETR V36USER:[WEYPRIV.GAMESS]DMU.011F >>> 150 IMAGE retrieve of V36USER:[WEYPRIV.GAMESS]DMU.011;1 started.: >>> 226 Transfer completed.  1829 (8) bytes transferred. <<< PORT 134,34,7,106,8,196 3 >>> 200 Port 8.196 at Host 134.34.7.106 accepted.R* <<< RETR V36USER:[WEYPRIV.GAMESS]DMU.012F >>> 150 IMAGE retrieve of V36USER:[WEYPRIV.GAMESS]DMU.012;1 started.: >>> 226 Transfer completed.  1829 (8) bytes transferred. <<< PORT 134,34,7,106,8,197 3 >>> 200 Port 8.197 at Host 134.34.7.106 accepted.R* <<< RETR V36USER:[WEYPRIV.GAMESS]DMU.013F >>> 150 IMAGE retrieve of V36USER:[WEYPRIV.GAMESS]DMU.013;1 started.: >>> 226 Transfer completed.  1829 (8) bytes transferred. <<< PORT 134,34,7,106,8,198 3 >>> 200 Port 8.198 at Host 134.34.7.106 accepted.R* <<< RETR V36USER:[WEYPRIV.GAMESS]DMU.014F >>> 150 IMAGE retrieve of V36USER:[WEYPRIV.GAMESS]DMU.014;1 started.: >>> 226 Transfer completed.  1829 (8) bytes transferred. <<< PORT 134,34,7,106,8,199 3 >>> 200 Port 8.199 at Host 134.34.7.106 accepted.R* <<< RETR V36USER:[WEYPRIV.GAMESS]DMU.015F >>> 150 IMAGE retrieve of V36USER:[WEYPRIV.GAMESS]DMU.015;1 started.: >>> 226 Transfer completed.  1829 (8) bytes transferred. <<< PORT 134,34,7,106,8,200 3 >>> 200 Port 8.200 at Host 134.34.7.106 accepted.R* <<< RETR V36USER:[WEYPRIV.GAMESS]DMU.016F >>> 150 IMAGE retrieve of V36USER:[WEYPRIV.GAMESS]DMU.016;1 started.: >>> 226 Transfer completed.  1829 (8) bytes transferred. <<< PORT 134,34,7,106,8,201 3 >>> 200 Port 8.201 at Host 134.34.7.106 accepted.R* <<< RETR V36USER:[WEYPRIV.GAMESS]DMU.017F >>> 150 IMAGE retrieve of V36USER:[WEYPRIV.GAMESS]DMU.017;1 started.