saída cout em openMP

Se você paralelizou seu código com openMP, logo perceberá que usar std :: cout
não funcionará, pois as strings de outras threads podem ser geradas ao mesmo tempo.

Uma solução é usar um mutex antes da saída, mas isso não é muito elegante.
Uma solução alternativa é armazenar a string que você deseja imprimir em um buffer.

class ParallelStream{
std
::ostringstream stdStream;
public:
ParallelStream(){}
template <class T>
ParallelStream& operator<<(const T& inData){
stdStream
<< inData;
return *this;
}
std
::string toString() const{
return stdStream.str();
}
};

#pragma omp parallel for
for (int n_radial = 0; n_radial < Nradial; n_radial++) {
// Note: The string is first collected into the ParallelStream object and then moved into the output.
cout
<< (ParallelStream() << n_radial << " (" << Nradial << ")").toString() << endl;
}