68 lines
1.8 KiB
C++
Executable File
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
|