#!/usr/bin/python3 # Copyright 2023 Ted Clark # # Permission to use, copy, modify, and/or distribute this software for any purpose # with or without fee is hereby granted, provided that the above copyright notice # and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH # REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND # FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, # OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS # ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. RMAX = 100 RMIN = 70 SMAX = 50 SMIN = 30 def calc_ratios(min56, d56, d45, d34, d23, d12, d16): print_hr() count = 0 total = 0 max16 = 0.0 for ring1 in range(RMIN, RMAX + 1, 1): for sun1 in range(SMIN, SMAX + 1, 1): if (ring1 + sun1) % 3: #print("ring1 %d, sun1 %d" % (ring1, sun1)) continue #pass for ring2 in range(RMIN, RMAX + 1, 1): for sun2L in range(SMIN, SMAX + 1, 1): if (ring2 + sun2L) % 3: #print("ring2 %d, sun2L %d" % (ring2, sun2L)) continue #pass for sun2s in range(SMIN, SMAX + 1, 1): if (ring2 + sun2s) % 3: #print("ring2 %d, sun2s %d" % (ring2, sun2s)) #continue pass total += 1 g1 = float(ring1) / sun1 g2 = float(ring2) / sun2L g3 = float(ring2) / sun2s sixth = float(g2) / (1 + g2) fifth = float(g2) / (g2 + 1 / (1 + g1)) fourth = float(g3 * (1 + g1)) / (g3 * (1 + g1) - 1) third = float(1 + g1) / g1 second = float((1 + g1) * (g3 + g2)) / (g1 * (1 + g2)) first = float(g3 * (1 + g1)) / g1 reverse = -float(g2 * (1 + g1)) / g1 diff56 = fifth / sixth diff45 = fourth / fifth diff34 = third / fourth diff23 = second / third diff12 = first / second diff16 = first / sixth if diff16 < d16: continue if diff56 < min56: continue if diff56 > d56: continue if diff45 > d45: continue if diff34 > d34: continue if diff23 > d23: continue if diff12 > d12: continue if first + reverse > 1.0: continue print("ring1 %d, sun1 %d, ring2 %d, sun2L %d, sun2s %d" % (ring1, sun1, ring2, sun2L, sun2s)) print("%.3f\t\t%.3f\t\t%.3f\t\t%.3f\t\t%.3f\t\t%.3f" % (sixth, fifth, fourth, third, second, first)) print("\t%.3f\t\t%.3f\t\t%.3f\t\t%.3f\t\t%.3f" % (diff56, diff45, diff34, diff23, diff12)) print("%.3f\t\t%.3f" % (reverse, diff16)) count += 1 if diff16 > max16: max16 = diff16 print_hr() print("Total: %ld/%ld\t\t%f" % (count, total, max16)) print_hr() def calc_ratios_from_gears(ring1, sun1, ring2, sun2L, sun2s): print_hr() g1 = float(ring1) / sun1 g2 = float(ring2) / sun2L g3 = float(ring2) / sun2s sixth = float(g2) / (1 + g2) fifth = float(g2) / (g2 + 1 / (1 + g1)) fourth = float(g3 * (1 + g1)) / (g3 * (1 + g1) - 1) third = float(1 + g1) / g1 second = float((1 + g1) * (g3 + g2)) / (g1 * (1 + g2)) first = float(g3 * (1 + g1)) / g1 reverse = -float(g2 * (1 + g1)) / g1 diff56 = fifth / sixth diff45 = fourth / fifth diff34 = third / fourth diff23 = second / third diff12 = first / second diff16 = first / sixth print("ring1 %d, sun1 %d, ring2 %d, sun2L %d, sun2s %d" % (ring1, sun1, ring2, sun2L, sun2s)) print("%.3f\t\t%.3f\t\t%.3f\t\t%.3f\t\t%.3f\t\t%.3f" % (sixth, fifth, fourth, third, second, first)) print("\t%.3f\t\t%.3f\t\t%.3f\t\t%.3f\t\t%.3f" % (diff56, diff45, diff34, diff23, diff12)) print("%.3f\t\t%.3f" % (reverse, diff16)) print_hr() def print_hr(): print("-------------------------------------------------------------------------------------") calc_ratios(1.255, 1.260, 1.320, 1.400, 1.539, 1.790, 6.000) # ZF 6HP & Ford R6 print('ZF 6HP & Ford R6') calc_ratios_from_gears(71, 37, 85, 38, 31) # Aisin AWTF-80 SC print('Aisin AWTF-80 SC') calc_ratios_from_gears(81, 45, 95, 44, 36)