@@ -180,32 +180,45 @@ struct GeneralKG{T<:AbstractFloat} <: DiscreteModel
180180 name:: String
181181 ϵ:: T
182182 ϵ4:: T
183+ ϵbond:: T
184+ ϵ4bond:: T
183185 σ2:: T
186+ σ2bond:: T
184187 shift:: T
188+ shiftbond:: T
185189 k:: T
186190 kr02:: T
187191 r02:: T
188192 rcut:: T
189193 rcut2:: T
190-
194+ rcutbond:: T
195+ rcut2bond:: T
191196end
192197
193- function GeneralKG (ϵ, σ, k, r0; rcut= 2 ^ (1 / 6 ) * σ)
198+ function GeneralKG (ϵ, σ, k, r0; rcut= 2 ^ (1 / 6 ) * σ, ϵbond = ϵ, σbond = σ, rcutbond = rcut )
194199 name = " GeneralKG"
195200 r02 = r0 ^ 2
196201 rcut2 = rcut ^ 2
202+ rcut2bond = rcutbond ^ 2
197203 kr02 = - k * r02 / 2
198204 σ2 = σ ^ 2
205+ σ2bond = σbond ^ 2
199206 shift = lennard_jones (rcut2, 4 ϵ, σ2)
200- return GeneralKG (name, ϵ, 4 ϵ, σ2, shift, k, kr02, r02, rcut, rcut2)
207+ shiftbond = lennard_jones (rcut2bond, 4 ϵbond, σ2bond)
208+ return GeneralKG (name, ϵ, 4 ϵ, ϵbond, 4 ϵbond, σ2, σ2bond, shift, shiftbond, k, kr02, r02, rcut, rcut2, rcutbond, rcut2bond)
201209end
202210
203211@inline function potential (r2:: T , model:: GeneralKG ) where T<: AbstractFloat
204212 return lennard_jones (r2, model. ϵ4, model. σ2) - model. shift
205213end
206214
207215@inline function bond_potential (r2:: T , model:: GeneralKG ) where T<: AbstractFloat
208- return r2 ≤ model. r02 ? fene (r2, model. kr02, model. r02) : Inf
216+ u_fene = r2 ≤ model. r02 ? fene (r2, model. kr02, model. r02) : Inf
217+ u_lj = 0.0
218+ if r2 ≤ cutoff2 (model)
219+ u_lj += lennard_jones (r2, model. ϵ4bond, model. σ2bond) - model. shiftbond
220+ end
221+ return u_fene + u_lj
209222end
210223
211224cutoff (model:: DiscreteModel ) = model. rcut
0 commit comments