particles_nbody_ajwr
Module
Description
$Id$
This module takes care of direct N-body gravity between particles.
** AUTOMATIC CPARAM.INC GENERATION ************************
Declare (for generation of cparam.inc) the number of f array variables and auxiliary variables added by this module
MPVAR CONTRIBUTION 3 CPARAM logical, parameter :: lparticles_nbody=.true.
Quick access
- Variables:
cdtpnbody,create_jeans_constant,delta_vsp0,fsp,icreate,idiag_torqext,idiag_torqext_gas,idiag_torqext_par,idiag_torqint,idiag_torqint_gas,idiag_torqint_par,idiag_totangmom,idiag_totenergy,idiag_vvspar,idiag_xxspar,iglobal_ggp,imass_nbody,initvvsp,initxxsp,iplanet,istar,laccrete_when_create,ladd_mass,lbackreaction,lcalc_orbit,lcreate_dust,lcreate_gas,lcreate_sinks,ldt_nbody,linertial_frame,linterpolate_gravity,linterpolate_linear,linterpolate_quadratic_spline,lnoselfgrav_star,ltempering,lvectorgravity,maxsink,mspar_orig,vspx0,vspy0,vspz0,xsp0,ysp0,zsp0- Routines:
add_friends(),add_indirect_term(),advance_particles_in_cartesian(),bcast_nbodyarray(),calc_nbodygravity_particles(),calc_pencils_par_nbody(),calc_torque(),check_particle(),collapse_cluster(),create_particles_sink_nbody(),dvvp_dt_nbody(),dvvp_dt_nbody_pencil(),dxxp_dt_nbody(),friends_of_friends(),get_evr(),get_gravity_field_nbody(),get_ramped_mass(),get_total_gravity(),get_totalmass(),init_particles_nbody(),initialize_particles_nbody(),integrate_selfgravity(),loop_through_nbodies(),loop_through_nbodies_fixstar(),loop_through_nbodies_inertial(),make_cluster(),merge_and_share(),particles_nbody_read_snapshot(),particles_nbody_special(),particles_nbody_write_snapshot(),particles_nbody_write_spdim(),pencil_criteria_par_nbody(),pencil_interdep_par_nbody(),point_par_name(),read_particles_nbody_init_pars(),read_particles_nbody_run_pars(),register_particles_nbody(),remove_particles_sink_nbody(),reset_center_of_mass(),rprint_particles_nbody(),update_position(),update_velocity(),write_particles_nbody_init_pars(),write_particles_nbody_run_pars()
Needed modules
cdata: $Id$general(keep_compiler_quiet()): $Id$messages: $Id$particles_cdata: $Id$particles_map: $Id$particles_sub: $Id$
Variables
- particles_nbody/accrete_hills_frac (nspar) [real,optional/default=0.2]
- particles_nbody/cdtpnbody [real,optional/default=0.1]
- particles_nbody/create_jeans_constant [real,optional/default=0.25]
- particles_nbody/delta_vsp0 [real,optional/default=1.0]
- particles_nbody/density_scale [real,optional/default=0.001]
- particles_nbody/eccentricity [real,optional/default=0.0]
- particles_nbody/final_ramped_mass (nspar) [real,optional/default=0.0]
- particles_nbody/fsp (nspar,mspvar) [real]
- particles_nbody/gnewton [real,optional/default=impossible]
- particles_nbody/gnewton1 [real]
- particles_nbody/hills_tempering_fraction [real,optional/default=0.8]
- particles_nbody/icreate [integer,optional/default=100]
- particles_nbody/idiag_torqext (nspar) [integer,optional/default=0]
- particles_nbody/idiag_torqext_gas (nspar) [integer,optional/default=0]
- particles_nbody/idiag_torqext_par (nspar) [integer,optional/default=0]
- particles_nbody/idiag_torqint (nspar) [integer,optional/default=0]
- particles_nbody/idiag_torqint_gas (nspar) [integer,optional/default=0]
- particles_nbody/idiag_torqint_par (nspar) [integer,optional/default=0]
- particles_nbody/idiag_totangmom [integer,optional/default=0]
- particles_nbody/idiag_totenergy [integer,optional/default=0]
- particles_nbody/idiag_vvspar (nspar,3) [integer,optional/default=0]
- particles_nbody/idiag_xxspar (nspar,3) [integer,optional/default=0]
- particles_nbody/iglobal_ggp [integer,optional/default=0]
- particles_nbody/imass_nbody [integer,optional/default=0]
- particles_nbody/initvvsp [character,optional/default='nothing']
- particles_nbody/initxxsp [character,optional/default='random']
- particles_nbody/iplanet [integer,optional/default=2]
- particles_nbody/istar [integer,optional/default=1]
- particles_nbody/laccrete_when_create [logical,optional/default=.true.]
- particles_nbody/laccretion (nspar) [logical,optional/default=.false.]
- particles_nbody/ladd_mass (nspar) [logical,optional/default=.false.]
- particles_nbody/lbackreaction [logical,optional/default=.false.]
- particles_nbody/lcalc_orbit [logical,optional/default=.true.]
- particles_nbody/lcreate_dust [logical,optional/default=.true.]
- particles_nbody/lcreate_gas [logical,optional/default=.true.]
- particles_nbody/lcreate_sinks [logical,optional/default=.false.]
- particles_nbody/lcylindrical_gravity_nbody (nspar) [logical,optional/default=.false.]
- particles_nbody/ldt_nbody [logical,optional/default=.true.]
- particles_nbody/ldust [logical,optional/default=.false.]
- particles_nbody/ldust_gravity [logical,optional/default=.false.]
- particles_nbody/lexclude_frozen [logical,optional/default=.false.]
- particles_nbody/lfollow_particle (nspar) [logical,optional/default=.false.]
- particles_nbody/lgas_gravity [logical,optional/default=.false.]
- particles_nbody/linertial_frame [logical,optional/default=.true.]
- particles_nbody/linterpolate_gravity [logical,optional/default=.false.]
- particles_nbody/linterpolate_linear [logical,optional/default=.true.]
- particles_nbody/linterpolate_quadratic_spline [logical,optional/default=.false.]
- particles_nbody/lnogravz_star [logical,optional/default=.false.]
- particles_nbody/lnorm [logical,optional/default=.true.]
- particles_nbody/lnoselfgrav_star [logical,optional/default=.true.]
- particles_nbody/lramp [logical,optional/default=.false.]
- particles_nbody/lreset_cm [logical,optional/default=.false.]
- particles_nbody/lretrograde [logical,optional/default=.false.]
- particles_nbody/ltempering [logical,optional/default=.false.]
- particles_nbody/lvectorgravity [logical,optional/default=.false.]
- particles_nbody/maxsink [integer,optional/default=10*nspar]
- particles_nbody/mspar_orig [integer,optional/default=1]
- particles_nbody/pmass (nspar) [real,optional/default=0.0]
- particles_nbody/pmass1 (nspar) [real]
- particles_nbody/r_smooth (nspar) [real,optional/default=0.0]
- particles_nbody/ramp_orbits [integer,optional/default=5]
- particles_nbody/rhs_poisson_const [real,pointer]
- particles_nbody/semimajor_axis [real,optional/default=1.0]
- particles_nbody/totmass [real]
- particles_nbody/totmass1 [real]
- particles_nbody/tstart_selfgrav [real,pointer]
- particles_nbody/vspx0 (nspar) [real,optional/default=0.0]
- particles_nbody/vspy0 (nspar) [real,optional/default=0.0]
- particles_nbody/vspz0 (nspar) [real,optional/default=0.0]
- particles_nbody/xsp0 (nspar) [real,optional/default=0.0]
- particles_nbody/ysp0 (nspar) [real,optional/default=0.0]
- particles_nbody/zsp0 (nspar) [real,optional/default=0.0]
Subroutines and functions
- subroutine particles_nbody/register_particles_nbody()
Set up indices for access to the f and fsp.
27-aug-06/wlad: adapted
- Call to:
svn_id(),fatal_error(),append_npvar(),rprint_particles_nbody(),warning(),boundconds_particles(),bcast_nbodyarray(),interpolate_linear(),interpolate_quadratic_spline(),get_total_gravity(),get_radial_distance(),integrate_selfgravity(),calc_torque(),sum_lim_mn_name(),reset_center_of_mass(),get_ramped_mass(),loop_through_nbodies(),point_par_name(),loop_through_nbodies_inertial(),loop_through_nbodies_fixstar(),get_evr(),remove_particle(),integrate_mn_name(),get_gravity_field_nbody(),add_indirect_term(),update_position(),update_velocity(),read_snaptime(),update_snaptime(),merge_and_share(),friends_of_friends(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/initialize_particles_nbody(f)
Perform any post-parameter-read initialization i.e. calculate derived parameters.
27-aug-06/wlad: adapted
- Parameters:
- Use :
- Call to:
rprint_particles_nbody(),fatal_error(),warning(),boundconds_particles(),bcast_nbodyarray(),interpolate_linear(),interpolate_quadratic_spline(),get_total_gravity(),get_radial_distance(),integrate_selfgravity(),calc_torque(),sum_lim_mn_name(),reset_center_of_mass(),get_ramped_mass(),loop_through_nbodies(),point_par_name(),loop_through_nbodies_inertial(),loop_through_nbodies_fixstar(),get_evr(),remove_particle(),integrate_mn_name(),get_gravity_field_nbody(),add_indirect_term(),update_position(),update_velocity(),read_snaptime(),update_snaptime(),merge_and_share(),friends_of_friends(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/pencil_criteria_par_nbody()
All pencils that the Particles_nbody module depends on are specified here.
22-sep-06/wlad: adapted
- Call to:
warning(),fatal_error(),boundconds_particles(),bcast_nbodyarray(),interpolate_linear(),interpolate_quadratic_spline(),get_total_gravity(),get_radial_distance(),integrate_selfgravity(),calc_torque(),sum_lim_mn_name(),reset_center_of_mass(),get_ramped_mass(),loop_through_nbodies(),point_par_name(),loop_through_nbodies_inertial(),loop_through_nbodies_fixstar(),get_evr(),remove_particle(),integrate_mn_name(),get_gravity_field_nbody(),add_indirect_term(),update_position(),update_velocity(),read_snaptime(),update_snaptime(),merge_and_share(),friends_of_friends(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/pencil_interdep_par_nbody(lpencil_in)
Interdependency among pencils provided by the Particles_nbody module is specified here.
22-sep-06/wlad: adapted
- Parameters:
lpencil_in (npencils) [logical]
- Call to:
warning(),fatal_error(),boundconds_particles(),bcast_nbodyarray(),interpolate_linear(),interpolate_quadratic_spline(),get_total_gravity(),get_radial_distance(),integrate_selfgravity(),calc_torque(),sum_lim_mn_name(),reset_center_of_mass(),get_ramped_mass(),loop_through_nbodies(),point_par_name(),loop_through_nbodies_inertial(),loop_through_nbodies_fixstar(),get_evr(),remove_particle(),integrate_mn_name(),get_gravity_field_nbody(),add_indirect_term(),update_position(),update_velocity(),read_snaptime(),update_snaptime(),merge_and_share(),friends_of_friends(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/calc_pencils_par_nbody(f, p)
Calculate nbody particle pencils
22-sep-06/wlad: adapted
- Parameters:
- Call to:
warning(),fatal_error(),boundconds_particles(),bcast_nbodyarray(),interpolate_linear(),interpolate_quadratic_spline(),get_total_gravity(),get_radial_distance(),integrate_selfgravity(),calc_torque(),sum_lim_mn_name(),reset_center_of_mass(),get_ramped_mass(),loop_through_nbodies(),point_par_name(),loop_through_nbodies_inertial(),loop_through_nbodies_fixstar(),get_evr(),remove_particle(),integrate_mn_name(),get_gravity_field_nbody(),add_indirect_term(),update_position(),update_velocity(),read_snaptime(),update_snaptime(),merge_and_share(),friends_of_friends(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/init_particles_nbody(f, fp)
Initial positions and velocities of nbody particles. Overwrite the position asserted by the dust module
17-nov-05/anders+wlad: adapted
- Parameters:
- Use :
- Call to:
warning(),fatal_error(),boundconds_particles(),bcast_nbodyarray(),interpolate_linear(),interpolate_quadratic_spline(),get_total_gravity(),get_radial_distance(),integrate_selfgravity(),calc_torque(),sum_lim_mn_name(),reset_center_of_mass(),get_ramped_mass(),loop_through_nbodies(),point_par_name(),loop_through_nbodies_inertial(),loop_through_nbodies_fixstar(),get_evr(),remove_particle(),integrate_mn_name(),get_gravity_field_nbody(),add_indirect_term(),update_position(),update_velocity(),read_snaptime(),update_snaptime(),merge_and_share(),friends_of_friends(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/dvvp_dt_nbody_pencil(f, df, fp, dfp, p, ineargrid)
Add gravity from the particles to the gas and the backreaction from the gas onto the particles.
Adding the gravity on the dust component via the grid is less accurate, but much faster than looping through all npar_loc particle and add the gravity of all massive particles to it.
07-sep-06/wlad: coded
- Parameters:
- Use :
- Call to:
interpolate_linear(),interpolate_quadratic_spline(),get_total_gravity(),get_radial_distance(),integrate_selfgravity(),calc_torque(),sum_lim_mn_name(),reset_center_of_mass(),get_ramped_mass(),fatal_error(),loop_through_nbodies(),point_par_name(),loop_through_nbodies_inertial(),loop_through_nbodies_fixstar(),get_evr(),remove_particle(),integrate_mn_name(),get_gravity_field_nbody(),add_indirect_term(),update_position(),update_velocity(),read_snaptime(),update_snaptime(),merge_and_share(),bcast_nbodyarray(),friends_of_friends(),warning(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/dxxp_dt_nbody(dfp)
If the center of mass of the nbody particles was moved from the center of the grid, reset it.
22-sep-06/wlad: coded
- Parameters:
dfp (mpar_loc,mpvar) [real]
- Call to:
reset_center_of_mass(),get_ramped_mass(),fatal_error(),loop_through_nbodies(),point_par_name(),loop_through_nbodies_inertial(),loop_through_nbodies_fixstar(),get_evr(),remove_particle(),sum_lim_mn_name(),integrate_mn_name(),get_total_gravity(),get_radial_distance(),get_gravity_field_nbody(),add_indirect_term(),update_position(),update_velocity(),read_snaptime(),update_snaptime(),merge_and_share(),bcast_nbodyarray(),friends_of_friends(),warning(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/dvvp_dt_nbody(f, df, fp, dfp, ineargrid)
Evolution of nbody and dust particles velocities due to particle-particle interaction only.
Coriolis and shear are already added in particles_dust.
27-aug-06/wlad: coded
- Parameters:
- Use :
- Call to:
get_ramped_mass(),fatal_error(),loop_through_nbodies(),point_par_name(),loop_through_nbodies_inertial(),loop_through_nbodies_fixstar(),get_evr(),remove_particle(),sum_lim_mn_name(),integrate_mn_name(),get_total_gravity(),get_radial_distance(),get_gravity_field_nbody(),add_indirect_term(),update_position(),update_velocity(),read_snaptime(),update_snaptime(),merge_and_share(),bcast_nbodyarray(),friends_of_friends(),warning(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/loop_through_nbodies(fp, dfp, k, sq_hills, ineargrid)
- Parameters:
fp (mpar_loc,mparray) [real]
dfp (mpar_loc,mpvar) [real]
k [integer]
sq_hills (mspar) [real]
ineargrid (mpar_loc,3) [integer]
- Call to:
loop_through_nbodies_inertial(),loop_through_nbodies_fixstar(),get_evr(),remove_particle(),fatal_error(),sum_lim_mn_name(),integrate_mn_name(),get_ramped_mass(),get_total_gravity(),get_radial_distance(),get_gravity_field_nbody(),add_indirect_term(),update_position(),update_velocity(),read_snaptime(),update_snaptime(),merge_and_share(),bcast_nbodyarray(),friends_of_friends(),warning(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/loop_through_nbodies_inertial(fp, dfp, k, sq_hills, ineargrid)
Subroutine that adds the gravity from all massive particles. Particle gravity has always to be added in Cartesian, for better conservation of the Jacobi constant.
07-mar-08/wlad:coded
- Parameters:
fp (mpar_loc,mparray) [real,inout]
dfp (mpar_loc,mpvar) [real,inout]
k [integer,in]
sq_hills (mspar) [real]
ineargrid (mpar_loc,3) [integer]
- Call to:
get_evr(),remove_particle(),fatal_error(),sum_lim_mn_name(),integrate_mn_name(),get_ramped_mass(),get_total_gravity(),get_radial_distance(),get_gravity_field_nbody(),add_indirect_term(),update_position(),update_velocity(),read_snaptime(),update_snaptime(),merge_and_share(),bcast_nbodyarray(),friends_of_friends(),warning(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/loop_through_nbodies_fixstar(fp, dfp, k, sq_hills, ineargrid)
Gravity acceleration for all bodies, in the reference frame of the star. So far, works only for two massive bodies, in Cartesian coordinates.
23-jun-14/wlad: coded
- Parameters:
fp (mpar_loc,mparray) [real,inout]
dfp (mpar_loc,mpvar) [real,inout]
k [integer,in]
sq_hills (mspar) [real]
ineargrid (mpar_loc,3) [integer]
- Call to:
fatal_error(),sum_lim_mn_name(),integrate_mn_name(),get_ramped_mass(),get_total_gravity(),get_radial_distance(),get_gravity_field_nbody(),add_indirect_term(),update_position(),update_velocity(),read_snaptime(),update_snaptime(),remove_particle(),merge_and_share(),bcast_nbodyarray(),friends_of_friends(),warning(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/get_evr(xxp, xxsp, evr_cart)
Point-to-point vector distance, in different coordinate systems. Return always in Cartesian.
14-feb-14/wlad: coded
- Parameters:
xxp (3) [real,in]
xxsp (3) [real,in]
evr_cart (3) [real,out]
- Call to:
fatal_error(),sum_lim_mn_name(),integrate_mn_name(),get_ramped_mass(),get_total_gravity(),get_radial_distance(),get_gravity_field_nbody(),add_indirect_term(),update_position(),update_velocity(),read_snaptime(),update_snaptime(),remove_particle(),merge_and_share(),bcast_nbodyarray(),friends_of_friends(),warning(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/point_par_name(a, iname)
Register a, a simple scalar, as diagnostic.
Works for individual particle diagnostics.
07-mar-08/wlad: adapted from sum_par_name
- Parameters:
a [real]
iname [integer]
- Call to:
fatal_error(),sum_lim_mn_name(),integrate_mn_name(),get_ramped_mass(),get_total_gravity(),get_radial_distance(),get_gravity_field_nbody(),add_indirect_term(),update_position(),update_velocity(),read_snaptime(),update_snaptime(),remove_particle(),merge_and_share(),bcast_nbodyarray(),friends_of_friends(),warning(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/read_particles_nbody_init_pars(iomsg)
- Parameters:
iomsg [character,out]
- Use :
- Call to:
fatal_error(),sum_lim_mn_name(),integrate_mn_name(),get_ramped_mass(),get_total_gravity(),get_radial_distance(),get_gravity_field_nbody(),add_indirect_term(),update_position(),update_velocity(),read_snaptime(),update_snaptime(),remove_particle(),merge_and_share(),bcast_nbodyarray(),friends_of_friends(),warning(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/write_particles_nbody_init_pars(unit)
- Parameters:
unit [integer,in]
- Call to:
fatal_error(),sum_lim_mn_name(),integrate_mn_name(),get_ramped_mass(),get_total_gravity(),get_radial_distance(),get_gravity_field_nbody(),add_indirect_term(),update_position(),update_velocity(),read_snaptime(),update_snaptime(),remove_particle(),merge_and_share(),bcast_nbodyarray(),friends_of_friends(),warning(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/read_particles_nbody_run_pars(iomsg)
- Parameters:
iomsg [character,out]
- Use :
- Call to:
fatal_error(),sum_lim_mn_name(),integrate_mn_name(),get_ramped_mass(),get_total_gravity(),get_radial_distance(),get_gravity_field_nbody(),add_indirect_term(),update_position(),update_velocity(),read_snaptime(),update_snaptime(),remove_particle(),merge_and_share(),bcast_nbodyarray(),friends_of_friends(),warning(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/write_particles_nbody_run_pars(unit)
- Parameters:
unit [integer,in]
- Call to:
fatal_error(),sum_lim_mn_name(),integrate_mn_name(),get_ramped_mass(),get_total_gravity(),get_radial_distance(),get_gravity_field_nbody(),add_indirect_term(),update_position(),update_velocity(),read_snaptime(),update_snaptime(),remove_particle(),merge_and_share(),bcast_nbodyarray(),friends_of_friends(),warning(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/reset_center_of_mass(dfp)
If the center of mass was accelerated, reset its position to the center of the grid.
Assumes that the total mass of the particles is one.
27-aug-06/wlad: coded 18-mar-08/wlad: cylindrical and spherical corrections
- Parameters:
dfp (mpar_loc,mpvar) [real,inout]
- Call to:
fatal_error(),sum_lim_mn_name(),integrate_mn_name(),get_ramped_mass(),get_total_gravity(),get_radial_distance(),get_gravity_field_nbody(),add_indirect_term(),update_position(),update_velocity(),read_snaptime(),update_snaptime(),remove_particle(),merge_and_share(),bcast_nbodyarray(),friends_of_friends(),warning(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/integrate_selfgravity(p, rrp, xxpar, accg, rp0)
Calculates acceleration on the point (x,y,z)=xxpar due to the gravity of the gas+dust.
15-sep-06/wlad : coded
- Parameters:
p [pencil_case]
rrp (nx) [real]
xxpar (3) [real]
accg (3) [real,out]
rp0 [real]
- Use :
- Call to:
fatal_error(),sum_lim_mn_name(),integrate_mn_name(),get_ramped_mass(),get_total_gravity(),get_radial_distance(),get_gravity_field_nbody(),add_indirect_term(),update_position(),update_velocity(),read_snaptime(),update_snaptime(),remove_particle(),merge_and_share(),bcast_nbodyarray(),friends_of_friends(),warning(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/bcast_nbodyarray(fp)
Broadcast nbody particles across processors The non-root processors, if they find a nbody particle in their fp array, they:
send it to root with a true logical else send a false logical
The root processor receives all the logicals, and if they are true, then receives the value, broadcasting it
07-sep-06/wlad: coded
- Parameters:
fp (mpar_loc,mparray) [real]
- Use :
- Call to:
fatal_error(),sum_lim_mn_name(),integrate_mn_name(),get_ramped_mass(),get_total_gravity(),get_radial_distance(),get_gravity_field_nbody(),add_indirect_term(),update_position(),update_velocity(),read_snaptime(),update_snaptime(),remove_particle(),merge_and_share(),bcast_nbodyarray(),friends_of_friends(),warning(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/particles_nbody_special()
Fetch fsp array to special module
01-mar-08/wlad: coded
- Use :
- Call to:
fatal_error(),sum_lim_mn_name(),integrate_mn_name(),get_ramped_mass(),get_total_gravity(),get_radial_distance(),get_gravity_field_nbody(),add_indirect_term(),update_position(),update_velocity(),read_snaptime(),update_snaptime(),remove_particle(),merge_and_share(),bcast_nbodyarray(),friends_of_friends(),warning(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/get_totalmass(tmass)
called from global_shear to set the initial keplerian field
- Parameters:
tmass [real]
- Call to:
fatal_error(),sum_lim_mn_name(),integrate_mn_name(),get_ramped_mass(),get_total_gravity(),get_radial_distance(),get_gravity_field_nbody(),add_indirect_term(),update_position(),update_velocity(),read_snaptime(),update_snaptime(),remove_particle(),merge_and_share(),bcast_nbodyarray(),friends_of_friends(),warning(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/get_gravity_field_nbody(grr, gg, ks)
Subroutine that returns the gravity field a particle exterts in a pencil, respecting the coordinate system used
07-mar-08/wlad: coded
- Parameters:
- Call to:
fatal_error(),sum_lim_mn_name(),integrate_mn_name(),get_ramped_mass(),get_total_gravity(),get_radial_distance(),get_gravity_field_nbody(),add_indirect_term(),update_position(),update_velocity(),read_snaptime(),update_snaptime(),remove_particle(),merge_and_share(),bcast_nbodyarray(),friends_of_friends(),warning(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/calc_torque(p, dist, ks)
Output torque diagnostic for nbody particle ks
05-nov-05/wlad : coded
- Parameters:
p [pencil_case]
dist (nx) [real]
ks [integer]
- Use :
- Called from:
register_particles_nbody(),initialize_particles_nbody(),pencil_criteria_par_nbody(),pencil_interdep_par_nbody(),calc_pencils_par_nbody(),init_particles_nbody(),dvvp_dt_nbody_pencil()- Call to:
fatal_error(),sum_lim_mn_name(),integrate_mn_name(),get_ramped_mass(),get_total_gravity(),get_radial_distance(),get_gravity_field_nbody(),add_indirect_term(),update_position(),update_velocity(),read_snaptime(),update_snaptime(),remove_particle(),merge_and_share(),bcast_nbodyarray(),friends_of_friends(),warning(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/get_ramped_mass()
- Call to:
get_ramped_mass(),get_total_gravity(),get_radial_distance(),get_gravity_field_nbody(),add_indirect_term(),update_position(),update_velocity(),read_snaptime(),update_snaptime(),fatal_error(),remove_particle(),merge_and_share(),bcast_nbodyarray(),friends_of_friends(),warning(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/calc_nbodygravity_particles(f)
For the case of interpolated gravity, add the gravity of all n-body particles to slots of the f-array.
08-mar-08/wlad: coded
- Parameters:
- Call to:
get_ramped_mass(),get_total_gravity(),get_radial_distance(),get_gravity_field_nbody(),add_indirect_term(),update_position(),update_velocity(),read_snaptime(),update_snaptime(),fatal_error(),remove_particle(),merge_and_share(),bcast_nbodyarray(),friends_of_friends(),warning(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/get_total_gravity(ggt)
Sum the gravities of all massive particles
08-mar-08/wlad: coded
- Parameters:
ggt (mx,3) [real,out]
- Use :
- Call to:
get_radial_distance(),get_gravity_field_nbody(),add_indirect_term(),update_position(),update_velocity(),read_snaptime(),update_snaptime(),fatal_error(),remove_particle(),merge_and_share(),bcast_nbodyarray(),friends_of_friends(),warning(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/add_indirect_term(ks, ggt)
Add the terms due to the reference frame being away from the baricenter. So far, only for one perturber (two massive bodies), and in Cartesian coordinates.
23-jun-14/wlad: coded
- Parameters:
ks [integer,in]
ggt (mx,3) [real]
- Call to:
update_position(),update_velocity(),read_snaptime(),update_snaptime(),fatal_error(),remove_particle(),merge_and_share(),bcast_nbodyarray(),friends_of_friends(),warning(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/advance_particles_in_cartesian(fp, dfp)
With N-body gravity, the particles should have their position advanced in Cartesian coordinates, for better conservation of the Jacobi constant, even if the grid is polar.
14-feb-14/wlad: coded
- Parameters:
fp (mpar_loc,mparray) [real]
dfp (mpar_loc,mpvar) [real]
- Call to:
update_position(),update_velocity(),read_snaptime(),update_snaptime(),fatal_error(),remove_particle(),merge_and_share(),bcast_nbodyarray(),friends_of_friends(),warning(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/update_position(fp, dfp, xp, yp, zp, vx, vy, vz)
Update position if N-body is used in polar coordinates.
14-feb-14:wlad/coded
- subroutine particles_nbody/update_velocity(fp, vx, vy, vz, ax, ay, az)
Update velocity if N-body is used in polar coordinates.
14-feb-14:wlad/coded
- subroutine particles_nbody/particles_nbody_read_snapshot(filename)
Read nbody particle info
01-apr-08/wlad: dummy
- Parameters:
filename [character]
- Use :
- Call to:
read_snaptime(),update_snaptime(),fatal_error(),remove_particle(),merge_and_share(),bcast_nbodyarray(),friends_of_friends(),warning(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/particles_nbody_write_snapshot(snapbase, enum[, flist])
- Parameters:
snapbase [character]
enum [logical]
flist [character]
- Use :
general(safe_character_assign()),sub(update_snaptime(),read_snaptime())- Call to:
read_snaptime(),update_snaptime(),fatal_error(),remove_particle(),merge_and_share(),bcast_nbodyarray(),friends_of_friends(),warning(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/particles_nbody_write_spdim(filename)
Write nspar and mspvar to file.
01-apr-08/wlad: coded
- Parameters:
filename [character]
- Call to:
fatal_error(),remove_particle(),merge_and_share(),bcast_nbodyarray(),friends_of_friends(),warning(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/rprint_particles_nbody(lreset[, lwrite])
Read and register print parameters relevant for nbody particles.
17-nov-05/anders+wlad: adapted
- Parameters:
lreset [logical]
lwrite [logical]
- Use :
diagnostics,farraymanager(farray_index_append()),general(itoa())- Call to:
fatal_error(),remove_particle(),merge_and_share(),bcast_nbodyarray(),friends_of_friends(),warning(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/create_particles_sink_nbody(f, fp, dfp, ineargrid)
If the flow in any place of the grid has gone gravitationally unstable, substitute the local flow by a sink particle. By now, the only criterion is the local Jeans mass. The Jeans length is
lambda_J = sqrt(pi*cs2/(G*rho))
We substitute lambda_J by the biggest resolution element and write the condition in terms of density
rho_J = pi*cs2/G*Delta_x^2
The constant is a free parameter of the module.
13-mar-08/wlad: coded
- Parameters:
- Use :
equationofstate(cs20()),farraymanager(farray_use_global()),mpicomm- Call to:
fatal_error(),remove_particle(),merge_and_share(),bcast_nbodyarray(),friends_of_friends(),warning(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/remove_particles_sink_nbody(f, fp, dfp, ineargrid)
Subroutine for taking particles out of the simulation due to their proximity to a sink particle or sink point.
Just a dummy routine for now.
25-sep-08/anders: coded
Subroutine to merge a gravitationally unstable cluster of particles into a sink particle
13-mar-08/wlad: coded
- Parameters:
- Use :
- Call to:
friends_of_friends(),fatal_error(),warning(),fatal_error_local(),make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance()
- subroutine particles_nbody/friends_of_friends(fcsp, fleft, nc, nfinal)
Algorithm that cluster particles together based on a proximity threshold. It takes a particle and find all its neighbours (=friends). Then loops through the neighbours finding the neighbours of the neighbours (friends of friends), and so on.
13-mar-08/wlad: coded
- Parameters:
fcsp (maxsink,mspvar) [real]
fleft (nspar,mspvar) [real,out]
nc [integer,in]
nfinal [integer,out]
- Call to:
make_cluster(),collapse_cluster(),check_particle(),add_friends(),get_particles_interdistance(),fatal_error()
- subroutine particles_nbody/make_cluster(ks, lchecked, cluster, nc, nf, fcsp)
This subroutine starts a cluster of particles, by checking the first one. Once a particle is checked, it will also look for its neighbours, checking them. In the end, all friends and friends of friends are checked into the cluster.
13-mar-08/wlad: coded
- Parameters:
ks [integer,in]
lchecked (nc) [logical,inout]
cluster (nc) [integer,inout]
nc [integer,in,]
nf [integer,out]
fcsp (maxsink,mspvar) [real]
- Call to:
check_particle(),add_friends(),get_particles_interdistance(),fatal_error()
- subroutine particles_nbody/check_particle(k, lchecked, cluster, ic, nc, fcsp)
Check (tag) a particle and its neighbours
13-mar-08/wlad : coded
- Parameters:
k [integer,in]
lchecked (nc) [logical,inout]
cluster (nc) [integer,inout]
ic [integer,inout]
nc [integer,in,]
fcsp (maxsink,mspvar) [real]
- Call to:
add_friends(),get_particles_interdistance(),check_particle(),fatal_error()
- subroutine particles_nbody/add_friends(par, lchecked, cluster, ic, nc, fcsp)
Add all neighbours of a particle to the cluster. This subroutine is called by check_particle, but also calls it. The procedure is therefore recursive: the loop will be over when all friends of friends are added to the cluster.
13-mar-08/wlad: coded
- Parameters:
par [integer,in]
lchecked (nc) [logical,inout]
cluster (nc) [integer,inout]
ic [integer,inout]
nc [integer,in,]
fcsp (maxsink,mspvar) [real]
- Call to:
get_particles_interdistance(),check_particle(),fatal_error()
- subroutine particles_nbody/collapse_cluster(cluster, nf, fcsp, particle)
Collapse the cluster into a single particle with the total mass, momentum and energy of the collapsed stuff
13-mar-08/wlad: coded
- Parameters:
cluster (nf) [integer,inout]
nf [integer,in,]
fcsp (maxsink,mspvar) [real]
particle (mspvar) [real,out]
- Call to: