diff --git a/examples/swift_conversion/param.in b/examples/swift_conversion/param.in new file mode 100644 index 000000000..3f9822a58 --- /dev/null +++ b/examples/swift_conversion/param.in @@ -0,0 +1,6 @@ +.0d0 365.25d9 5.0d0 +365.25d5 365.25d5 +F T F F T F +4.68d-03 100.0 -1.0 4.68d-03 T +bin.dat +unknown diff --git a/examples/swift_conversion/pl.in b/examples/swift_conversion/pl.in new file mode 100644 index 000000000..4d479d3cf --- /dev/null +++ b/examples/swift_conversion/pl.in @@ -0,0 +1,28 @@ + 8 + 2.9592338592955439E-004 + 0.0000000000000000 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 0.0000000000000000 + 4.9127330156310911E-011 1.6308387199999999E-005 + -0.15273942296363005 -0.44077188683118762 -2.1987973899201478E-002 + 2.0924205227543746E-002 -7.6522013575130771E-003 -2.5455577585009612E-003 + 7.2437260968171072E-010 4.0454452799999999E-005 + -0.68052645343902751 -0.21255610959625498 3.6375571604128076E-002 + 5.7676478402592110E-003 -1.9654618148759011E-002 -6.0150804827979417E-004 + 8.9973512337453730E-010 4.2635232500000000E-005 + 0.21153912017632401 0.96910814953928759 -1.5976841060778844E-006 + -1.6944135164995145E-002 3.6911953785631699E-003 1.4525071481945407E-008 + 9.5498958252779674E-011 2.2707542499999999E-005 + 1.4232971230754801 0.21815483859431103 -3.0416153305576600E-002 + -1.9274688569975952E-003 1.4590108763912674E-002 3.5304139123317309E-004 + 2.8254526327676804E-007 4.7789450300000003E-004 + 4.0036874054921974 2.9350393270474617 -0.10182563723380476 + -4.5629876169643530E-003 6.4471059617920590E-003 7.5448856044019538E-005 + 8.4600347388504292E-008 4.0286669700000002E-004 + 6.4083018390909805 6.5682871940009111 -0.36911425745370574 + -4.2912688970106801E-003 3.8914184987695602E-003 1.0289743699759401E-004 + 1.2920737211033427E-008 1.7085136200000001E-004 + 14.430329793174279 -13.735823636348456 -0.23812543891764848 + 2.6784223946886604E-003 2.6724061291222238E-003 -2.4777620883141212E-005 + 1.5244164811971947E-008 1.6553711599999999E-004 + 16.808300160620913 -24.994308693440338 0.12729909149223279 + 2.5795430409598025E-003 1.7765162604947151E-003 -9.5908529499802122E-005 diff --git a/examples/swift_conversion/swift.in b/examples/swift_conversion/swift.in new file mode 100644 index 000000000..74b6b1061 --- /dev/null +++ b/examples/swift_conversion/swift.in @@ -0,0 +1,3 @@ +param.in +pl.in +tp.in diff --git a/examples/swift_conversion/tp.in b/examples/swift_conversion/tp.in new file mode 100644 index 000000000..1a843a151 --- /dev/null +++ b/examples/swift_conversion/tp.in @@ -0,0 +1,301 @@ + 50 + 1.75536839836414 -0.397301559901775 -2.886320950191011E-002 + 2.828957660824792E-003 1.250539366801959E-002 -8.833159624221525E-005 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.75462547108338 -0.397439253344038 -5.771762699017597E-002 + 2.826684041441025E-003 1.250497227754510E-002 -1.766362858232247E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.75338751027446 -0.397668695834012 -8.655446554537932E-002 + 2.822895444946565E-003 1.250427010264027E-002 -2.648871776719500E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.75165489340570 -0.397989817412071 -0.115364933939178 + 2.817593026527604E-003 1.250328735740620E-002 -3.530573675304868E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.74942814808290 -0.398402520292259 -0.144140261060723 + 2.810778400843813E-003 1.250202434110241E-002 -4.411200127075503E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.74670795159950 -0.398906678945642 -0.172871691292285 + 2.802453640651961E-003 1.250048143789167E-002 -5.290483179262686E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.74349513437761 -0.399502139462572 -0.201550453497502 + 2.792621287336390E-003 1.249865911879178E-002 -6.168154404172742E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.73979067424302 -0.400188720613739 -0.230167821489439 + 2.781284333388745E-003 1.249655793842830E-002 -7.043946749723006E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.73559569961003 -0.400966213259897 -0.258715078141622 + 2.768446232154610E-003 1.249417853684106E-002 -7.917593441112837E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.73091148830840 -0.401834380569283 -0.287183527684168 + 2.754110894243519E-003 1.249152163881874E-002 -8.788828357128555E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.72026103118157 -0.389355528881347 -2.828594532477477E-002 + 2.886114093303328E-003 1.275805340156797E-002 -9.011625318008804E-005 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.71953296244609 -0.389490468454826 -5.656327447617424E-002 + 2.883794537575375E-003 1.275762349729473E-002 -1.802050560751523E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.71831976085279 -0.389715322095103 -8.482337627316461E-002 + 2.879929396047131E-003 1.275690713560546E-002 -2.702389743052803E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.71662179632064 -0.390030021241745 -0.113057635311967 + 2.874519847244236E-003 1.275590453492696E-002 -3.601905600373064E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.71443958590329 -0.390434470064514 -0.141257455903944 + 2.867567538449044E-003 1.275461600056502E-002 -4.500324282485798E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.71177379334835 -0.390928545545054 -0.169414257543719 + 2.859074584296430E-003 1.275304192444406E-002 -5.397372422888266E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.70862523246946 -0.391512096851912 -0.197519444517652 + 2.849043577517016E-003 1.275118278709834E-002 -6.292776170557357E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.70499486153590 -0.392184946380362 -0.225564465162543 + 2.837477571062932E-003 1.274903915435912E-002 -7.186263077873903E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.70088378639370 -0.392946889173945 -0.253540776694444 + 2.824380088051367E-003 1.274661167919763E-002 -8.077560980102980E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.69629325931601 -0.393797693137531 -0.281439857258866 + 2.809755118102047E-003 1.274390110104623E-002 -8.966398379301735E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.68515366399900 -0.381409497860919 -2.770868114763943E-002 + 2.944472485597326E-003 1.301602639267184E-002 -9.193844020566386E-005 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.68444045380880 -0.381541683565614 -5.540892196217252E-002 + 2.942106027515987E-003 1.301558779556061E-002 -1.838488750704571E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.68325201143113 -0.381761948356195 -8.309228700094988E-002 + 2.938162731265411E-003 1.301485694874873E-002 -2.757033154802284E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.68158869923558 -0.382070225071419 -0.110750336684755 + 2.932643799201507E-003 1.301383407507970E-002 -3.674737585955427E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.67945102372369 -0.382466419836768 -0.138374650747165 + 2.925550911915339E-003 1.301251948603269E-002 -4.591322656575339E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.67683963509720 -0.382950412144466 -0.165956823795153 + 2.916886226800555E-003 1.301091358145700E-002 -5.506509472578220E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.67375533056131 -0.383522054241252 -0.193488435537802 + 2.906652389013839E-003 1.300901685160348E-002 -6.420018645562698E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.67019904882879 -0.384181172146986 -0.220961108835647 + 2.894852513239243E-003 1.300682987374474E-002 -7.331572218908740E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.66617187317737 -0.384927565087993 -0.248366475247266 + 2.881490193832806E-003 1.300435331405534E-002 -8.240892524600587E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.66167503032362 -0.385761005705779 -0.275696186833564 + 2.866569501085982E-003 1.300158792691927E-002 -9.147702574897361E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.65004629681643 -0.373463466840492 -2.713141697050409E-002 + 3.004107385165185E-003 1.327964217801076E-002 -9.380048499464011E-005 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.64934794517152 -0.373592898676403 -5.425456944817078E-002 + 3.001692998807830E-003 1.327919469791802E-002 -1.875723974515014E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.64818426200946 -0.373808574617286 -8.136119772873515E-002 + 2.997669838310936E-003 1.327844904914197E-002 -2.812871813881668E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.64655560215051 -0.374110428901093 -0.108443038057544 + 2.992039130381927E-003 1.327740545903941E-002 -3.749162668189549E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.64446246154409 -0.374498369609023 -0.135491845590387 + 2.984802589649166E-003 1.327606424539795E-002 -4.684311491365882E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.64190547684605 -0.374972278743879 -0.162499390046587 + 2.975962417200357E-003 1.327442581616511E-002 -5.618033740837786E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.63888542865316 -0.375532011630592 -0.189457426557952 + 2.965521311764990E-003 1.327249067152087E-002 -6.550044369703316E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.63540323612168 -0.376177397913609 -0.216357752508752 + 2.953482451109342E-003 1.327025940042943E-002 -7.480059791839970E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.63145995996104 -0.376908241002040 -0.243192173800089 + 2.939849502386553E-003 1.326773268255752E-002 -8.407796715574675E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.62705680133123 -0.377724318274027 -0.269952516408261 + 2.924626618324377E-003 1.326491128756776E-002 -9.332972543286958E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.61493892963385 -0.365517435820064 -2.655415279336874E-002 + 3.065098326561108E-003 1.354925233969722E-002 -9.570487094018532E-005 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.61425543653423 -0.365644113787191 -5.310021693416905E-002 + 3.062634922083575E-003 1.354879577463227E-002 -1.913805892481565E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.61311651258780 -0.365855200878378 -7.963010845652042E-002 + 3.058530081302113E-003 1.354803498730923E-002 -2.869980191831766E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.61152250506545 -0.366150632730767 -0.106135739430332 + 3.052785055829394E-003 1.354697020970083E-002 -3.825280107169432E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.60947389936449 -0.366530319381278 -0.132609040433608 + 3.045401595105050E-003 1.354560176604655E-002 -4.779414805269034E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.60697131859490 -0.366994145343291 -0.159041956298021 + 3.036381944904408E-003 1.354393007257628E-002 -5.732093966627254E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.60401552674501 -0.367541969019932 -0.185426417578102 + 3.025728858747958E-003 1.354195563962491E-002 -6.683026757172563E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.60060742341456 -0.368173623680233 -0.211754396181856 + 3.013445578918633E-003 1.353967906811411E-002 -7.631923833270372E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.59674804674471 -0.368888916916088 -0.238017872352911 + 2.999535847022010E-003 1.353710105150953E-002 -8.578496151713587E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.59243857233884 -0.369687630842276 -0.264208845982959 + 2.984003900096668E-003 1.353422237509990E-002 -9.522455377438729E-004 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 diff --git a/examples/swifter_conversion/param.swiftest.in b/examples/swifter_conversion/param.swiftest.in index 37818e7e1..c80aa8ca0 100644 --- a/examples/swifter_conversion/param.swiftest.in +++ b/examples/swifter_conversion/param.swiftest.in @@ -1,4 +1,5 @@ ! File generated by swifter2swiftest.py +VERSION ! Swifter parameter input file T0 0.0 TSTOP 80.0 DT 1.0 diff --git a/examples/swifter_conversion/swifter2swiftest.py b/examples/swifter_conversion/swifter2swiftest.py index 1a4b0c618..689fa0380 100755 --- a/examples/swifter_conversion/swifter2swiftest.py +++ b/examples/swifter_conversion/swifter2swiftest.py @@ -7,18 +7,18 @@ """ if __name__ == '__main__': - ap = argparse.ArgumentParser() - ap.add_argument("-i", "--input_swifter_param", required=True, help="Input Swifter parameter file to convert") - ap.add_argument("-o", "--output_swiftest_param", required=True, help="Converted Swiftest parameter file") - args = vars(ap.parse_args()) - inparam = args['input_swifter_param'] - outparam = args['output_swiftest_param'] - print(f"Swifter parameter is {inparam}") - print(f"Swiftest parameter file is {outparam}") - swifter_param = swio.read_swifter_param(inparam) - swiftest_param = swio.swifter2swiftest(swifter_param, outparam) - outfile = open(outparam, 'w') - print("! File generated by swifter2swiftest.py", file=outfile) - for key,val in swiftest_param.items(): - print(f"{key:<16} {val}",file=outfile) - outfile.close() + ap = argparse.ArgumentParser() + ap.add_argument("-i", "--input_swifter_param", required=True, help="Input Swifter parameter file to convert") + ap.add_argument("-o", "--output_swiftest_param", required=True, help="Converted Swiftest parameter file") + args = vars(ap.parse_args()) + inparam = args['input_swifter_param'] + outparam = args['output_swiftest_param'] + print(f"Swifter parameter is {inparam}") + print(f"Swiftest parameter file is {outparam}") + swifter_param = swio.read_swifter_param(inparam) + swiftest_param = swio.swifter2swiftest(swifter_param, outparam) + outfile = open(outparam, 'w') + print("! File generated by swifter2swiftest.py", file=outfile) + for key,val in swiftest_param.items(): + print(f"{key:<16} {val}",file=outfile) + outfile.close() diff --git a/python/swiftestio/swiftestio.py b/python/swiftestio/swiftestio.py index 2e86e012b..a627cde60 100644 --- a/python/swiftestio/swiftestio.py +++ b/python/swiftestio/swiftestio.py @@ -18,15 +18,117 @@ J2Sun = np.longdouble(2.198e-7) J4Sun = np.longdouble(-4.805e-9) +def read_swiftest_param(param_file_name): + """ + Reads in a Swiftest param.in file and saves it as a dictionary + + Parameters + ---------- + param_file_name : string + File name of the input parameter file -#I/O Routines for reading in Swifter and Swiftest parameter and binary data files -def read_swifter_param(inparfile): + Returns + ------- + param : dict + A dictionary containing the entries in the user parameter file + """ + param = { + 'VERSION': "! Swiftest parameter input file", + 'T0' : "0.0", + 'TSTOP' : "0.0", + 'DT' : "0.0", + 'PL_IN' : "", + 'TP_IN' : "", + 'CB_IN' : "", + 'IN_TYPE' : "ASCII", + 'ISTEP_OUT' : "-1", + 'BIN_OUT' : "bin.dat", + 'OUT_TYPE' : 'REAL8', + 'OUT_FORM' : "XV", + 'OUT_STAT' : "NEW", + 'ISTEP_DUMP' : "-1", + 'J2' : "0.0", + 'J4' : "0.0", + 'CHK_RMIN' : "-1.0", + 'CHK_RMAX' : "-1.0", + 'CHK_EJECT' : "-1.0", + 'CHK_QMIN' : "-1.0", + 'CHK_QMIN_COORD' : "HELIO", + 'CHK_QMIN_RANGE' : "", + 'QMIN_ALO' : "-1.0", + 'QMIN_AHI' : "-1.0", + 'ENC_OUT' : "", + 'MTINY' : "-1.0", + 'MU2KG' : "-1.0", + 'TU2S' : "-1.0", + 'DU2M' : "-1.0", + 'GU' : "-1.0", + 'EXTRA_FORCE' : "NO", + 'BIG_DISCARD' : "NO", + 'CHK_CLOSE' : "NO", + 'FRAGMENTATION' : "NO", + 'MTINY_SET' : "NO", + 'ROTATION' : "NO", + 'TIDES' : "NO", + 'ENERGY' : "NO", + 'GR' : "NO", + 'YARKOVSKY' : "NO", + 'YORP' : "NO", + } + + # Read param.in file + print(f'Reading Swiftest file {param_file_name}' ) + with open(param_file_name, 'r') as f: + for line in f.readlines(): + fields = line.split() + if len(fields) > 0: + for key in param: + if (key == fields[0].upper()): param[key] = fields[1] + #Special case of CHK_QMIN_RANGE requires a second input + if fields[0].upper() == 'CHK_QMIN_RANGE': + param['QMIN_ALO'] = fields[1] + param['QMIN_AHI'] = fields[2] + param['CHK_QMIN_RANGE'] = f"{fields[1]} {fields[2]}" + + param['ISTEP_OUT'] = int(param['ISTEP_OUT']) + param['ISTEP_DUMP'] = int(param['ISTEP_DUMP']) + param['T0'] = float(param['T0'].replace('d','E').replace('D','E')) + param['TSTOP'] = float(param['TSTOP'].replace('d','E').replace('D','E')) + param['DT'] = float(param['DT'].replace('d','E').replace('D','E')) + param['J2'] = float(param['J2'].replace('d','E').replace('D','E')) + param['J4'] = float(param['J4'].replace('d','E').replace('D','E')) + param['CHK_RMIN'] = float(param['CHK_RMIN'].replace('d','E').replace('D','E')) + param['CHK_RMAX'] = float(param['CHK_RMAX'].replace('d','E').replace('D','E')) + param['CHK_EJECT'] = float(param['CHK_EJECT'].replace('d','E').replace('D','E')) + param['CHK_QMIN'] = float(param['CHK_QMIN'].replace('d','E').replace('D','E')) + param['QMIN_ALO'] = float(param['QMIN_ALO'].replace('d','E').replace('D','E')) + param['QMIN_AHI'] = float(param['QMIN_AHI'].replace('d','E').replace('D','E')) + param['MTINY'] = float(param['MTINY'].replace('d','E').replace('D','E')) + param['DU2M'] = float(param['DU2M'].replace('d','E').replace('D','E')) + param['MU2KG'] = float(param['MU2KG'].replace('d','E').replace('D','E')) + param['TU2S'] = float(param['TU2S'].replace('d','E').replace('D','E')) + param['EXTRA_FORCE'] = param['EXTRA_FORCE'].upper() + param['BIG_DISCARD'] = param['BIG_DISCARD'].upper() + param['CHK_CLOSE'] = param['CHK_CLOSE'].upper() + param['FRAGMENTATION'] = param['FRAGMENTATION'].upper() + param['ROTATION'] = param['ROTATION'].upper() + param['TIDES'] = param['TIDES'].upper() + param['ENERGY'] = param['ENERGY'].upper() + param['GR'] = param['GR'].upper() + param['YORP'] = param['YORP'].upper() + + param['GU'] = GC / (param['DU2M']**3 / (param['MU2KG'] * param['TU2S']**2)) + param['INV_C2'] = einsteinC * param['TU2S'] / param['DU2M'] + param['INV_C2'] = param['INV_C2']**(-2) + return param + +def read_swifter_param(param_file_name): """ Reads in a Swifter param.in file and saves it as a dictionary Parameters ---------- - inparfile : string + param_file_name : string File name of the input parameter file Returns @@ -35,68 +137,66 @@ def read_swifter_param(inparfile): A dictionary containing the entries in the user parameter file """ param = { - 'INPARFILE' : inparfile, - 'T0' : 0.0, - 'TSTOP' : 0.0, - 'DT' : 0.0, - 'PL_IN' : "", - 'TP_IN' : "", - 'IN_TYPE' : "ASCII", - 'ISTEP_OUT' : -1, - 'BIN_OUT' : "", - 'OUT_TYPE' : 'REAL8', - 'OUT_FORM' : "XV", - 'OUT_STAT' : "NEW", - 'ISTEP_DUMP' : -1, - 'J2' : 0.0, - 'J4' : 0.0, - 'CHK_CLOSE' : 'NO', - 'CHK_RMIN' : -1.0, - 'CHK_RMAX' : -1.0, - 'CHK_EJECT' : -1.0, - 'CHK_QMIN' : -1.0, - 'CHK_QMIN_COORD' : "HELIO", - 'CHK_QMIN_RANGE' : "", - 'QMIN_ALO' : -1.0, - 'QMIN_AHI' : -1.0, - 'ENC_OUT' : "", - 'EXTRA_FORCE' : 'NO', - 'BIG_DISCARD' : 'NO', - 'RHILL_PRESENT' : 'NO', - 'GR' : 'NO', - 'C2' : -1.0, - } + 'VERSION': "! Swifter parameter input file", + 'T0' : "0.0", + 'TSTOP' : "0.0", + 'DT' : "0.0", + 'PL_IN' : "", + 'TP_IN' : "", + 'IN_TYPE' : "ASCII", + 'ISTEP_OUT' : "-1", + 'BIN_OUT' : "bin.dat", + 'OUT_TYPE' : "REAL8", + 'OUT_FORM' : "XV", + 'OUT_STAT' : "NEW", + 'ISTEP_DUMP' : "-1", + 'J2' : "0.0", + 'J4' : "0.0", + 'CHK_CLOSE' : 'NO', + 'CHK_RMIN' : "-1.0", + 'CHK_RMAX' : "-1.0", + 'CHK_EJECT' : "-1.0", + 'CHK_QMIN' : "-1.0", + 'CHK_QMIN_COORD' : "HELIO", + 'CHK_QMIN_RANGE' : "", + 'QMIN_ALO' : "-1.0", + 'QMIN_AHI' : "-1.0", + 'ENC_OUT' : "", + 'EXTRA_FORCE' : 'NO', + 'BIG_DISCARD' : 'NO', + 'RHILL_PRESENT' : 'NO', + 'GR' : 'NO', + 'C2' : "-1.0", + } # Read param.in file - print(f'Reading Swifter file {inparfile}') - f = open(inparfile, 'r') - swifterlines = f.readlines() - f.close() - for line in swifterlines: - fields = line.split() - if len(fields) > 0: - for key in param: - if (key == fields[0].upper()): param[key] = fields[1] - #Special case of CHK_QMIN_RANGE requires a second input - if fields[0].upper() == 'CHK_QMIN_RANGE': - param['QMIN_ALO'] = fields[1] - param['QMIN_AHI'] = fields[2] - param['CHK_QMIN_RANGE'] = f"{fields[1]} {fields[2]}" + print(f'Reading Swifter file {param_file_name}') + with open(param_file_name, 'r') as f: + for line in f.readlines(): + fields = line.split() + if len(fields) > 0: + for key in param: + if (key == fields[0].upper()): param[key] = fields[1] + #Special case of CHK_QMIN_RANGE requires a second input + if fields[0].upper() == 'CHK_QMIN_RANGE': + param['QMIN_ALO'] = fields[1] + param['QMIN_AHI'] = fields[2] + param['CHK_QMIN_RANGE'] = f"{fields[1]} {fields[2]}" param['ISTEP_OUT'] = int(param['ISTEP_OUT']) param['ISTEP_DUMP'] = int(param['ISTEP_DUMP']) - param['T0'] = float(param['T0']) - param['TSTOP'] = float(param['TSTOP']) - param['DT'] = float(param['DT']) - param['J2'] = float(param['J2']) - param['J4'] = float(param['J4']) - param['CHK_RMIN'] = float(param['CHK_RMIN']) - param['CHK_RMAX'] = float(param['CHK_RMAX']) - param['CHK_EJECT'] = float(param['CHK_EJECT']) - param['CHK_QMIN'] = float(param['CHK_QMIN']) - param['QMIN_ALO'] = float(param['QMIN_ALO']) - param['QMIN_AHI'] = float(param['QMIN_AHI']) - param['C2'] = float(param['C2']) + param['T0'] = float(param['T0'].replace('d','E').replace('D','E')) + param['TSTOP'] = float(param['TSTOP'].replace('d','E').replace('D','E')) + param['DT'] = float(param['DT'].replace('d','E').replace('D','E')) + param['J2'] = float(param['J2'].replace('d','E').replace('D','E')) + param['J4'] = float(param['J4'].replace('d','E').replace('D','E')) + param['CHK_RMIN'] = float(param['CHK_RMIN'].replace('d','E').replace('D','E')) + param['CHK_RMAX'] = float(param['CHK_RMAX'].replace('d','E').replace('D','E')) + param['CHK_EJECT'] = float(param['CHK_EJECT'].replace('d','E').replace('D','E')) + param['CHK_QMIN'] = float(param['CHK_QMIN'].replace('d','E').replace('D','E')) + param['QMIN_ALO'] = float(param['QMIN_ALO'].replace('d','E').replace('D','E')) + param['QMIN_AHI'] = float(param['QMIN_AHI'].replace('d','E').replace('D','E')) + param['C2'] = float(param['C2'].replace('d','E').replace('D','E')) param['INV_C2'] = param['C2'] param['EXTRA_FORCE'] = param['EXTRA_FORCE'].upper() param['BIG_DISCARD'] = param['BIG_DISCARD'].upper() @@ -106,9 +206,9 @@ def read_swifter_param(inparfile): return param -def read_swiftest_param(param_file_name): +def read_swift_param(param_file_name): """ - Reads in a Swiftest param.in file and saves it as a dictionary + Reads in a Swift param.in file and saves it as a dictionary Parameters ---------- @@ -121,95 +221,60 @@ def read_swiftest_param(param_file_name): A dictionary containing the entries in the user parameter file """ param = { - 'param_FILE_NAME' : param_file_name, - 'T0' : 0.0, - 'TSTOP' : 0.0, - 'DT' : 0.0, - 'PL_IN' : "", - 'TP_IN' : "", - 'CB_IN' : "", - 'IN_TYPE' : "ASCII", - 'ISTEP_OUT' : -1, - 'BIN_OUT' : "", - 'OUT_TYPE' : 'REAL8', - 'OUT_FORM' : "XV", - 'OUT_STAT' : "NEW", - 'ISTEP_DUMP' : -1, - 'J2' : 0.0, - 'J4' : 0.0, - 'CHK_RMIN' : -1.0, - 'CHK_RMAX' : -1.0, - 'CHK_EJECT' : -1.0, - 'CHK_QMIN' : -1.0, - 'CHK_QMIN_COORD' : "HELIO", - 'CHK_QMIN_RANGE' : "", - 'QMIN_ALO' : -1.0, - 'QMIN_AHI' : -1.0, - 'ENC_OUT' : "", - 'MTINY' : -1.0, - 'MU2KG' : -1.0, - 'TU2S' : -1.0, - 'DU2M' : -1.0, - 'GU' : -1.0, - 'EXTRA_FORCE' : 'NO', - 'BIG_DISCARD' : 'NO', - 'CHK_CLOSE' : 'NO', - 'FRAGMENTATION' : 'NO', - 'MTINY_SET' : 'NO', - 'ROTATION' : 'NO', - 'TIDES' : 'NO', - 'ENERGY' : 'NO', - 'GR' : 'NO', - 'YARKOVSKY' : 'NO', - 'YORP' : 'NO', + 'VERSION': "! Swift parameter input file", + 'T0': 0.0, + 'TSTOP': 0.0, + 'DT': 0.0, + 'DTOUT': 0.0, + 'DTDUMP': 0.0, + 'L1': "F", + 'L1': "F", + 'L2': "F", + 'L3': "F", + 'L4': "F", + 'L5': "F", + 'L6': "F", + 'RMIN': 0.0, + 'RMAX': 0.0, + 'RMAXU': 0.0, + 'QMIN': 0.0, + 'LCLOSE': "F", + 'BINARY_OUTPUTFILE': "bin.dat", + 'STATUS_FLAG_FOR_OPEN_STATEMENTS': "NEW", } - + # Read param.in file - print(f'Reading Swiftest file {param_file_name}' ) - f = open(param_file_name, 'r') - swiftestlines = f.readlines() - f.close() - for line in swiftestlines: - fields = line.split() - if len(fields) > 0: - for key in param: - if (key == fields[0].upper()): param[key] = fields[1] - #Special case of CHK_QMIN_RANGE requires a second input - if fields[0].upper() == 'CHK_QMIN_RANGE': - param['QMIN_ALO'] = fields[1] - param['QMIN_AHI'] = fields[2] - param['CHK_QMIN_RANGE'] = f"{fields[1]} {fields[2]}" - - param['ISTEP_OUT'] = int(param['ISTEP_OUT']) - param['ISTEP_DUMP'] = int(param['ISTEP_DUMP']) - param['T0'] = float(param['T0']) - param['TSTOP'] = float(param['TSTOP']) - param['DT'] = float(param['DT']) - param['J2'] = float(param['J2']) - param['J4'] = float(param['J4']) - param['CHK_RMIN'] = float(param['CHK_RMIN']) - param['CHK_RMAX'] = float(param['CHK_RMAX']) - param['CHK_EJECT'] = float(param['CHK_EJECT']) - param['CHK_QMIN'] = float(param['CHK_QMIN']) - param['QMIN_ALO'] = float(param['QMIN_ALO']) - param['QMIN_AHI'] = float(param['QMIN_AHI']) - param['MTINY'] = float(param['MTINY']) - param['DU2M'] = float(param['DU2M']) - param['MU2KG'] = float(param['MU2KG']) - param['TU2S'] = float(param['TU2S']) - param['EXTRA_FORCE'] = param['EXTRA_FORCE'].upper() - param['BIG_DISCARD'] = param['BIG_DISCARD'].upper() - param['CHK_CLOSE'] = param['CHK_CLOSE'].upper() - param['FRAGMENTATION'] = param['FRAGMENTATION'].upper() - param['ROTATION'] = param['ROTATION'].upper() - param['TIDES'] = param['TIDES'].upper() - param['ENERGY'] = param['ENERGY'].upper() - param['GR'] = param['GR'].upper() - param['YORP'] = param['YORP'].upper() + print(f'Reading Swift file {param_file_name}') + with open(param_file_name, 'r') as f: + line = f.readline().split() + for i, l in enumerate(line): + line[i] = l.replace('d','E').replace('D','E') + param['T0'] = float(line[0]) + param['TSTOP'] = float(line[1]) + param['DT'] = float(line[2]) + line = f.readline().split() + for i, l in enumerate(line): + line[i] = l.replace('d','E').replace('D','E') + param['DTOUT'] = float(line[0]) + param['DTDUMP'] = float(line[1]) + line = f.readline().split() + param['L1'] = line[0].upper() + param['L2'] = line[1].upper() + param['L3'] = line[2].upper() + param['L4'] = line[3].upper() + param['L5'] = line[4].upper() + param['L6'] = line[5].upper() + line = f.readline().split() + for i, l in enumerate(line): + line[i] = l.replace('d','E').replace('D','E') + param['RMIN'] = float(line[0]) + param['RMAX'] = float(line[1]) + param['RMAXU'] = float(line[2]) + param['QMIN'] = float(line[3]) + param['LCLOSE'] = line[4].upper() + param['BINARY_OUTPUTFILE'] = f.readline().strip() + param['STATUS_FLAG_FOR_OPEN_STATEMENTS'] = f.readline().strip().upper() - param['GU'] = GC / (param['DU2M']**3 / (param['MU2KG'] * param['TU2S']**2)) - param['INV_C2'] = einsteinC * param['TU2S'] / param['DU2M'] - param['INV_C2'] = param['INV_C2']**(-2) return param def swifter_stream(f, param): @@ -912,7 +977,6 @@ def swifter2swiftest(swifter_param, outparam): swiftest_param.pop('C2', None) swiftest_param.pop('QMIN_ALO', None) swiftest_param.pop('QMIN_AHI', None) - swiftest_param.pop('INPARFILE', None) swiftest_param.pop('J2', None) swiftest_param.pop('J4', None) swiftest_param.pop('RHILL_PRESENT', None) @@ -920,24 +984,7 @@ def swifter2swiftest(swifter_param, outparam): if __name__ == '__main__': - workingdir = '/Users/daminton/git/swiftest/examples/rmvs_swifter_comparison/9pl_18tp_encounters/' - inparfile = workingdir + 'param.swifter.in' - param = read_swifter_param(inparfile) - param['BIN_OUT'] = workingdir + param['BIN_OUT'] - - param_file_name = workingdir + 'param.swiftest.in' - param = read_swiftest_param(param_file_name) - param['BIN_OUT'] = workingdir + param['BIN_OUT'] - ds = solar_system_pl(param, '2020-06-17') - ds - - #swiftestdat = swiftest2xr(param) - param['CB_IN'] = workingdir + 'cb_test.in' - param['PL_IN'] = workingdir + 'pl_test.in' - param['TP_IN'] = workingdir + 'tp_test.in' - swiftest_xr2_infile(ds, param) - #swifterdat = swifter2xr(param) - #print(swiftestdat['a']) - #print(swiftestdf.head()) - - #swifterdf.plot(y='px') + workingdir = '/Users/daminton/git/swiftest/examples/swift_conversion/' + param_file_name = workingdir + 'param.in' + param = read_swift_param(param_file_name) + param['BIN_OUT'] = workingdir + param['BIN_OUT'] \ No newline at end of file