| 64 |
|
namespace OpenMD { |
| 65 |
|
|
| 66 |
|
DumpWriter::DumpWriter(SimInfo* info) |
| 67 |
< |
: info_(info), filename_(info->getDumpFileName()), eorFilename_(info->getFinalConfigFileName()){ |
| 67 |
> |
: info_(info), filename_(info->getDumpFileName()), |
| 68 |
> |
eorFilename_(info->getFinalConfigFileName()){ |
| 69 |
|
|
| 70 |
|
Globals* simParams = info->getSimParams(); |
| 71 |
|
needCompression_ = simParams->getCompressDumpFile(); |
| 73 |
|
needParticlePot_ = simParams->getOutputParticlePotential(); |
| 74 |
|
needFlucQ_ = simParams->getOutputFluctuatingCharges(); |
| 75 |
|
needElectricField_ = simParams->getOutputElectricField(); |
| 76 |
+ |
needSitePotential_ = simParams->getOutputSitePotential(); |
| 77 |
|
|
| 78 |
< |
if (needParticlePot_ || needFlucQ_ || needElectricField_) { |
| 78 |
> |
if (needParticlePot_ || needFlucQ_ || needElectricField_ || |
| 79 |
> |
needSitePotential_) { |
| 80 |
|
doSiteData_ = true; |
| 81 |
|
} else { |
| 82 |
|
doSiteData_ = false; |
| 124 |
|
needParticlePot_ = simParams->getOutputParticlePotential(); |
| 125 |
|
needFlucQ_ = simParams->getOutputFluctuatingCharges(); |
| 126 |
|
needElectricField_ = simParams->getOutputElectricField(); |
| 127 |
+ |
needSitePotential_ = simParams->getOutputSitePotential(); |
| 128 |
|
|
| 129 |
< |
if (needParticlePot_ || needFlucQ_ || needElectricField_) { |
| 129 |
> |
if (needParticlePot_ || needFlucQ_ || needElectricField_ || |
| 130 |
> |
needSitePotential_) { |
| 131 |
|
doSiteData_ = true; |
| 132 |
|
} else { |
| 133 |
|
doSiteData_ = false; |
| 175 |
|
needParticlePot_ = simParams->getOutputParticlePotential(); |
| 176 |
|
needFlucQ_ = simParams->getOutputFluctuatingCharges(); |
| 177 |
|
needElectricField_ = simParams->getOutputElectricField(); |
| 178 |
+ |
needSitePotential_ = simParams->getOutputSitePotential(); |
| 179 |
|
|
| 180 |
< |
if (needParticlePot_ || needFlucQ_ || needElectricField_) { |
| 180 |
> |
if (needParticlePot_ || needFlucQ_ || needElectricField_ || |
| 181 |
> |
needSitePotential_) { |
| 182 |
|
doSiteData_ = true; |
| 183 |
|
} else { |
| 184 |
|
doSiteData_ = false; |
| 311 |
|
void DumpWriter::writeFrame(std::ostream& os) { |
| 312 |
|
|
| 313 |
|
#ifdef IS_MPI |
| 314 |
< |
MPI_Status* istatus; |
| 314 |
> |
MPI_Status istatus; |
| 315 |
|
#endif |
| 316 |
|
|
| 317 |
|
Molecule* mol; |
| 404 |
|
// prepared by processor i: |
| 405 |
|
int recvLength; |
| 406 |
|
MPI_Recv(&recvLength, 1, MPI_INT, i, MPI_ANY_TAG, MPI_COMM_WORLD, |
| 407 |
< |
istatus); |
| 407 |
> |
&istatus); |
| 408 |
|
|
| 409 |
|
// create a buffer to receive the data |
| 410 |
|
char* recvBuffer = new char[recvLength]; |
| 412 |
|
} else { |
| 413 |
|
// receive the data: |
| 414 |
|
MPI_Recv(recvBuffer, recvLength, MPI_CHAR, i, |
| 415 |
< |
MPI_ANY_TAG, MPI_COMM_WORLD, istatus); |
| 415 |
> |
MPI_ANY_TAG, MPI_COMM_WORLD, &istatus); |
| 416 |
|
// send it to the file: |
| 417 |
|
os << recvBuffer; |
| 418 |
|
// get rid of the receive buffer: |
| 481 |
|
// prepared by processor i: |
| 482 |
|
int recvLength; |
| 483 |
|
MPI_Recv(&recvLength, 1, MPI_INT, i, MPI_ANY_TAG, MPI_COMM_WORLD, |
| 484 |
< |
istatus); |
| 484 |
> |
&istatus); |
| 485 |
|
|
| 486 |
|
// create a buffer to receive the data |
| 487 |
|
char* recvBuffer = new char[recvLength]; |
| 489 |
|
} else { |
| 490 |
|
// receive the data: |
| 491 |
|
MPI_Recv(recvBuffer, recvLength, MPI_CHAR, i, |
| 492 |
< |
MPI_ANY_TAG, MPI_COMM_WORLD, istatus); |
| 492 |
> |
MPI_ANY_TAG, MPI_COMM_WORLD, &istatus); |
| 493 |
|
// send it to the file: |
| 494 |
|
os << recvBuffer; |
| 495 |
|
// get rid of the receive buffer: |
| 718 |
|
} |
| 719 |
|
} |
| 720 |
|
|
| 721 |
< |
|
| 721 |
> |
if (needSitePotential_) { |
| 722 |
> |
if (storageLayout & DataStorage::dslSitePotential) { |
| 723 |
> |
type += "s"; |
| 724 |
> |
RealType sPot = sd->getSitePotential(); |
| 725 |
> |
if (isinf(sPot) || isnan(sPot) ) { |
| 726 |
> |
sprintf( painCave.errMsg, |
| 727 |
> |
"DumpWriter detected a numerical error writing the" |
| 728 |
> |
" site potential for object %s", id.c_str()); |
| 729 |
> |
painCave.isFatal = 1; |
| 730 |
> |
simError(); |
| 731 |
> |
} |
| 732 |
> |
sprintf(tempBuffer, " %13e ", sPot); |
| 733 |
> |
line += tempBuffer; |
| 734 |
> |
} |
| 735 |
> |
} |
| 736 |
> |
|
| 737 |
|
if (needParticlePot_) { |
| 738 |
|
if (storageLayout & DataStorage::dslParticlePot) { |
| 739 |
|
type += "u"; |
| 759 |
|
} |
| 760 |
|
|
| 761 |
|
void DumpWriter::writeEor() { |
| 762 |
< |
std::ostream* eorStream; |
| 763 |
< |
|
| 762 |
> |
|
| 763 |
> |
std::ostream* eorStream = NULL; |
| 764 |
> |
|
| 765 |
|
#ifdef IS_MPI |
| 766 |
|
if (worldRank == 0) { |
| 767 |
|
#endif // is_mpi |