ABACUS/src/XXX_VOA/SF_4p_client.cc

68 lines
1.8 KiB
C++
Executable File

/**********************************************************
This software is part of J.-S. Caux's C++ library.
Copyright (c) J.-S. Caux.
-----------------------------------------------------------
File: SF_4p_client.cc
Purpose: 4 spinon contrib to S(k, omega) for XXX_h0, parallel code using MPICH.
Client part.
***********************************************************/
#include "mpi.h"
#include "ABACUS.h"
namespace ABACUS {
void SF_4p_opt_client (MPI_Comm comm, I_table Itable)
{
int server = 0;
int rank;
MPI_Status status;
int client_request_size = 7;
DP client_request[client_request_size];
// this is:
// ik
// iomega
// k
// omega
// req_prec
// Npts_K
// Npts_W
int client_result_size = 8;
DP client_result[client_result_size]; // as above, + SF_4p
MPI_Comm_rank (comm, &rank);
MPI_Recv (client_request, client_request_size, MPI_DOUBLE, server, MPI_ANY_TAG, comm, &status);
while (status.MPI_TAG) {
// Result: SF_4p_opt (k, omega)
client_result[0] = client_request[0];
client_result[1] = client_request[1];
client_result[2] = client_request[2];
client_result[3] = client_request[3];
client_result[4] = client_request[4];
client_result[5] = client_request[5];
client_result[6] = client_request[6];
client_result[7] = SF_4p_opt (client_request[2], client_request[3], client_request[4],
int(client_request[5]), int(client_request[6]), Itable);
MPI_Send (client_result, client_result_size, MPI_DOUBLE, server, status.MPI_TAG, comm);
// Wait for subsequent request from server
MPI_Recv (client_request, client_request_size, MPI_DOUBLE, server, MPI_ANY_TAG, comm, &status);
}
return;
}
} // namespace ABACUS