Fixed gravitating particle.

This commit is contained in:
JackHsu
2019-07-31 16:57:44 +08:00
parent 5361ee5706
commit 24a56044f0

View File

@@ -21,10 +21,6 @@ uniform int nz_min;
uniform int nx; uniform int nx;
uniform int ny; uniform int ny;
uniform int nz; uniform int nz;
uniform Scalar AC_sink_pos_x;
uniform Scalar AC_sink_pos_y;
uniform Scalar AC_sink_pos_z;
uniform Scalar AC_M_sink;
//Added declaration for constants used for sink particle. //Added declaration for constants used for sink particle.
Vector Vector
@@ -63,23 +59,28 @@ continuity(in Vector uu, in Scalar lnrho) {
#if LSINK #if LSINK
//first attempt to do a self-containing LSINK module //first attempt to do a self-containing LSINK module
Vector Vector
sink_gravity() { sink_gravity(int3 globalVertexIdx){
vector force_gravity; Vector force_gravity;
const Vector grid_pos = (Vector){(globalVertexIdx.x - nx_min) * dsx, const Vector grid_pos = (Vector){(globalVertexIdx.x - nx_min) * dsx,
(globalVertexIdx.y - ny_min) * dsy, (globalVertexIdx.y - ny_min) * dsy,
(globalVertexIdx.z - nz_min) * dsz}; (globalVertexIdx.z - nz_min) * dsz};
const Scalar sink_mass = DCONST(AC_M_sink); const Scalar sink_mass = DCONST_REAL(AC_M_sink);
const Vector sink_pos = (Vector){DCONST_REAL(AC_sink_pos_x), const Vector sink_pos = (Vector){DCONST_REAL(AC_sink_pos_x),
DCONST_REAL(AC_sink_pos_y), DCONST_REAL(AC_sink_pos_y),
DCONST_REAL(AC_sink_pos_z)}; DCONST_REAL(AC_sink_pos_z)};
const Scalar distance = length(grid_pos - sink_pos); const Scalar distance = length(grid_pos - sink_pos);
force_gravity = (6.67e-8 * sink_mass) / (distance * distance); const Scalar gravity_magnitude = (Scalar(0.01) * sink_mass) / (distance * distance);
const Vector direction = (Vector){(sink_pos.x - grid_pos.x) / distance,
(sink_pos.y - grid_pos.y) / distance,
(sink_pos.z - grid_pos.z) / distance};
force_gravity = gravity_magnitude * direction;
return force_gravity; return force_gravity;
} }
#endif
#if LENTROPY #if LENTROPY
Vector Vector
momentum(in Vector uu, in Scalar lnrho, in Scalar ss, in Vector aa) { momentum(int3 globalVertexIdx, in Vector uu, in Scalar lnrho, in Scalar ss, in Vector aa) {
const Matrix S = stress_tensor(uu); const Matrix S = stress_tensor(uu);
const Scalar cs2 = cs2_sound * exp(gamma * value(ss) / cp_sound + (gamma - 1) * (value(lnrho) - lnrho0)); const Scalar cs2 = cs2_sound * exp(gamma * value(ss) / cp_sound + (gamma - 1) * (value(lnrho) - lnrho0));
const Vector j = (Scalar(1.) / mu0) * (gradient_of_divergence(aa) - laplace_vec(aa)); // Current density const Vector j = (Scalar(1.) / mu0) * (gradient_of_divergence(aa) - laplace_vec(aa)); // Current density
@@ -97,15 +98,17 @@ momentum(in Vector uu, in Scalar lnrho, in Scalar ss, in Vector aa) {
+ Scalar(1. / 3.) * gradient_of_divergence(uu) + Scalar(1. / 3.) * gradient_of_divergence(uu)
+ Scalar(2.) * mul(S, gradient(lnrho)) + Scalar(2.) * mul(S, gradient(lnrho))
) )
+ zeta * gradient_of_divergence(uu); + zeta * gradient_of_divergence(uu)
#if LSINK #if LSINK
mom = mom + sink_gravity(); + sink_gravity(globalVertexIdx);
#else
;
#endif #endif
return mom; return mom;
} }
#elif LTEMPERATURE #elif LTEMPERATURE
Vector Vector
momentum(in Vector uu, in Scalar lnrho, in Scalar tt) { momentum(int3 globalVertexIdx, in Vector uu, in Scalar lnrho, in Scalar tt) {
Vector mom; Vector mom;
const Matrix S = stress_tensor(uu); const Matrix S = stress_tensor(uu);
@@ -116,17 +119,19 @@ momentum(in Vector uu, in Scalar lnrho, in Scalar tt) {
pressure_term + pressure_term +
nu_visc * nu_visc *
(laplace_vec(uu) + Scalar(1. / 3.) * gradient_of_divergence(uu) + (laplace_vec(uu) + Scalar(1. / 3.) * gradient_of_divergence(uu) +
Scalar(2.) * mul(S, gradient(lnrho))) + zeta * gradient_of_divergence(uu); Scalar(2.) * mul(S, gradient(lnrho))) + zeta * gradient_of_divergence(uu)
#if LSINK #if LSINK
mom = mom + sink_gravity(); + sink_gravity(globalVertexIdx);
#endif #else
;
#endif
return mom; return mom;
} }
#else #else
Vector Vector
momentum(in Vector uu, in Scalar lnrho) { momentum(int3 globalVertexIdx, in Vector uu, in Scalar lnrho) {
Vector mom; Vector mom;
const Matrix S = stress_tensor(uu); const Matrix S = stress_tensor(uu);
@@ -137,11 +142,13 @@ momentum(in Vector uu, in Scalar lnrho) {
cs2_sound * gradient(lnrho) + cs2_sound * gradient(lnrho) +
nu_visc * nu_visc *
(laplace_vec(uu) + Scalar(1. / 3.) * gradient_of_divergence(uu) + (laplace_vec(uu) + Scalar(1. / 3.) * gradient_of_divergence(uu) +
Scalar(2.) * mul(S, gradient(lnrho))) + zeta * gradient_of_divergence(uu); Scalar(2.) * mul(S, gradient(lnrho))) + zeta * gradient_of_divergence(uu)
#if LSINK #if LSINK
mom = mom + sink_gravity(); + sink_gravity(globalVertexIdx);
#endif #else
;
#endif
return mom; return mom;
} }
@@ -339,13 +346,13 @@ solve(Scalar dt) {
#endif #endif
#if LENTROPY #if LENTROPY
out_uu = rk3(out_uu, uu, momentum(uu, lnrho, ss, aa), dt); out_uu = rk3(out_uu, uu, momentum(globalVertexIdx, uu, lnrho, ss, aa), dt);
out_ss = rk3(out_ss, ss, entropy(ss, uu, lnrho, aa), dt); out_ss = rk3(out_ss, ss, entropy(ss, uu, lnrho, aa), dt);
#elif LTEMPERATURE #elif LTEMPERATURE
out_uu = rk3(out_uu, uu, momentum(uu, lnrho, tt), dt); out_uu = rk3(out_uu, uu, momentum(globalVertexIdx, uu, lnrho, tt), dt);
out_tt = rk3(out_tt, tt, heat_transfer(uu, lnrho, tt), dt); out_tt = rk3(out_tt, tt, heat_transfer(uu, lnrho, tt), dt);
#else #else
out_uu = rk3(out_uu, uu, momentum(uu, lnrho), dt); out_uu = rk3(out_uu, uu, momentum(globalVertexIdx, uu, lnrho), dt);
#endif #endif
#if LFORCING #if LFORCING