diff --git a/src/hydro/Gadget2/hydro_iact.h b/src/hydro/Gadget2/hydro_iact.h index b604f7d4a812df0f973bb1f1acde7a5286cc9bfb..f92531bcce30d6c1461bb1366f88bc282a2747e7 100644 --- a/src/hydro/Gadget2/hydro_iact.h +++ b/src/hydro/Gadget2/hydro_iact.h @@ -37,8 +37,6 @@ *errors and interactions * missed by the Gadget-2 tree-code neighbours search. * - * The code uses internal energy instead of entropy as a thermodynamical - *variable. */ /** @@ -142,9 +140,6 @@ __attribute__((always_inline)) INLINE static void runner_iact_nonsym_density( pi->density.wcount += wi; pi->density.wcount_dh -= u * wi_dx; - /* const float ih3 = h_inv * h_inv * h_inv; */ - /* const float ih4 = h_inv * h_inv * h_inv * h_inv; */ - const float fac = mj * wi_dx * ri; /* Compute dv dot r */ @@ -154,24 +149,6 @@ __attribute__((always_inline)) INLINE static void runner_iact_nonsym_density( const float dvdr = dv[0] * dx[0] + dv[1] * dx[1] + dv[2] * dx[2]; pi->div_v -= fac * dvdr; - /* if(pi->id == 515050 && pj->id == 504849) */ - /* message("Interacting with %lld. r=%e hi=%e u=%e W=%e dW/dx=%e dh_drho1=%e - * dh_drho2=%e\n fac=%e dvdr=%e pj->v=[%.3e,%.3e,%.3e]", */ - /* pj->id, */ - /* r, */ - /* hi, */ - /* u, */ - /* wi * ih3, */ - /* wi_dx * ih4, */ - /* -mj * (3.f * kernel_igamma * wi) * ih4, */ - /* -mj * u * wi_dx * kernel_igamma * ih4, */ - /* fac * ih4, */ - /* dvdr, */ - /* pj->v[0], */ - /* pj->v[1], */ - /* pj->v[2] */ - /* ); */ - /* Compute dv cross r */ curlvr[0] = dv[1] * dx[2] - dv[2] * dx[1]; curlvr[1] = dv[2] * dx[0] - dv[0] * dx[2]; @@ -225,28 +202,31 @@ __attribute__((always_inline)) INLINE static void runner_iact_force( /* Compute sound speeds */ const float ci = pi->force.soundspeed; const float cj = pj->force.soundspeed; - float v_sig = ci + cj; /* Compute dv dot r. */ const float dvdr = (pi->v[0] - pj->v[0]) * dx[0] + (pi->v[1] - pj->v[1]) * dx[1] + (pi->v[2] - pj->v[2]) * dx[2]; - /* Artificial viscosity term */ - float visc = 0.f; - if (dvdr < 0.f) { - const float mu_ij = fac_mu * dvdr * r_inv; - v_sig -= 3.f * mu_ij; - const float rho_ij = 0.5f * (rhoi + rhoj); - const float balsara_i = - fabsf(pi->div_v) / - (fabsf(pi->div_v) + pi->force.curl_v + 0.0001 * ci / fac_mu / hi); - const float balsara_j = - fabsf(pj->div_v) / - (fabsf(pj->div_v) + pj->force.curl_v + 0.0001 * cj / fac_mu / hj); - visc = -0.25f * const_viscosity_alpha * v_sig * mu_ij / rho_ij * - (balsara_i + balsara_j); - } + /* Balsara term */ + const float balsara_i = + fabsf(pi->div_v) / + (fabsf(pi->div_v) + pi->force.curl_v + 0.0001 * ci / fac_mu / hi); + const float balsara_j = + fabsf(pj->div_v) / + (fabsf(pj->div_v) + pj->force.curl_v + 0.0001 * cj / fac_mu / hj); + + /* Are the particles moving towards each others ? */ + const float omega_ij = fminf(dvdr, 0.f); + const float mu_ij = fac_mu * r_inv * omega_ij; /* This is 0 or negative */ + + /* Signal velocity */ + const float v_sig = ci + cj - 3.f * mu_ij; + + /* Now construct the full viscosity term */ + const float rho_ij = 0.5f * (rhoi + rhoj); + const float visc = -0.25f * const_viscosity_alpha * v_sig * mu_ij * + (balsara_i + balsara_j) / rho_ij; /* Now, convolve with the kernel */ const float visc_term = 0.5f * visc * (wi_dr + wj_dr) * r_inv; @@ -255,23 +235,6 @@ __attribute__((always_inline)) INLINE static void runner_iact_force( /* Eventually got the acceleration */ const float acc = visc_term + sph_term; - /* //if(pi->id == 1000 && pj->id == 1100) */ - /* if(pi->id == 515050 && pj->id == 504849) */ - /* message("Interacting with %lld. r=%e hi=%e hj=%e dWi/dx=%e dWj/dx=%3e - * dvdr=%e visc=%e sph=%e", */ - /* pj->id, */ - /* r, */ - /* 2*hi, */ - /* 2*hj, */ - /* wi_dr, */ - /* wj_dr, */ - /* dvdr, */ - /* visc_term, */ - /* sph_term */ - /* ); */ - /* if(pi->id == 1100 && pj->id == 1000) */ - /* message("oO"); */ - /* Use the force Luke ! */ pi->a_hydro[0] -= mj * acc * dx[0]; pi->a_hydro[1] -= mj * acc * dx[1]; @@ -337,28 +300,31 @@ __attribute__((always_inline)) INLINE static void runner_iact_nonsym_force( /* Compute sound speeds */ const float ci = pi->force.soundspeed; const float cj = pj->force.soundspeed; - float v_sig = ci + cj; /* Compute dv dot r. */ const float dvdr = (pi->v[0] - pj->v[0]) * dx[0] + (pi->v[1] - pj->v[1]) * dx[1] + (pi->v[2] - pj->v[2]) * dx[2]; - /* Artificial viscosity term */ - float visc = 0.f; - if (dvdr < 0.f) { - const float mu_ij = fac_mu * dvdr * r_inv; - v_sig -= 3.f * mu_ij; - const float rho_ij = 0.5f * (rhoi + rhoj); - const float balsara_i = - fabsf(pi->div_v) / - (fabsf(pi->div_v) + pi->force.curl_v + 0.0001 * ci / fac_mu / hi); - const float balsara_j = - fabsf(pj->div_v) / - (fabsf(pj->div_v) + pj->force.curl_v + 0.0001 * cj / fac_mu / hj); - visc = -0.25f * const_viscosity_alpha * v_sig * mu_ij / rho_ij * - (balsara_i + balsara_j); - } + /* Balsara term */ + const float balsara_i = + fabsf(pi->div_v) / + (fabsf(pi->div_v) + pi->force.curl_v + 0.0001 * ci / fac_mu / hi); + const float balsara_j = + fabsf(pj->div_v) / + (fabsf(pj->div_v) + pj->force.curl_v + 0.0001 * cj / fac_mu / hj); + + /* Are the particles moving towards each others ? */ + const float omega_ij = fminf(dvdr, 0.f); + const float mu_ij = fac_mu * r_inv * omega_ij; /* This is 0 or negative */ + + /* Signal velocity */ + const float v_sig = ci + cj - 3.f * mu_ij; + + /* Now construct the full viscosity term */ + const float rho_ij = 0.5f * (rhoi + rhoj); + const float visc = -0.25f * const_viscosity_alpha * v_sig * mu_ij * + (balsara_i + balsara_j) / rho_ij; /* Now, convolve with the kernel */ const float visc_term = 0.5f * visc * (wi_dr + wj_dr) * r_inv;