Esempio n. 1
0
static size_t SAC4SNetAllocSize(void *data)
{
  int dims, num_elems = 1;

  dims = SACARGgetDim(data);
  for (int i = 0; i < dims; i++) {
    num_elems *= SACARGgetShape(data, i);
  }

  return num_elems * sizeOfType(SACARGgetBasetype(data));
}
Esempio n. 2
0
static void SAC4SNetMPIPackFun(void *sacdata, void *buf)
{
  int *shape;
  void *contents = NULL;
  SACarg *data = sacdata;
  int type, dims, num_elems = 1;

  type = SACARGgetBasetype(data);
  dims = SACARGgetDim(data);
  shape = SNetMemAlloc(dims * sizeof(int));

  for (int i = 0; i < dims; i++) {
    shape[i] = SACARGgetShape(data, i);
    num_elems *= SACARGgetShape(data, i);
  }

  SNetDistribPack(&type, buf, MPI_INT, 1);
  SNetDistribPack(&dims, buf, MPI_INT, 1);
  SNetDistribPack(shape, buf, MPI_INT, dims);

  SNetMemFree(shape);

  switch (type) {
    case SACint:
      contents = SACARGconvertToIntArray(SACARGnewReference(data));
      break;
    case SACdbl:
      contents = SACARGconvertToDoubleArray(SACARGnewReference(data));
      break;
    case SACflt:
      contents = SACARGconvertToFloatArray(SACARGnewReference(data));
      break;
    default:
      Error( "Unsupported basetype in pack function.");
      break;
  }

  SNetDistribPack(contents, buf, SAC4SNetBasetypeToMPIType(type), num_elems);
  SNetMemFree(contents);
}
Esempio n. 3
0
static void SAC4SNetDataSerialise( FILE *file, void *ptr)
{
  int i, dim;
  SACarg *ret, *arg = (SACarg*)ptr;
  char *basetype_str;
  int btype;

  btype = SACARGgetBasetype( arg);

  if( btype <= MaxTNum()) {
    basetype_str = SNetMemAlloc( 
                      (strlen( t_descr[ btype]) + 1) * sizeof( char));
    strcpy( basetype_str, t_descr[ btype]);
  } 
  else {
    basetype_str = SNetMemAlloc( 
                      (strlen( "(UDT)") + 1) * sizeof( char));
    strcpy( basetype_str, "(UDT)");
  }
   
  if( arg != NULL) { 

    dim = SACARGgetDim( arg);
    fprintf( file, "\n%s %s %d ", IDSTRINGPRE, 
                                  basetype_str, 
                                  dim);
    for( i=0; i<dim; i++) {
      fprintf( file, "%d ",SACARGgetShape( arg, i));
    }
    fprintf(file, " %s\n", IDSTRINGSUF);

    /* create a stub hive for the SAC calls */
    SAC_AttachHive(SAC_AllocHive(1, 2, NULL, NULL));

    switch( SACARGgetBasetype( arg)) {
      case T_int: 
        SAC4SNetFibreIO__PrintIntArray2( 
            &ret,
            SACARGconvertFromVoidPointer( SACTYPE_StdIO_File, file),
            SACARGnewReference( arg));
      break;
      case T_float: 
        SAC4SNetFibreIO__PrintFloatArray2( 
            &ret,
            SACARGconvertFromVoidPointer( SACTYPE_StdIO_File, file),
            SACARGnewReference( arg));
      break;
      case T_double: 
        SAC4SNetFibreIO__PrintDoubleArray2( 
            &ret,
            SACARGconvertFromVoidPointer( SACTYPE_StdIO_File, file),
            SACARGnewReference( arg));
      break;
      default:
        fprintf( file, "## UNSERIALISABLE BASETYPE (%d) ##\n", btype);
      break;
    }

    /* release the stub hive */
    SAC_ReleaseHive(SAC_DetachHive());

  }
  SNetMemFree( basetype_str);
}