Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #ifndef pairPotential_H
00036 #define pairPotential_H
00037
00038 #include <OpenFOAM/IOdictionary.H>
00039 #include <OpenFOAM/typeInfo.H>
00040 #include <OpenFOAM/runTimeSelectionTables.H>
00041 #include <OpenFOAM/autoPtr.H>
00042 #include <OpenFOAM/List.H>
00043 #include <OpenFOAM/Pair.H>
00044 #include <OpenFOAM/Switch.H>
00045 #include <OpenFOAM/mathematicalConstants.H>
00046
00047
00048
00049 namespace Foam
00050 {
00051
00052
00053 class energyScalingFunction;
00054
00055
00056
00057
00058
00059 class pairPotential
00060 {
00061
00062 protected:
00063
00064
00065
00066 word name_;
00067 dictionary pairPotentialProperties_;
00068
00069 scalar rCut_;
00070 scalar rCutSqr_;
00071
00072 scalar rMin_;
00073 scalar dr_;
00074
00075 List<scalar> forceLookup_;
00076 List<scalar> energyLookup_;
00077
00078 mutable energyScalingFunction* esfPtr_;
00079
00080 bool writeTables_;
00081
00082
00083
00084
00085 void scaleEnergy(scalar& e, const scalar r) const;
00086
00087
00088 pairPotential(const pairPotential&);
00089
00090
00091 void operator=(const pairPotential&);
00092
00093
00094 public:
00095
00096
00097 TypeName("pairPotential");
00098
00099
00100
00101
00102 declareRunTimeSelectionTable
00103 (
00104 autoPtr,
00105 pairPotential,
00106 dictionary,
00107 (
00108 const word& name,
00109 const dictionary& pairPotentialProperties
00110 ),
00111 (name, pairPotentialProperties)
00112 );
00113
00114
00115
00116
00117
00118 static autoPtr<pairPotential> New
00119 (
00120 const word& name,
00121 const dictionary& pairPotentialProperties
00122 );
00123
00124
00125
00126
00127
00128 pairPotential
00129 (
00130 const word& name,
00131 const dictionary& pairPotentialProperties
00132 );
00133
00134
00135
00136
00137 virtual ~pairPotential()
00138 {}
00139
00140
00141
00142
00143 void setLookupTables();
00144
00145 inline scalar rMin() const;
00146
00147 inline scalar dr() const;
00148
00149 inline scalar rCut() const;
00150
00151 inline scalar rCutSqr() const;
00152
00153 scalar energy (const scalar r) const;
00154
00155 scalar force (const scalar r) const;
00156
00157 List<Pair<scalar> > energyTable() const;
00158
00159 List<Pair<scalar> > forceTable() const;
00160
00161 inline bool writeTables() const;
00162
00163 virtual scalar unscaledEnergy(const scalar r) const = 0;
00164
00165 scalar scaledEnergy(const scalar r) const;
00166
00167 scalar energyDerivative
00168 (
00169 const scalar r,
00170 const bool scaledEnergyDerivative = true
00171 ) const;
00172
00173 const dictionary& pairPotentialProperties() const
00174 {
00175 return pairPotentialProperties_;
00176 }
00177
00178 bool writeEnergyAndForceTables(Ostream& os) const;
00179
00180
00181 virtual bool read(const dictionary& pairPotentialProperties) = 0;
00182 };
00183
00184
00185
00186
00187 }
00188
00189
00190
00191 #include "pairPotentialI.H"
00192
00193
00194
00195 #endif
00196
00197