20#ifndef _MDCORE_SOURCE_TF_DPD_EVAL_H_
21#define _MDCORE_SOURCE_TF_DPD_EVAL_H_
25#include "tf_smoothing_kernel.h"
32 TF_ALWAYS_INLINE
bool dpd_eval(
DPDPotential *p, FPTYPE gaussian,
36 static const FPTYPE delta = 1.f / std::sqrt(
_Engine.dt);
37 static const FPTYPE epsilon = std::numeric_limits<FPTYPE>::epsilon();
39 FPTYPE r = std::sqrt(r2);
40 FPTYPE ro = r < epsilon ? epsilon : r;
47 r = r >= p->a ? r : p->a;
50 FVector3 e = {dx[0] / ro, dx[1] / ro, dx[2] / ro};
52 FVector3 v = pi->velocity - pj->velocity;
55 FPTYPE omega_c = r < 0.f ? 1.f : (1 - r / p->b);
57 FPTYPE fc = p->alpha * omega_c;
60 FPTYPE omega_d = omega_c * omega_c;
62 FPTYPE fd = -p->gamma * omega_d * e.dot(v);
64 FPTYPE fr = p->sigma * omega_c * delta;
66 FPTYPE f = fc + fd + fr;
68 pj->force = {pj->f[0] - f * e[0], pj->f[1] - f * e[1], pj->f[2] - f * e[2] };
70 pi->force = {pi->f[0] + f * e[0], pi->f[1] + f * e[1], pi->f[2] + f * e[2] };
78 TF_ALWAYS_INLINE
bool dpd_boundary_eval(
DPDPotential *p, FPTYPE gaussian,
79 Particle *pi, FPTYPE &rj,
const FPTYPE *velocity,
const FPTYPE* dx, FPTYPE r2, FPTYPE *energy)
82 static const FPTYPE delta = 1.f / std::sqrt(
_Engine.dt);
83 static const FPTYPE epsilon = std::numeric_limits<FPTYPE>::epsilon();
85 FPTYPE r = std::sqrt(r2);
86 FPTYPE ro = r < epsilon ? epsilon : r;
93 r = r >= p->a ? r : p->a;
96 FVector3 e = {dx[0] / ro, dx[1] / ro, dx[2] / ro};
98 FVector3 v = {pi->velocity[0] - velocity[0], pi->velocity[1] - velocity[1], pi->velocity[2] - velocity[2]};
101 FPTYPE omega_c = r < 0.f ? 1.f : (1 - r / p->b);
103 FPTYPE fc = p->alpha * omega_c;
106 FPTYPE omega_d = omega_c * omega_c;
108 FPTYPE fd = -p->gamma * omega_d * e.dot(v);
110 FPTYPE fr = p->sigma * omega_c * delta;
112 FPTYPE f = fc + fd + fr;
114 pi->force = {pi->f[0] + f * e[0], pi->f[1] + f * e[1], pi->f[2] + f * e[2] };
Include Python header, disable linking to pythonX_d.lib on Windows in debug mode.
Definition tfAngleConfig.h:26
@ POTENTIAL_SHIFTED
Definition tfPotential.h:92
Definition tfDPDPotential.h:36
Definition tfParticle.h:101