Commit 563e5a36 authored by Thomas Jahns's avatar Thomas Jahns 🤸
Browse files

Replace MPI-centric marshalling with generic code.

* Said generic can be replaced with an MPI-specific version, thus
  cleanly separating serialization of meta-data itself and MPI-
  communication.
parent ae16bbdd
......@@ -240,8 +240,9 @@ src/pio_posixasynch.c -text
src/pio_posixfpguardsendrecv.c -text
src/pio_posixnonb.c -text
src/pio_record_send.c -text
src/pio_rpc.c -text
src/pio_rpc.h -text
src/pio_serialize.c -text
src/pio_serialize.h -text
src/pio_server.c -text
src/pio_server.h -text
src/pio_util.c -text
......@@ -249,6 +250,10 @@ src/pio_util.h -text
src/pkgconfig/cdi.pc.in -text
src/resource_handle.c -text
src/resource_handle.h -text
src/resource_unpack.c -text
src/resource_unpack.h -text
src/serialize.c -text
src/serialize.h -text
src/service.h -text
src/servicelib.c -text
src/stream.c -text
......
......@@ -9,11 +9,10 @@
#include <yaxt.h>
#include "cdi.h"
#include "pio_util.h"
#include "resource_handle.h"
#include "resource_unpack.h"
extern int reshListCompare ( int, int );
extern void reshPackBufferCreate ( char **, int *, MPI_Comm );
extern void reshPackBufferDestroy ( char ** );
extern void rpcUnpackResources ( char *, int, MPI_Comm );
extern void arrayDestroy ( void );
enum {
......@@ -192,15 +191,15 @@ void modelRun ( MPI_Comm comm )
if ( streamID < 0 ) xabort ( "Could not open file" );
defineStream ( streamID, vlistID );
reshPackBufferCreate ( &sendBuffer, &bufferSize, comm );
xmpi ( MPI_Send ( sendBuffer, bufferSize, MPI_PACKED, 0, 0, comm ));
reshPackBufferCreate(&sendBuffer, &bufferSize, &comm);
xmpi ( MPI_Send ( sendBuffer, bufferSize, MPI_PACKED, 0, 0, comm ));
recvBuffer = xmalloc ( bufferSize * sizeof ( char ));
xmpi ( MPI_Recv ( recvBuffer, bufferSize, MPI_PACKED, 0,
0, comm, &status ));
pioNamespaceSetActive ( 1 );
rpcUnpackResources ( recvBuffer, bufferSize, comm );
free ( recvBuffer );
reshUnpackResources(recvBuffer, bufferSize, &comm);
free ( recvBuffer );
reshPackBufferDestroy ( &sendBuffer );
differ = reshListCompare ( 0, 1 );
......
......@@ -55,6 +55,8 @@ libcdi_la_SOURCES = \
model.h \
namespace.c \
namespace.h \
serialize.h \
serialize.c \
pio.c \
pio.h \
pio_comm.c \
......@@ -69,12 +71,15 @@ libcdi_la_SOURCES = \
pio_posixfpguardsendrecv.c \
pio_posixnonb.c \
pio_list_set.c \
pio_rpc.c \
resource_unpack.h \
resource_unpack.c \
pio_rpc.h \
pio_server.c \
pio_server.h \
pio_util.c \
pio_util.h \
pio_serialize.h \
pio_serialize.c \
resource_handle.c\
resource_handle.h\
service.h \
......
......@@ -113,11 +113,12 @@ am_libcdi_la_OBJECTS = basetime.lo binary.lo calendar.lo cdf.lo \
cdf_int.lo cdi_error.lo cdi_util.lo cdiFortran.lo \
cgribexlib.lo dmemory.lo error.lo extralib.lo file.lo \
gaussgrid.lo gribapi.lo grid.lo ieglib.lo institution.lo \
model.lo namespace.lo pio.lo pio_comm.lo pio_dbuffer.lo \
pio_interface.lo pio_mpinonb.lo pio_record_send.lo \
pio_posixasynch.lo pio_posixfpguardsendrecv.lo \
pio_posixnonb.lo pio_list_set.lo pio_rpc.lo pio_server.lo \
pio_util.lo resource_handle.lo servicelib.lo stream_cdf.lo \
model.lo namespace.lo serialize.lo pio.lo pio_comm.lo \
pio_dbuffer.lo pio_interface.lo pio_mpinonb.lo \
pio_record_send.lo pio_posixasynch.lo \
pio_posixfpguardsendrecv.lo pio_posixnonb.lo pio_list_set.lo \
resource_unpack.lo pio_server.lo pio_util.lo pio_serialize.lo \
resource_handle.lo servicelib.lo stream_cdf.lo \
stream_cgribex.lo stream_ext.lo stream_grb.lo \
stream_gribapi.lo stream_history.lo stream_ieg.lo cdi_int.lo \
stream_record.lo stream_srv.lo stream_var.lo table.lo taxis.lo \
......@@ -387,6 +388,8 @@ libcdi_la_SOURCES = \
model.h \
namespace.c \
namespace.h \
serialize.h \
serialize.c \
pio.c \
pio.h \
pio_comm.c \
......@@ -401,12 +404,15 @@ libcdi_la_SOURCES = \
pio_posixfpguardsendrecv.c \
pio_posixnonb.c \
pio_list_set.c \
pio_rpc.c \
resource_unpack.h \
resource_unpack.c \
pio_rpc.h \
pio_server.c \
pio_server.h \
pio_util.c \
pio_util.h \
pio_serialize.h \
pio_serialize.c \
resource_handle.c\
resource_handle.h\
service.h \
......@@ -591,10 +597,12 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pio_posixfpguardsendrecv.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pio_posixnonb.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pio_record_send.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pio_rpc.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pio_serialize.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pio_server.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pio_util.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resource_handle.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resource_unpack.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/serialize.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/servicelib.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stream.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stream_cdf.Plo@am__quote@
......
......@@ -106,11 +106,11 @@ extern "C" {
#define DATATYPE_UINT32 332
/* internal data types */
#define DATATYPE_INT 251
#define DATATYPE_FLT 252
#define DATATYPE_TXT 253
#define DATATYPE_CPX 254
#define DATATYPE_UCHAR 255
/* Chunks */
......
......@@ -181,6 +181,8 @@
PARAMETER (DATATYPE_TXT = 253)
INTEGER DATATYPE_CPX
PARAMETER (DATATYPE_CPX = 254)
INTEGER DATATYPE_UCHAR
PARAMETER (DATATYPE_UCHAR = 255)
!
! Chunks
!
......
......@@ -19,13 +19,19 @@
#endif
#include "pio_util.h"
#include "namespace.h"
#include "serialize.h"
#include "resource_handle.h"
#include "pio_rpc.h"
#include "resource_unpack.h"
#ifdef USE_MPI
#include "pio_comm.h"
#endif
#if defined (HAVE_LIBCGRIBEX)
#include "cgribex.h"
#endif
extern int cdiPioSerialOpenFileMap(int streamID);
int cdiDefaultCalendar = CALENDAR_PROLEPTIC;
int cdiDefaultInstID = CDI_UNDEFID;
......@@ -77,19 +83,14 @@ static int cdiHaveMissval = 0;
static int streamCompareP ( void * streamptr1, void * streamptr2 );
static void streamDestroyP ( void * streamptr );
static void streamPrintP ( void * streamptr, FILE * fp );
#ifdef USE_MPI
static int streamGetPackSize ( void * streamptr, MPI_Comm comm );
static void streamPack ( void * streamptr, void * buff, int size,
int * position, MPI_Comm comm );
static int streamGetPackSize ( void * streamptr, void *context);
static void streamPack ( void * streamptr, void * buff, int size, int * position, void *context );
static int streamTxCode ( void );
#endif
resOps streamOps = { streamCompareP, streamDestroyP, streamPrintP,
#ifdef USE_MPI
streamGetPackSize,
streamPack,
streamTxCode
#endif
};
long cdiGetenvInt(char *envName)
......@@ -706,9 +707,8 @@ cdiStreamSetupVlist(stream_t *streamptr, int vlistID, int vlistIDorig)
}
#ifdef USE_MPI
static int
streamTxCode ( void )
streamTxCode(void)
{
return STREAM;
}
......@@ -717,65 +717,85 @@ streamTxCode ( void )
int streamNint = 11 ;
static
int streamGetPackSize ( void * voidP, MPI_Comm comm )
static int
streamGetPackSize(void * voidP, void *context)
{
stream_t * streamP = ( stream_t * ) voidP;
int packBufferSize = 0, size;
xmpi ( MPI_Pack_size ( streamNint, MPI_INT, comm, &size ));
packBufferSize += size;
xmpi ( MPI_Pack_size ( 1, MPI_DOUBLE, comm, &size ));
packBufferSize += 2 * size;
xmpi ( MPI_Pack_size (( int ) strlen ( streamP->filename ) + 1,
MPI_CHAR, comm, &size ));
packBufferSize += size;
xmpi ( MPI_Pack_size ( 1, MPI_DOUBLE, comm, &size ));
packBufferSize += size;
int packBufferSize
= serializeGetSize(streamNint, DATATYPE_INT, context)
+ serializeGetSize(2, DATATYPE_FLT64, context)
+ serializeGetSize((int)strlen(streamP->filename) + 1,
DATATYPE_TXT, context)
+ serializeGetSize(1, DATATYPE_FLT64, context);
return packBufferSize;
}
static
void streamPack ( void * streamptr, void * packBuffer, int packBufferSize,
int * packBufferPos, MPI_Comm comm )
static void
streamPack(void * streamptr, void * packBuffer, int packBufferSize,
int * packBufferPos, void *context)
{
stream_t * streamP = ( stream_t * ) streamptr;
int intBuffer[streamNint];
int intBuffer[streamNint];
double d;
intBuffer[0] = streamP->self;
intBuffer[1] = streamP->filetype;
intBuffer[2] = ( int ) strlen ( streamP->filename ) + 1;
intBuffer[2] = (int)strlen(streamP->filename) + 1;
intBuffer[3] = streamP->vlistID;
intBuffer[4] = streamP->vlistIDorig;
intBuffer[5] = streamP->byteorder;
intBuffer[6] = streamP->comptype;
intBuffer[7] = streamP->complevel;
intBuffer[7] = streamP->complevel;
intBuffer[8] = cdiDataUnreduced;
intBuffer[9] = cdiSortName;
intBuffer[10] = cdiHaveMissval;
xmpi ( MPI_Pack ( intBuffer, streamNint, MPI_INT,
packBuffer, packBufferSize, packBufferPos, comm ));
d = xchecksum ( DATATYPE_INT , streamNint, intBuffer );
xmpi ( MPI_Pack ( &d, 1, MPI_DOUBLE,
packBuffer, packBufferSize, packBufferPos, comm ));
xmpi ( MPI_Pack ( &cdiDefaultMissval, 1, MPI_DOUBLE,
packBuffer, packBufferSize, packBufferPos, comm ));
xmpi ( MPI_Pack ( streamP->filename, intBuffer[2], MPI_CHAR,
packBuffer, packBufferSize, packBufferPos, comm ));
d = xchecksum ( DATATYPE_TXT, intBuffer[2], &streamP->filename );
xmpi ( MPI_Pack ( &d, 1, MPI_DOUBLE,
packBuffer, packBufferSize, packBufferPos, comm ));
serializePack(intBuffer, streamNint, DATATYPE_INT, packBuffer, packBufferSize, packBufferPos, context);
d = xchecksum(DATATYPE_INT, streamNint, intBuffer);
serializePack(&d, 1, DATATYPE_FLT64, packBuffer, packBufferSize, packBufferPos, context);
serializePack(&cdiDefaultMissval, 1, DATATYPE_FLT64, packBuffer, packBufferSize, packBufferPos, context);
serializePack(streamP->filename, intBuffer[2], DATATYPE_TXT, packBuffer, packBufferSize, packBufferPos, context);
d = xchecksum(DATATYPE_TXT, intBuffer[2], &streamP->filename);
serializePack(&d, 1, DATATYPE_FLT64, packBuffer, packBufferSize, packBufferPos, context);
}
#endif
struct streamAssoc
streamUnpack(char * unpackBuffer, int unpackBufferSize,
int * unpackBufferPos, int nspTarget, void *context)
{
int intBuffer[streamNint], streamID;
double d;
char filename[CDI_MAX_NAME];
serializeUnpack(unpackBuffer, unpackBufferSize, unpackBufferPos,
intBuffer, streamNint, DATATYPE_INT, context);
serializeUnpack(unpackBuffer, unpackBufferSize, unpackBufferPos,
&d, 1, DATATYPE_FLT64, context);
xassert(xchecksum(DATATYPE_INT, streamNint, intBuffer ) == d);
serializeUnpack(unpackBuffer, unpackBufferSize, unpackBufferPos,
&cdiDefaultMissval, 1, DATATYPE_FLT64, context);
serializeUnpack(unpackBuffer, unpackBufferSize, unpackBufferPos,
&filename, intBuffer[2], DATATYPE_TXT, context);
serializeUnpack(unpackBuffer, unpackBufferSize, unpackBufferPos,
&d, 1, DATATYPE_FLT64, context);
xassert(d == xchecksum(DATATYPE_TXT, intBuffer[2], filename));
streamID = streamOpenWrite ( filename, intBuffer[1] );
xassert ( streamID >= 0 &&
namespaceAdaptKey ( intBuffer[0], nspTarget ) == streamID );
streamDefByteorder(streamID, intBuffer[5]);
streamDefCompType(streamID, intBuffer[6]);
streamDefCompLevel(streamID, intBuffer[7]);
cdiDefGlobal("REGULARGRID", intBuffer[8]);
cdiDefGlobal("SORTNAME", intBuffer[9]);
cdiDefGlobal("HAVE_MISSVAL", intBuffer[10]);
struct streamAssoc retval = { streamID, intBuffer[3], intBuffer[4] };
return retval;
}
/*
* Local Variables:
* c-file-style: "Java"
......
......@@ -344,6 +344,16 @@ void str2uuid(const char *uuidstr, char *uuid);
#define CDI_UNIT_DM 5
#define CDI_UNIT_M 6
struct streamAssoc
{
int streamID, vlistID, vlistIDorig;
};
struct streamAssoc
streamUnpack(char * unpackBuffer, int unpackBufferSize,
int * unpackBufferPos, int nspTarget, void *context);
char *cdiUnitNamePtr(int cdi_unit);
......
This diff is collapsed.
......@@ -8,8 +8,9 @@
#include "resource_handle.h"
#include "pio_util.h"
#include "resource_handle.h"
#include "pio_rpc.h"
#include "resource_unpack.h"
#include "namespace.h"
#include "serialize.h"
#undef UNDEFID
#define UNDEFID -1
......@@ -34,17 +35,12 @@ institute_t;
static int instituteCompareP ( void * instituteptr1, void * instituteptr2 );
static void instituteDestroyP ( void * instituteptr );
static void institutePrintP ( void * instituteptr, FILE * fp );
#ifdef USE_MPI
static int instituteGetSizeP ( void * instituteptr, MPI_Comm comm );
static void institutePackP ( void * instituteptr, void *buf, int size,
int *position, MPI_Comm comm );
static int instituteGetSizeP ( void * instituteptr, void *context );
static void institutePackP ( void * instituteptr, void *buf, int size, int *position, void *context );
static int instituteTxCode ( void );
#endif
resOps instituteOps = { instituteCompareP, instituteDestroyP, institutePrintP
#ifdef USE_MPI
,instituteGetSizeP, institutePackP, instituteTxCode
#endif
};
static int * instituteInitializedNsp;
......@@ -354,7 +350,6 @@ void institutePrintP ( void * instituteptr, FILE * fp )
}
#ifdef USE_MPI
static int
instituteTxCode ( void )
{
......@@ -365,22 +360,16 @@ enum {
institute_nints = 5,
};
static
int instituteGetSizeP ( void * instituteptr, MPI_Comm comm )
static int instituteGetSizeP ( void * instituteptr, void *context)
{
institute_t *p = instituteptr;
int txsize = 0, txinc;
xmpi(MPI_Pack_size(institute_nints, MPI_INT, comm, &txsize));
xmpi(MPI_Pack_size(strlen(p->name) + 1, MPI_CHAR, comm, &txinc));
txsize += txinc;
xmpi(MPI_Pack_size(strlen(p->longname) + 1, MPI_CHAR, comm, &txinc));
txsize += txinc;
int txsize = serializeGetSize(institute_nints, DATATYPE_INT, context)
+ serializeGetSize(strlen(p->name) + 1, DATATYPE_TXT, context)
+ serializeGetSize(strlen(p->longname) + 1, DATATYPE_TXT, context);
return txsize;
}
static
void institutePackP ( void * instituteptr, void *buf, int size,
int *position, MPI_Comm comm )
static void institutePackP(void * instituteptr, void *buf, int size, int *position, void *context)
{
institute_t *p = instituteptr;
int tempbuf[institute_nints];
......@@ -389,30 +378,27 @@ void institutePackP ( void * instituteptr, void *buf, int size,
tempbuf[2] = p->subcenter;
tempbuf[3] = (int)strlen(p->name) + 1;
tempbuf[4] = (int)strlen(p->longname) + 1;
xmpi(MPI_Pack(tempbuf, institute_nints, MPI_INT, buf, size, position, comm));
xmpi(MPI_Pack(p->name, tempbuf[3], MPI_CHAR, buf, size, position, comm));
xmpi(MPI_Pack(p->longname, tempbuf[4], MPI_CHAR, buf, size, position, comm));
serializePack(tempbuf, institute_nints, DATATYPE_INT, buf, size, position, context);
serializePack(p->name, tempbuf[3], DATATYPE_TXT, buf, size, position, context);
serializePack(p->longname, tempbuf[4], DATATYPE_TXT, buf, size, position, context);
}
int
instituteUnpack(void *buf, int size, int *position, int nspTarget,
MPI_Comm comm)
int instituteUnpack(void *buf, int size, int *position, int nspTarget, void *context)
{
int tempbuf[institute_nints];
int instituteID;
char *name, *longname;
xmpi(MPI_Unpack(buf, size, position, tempbuf, institute_nints, MPI_INT, comm));
serializeUnpack(buf, size, position, tempbuf, institute_nints, DATATYPE_INT, context);
name = xmalloc(tempbuf[3]);
longname = xmalloc(tempbuf[4]);
xmpi(MPI_Unpack(buf, size, position, name, tempbuf[3], MPI_CHAR, comm));
xmpi(MPI_Unpack(buf, size, position, longname, tempbuf[4], MPI_CHAR, comm));
serializeUnpack(buf, size, position, name, tempbuf[3], DATATYPE_TXT, context);
serializeUnpack(buf, size, position, longname, tempbuf[4], DATATYPE_TXT, context);
instituteID = institutDef(tempbuf[1], tempbuf[2], name, longname);
// FIXME: this should work, once all types are transferred
//xassert(instituteID == tempbuf[0]);
return instituteID;
}
#endif
/*
* Local Variables:
* c-file-style: "Java"
......
#ifndef INSTITUTION_H
#define INSTITUTION_H
#ifdef USE_MPI
int
instituteUnpack(void *buf, int size, int *position, int,
MPI_Comm comm);
#endif
void *context);
#endif
......
......@@ -132,7 +132,9 @@ c="dmemory.c \
binary.c \
cdf.c \
namespace.c \
serialize.c \
resource_handle.c \
resource_unpack.c \
pio_util.c \
pio.c \
pio_interface.c \
......@@ -150,7 +152,7 @@ h="cdi_limits.h taxis.h dtypes.h file.h service.h extra.h \
tablepar.h table.h gaussgrid.h grid.h zaxis.h varscan.h binary.h swap.h \
service.h stream_srv.h stream_ext.h stream_ieg.h cdf_int.h \
cdf.h vlist.h vlist_var.h vlist_att.h model.h institution.h \
namespace.h resource_handle.h pio_util.h pio.h pio_impl.h"
namespace.h resource_handle.h resource_unpack.h pio_util.h pio.h pio_impl.h serialize.h"
#cat $h >> ${PROG}
#cat $c | grep -v '#include' | grep -v '# include' >> ${PROG}
......
......@@ -7,8 +7,9 @@
#include "cdi_int.h"
#include "pio_util.h"
#include "resource_handle.h"
#include "pio_rpc.h"
#include "resource_unpack.h"
#include "namespace.h"
#include "serialize.h"
#undef UNDEFID
#define UNDEFID -1
......@@ -37,17 +38,13 @@ static void modelInit(void);
static int modelCompareP ( void * modelptr1, void * modelptr2 );
static void modelDestroyP ( void * modelptr );
static void modelPrintP ( void * modelptr, FILE * fp );
#ifdef USE_MPI
static int modelGetSizeP ( void * modelptr, MPI_Comm comm );
static int modelGetSizeP ( void * modelptr, void *context);
static void modelPackP ( void * modelptr, void * buff, int size,
int *position, MPI_Comm comm);
int *position, void *context);
static int modelTxCode ( void );
#endif
resOps modelOps = { modelCompareP, modelDestroyP, modelPrintP
#ifdef USE_MPI
, modelGetSizeP, modelPackP, modelTxCode
#endif
};
static
......@@ -288,8 +285,6 @@ void modelPrintP ( void * modelptr, FILE * fp )
}
#ifdef USE_MPI
static int
modelTxCode ( void )
{
......@@ -301,21 +296,16 @@ enum {
};
static
int modelGetSizeP ( void * modelptr, MPI_Comm comm )
static int modelGetSizeP(void * modelptr, void *context)
{
model_t *p = modelptr;
int txsize = 0, txinc;
xmpi(MPI_Pack_size(model_nints, MPI_INT, comm, &txsize));
xmpi(MPI_Pack_size(strlen(p->name) + 1, MPI_CHAR, comm, &txinc));
txsize += txinc;
int txsize = serializeGetSize(model_nints, DATATYPE_INT, context)
+ serializeGetSize(strlen(p->name) + 1, DATATYPE_TXT, context);
return txsize;
}
static
void modelPackP ( void * modelptr, void * buf, int size,
int *position, MPI_Comm comm )
static void modelPackP(void * modelptr, void * buf, int size, int *position, void *context)
{
model_t *p = modelptr;
int tempbuf[model_nints];
......@@ -323,27 +313,25 @@ void modelPackP ( void * modelptr, void * buf, int size,
tempbuf[1] = p->instID;
tempbuf[2] = p->modelgribID;
tempbuf[3] = (int)strlen(p->name) + 1;
xmpi(MPI_Pack(tempbuf, model_nints, MPI_INT, buf, size, position, comm));
xmpi(MPI_Pack(p->name, tempbuf[3], MPI_CHAR, buf, size, position, comm));
serializePack(tempbuf, model_nints, DATATYPE_INT, buf, size, position, context);
serializePack(p->name, tempbuf[3], DATATYPE_TXT, buf, size, position, context);
}
int
modelUnpack(void *buf, int size, int *position, int nspTarget,
MPI_Comm comm)
modelUnpack(void *buf, int size, int *position, int nspTarget, void *context)
{
int tempbuf[model_nints];
int modelID;
char *name;
xmpi(MPI_Unpack(buf, size, position, tempbuf, model_nints, MPI_INT, comm));
serializeUnpack(buf, size, position, tempbuf, model_nints, DATATYPE_INT, context);
name = xmalloc(tempbuf[3]);
xmpi(MPI_Unpack(buf, size, position, name, tempbuf[3], MPI_CHAR, comm));
serializeUnpack(buf, size, position, name, tempbuf[3], DATATYPE_TXT, context);
modelID = modelDef( namespaceAdaptKey ( tempbuf[1], nspTarget ), tempbuf[2], name);
// FIXME: this should work, once all types are transferred
//assert(modelID == tempbuf[0]);
return modelID;
}
#endif
/*
* Local Variables:
* c-file-style: "Java"
......
#ifndef MODEL_H
#define MODEL_H
#ifdef USE_MPI
int
modelUnpack(void *buf, int size, int *position,
int, MPI_Comm comm);
#endif
int, void *context);
#endif