//------------------------------------------------------------
// $Id: deliverVolume.cc,v 1.1.1.1 1999/11/25 06:26:09 yamauchi Exp $
//------------------------------------------------------------
//	deliver volume for (M\pi)^2
//	1998/11/16: for 1PE version
//	(C) 1998 Copyright YAMAUCHI Hitoshi 山内 斉
//------------------------------------------------------------
#include <stdio.h>
#include <assert.h>
#include <iostream.h>

#include "mpi2communication.h"
#include "volume.h"
#include "volumeFuncs.h"

//------------------------------------------------------------
// referring global vars
//	test のためにはこの関数群をすり換えれば良い
//------------------------------------------------------------
#include "ProcObj.h"

inline IntVec3 getPEIDfromSpcPos(const IntVec3 &spcpos)
{
    return(GpHost->getPEIDfromSpcPos(spcpos));
}

inline int getRankFromPEID(const IntVec3 &PEId)
{
    return(GpHost->getRank(PEId));
}

//------------------------------------------------------------
// deliverOneVolume 
// 	一つの volume を分配する
//	ここでは volume は既に副空間の幅によって分割済み
//------------------------------------------------------------
void deliverOneVolume(VolumeClass *pVolumeToDeliver)
{
    IntVec3 spcpos = (pVolumeToDeliver->getSubGrid()).getSpcPos();
    assert((pVolumeToDeliver->getSubGrid()).isInited() == YES);
    IntVec3 peid = getPEIDfromSpcPos(spcpos);
    commMpi2_sendVolume(getRankFromPEID(peid), pVolumeToDeliver);
}
