Pseudo-Newtonian Orbits

*** under construction ***

There is an option in the directcode (a toy code) to use negative softening length, whicb activates a pseudo-Newtonian potential of the form -eps = 3GM/c^2


#! /bin/csh -f
#
#   simple nbody integrator testing the precession of orbits in a pseudo-newtonian potential
#
#   30-jul-2009   created - peter teuben

set eps=0.001
set m=0.0001
set v=0.7

foreach _arg ($*)
   set $_arg
end

rm junk1.*

mk2body junk1.in m=$m vy=$v
directcode junk1.in junk1.out freq=1000 freqout=1000 tstop=40 eps=-$eps  > junk1.log
snapdiagplot junk1.out yapp=/null
stoo junk1.out junk1.orb 1 nsteps=100000 
orbmax junk1.orb 1 > junk1.tab
orbmax junk1.orb 2 > junk1.tabmin
tablsqfit junk1.tab > junk1.lsq
tabtrend junk1.tab | tabhist - yapp=/null >& junk1.hist


set dpdt=`grep 'a  =' junk1.lsq  | awk '{print $3}'`
set p=`grep Mean   junk1.hist | awk '{print $9}'`

# shape of orbit: get rmin and rmax

tabhist junk1.tab    5 yapp=/null >& junk1.histmax
tabhist junk1.tabmin 5 yapp=/null >& junk1.histmin

set rmax=`grep Mean   junk1.histmax | awk '{print $9}'`
set rmin=`grep Mean   junk1.histmin | awk '{print $9}'`

set a=`nemoinp "0.5*($rmax+$rmin)"`
set e=`nemoinp "($rmax-$rmin)/($rmax+$rmin)"`

# now compute the thing that should be 2.pi
set twopi=`nemoinp "$dpdt*$p*$a*(1-$e*$e)/$eps"`

echo $eps $v $m $dpdt $p $rmax $rmin $a $e  $twopi

We can also use a potential descriptor and a standard orbit integrator to solve this problem. For example potname=point potpars=0,1,eps would do the same thing.

#! /bin/csh -f
#
#   simple nbody integrator testing the precession of orbits in a pseudo-newtonian potential
#
#   30-jul-2009   created - peter teuben

set eps=0.001
set m=0
set v=0.9

foreach _arg ($*)
   set $_arg
end

rm junk1.*

mkorbit junk1.in x=1 y=0 z=0 vx=0 vy=$v vz=0 potname=point
orbint junk1.in junk1.orb dt=1.0/1000.0 ndiag=4000 nsteps=40000 nsave=1 potname=point potpars=0,1,$eps debug=1 
>& junk1.log

orbplot junk1.orb
orbmax junk1.orb 1 > junk1.tab
orbmax junk1.orb 2 > junk1.tabmin
tablsqfit junk1.tab > junk1.lsq
tabtrend junk1.tab | tabhist - yapp=/null >& junk1.hist


set dpdt=`grep 'a  =' junk1.lsq  | awk '{print $3}'`
set p=`grep Mean   junk1.hist | awk '{print $9}'`

# shape of orbit: get rmin and rmax

tabhist junk1.tab    5 yapp=/null >& junk1.histmax
tabhist junk1.tabmin 5 yapp=/null >& junk1.histmin

set rmax=`grep Mean   junk1.histmax | awk '{print $9}'`
set rmin=`grep Mean   junk1.histmin | awk '{print $9}'`

set a=`nemoinp "0.5*($rmax+$rmin)"`
set e=`nemoinp "($rmax-$rmin)/($rmax+$rmin)"`

# now compute the thing that should be 2.pi
set twopi=`nemoinp "$dpdt*$p*$a*(1-$e*$e)/$eps"`
set one=`nemoinp "$twopi/2/pi"`

echo $eps $v $m $dpdt $p $rmax $rmin $a $e  $twopi $one


The orbit can be integrated using orbint