From 1d1e3c74ae95a603ea97eb344b75c12438a56848 Mon Sep 17 00:00:00 2001 From: andy Date: Fri, 1 Jul 2011 15:22:32 +0100 Subject: [PATCH 01/16] ENH: Added paraview tmp file generation to multi-region tutorial case run scripts --- .../combustion/fireFoam/les/oppositeBurningPanels/Allrun | 4 ++++ .../lagrangian/reactingParcelFilmFoam/cylinder/Allrun.pre | 3 +++ .../lagrangian/reactingParcelFilmFoam/hotBoxes/Allrun.pre | 3 +++ .../lagrangian/reactingParcelFilmFoam/rivuletPanel/Allrun.pre | 2 ++ .../lagrangian/reactingParcelFilmFoam/splashPanel/Allrun.pre | 3 +++ 5 files changed, 15 insertions(+) diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/Allrun b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/Allrun index ae53653faa..026f614b53 100755 --- a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/Allrun +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/Allrun @@ -32,4 +32,8 @@ decomposePar -region panelRegion > log.decomposParPanelRegion.log 2>&1 runParallel `getApplication` 6 +paraFoam -touch +paraFoam -touch -region panelRegion + + # ----------------------------------------------------------------- end-of-file diff --git a/tutorials/lagrangian/reactingParcelFilmFoam/cylinder/Allrun.pre b/tutorials/lagrangian/reactingParcelFilmFoam/cylinder/Allrun.pre index 747433b184..bd6fc4f90f 100755 --- a/tutorials/lagrangian/reactingParcelFilmFoam/cylinder/Allrun.pre +++ b/tutorials/lagrangian/reactingParcelFilmFoam/cylinder/Allrun.pre @@ -8,3 +8,6 @@ runApplication setSet -batch wallFilmRegion.setSet mv log.setSet log.wallFilmRegion.setSet runApplication extrudeToRegionMesh -overwrite + +paraFoam -touch +paraFoam -touch -region wallFilmRegion diff --git a/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/Allrun.pre b/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/Allrun.pre index 5583402201..b5423180b6 100755 --- a/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/Allrun.pre +++ b/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/Allrun.pre @@ -32,3 +32,6 @@ cp -r system/wallFilmRegion.org system/wallFilmRegion find ./0 -maxdepth 1 -type f -exec \ sed -i "s/wallFilm/\"(region0_to.*)\"/g" {} \; + +paraFoam -touch +paraFoam -touch -region wallFilmRegion diff --git a/tutorials/lagrangian/reactingParcelFilmFoam/rivuletPanel/Allrun.pre b/tutorials/lagrangian/reactingParcelFilmFoam/rivuletPanel/Allrun.pre index 0e3c1209c5..d9b17ad097 100755 --- a/tutorials/lagrangian/reactingParcelFilmFoam/rivuletPanel/Allrun.pre +++ b/tutorials/lagrangian/reactingParcelFilmFoam/rivuletPanel/Allrun.pre @@ -10,3 +10,5 @@ mv log.setSet log.wallFilmRegion.setSet runApplication extrudeToRegionMesh -overwrite +paraFoam -touch +paraFoam -touch -region wallFilmRegion diff --git a/tutorials/lagrangian/reactingParcelFilmFoam/splashPanel/Allrun.pre b/tutorials/lagrangian/reactingParcelFilmFoam/splashPanel/Allrun.pre index 14da52453e..bbae3db32c 100755 --- a/tutorials/lagrangian/reactingParcelFilmFoam/splashPanel/Allrun.pre +++ b/tutorials/lagrangian/reactingParcelFilmFoam/splashPanel/Allrun.pre @@ -14,3 +14,6 @@ runApplication setSet -region wallFilmRegion -batch createWallFilmRegionPatches. mv log.setSet log.createWallFilmRegionPatches.setSet runApplication createPatch -region wallFilmRegion -overwrite + +paraFoam -touch +paraFoam -touch -region wallFilmRegion From 2a89555d0a79f9335147650aeba27b123f809ca2 Mon Sep 17 00:00:00 2001 From: mattijs Date: Fri, 1 Jul 2011 16:14:10 +0100 Subject: [PATCH 02/16] COMP: Random: moved to OSspecific --- src/OSspecific/POSIX/POSIX.C | 38 ++++++++++++++++++- src/OpenFOAM/include/OSspecific.H | 12 ++++++ .../primitives/random/Random/Random.C | 31 +++------------ .../random/cachedRandom/cachedRandom.C | 8 ++-- 4 files changed, 58 insertions(+), 31 deletions(-) diff --git a/src/OSspecific/POSIX/POSIX.C b/src/OSspecific/POSIX/POSIX.C index 48e4b3a4df..dba1e73f3a 100644 --- a/src/OSspecific/POSIX/POSIX.C +++ b/src/OSspecific/POSIX/POSIX.C @@ -57,6 +57,10 @@ Description #include +#ifdef USE_RANDOM +# include +#endif + // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // defineTypeNameAndDebug(Foam::POSIX, 0); @@ -68,16 +72,19 @@ pid_t Foam::pid() return ::getpid(); } + pid_t Foam::ppid() { return ::getppid(); } + pid_t Foam::pgid() { return ::getpgrp(); } + bool Foam::env(const word& envName) { return ::getenv(envName.c_str()) != NULL; @@ -890,7 +897,6 @@ bool Foam::mvBak(const fileName& src, const std::string& ext) } - // Remove a file, returning true if successful otherwise false bool Foam::rm(const fileName& file) { @@ -1221,4 +1227,34 @@ Foam::fileNameList Foam::dlLoaded() } +void Foam::osRandomSeed(const label seed) +{ +#ifdef USE_RANDOM + srandom((unsigned int)seed); +#else + srand48(seed); +#endif +} + + +Foam::label Foam::osRandomInteger() +{ +#ifdef USE_RANDOM + return random(); +#else + return lrand48(); +#endif +} + + +Foam::scalar Foam::osRandomDouble() +{ +#ifdef USE_RANDOM + return (scalar)random(); +#else + return drand48(); +#endif +} + + // ************************************************************************* // diff --git a/src/OpenFOAM/include/OSspecific.H b/src/OpenFOAM/include/OSspecific.H index f01ad29647..b774997339 100644 --- a/src/OpenFOAM/include/OSspecific.H +++ b/src/OpenFOAM/include/OSspecific.H @@ -200,6 +200,18 @@ bool dlSymFound(void* handle, const std::string& symbol); fileNameList dlLoaded(); +// Low level random numbers. Use Random class instead. + +//- Seed random number generator. +void osRandomSeed(const label seed); + +//- Return random integer (uniform distribution between 0 and 2^31) +label osRandomInteger(); + +//- Return random double precision (uniform distribution between 0 and 1) +scalar osRandomDouble(); + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam diff --git a/src/OpenFOAM/primitives/random/Random/Random.C b/src/OpenFOAM/primitives/random/Random/Random.C index 704e5ef118..923a656bb9 100644 --- a/src/OpenFOAM/primitives/random/Random/Random.C +++ b/src/OpenFOAM/primitives/random/Random/Random.C @@ -24,6 +24,7 @@ License \*---------------------------------------------------------------------------*/ #include "Random.H" +#include "OSspecific.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -37,11 +38,6 @@ namespace Foam # error "The random number generator may not work!" #endif -#ifdef USE_RANDOM -# include -#else -# include -#endif // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // @@ -57,22 +53,13 @@ Random::Random(const label seed) Seed = 1; } -# ifdef USE_RANDOM - srandom((unsigned int)Seed); -# else - srand48(Seed); -# endif - + osRandomSeed(Seed); } int Random::bit() { -# ifdef USE_RANDOM - if (random() > INT_MAX/2) -# else - if (lrand48() > INT_MAX/2) -# endif + if (osRandomInteger() > INT_MAX/2) { return 1; } @@ -85,11 +72,7 @@ int Random::bit() scalar Random::scalar01() { -# ifdef USE_RANDOM - return (scalar)random()/INT_MAX; -# else - return drand48(); -# endif + return osRandomDouble(); } @@ -140,11 +123,7 @@ tensor Random::tensor01() label Random::integer(const label lower, const label upper) { -# ifdef USE_RANDOM - return lower + (random() % (upper+1-lower)); -# else - return lower + (lrand48() % (upper+1-lower)); -# endif + return lower + (osRandomInteger() % (upper+1-lower)); } diff --git a/src/OpenFOAM/primitives/random/cachedRandom/cachedRandom.C b/src/OpenFOAM/primitives/random/cachedRandom/cachedRandom.C index b48c1f4e63..6db63990f5 100644 --- a/src/OpenFOAM/primitives/random/cachedRandom/cachedRandom.C +++ b/src/OpenFOAM/primitives/random/cachedRandom/cachedRandom.C @@ -24,7 +24,7 @@ License \*---------------------------------------------------------------------------*/ #include "cachedRandom.H" -#include +#include "OSspecific.H" #if INT_MAX != 2147483647 # error "INT_MAX != 2147483647" @@ -37,7 +37,7 @@ Foam::scalar Foam::cachedRandom::scalar01() { if (sampleI_ < 0) { - return drand48(); + return osRandomDouble(); } if (sampleI_ == samples_.size() - 1) @@ -76,7 +76,7 @@ Foam::cachedRandom::cachedRandom(const label seed, const label count) } // Initialise samples - srand48(seed_); + osRandomSeed(seed_); forAll(samples_, i) { samples_[i] = drand48(); @@ -98,7 +98,7 @@ Foam::cachedRandom::cachedRandom(const cachedRandom& cr, const bool reset) ) << "Copy constructor called, but samples not being cached. " << "This may lead to non-repeatable behaviour" << endl; - srand48(seed_); + osRandomSeed(seed_); } else if (reset) { From 8a935055897ee3c65ecf0b4c4b5ea67c2b1890bb Mon Sep 17 00:00:00 2001 From: graham Date: Fri, 1 Jul 2011 17:14:02 +0100 Subject: [PATCH 03/16] BUG: Wrong loop structure for molecule tests. --- .../polyatomicCloud/polyatomicCloud.C | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/src/lagrangian/molecularDynamics/molecule/polyatomic/polyatomicCloud/polyatomicCloud.C b/src/lagrangian/molecularDynamics/molecule/polyatomic/polyatomicCloud/polyatomicCloud.C index a49d9d2319..0d2a7c4f9a 100644 --- a/src/lagrangian/molecularDynamics/molecule/polyatomic/polyatomicCloud/polyatomicCloud.C +++ b/src/lagrangian/molecularDynamics/molecule/polyatomic/polyatomicCloud/polyatomicCloud.C @@ -284,7 +284,7 @@ void Foam::polyatomicCloud::removeHighEnergyOverlaps() forAll(dil, d) { - forAll(cellOccupancy_[d],cellIMols) + forAll(cellOccupancy_[d], cellIMols) { molI = cellOccupancy_[d][cellIMols]; @@ -322,35 +322,35 @@ void Foam::polyatomicCloud::removeHighEnergyOverlaps() } } } - } - forAll(cellOccupancy_[d], cellIOtherMols) - { - molJ = cellOccupancy_[d][cellIOtherMols]; - - if (molJ > molI) + forAll(cellOccupancy_[d], cellIOtherMols) { - if (evaluatePotentialLimit(*molI, *molJ)) + molJ = cellOccupancy_[d][cellIOtherMols]; + + if (molJ > molI) { - label idI = molI->id(); - - label idJ = molJ->id(); - - if - ( - idI == idJ - || findIndex(pot_.removalOrder(), idJ) - < findIndex(pot_.removalOrder(), idI) - ) + if (evaluatePotentialLimit(*molI, *molJ)) { - if (findIndex(molsToDelete, molJ) == -1) + label idI = molI->id(); + + label idJ = molJ->id(); + + if + ( + idI == idJ + || findIndex(pot_.removalOrder(), idJ) + < findIndex(pot_.removalOrder(), idI) + ) { - molsToDelete.append(molJ); + if (findIndex(molsToDelete, molJ) == -1) + { + molsToDelete.append(molJ); + } + } + else if (findIndex(molsToDelete, molI) == -1) + { + molsToDelete.append(molI); } - } - else if (findIndex(molsToDelete, molI) == -1) - { - molsToDelete.append(molI); } } } From 0c51d2628a25cfe03c3eb72cdd42b434b633dccb Mon Sep 17 00:00:00 2001 From: graham Date: Fri, 1 Jul 2011 19:55:48 +0100 Subject: [PATCH 04/16] ENH: Running and improvements. --- .../molecularDynamics/mdFoam/mdFoam.C | 2 + .../{ => old}/mdEquilibrationFoam/Make/files | 0 .../mdEquilibrationFoam/Make/options | 0 .../mdEquilibrationFoam/mdEquilibrationFoam.C | 0 .../readmdEquilibrationDict.H | 0 .../preProcessing/mdInitialise/mdInitialise.C | 8 +- .../molecule/constPropSite/constPropSite.C | 45 +++++- .../molecule/constPropSite/constPropSite.H | 25 ++- .../molecule/constPropSite/constPropSiteI.H | 27 ++++ .../polyatomic/polyatomic/polyatomicI.H | 18 ++- .../polyatomicCloud/polyatomicCloud.C | 148 +++++++++++++++++- .../polyatomicCloud/polyatomicCloud.H | 3 + .../potential/potential/potential.C | 20 +-- .../potential/potential/potential.H | 2 +- 14 files changed, 269 insertions(+), 29 deletions(-) rename applications/solvers/discreteMethods/molecularDynamics/{ => old}/mdEquilibrationFoam/Make/files (100%) rename applications/solvers/discreteMethods/molecularDynamics/{ => old}/mdEquilibrationFoam/Make/options (100%) rename applications/solvers/discreteMethods/molecularDynamics/{ => old}/mdEquilibrationFoam/mdEquilibrationFoam.C (100%) rename applications/solvers/discreteMethods/molecularDynamics/{ => old}/mdEquilibrationFoam/readmdEquilibrationDict.H (100%) diff --git a/applications/solvers/discreteMethods/molecularDynamics/mdFoam/mdFoam.C b/applications/solvers/discreteMethods/molecularDynamics/mdFoam/mdFoam.C index 660c12a5b8..65157dd2b4 100644 --- a/applications/solvers/discreteMethods/molecularDynamics/mdFoam/mdFoam.C +++ b/applications/solvers/discreteMethods/molecularDynamics/mdFoam/mdFoam.C @@ -49,6 +49,8 @@ int main(int argc, char *argv[]) molecules.evolve(); + runTime.write(); + Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" << " ClockTime = " << runTime.elapsedClockTime() << " s" << nl << endl; diff --git a/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/Make/files b/applications/solvers/discreteMethods/molecularDynamics/old/mdEquilibrationFoam/Make/files similarity index 100% rename from applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/Make/files rename to applications/solvers/discreteMethods/molecularDynamics/old/mdEquilibrationFoam/Make/files diff --git a/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/Make/options b/applications/solvers/discreteMethods/molecularDynamics/old/mdEquilibrationFoam/Make/options similarity index 100% rename from applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/Make/options rename to applications/solvers/discreteMethods/molecularDynamics/old/mdEquilibrationFoam/Make/options diff --git a/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/mdEquilibrationFoam.C b/applications/solvers/discreteMethods/molecularDynamics/old/mdEquilibrationFoam/mdEquilibrationFoam.C similarity index 100% rename from applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/mdEquilibrationFoam.C rename to applications/solvers/discreteMethods/molecularDynamics/old/mdEquilibrationFoam/mdEquilibrationFoam.C diff --git a/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/readmdEquilibrationDict.H b/applications/solvers/discreteMethods/molecularDynamics/old/mdEquilibrationFoam/readmdEquilibrationDict.H similarity index 100% rename from applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/readmdEquilibrationDict.H rename to applications/solvers/discreteMethods/molecularDynamics/old/mdEquilibrationFoam/readmdEquilibrationDict.H diff --git a/applications/utilities/preProcessing/mdInitialise/mdInitialise.C b/applications/utilities/preProcessing/mdInitialise/mdInitialise.C index 3551e46133..5d06f35fb6 100644 --- a/applications/utilities/preProcessing/mdInitialise/mdInitialise.C +++ b/applications/utilities/preProcessing/mdInitialise/mdInitialise.C @@ -26,8 +26,8 @@ Description \*---------------------------------------------------------------------------*/ -#include "md.H" #include "fvCFD.H" +#include "polyatomicCloud.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -64,7 +64,9 @@ int main(int argc, char *argv[]) potential pot(mesh, mdInitialiseDict, idListDict); - moleculeCloud molecules(mesh, pot, mdInitialiseDict); + polyatomicCloud molecules(mesh, pot, mdInitialiseDict); + + Info<< "Cloud is called " << molecules.name() << endl; label totalMolecules = molecules.size(); @@ -81,7 +83,7 @@ int main(int argc, char *argv[]) if (!mesh.write()) { FatalErrorIn(args.executable()) - << "Failed writing moleculeCloud." + << "Failed writing polyatomicCloud." << nl << exit(FatalError); } diff --git a/src/lagrangian/molecularDynamics/molecule/constPropSite/constPropSite.C b/src/lagrangian/molecularDynamics/molecule/constPropSite/constPropSite.C index 431f37aeb4..5647869233 100644 --- a/src/lagrangian/molecularDynamics/molecule/constPropSite/constPropSite.C +++ b/src/lagrangian/molecularDynamics/molecule/constPropSite/constPropSite.C @@ -71,6 +71,49 @@ Foam::constPropSite::~constPropSite() {} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * // + +Foam::Istream& Foam::operator>>(Istream& is, constPropSite& cPS) +{ + is >> cPS.siteReferencePosition_ + >> cPS.siteMass_ + >> cPS.siteCharge_ + >> cPS.siteId_ + >> cPS.name_ + >> cPS.pairPotentialSite_ + >> cPS.electrostaticSite_; + + // Check state of Istream + is.check + ( + "Foam::Istream& Foam::operator>>" + "(Foam::Istream&, Foam::constPropSite&)" + ); + + return is; +} + + +Foam::Ostream& Foam::operator<<(Ostream& os, const constPropSite& cPS) +{ + + os << token::SPACE << cPS.siteReferencePosition() + << token::SPACE << cPS.siteMass() + << token::SPACE << cPS.siteCharge() + << token::SPACE << cPS.siteId() + << token::SPACE << cPS.name() + << token::SPACE << cPS.pairPotentialSite() + << token::SPACE << cPS.electrostaticSite(); + + // Check state of Ostream + os.check + ( + "Foam::Ostream& Foam::operator<<(Foam::Ostream&, " + "const Foam::constPropSite&)" + ); + + return os; +} + // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/molecule/constPropSite/constPropSite.H b/src/lagrangian/molecularDynamics/molecule/constPropSite/constPropSite.H index 0ffb63b0a8..c53eba2ee8 100644 --- a/src/lagrangian/molecularDynamics/molecule/constPropSite/constPropSite.H +++ b/src/lagrangian/molecularDynamics/molecule/constPropSite/constPropSite.H @@ -35,14 +35,23 @@ SourceFiles #define constPropSite_H #include "vector.H" -#include "IFstream.H" -#include "OFstream.H" +#include "IOstreams.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { +// Forward declaration of classes +class Istream; +class Ostream; + +// Forward declaration of friend functions and operators +class constPropSite; +Istream& operator>>(Istream&, constPropSite&); +Ostream& operator<<(Ostream&, const constPropSite&); + + /*---------------------------------------------------------------------------*\ Class constPropSite Declaration \*---------------------------------------------------------------------------*/ @@ -144,6 +153,18 @@ public: //- inline bool& electrostaticSite(); + + + // Member Operators + + inline bool operator==(const constPropSite&) const; + inline bool operator!=(const constPropSite&) const; + + + // IOstream Operators + + friend Istream& operator>>(Istream&, constPropSite&); + friend Ostream& operator<<(Ostream&, const constPropSite&); }; diff --git a/src/lagrangian/molecularDynamics/molecule/constPropSite/constPropSiteI.H b/src/lagrangian/molecularDynamics/molecule/constPropSite/constPropSiteI.H index dbeb395920..b4f1ad9177 100644 --- a/src/lagrangian/molecularDynamics/molecule/constPropSite/constPropSiteI.H +++ b/src/lagrangian/molecularDynamics/molecule/constPropSite/constPropSiteI.H @@ -114,4 +114,31 @@ inline bool& Foam::constPropSite::electrostaticSite() } +// * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * * // + +bool Foam::constPropSite::operator== +( + const constPropSite& rhs +) const +{ + return + siteReferencePosition_ == rhs.siteReferencePosition_ + && siteMass_ == rhs.siteMass_ + && siteCharge_ == rhs.siteCharge_ + && siteId_ == rhs.siteId_ + && name_ == rhs.name_ + && pairPotentialSite_ == rhs.pairPotentialSite_ + && electrostaticSite_ == rhs.electrostaticSite_; +} + + +bool Foam::constPropSite::operator!= +( + const constPropSite& rhs +) const +{ + return !(*this == rhs); +} + + // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/molecule/polyatomic/polyatomic/polyatomicI.H b/src/lagrangian/molecularDynamics/molecule/polyatomic/polyatomic/polyatomicI.H index faf24d1f1c..efb9cf52f4 100644 --- a/src/lagrangian/molecularDynamics/molecule/polyatomic/polyatomic/polyatomicI.H +++ b/src/lagrangian/molecularDynamics/molecule/polyatomic/polyatomic/polyatomicI.H @@ -57,11 +57,12 @@ inline Foam::polyatomic::constantProperties::constantProperties List pairPotentialIds(dict.lookup("pairPotentialSiteIds")); + sites_.setSize(siteReferencePositions.size()); + if ( - ( siteIdNames.size() != sites_.size() ) - || ( siteReferencePositions.size() != sites_.size() ) - || ( siteCharges.size() != sites_.size() ) + (siteIdNames.size() != sites_.size()) + || (siteCharges.size() != sites_.size()) ) { FatalErrorIn @@ -72,12 +73,13 @@ inline Foam::polyatomic::constantProperties::constantProperties ")" ) << "Sizes of site id, charge and " - << "referencePositions are not the same: " << sites_.size() - << nl << abort(FatalError); + << "referencePositions are not the same: " << nl + << siteIdNames << nl + << siteReferencePositions << nl + << siteCharges << nl + << abort(FatalError); } - sites_.setSize(siteIdNames.size()); - electrostaticSites_.setSize(sites_.size(), -1); pairPotSites_.setSize(sites_.size(), -1); @@ -107,7 +109,7 @@ inline Foam::polyatomic::constantProperties::constantProperties electrostaticSites_[electrostaticI++] = sI; } - if (sites_[sI].pairPotentialSite() && !sites_[sI].electrostaticSite()) + if (!sites_[sI].pairPotentialSite() && !sites_[sI].electrostaticSite()) { WarningIn ( diff --git a/src/lagrangian/molecularDynamics/molecule/polyatomic/polyatomicCloud/polyatomicCloud.C b/src/lagrangian/molecularDynamics/molecule/polyatomic/polyatomicCloud/polyatomicCloud.C index 0d2a7c4f9a..0ad96b90c8 100644 --- a/src/lagrangian/molecularDynamics/molecule/polyatomic/polyatomicCloud/polyatomicCloud.C +++ b/src/lagrangian/molecularDynamics/molecule/polyatomic/polyatomicCloud/polyatomicCloud.C @@ -40,7 +40,7 @@ namespace Foam void Foam::polyatomicCloud::buildConstProps() { - Info<< nl << "Reading polyatomicProperties dictionary." << endl; + Info<< nl << "Reading mdProperties dictionary." << endl; const List& idList(pot_.idList()); @@ -48,11 +48,11 @@ void Foam::polyatomicCloud::buildConstProps() const List& siteIdList(pot_.siteIdList()); - IOdictionary polyatomicPropertiesDict + IOdictionary mdPropertiesDict ( IOobject ( - "polyatomicProperties", + "mdProperties", mesh_.time().constant(), mesh_, IOobject::MUST_READ_IF_MODIFIED, @@ -65,7 +65,7 @@ void Foam::polyatomicCloud::buildConstProps() { const word& id = idList[i]; - const dictionary& molDict(polyatomicPropertiesDict.subDict(id)); + const dictionary& molDict(mdPropertiesDict.subDict(id)); List siteIdNames = molDict.lookup("siteIds"); @@ -1183,6 +1183,8 @@ void Foam::polyatomicCloud::evolve() polyatomic::trackingData td3(*this, 3); Cloud::move(td3, mesh_.time().deltaTValue()); + + info(); } @@ -1237,6 +1239,144 @@ void Foam::polyatomicCloud::applyConstraintsAndThermostats } +void Foam::polyatomicCloud::info() const +{ + // Calculates and prints the mean momentum and energy in the system + // and the number of molecules. + + vector totalLinearMomentum(vector::zero); + + vector totalAngularMomentum(vector::zero); + + scalar maxVelocityMag = 0.0; + + scalar totalMass = 0.0; + + scalar totalLinearKE = 0.0; + + scalar totalAngularKE = 0.0; + + scalar totalPE = 0.0; + + scalar totalrDotf = 0.0; + + //vector CentreOfMass(vector::zero); + + label nMols = this->size(); + + label dofs = 0; + + { + forAllConstIter(polyatomicCloud, *this, mol) + { + const label molId = mol().id(); + + scalar molMass(this->constProps(molId).mass()); + + totalMass += molMass; + + //CentreOfMass += mol().position()*molMass; + } + + // if (nMols) + // { + // CentreOfMass /= totalMass; + // } + + forAllConstIter(polyatomicCloud, *this, mol) + { + const label molId = mol().id(); + + const polyatomic::constantProperties cP(this->constProps(molId)); + + scalar molMass(cP.mass()); + + const diagTensor& molMoI(cP.momentOfInertia()); + + const vector& molV(mol().v()); + + const vector& molOmega(inv(molMoI) & mol().pi()); + + vector molPiGlobal = mol().Q() & mol().pi(); + + totalLinearMomentum += molV * molMass; + + totalAngularMomentum += molPiGlobal; + //+((mol().position() - CentreOfMass) ^ (molV * molMass)); + + if (mag(molV) > maxVelocityMag) + { + maxVelocityMag = mag(molV); + } + + totalLinearKE += 0.5*molMass*magSqr(molV); + + totalAngularKE += 0.5*(molOmega & molMoI & molOmega); + + totalPE += mol().potentialEnergy(); + + totalrDotf += tr(mol().rf()); + + dofs += cP.degreesOfFreedom(); + } + } + + scalar meshVolume = sum(mesh_.cellVolumes()); + + if (Pstream::parRun()) + { + reduce(totalLinearMomentum, sumOp()); + reduce(totalAngularMomentum, sumOp()); + reduce(maxVelocityMag, maxOp()); + reduce(totalMass, sumOp()); + reduce(totalLinearKE, sumOp()); + reduce(totalAngularKE, sumOp()); + reduce(totalPE, sumOp()); + reduce(totalrDotf, sumOp()); + reduce(nMols, sumOp