Fixed gravitating particle.
This commit is contained in:
@@ -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
|
||||||
|
Reference in New Issue
Block a user