mirror of
https://github.com/NGSolve/netgen.git
synced 2025-01-27 13:20:34 +05:00
nglib
This commit is contained in:
parent
faad040fb0
commit
6bb2a37939
113
nglib/parallelfunc.cpp
Normal file
113
nglib/parallelfunc.cpp
Normal file
@ -0,0 +1,113 @@
|
||||
#ifdef PARALLEL
|
||||
|
||||
#include "dlfcn.h"
|
||||
|
||||
|
||||
// #include <mystdlib.h>
|
||||
|
||||
#include <meshing.hpp>
|
||||
|
||||
// #include <visual.hpp>
|
||||
|
||||
|
||||
#include <meshing.hpp>
|
||||
|
||||
void (*NGS_ParallelRun) (const string & message) = NULL;
|
||||
|
||||
|
||||
namespace netgen
|
||||
{
|
||||
#include "../interface/writeuser.hpp"
|
||||
extern string ngdir;
|
||||
}
|
||||
|
||||
void Parallel_Exit();
|
||||
|
||||
|
||||
namespace netgen {
|
||||
extern AutoPtr<Mesh> mesh;
|
||||
// extern VisualSceneMesh vsmesh;
|
||||
extern DLL_HEADER MeshingParameters mparam;
|
||||
}
|
||||
|
||||
using namespace netgen;
|
||||
using netgen::RegisterUserFormats;
|
||||
|
||||
namespace netgen
|
||||
{
|
||||
int id, ntasks;
|
||||
MPI_Comm mesh_comm;
|
||||
}
|
||||
|
||||
|
||||
void ParallelRun()
|
||||
{
|
||||
string message;
|
||||
MPI_Status status;
|
||||
|
||||
|
||||
MPI_Comm_size(MPI_COMM_WORLD, &ntasks);
|
||||
MPI_Comm_rank(MPI_COMM_WORLD, &id);
|
||||
|
||||
while ( true )
|
||||
{
|
||||
message = MyMPI_RecvCmd();
|
||||
|
||||
if ( message.compare(0, 3, "ngs") == 0 )
|
||||
{
|
||||
if (NGS_ParallelRun == NULL)
|
||||
{
|
||||
static int timer = NgProfiler::CreateTimer ("load shared library ngsolve");
|
||||
NgProfiler::RegionTimer reg (timer);
|
||||
|
||||
|
||||
void * handle = dlopen ("libngsolve.so", RTLD_NOW | RTLD_GLOBAL);
|
||||
if (!handle)
|
||||
{
|
||||
cerr << "cannot load shared library libngsolve.so" << endl;
|
||||
exit(1);
|
||||
}
|
||||
|
||||
NGS_ParallelRun = (void (*) (const string & message)) dlsym (handle, "NGS_ParallelRun");
|
||||
|
||||
if (!NGS_ParallelRun)
|
||||
{
|
||||
cerr << "cannot bind function NGS_ParallelRun" << endl;
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
(*NGS_ParallelRun) (message);
|
||||
}
|
||||
else if ( message == "mesh" )
|
||||
{
|
||||
VT_USER_START ("Mesh::ReceiveParallelMesh");
|
||||
mesh.Reset( new netgen::Mesh);
|
||||
mesh->SendRecvMesh();
|
||||
VT_USER_END ("Mesh::ReceiveParallelMesh");
|
||||
}
|
||||
|
||||
else if ( message == "visualize" )
|
||||
{
|
||||
cout << "parallel message visualize depreciated" << endl;
|
||||
}
|
||||
|
||||
else if ( message == "bcastparthread" )
|
||||
{
|
||||
MyMPI_Bcast (mparam.parthread);
|
||||
}
|
||||
|
||||
else if ( message == "end" )
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
PrintMessage ( 1, "received unidentified message '" + message + "'\n");
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user