Note: SEE ALSO README.devel for new information! README - SWIFT_RMVSY (and SWIFT_MVS2FY) documentation Miroslav Broz, miroslav.broz@email.cz, Aug 6th 2002 http://sirrah.troja.mff.cuni.cz/~mira/mp/ ------------------------------------------------------------------------ Program SWIFT_RMVSY is a numerical integrator, based on the package SWIFT by M. Duncan and H. Levison. The original package is accesible via FTP at ftp://gort.space.swri.edu/pub/swift.tar.Z. SWIFT_RMVSY sources (as well as RPMs) could be downloaded via HTTP protocol from http://sirrah.troja.mff.cuni.cz/yarko-site/download/ Our version of the propagator swift_rmvs3 is intended especially for applications in the Solar system - we modified the code in the following way: 1) We implemented YARKOVSKY DIURNAL AND SEASONAL FORCES. 2) We implemented ONLINE OUTPUT DIGITAL FILTER (based on Kaiser windows) and added REAL*8 BINARY OUTPUT of osculating elements for precise restart. 3) We implemented 2ND ORDER SYMPLECTIC INTEGRATOR (by Laskar & Robutel, 2000) (but WITHOUT regularization, ie. no close encounters). The integrator (called SWIFT_MVS2FY) is at least TWO TIMES FASTER than MVS, while keeping the same relative energy error (you can choose time-step 80-120 days rather than usual 20 day for MVS). 4) We PARALELLIZED the code of the SWIFT package (only the part for TEST PARTICLES), and also other integrators based on it (such as swift_rmvsy, swift_mvs2fy, swift_mvsf; except swift_bs), according to OpenMP (http://www.openmp.org) standard. Free Omni compiler omf77 (http://phase.etl.go.jp/Omni/) can be used to compile program for Linux. (We also found useful a MOSIX cluster (http://www.mosix.org) for easy job management on LAN.) You can find results of several tests on the following URLs: http://sirrah.troja.mff.cuni.cz/yarko-site/integrator/test.html http://sirrah.troja.mff.cuni.cz/yarko-site/publications/acm02-mvs2.ps.gz COMPILATION of the code ------------------------------------------------------------------------ First you MUST compile the original SWIFT package - get the archive from the anonymous FTP server gort.space.swri.edu/pub/swift.tar.Z, uncompress it and follow the instructions in the README.first file therein. You need to copy or symlink the resulting libswift.a library to that directory, where the SWIFT_RMVSY files will be located. Uncompress the swift_rmvsy.tar.gz package, edit the Makefile and run make. Almost all code is written in FORTRAN77 language and thus it can be easily compiled for various platforms and operating systems. We provide a Makefile for the Linux gcc compiler, but we already compiled swift_rmvsy for Windows 95/98/NT, Digital UNIX V4.0D, Irix 6.2, FreeBSD succesfully. EXAMPLES of input files (in infiles/ directory) ------------------------------------------------------------------------ filter.in - Input parameters for the online digital filtering process. Their meaning is as follows: 1 3 number of on-line filters 2 AAB sequence of filters 3 10 10 3 decimation factors 4 80 0.024d0 10.0d0 parameters m,x0,beta of filter A 5 80 0.10d0 20.0d0 the same for B 6 730.5d0 time step [day] 7 bin.filter.dat filename of filtered binary file 8 T write real*8 bin.dat output of osculating elements? [T|F] (useful for precise restart) rmvsy.in, mvsy.in, rmvsf.in, bsy.in, bsf.in - Standard inputs for the swift_(rmvs|mvs|bs)(y|f) programs. th.in, spin.in - Thermal and spin axes parameters of asteroids for programs swift_(rmvs|mvs|bs)y, all documented therein. yarko.in - Further parameters for yarko-related subroutines, reorientation and disruption, YORP model, Hill spheres scaling factors (for rmvs3 subs). param.in, pl.in, tp.in - The same input parameters as in the original SWIFT (units in these files are GM, AU, AU/day and AU/day**2). MODIFIED SOURCE FILES from the original SWIFT package ------------------------------------------------------------------------ bs.inc - The include file for BS integrator (stayed unmodified). bs_int.f - The same modification as in subroutine rmvs3_step. getacch_tp.f - The calculation of test particles accelerations in heliocentric frame, added one call of the subroutine getacc_yarko. rmvs.inc - The include file for subroutines calculating close encounters (this file was not modified, it is only necessary for succesful compilation). rmvs3_chk.f - This subroutine checks the encounters between a test particle and massive bodies. We added common block /hill/ to scale the Hill spehere factors individually for each planet (see subroutine io_init_yarko). Eg. we have to avoid "jumps" over the Mars Hill-sphere in the case of a large integration timestep (30 days). rmvs3_step.f - The subroutine calculates one time step in heliocentric coordinates for both massive and test particles. The common block /times/ was added to the code due to assignment of the actual time in the getacc_yarko subroutine. rmvs3_step_out.f - The same modification as in subroutine rmvs3_step. step_kdk_tp.f - The same modification as in subroutine rmvs3_step. swift.inc - The main include file for SWIFT (this file was not modified, it is only necessary for succesful compilation). tu4_getaccb_tp.f - Added call to the getacc_yarko subroutine. util_version.f - Additional information about the version of swift_rmvsy code. NEW FILES and SUBROUTINES ------------------------------------------------------------------------ discard_meana.f - Discard TP's according to their MEAN semimajor axis (thus it depends on filtering parameters, see filter.in file). The elements are passed from filter_elmts_write.f to this subroutine in /mean_elements/ common block. disrupt.f - The subroutine simulates disruptions of asteroids, it randomly discards test particles from the run. The time step and mean-time of disruption (ie. its probability) are given in input file yarko.in (see documentation therein). disrupt_write.f - Write log-file disrupt.out in case of any TP disruption. filter.inc - The include file for all filtering subroutines. getacc_yarko.f - The subroutine for the calculation of thermal accelerations in heliocentric frame. Both diurnal and seasonal variants of Yarkovsky effect are included in the code. Thermal parameters of test particles are passed in the common block /yarko/. Another common block /times/ serves an actual value of the independent variable (time) for the calculation of the non-local seasonal force. io_dump_spin.f - Create dump_spin.dat file with recent spin axes orientations. io_chk.f - Checks if the file already exits, otherwise stops. io_init_filter.f - The reading of filtering parameters from given file (see the file filer.in), pre-calculation of convolution filters A and B. io_init_spin.f - Read in spin axes data and store them in common block /yarko/. Initial random-seed is also read from the input spin.in file. io_init_th.f - The reading of asterods' thermal parameters, pre-calculation of parameters for getacc_yarko subroutine. io_init_yarko.f - Read yarko.in input file, see documentation therein. A lot of parameters is passed from/to other subroutines in common blocks: /radii/, /yarko/ and /hill/. io_write_filter.f - The subroutine accumulates the osculating elements of asteroids and planets in a buffer, than filters the data and writes the output to the real*4 binary file. io_read_hdr_r8.f, io_read_line_r8.f, io_write_frame_r8.f, io_write_hdr_r8.f, io_write_line_r8.f - Subroutines for unfiltered real*8 binary output (useful for precise restarting of SWIFT, time step for the output of osculating elements is usually 10 kyr). ran1.f - Random number generator taken from Numerical Recipes. reorient.f - The subroutine accounts for random spin axes reorientations (affecting the Yarkovsky force) and disruption of asteroids (it DOES randomly discard test particles). The time step and mean-time are given in input file yarko.in (see also documentation therein). reorient_write.f - Write log-file reorient.out in case of any spin axis reorientation. swift_rmvsy.f, swift_rmvsf.f, swift_mvsy.f, swift_bsy.f, swift_bsf.f - The main files. They are based on swift_rmvs3.f, swift_mvs.f and swift_bs.f with following changes: added calls of subroutines which reads the input thermal and filtering parameters, on-line filter the osculating elements and reorient the spin axes of asteroids. yarko_seasonal.f - The calculation of thermal parameters for getacc_yarko subroutine, which depends on osculating orbital elements. These elements are already calculated (approximately every two years) due to the filtering process (see io_write_filter.f and common block /elements/) and this subroutine is called just in these times. The only one 'fast' element (ie. mean anomaly) is linearly interpolated (for this reason we need the common block /times/). In this sense the Yarkovsky subroutines depend on filtering subroutines! (But it eventually could be modified, let me know...) con - Shell script for restarting swift_* programs. It backups bin.dat, bin.filter.dat and dump_*.dat files in bak?/ directory, and starts swift_* program in the background. Files swift_* MUST be in your PATH! swiftsplit - Perl script which splits SWIFT job into several pieces (according to the number of TPs). mean2prop.(f|in) - Simple running-box filter for SWIFT real*4 binary files (Fortran program and example input file). lib(om)?swift.a - Precompiled (old) SWIFT library (with g77 and omf77). FILES and SUBROUTINES of SWIFT_MVS2FY and parallelized integrators ------------------------------------------------------------------------ We had to add and modify further subroutines for the new 2nd order integrator and parallel versions of all previous integrators. Here we bring only an alphabetical list of files, all changes to original SWIFT code are documented therein: bit.f, drift.f, drift_tp.f, getacch_ah3_tp.f, length.f, step_kdk2.f, step_kdk2_pl.f, step_kdk2_tp.f, swift_mvs2f.f, swift_mvs2fy.f, util_version.f, zero2pi.f, swift_omf77/*. ------------------------------------------------------------------------ end of README