Actual source code: receive.c

  1: /*
  2:  
  3:   This is a MATLAB Mex program which waits at a particular 
  4:   portnumber until a matrix arrives,it then returns to 
  5:   matlab with that matrix.

  7:   Usage: A = receive(portnumber);  portnumber obtained with openport();
  8:  
  9:         Written by Barry Smith, bsmith@mcs.anl.gov 4/14/92
 10:          Updated by Ridhard Katz, katz@ldeo.columbia.edu 9/28/03

 12:   Since this is called from Matlab it cannot be compiled with C++.
 13: */

 15: #include <stdio.h>
 16:  #include petscsys.h
 17:  #include src/sys/src/viewer/impls/socket/socket.h
 18: #include "mex.h"
 19: EXTERN PetscErrorCode ReceiveSparseMatrix(mxArray **,int);
 20: EXTERN PetscErrorCode ReceiveDenseIntMatrix(mxArray **,int);
 21: EXTERN PetscErrorCode ReceiveDenseMatrix(mxArray **,int);

 23: #define PETSC_MEX_ERROR(a) {fprintf(stdout,"RECEIVE: %s \n",a); return ;}
 24: /*-----------------------------------------------------------------*/
 25: /*                                                                 */
 26: /*-----------------------------------------------------------------*/
 29: void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[])
 30: {
 31:  int    type,t;

 33:   /* check output parameters */
 34:   if (nlhs != 1) PETSC_MEX_ERROR("Receive requires one output argument.");

 36:   if (!nrhs) PETSC_MEX_ERROR("Receive requires one input argument.");
 37:   t = (int)*mxGetPr(prhs[0]);

 39:   /* get type of matrix */
 40:   if (PetscBinaryRead(t,&type,1,PETSC_INT))   PETSC_MEX_ERROR("reading type");

 42:   if (type == DENSEREAL) ReceiveDenseMatrix(plhs,t);
 43:   if (type == DENSEINT) ReceiveDenseIntMatrix(plhs,t);
 44:   if (type == DENSECHARACTER) {
 45:     if (ReceiveDenseMatrix(plhs,t)) return;
 46:     /* mxSetDispMode(plhs[0],1); */
 47:   }
 48:   if (type == SPARSEREAL) ReceiveSparseMatrix(plhs,t);
 49:   return;
 50: }