Skip to content

Instantly share code, notes, and snippets.

@shakayami
Created July 19, 2023 09:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shakayami/b858bb113423b471eeaa29a8bd22622c to your computer and use it in GitHub Desktop.
Save shakayami/b858bb113423b471eeaa29a8bd22622c to your computer and use it in GitHub Desktop.
from fractions import Fraction
def in_out_heat(a,b,c,d):
A=4*(c-a)*(d-b)
B=b*(c-a)*Fraction(3,2)+a*(d-b)*Fraction(5,2)
if B*(A+B)>=0:
dU=Fraction(3,2)*(c*d-b*a)
dW=(b-d)*(a+c)*Fraction(1,2)
dQ=dU-dW
if B>=0 and A+B>=0:
return (dQ,0)
else:
return (0,-dQ)
else:
t0=Fraction(-B,A)
x=(c-a)*t0+a
y=(d-b)*t0+b
dQin1,dQout1=in_out_heat(a,b,x,y)
dQin2,dQout2=in_out_heat(x,y,c,d)
return (dQin1+dQin2,dQout1+dQout2)
def thermal_efficiency(cycle):
N=len(cycle)
Work=0
for i in range(N):
a=cycle[i][0]
b=cycle[i][1]
c=cycle[(i+1)%N][0]
d=cycle[(i+1)%N][1]
dW=(b-d)*(a+c)*Fraction(1,2)
Work+=dW
if Work>0:
return None
IN=0
OUT=0
for i in range(N):
a=cycle[i][0]
b=cycle[i][1]
c=cycle[(i+1)%N][0]
d=cycle[(i+1)%N][1]
dQin,dQout=in_out_heat(a,b,c,d)
IN+=dQin
OUT+=dQout
return 1-Fraction(OUT,IN)
cycle=[(1,1),(2,1),(2,2),(1,2)]
print(thermal_efficiency(cycle))
#2/13
cycle=[(1,1),(2,1),(1,2)]
print(thermal_efficiency(cycle))
#16/97
cycle=[(1,1),(2,2),(1,2)]
print(thermal_efficiency(cycle))
#1/12
cycle=[(1,1),(2,1),(2,2)]
print(thermal_efficiency(cycle))
#1/13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment