Skip to content

Instantly share code, notes, and snippets.

@andreuinyu
Last active October 19, 2018 22:29
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 andreuinyu/84472564a1e83a3594b49a70ae6cc670 to your computer and use it in GitHub Desktop.
Save andreuinyu/84472564a1e83a3594b49a70ae6cc670 to your computer and use it in GitHub Desktop.
#pragma mode( separator(.,;) integer(h32) )
//Perfils de temperatura θ(x)
EXPORT θ_AI(x, h, P, S, lambda, θ0)
//Aleta infinita
BEGIN
LOCAL m := sqrt(h*P/(lambda*S));
RETURN(θ0*exp(-m*x));
END;
EXPORT θ_EF(x, h, P, S, lambda, θ0, θL, L)
//Extrem fix
BEGIN
LOCAL m := sqrt(h*P/(lambda*S));
RETURN((θL*sinh(m*x)+θ0*sinh(m*L-m*x))/sinh(m*L));
END;
EXPORT θ_EA(x, h, P, S, lambda, θ0, L)
//Extrem aïllat
BEGIN
LOCAL m := sqrt(h*P/(lambda*S));
RETURN(θ0*cosh(m*L-m*x)/cosh(m*L));
END;
EXPORT θ_CE(x, h, P, S, lambda, θ0, L)
//Convecció a l'extrem
BEGIN
LOCAL m := sqrt(h*P/(lambda*S));
RETURN(θ0*(cosh(m*L-m*x)+(h/(m*lambda))*sinh(m*L-m*x))/(cosh(m*L)+(h/(m*lambda))*sinh(m*L)));
END;
//Potències totals q
EXPORT q_AI(h, P, S, lambda, θ0)
//Aleta infinita
BEGIN
LOCAL M := sqrt(h*P*lambda*S)*θ0;
RETURN(M);
END;
EXPORT q_EF(h, P, S, lambda, θ0, θL, L)
//Extrem fix
BEGIN
LOCAL M := sqrt(h*P*lambda*S)*θ0;
LOCAL m := sqrt(h*P/(lambda*S));
RETURN(M*(cosh(m*L)-θL/θ0)/sinh(m*L));
END;
EXPORT q_EA(h, P, S, lambda, θ0, L)
//Extrem aïllat
BEGIN
LOCAL M := sqrt(h*P*lambda*S)*θ0;
LOCAL m := sqrt(h*P/(lambda*S));
RETURN(M*tanh(m*L));
END;
EXPORT q_CE(h, P, S, lambda, θ0, L)
//Convecció a l'extrem
BEGIN
LOCAL M := sqrt(h*P*lambda*S)*θ0;
LOCAL m := sqrt(h*P/(lambda*S));
RETURN(M*(sinh(m*L)+(h/(m*lambda))*cosh(m*L))/(cosh(m*L)+(h/(m*lambda))*sinh(m*L)));
END;
//Potències en x q(x)
EXPORT qx_AI(x, h, P, S, lambda, θ0)
//Aleta infinita
BEGIN
LOCAL m := sqrt(h*P/(lambda*S));
RETURN(lambda*S*m*θ0*exp(-m*x));
END;
EXPORT qx_EF(x, h, P, S, lambda, θ0, θL, L)
//Extrem fix
BEGIN
LOCAL m := sqrt(h*P/(lambda*S));
RETURN( lambda*S*m* (θ0*cosh(m*L-m*x)-θL*cosh(m*x))/sinh(m*L));
END;
EXPORT qx_EA(x, h, P, S, lambda, θ0, L)
//Extrem aïllat
BEGIN
LOCAL m := sqrt(h*P/(lambda*S));
RETURN(lambda*S*m*θ0*sinh(m*L-m*x)/cosh(m*L));
END;
EXPORT qx_CE(x, h, P, S, lambda, θ0, L)
//Convecció a l'extrem
BEGIN
LOCAL m := sqrt(h*P/(lambda*S));
RETURN(lambda*S*m*θ0*(sinh(m*L-m*x)+(h/(m*lambda))*cosh(m*L-m*x))/(cosh(m*L)+(h/(m*lambda))*sinh(m*L)));
END;
//Funcions Bessel Modificades
EXPORT Iax(a, x)
BEGIN
LOCAL n := 0;
LOCAL res := 0;
WHILE n <= 30 DO
res := res + (1/(n!*Gamma(n+a+1)))*(x/2)^(2*n+a);
n := n + 1;
END;
RETURN(res);
END;
EXPORT Kax(a, x)
BEGIN
LOCAL mode;
LOCAL res;
LOCAL t;
mode := HAngle;
HAngle := 0;
res := ∫(e^(−x*cosh(t))*cosh(a*t),t,0,30);
HAngle := mode;
RETURN(res);
END;
//Eficiències d'aletes ηf
EXPORT ηf_rectaAI(h, P, S, lambda, L)
//Aleta recta infinita
BEGIN
LOCAL m := sqrt(h*P/(lambda*S));
RETURN(1/(m*L));
END;
EXPORT ηf_rectaEA(h, P, S, lambda, L)
//Aleta recta extrem aïllat
BEGIN
LOCAL m := sqrt(h*P/(lambda*S));
RETURN(tanh(m*L)/(m*L));
END;
EXPORT ηf_rectaCE(h, P, S, lambda, L)
//Aleta recta amb convecció a l'extrem
BEGIN
LOCAL m := sqrt(h*P/(lambda*S));
RETURN(((sinh(m*L)+(h/(m*lambda))*cosh(m*L))/(cosh(m*L)+(h/(m*lambda))*sinh(m*L)))/((h/(m*lambda))*(1+P*L/S)));
END;
EXPORT ηf_triang(h, P, S, lambda, L)
//Aleta triangular
BEGIN
LOCAL m := sqrt(h*P/(lambda*S));
RETURN((1/(m*L))*Iax(1, 2*m*L)/Iax(0,2*m*L));
END;
EXPORT ηf_parab(h, P, S, lambda, L)
//Aleta parabòlica
BEGIN
LOCAL m := sqrt(h*P/(lambda*S));
RETURN(2/(sqrt((2*m*L)^2+1)+1));
END;
EXPORT ηf_conica(h, P, S, lambda, L)
//Aleta conica
BEGIN
LOCAL m := sqrt(h*P/(lambda*S));
RETURN(2/(m*L)* Iax(2,2*m*L)/Iax(1,2*m*L));
END;
EXPORT ηf_anu(h, lambda, d, r0, rL)
//Aleta anular
BEGIN
LOCAL m := sqrt(h/(lambda*d));
RETURN((2*r0/(m*(rL^2-r0^2))*((Kax(1,m*r0)*Iax(1,m*rL)-Iax(1,m*r0)*Kax(1,m*rL))/(Iax(0,m*r0)*Kax(1,m*rL)+Kax(0,m*r0)*Iax(1,m*rL)))));
END;
EXPORT ηf_anuaprox(h, lambda, d, r0, rL)
//Aleta anular (aproximació de Schmidt)
BEGIN
LOCAL m := sqrt(h/(lambda*d));
LOCAL t := 1+0.35*ln(rL/r0);
RETURN(tanh(m*(rL-r0)*t)/(m*(rL-r0)*t));
END;
//Àrees d'aletes Af
EXPORT Af_recta(prof, L, d)
//Àrea d'aleta rectangular
BEGIN
RETURN(2*prof*(L+d));
END;
EXPORT Af_cil(D, L)
//Àrea d'aleta cilíndrica
BEGIN
RETURN(L*D*π+π*D^2/4);
END;
EXPORT Af_triang(prof, L, d)
//Àrea d'aleta triangular
BEGIN
RETURN(2*prof*sqrt(L^2+d^2));
END;
EXPORT Af_parab(prof, L, d)
//Àrea d'aleta parabòlica
BEGIN
LOCAL c = sqrt(1+(2*d/L)^2);
RETURN(prof*(c*L^2+L^2/(2*d)*ln(2*d/L+c)));
END;
EXPORT Af_conica(D, L)
//Àrea d'aleta parabòlica
BEGIN
RETURN(π*D/2*sqrt(L^2+(D/2)^2));
END;
EXPORT Af_anu(r0, rL)
//Àrea d'aleta anular
BEGIN
RETURN(2*π*(rL^2-r0^2));
END;
START()
BEGIN
RECT();
startview(2,1);
LOCAL x, h, P, S, lambda;
LOCAL θ0, θL, L, N, N1;
LOCAL d, r0, rL, prof, D;
RECT();
STARTVIEW(6);
choose(N,"Què vols calcular?",{"Perfil de temperatura θ(x)","Potència totals q","Potències en x q(x)","Potències per convecció fins a x qc(x)","Eficiència ηf", "Àrea de l'aleta Af"});
IF N == 1 THEN
//Perfils de temperatura
choose(N1,"Tria la condició de contorn",{"Aleta infinita","Extrem a temperatura fixa","Extrem aïllat","Convecció a l'extrem"});
IF N1 == 1 THEN
//Aleta infinita
input({x, h, P, S, lambda, θ0},"θ(x) Aleta infinita",{"x = ","h = ","P = ","S = ","λ = ", "θ₀ = "},{"Posició","Coeficient de convecció","Perímetre","Superfície","Coeficient de conducció", "Gradient base-ambient"});
MSGBOX("θ(" + x + ") = " + θ_AI(x, h, P, S, lambda, θ0));
END;
IF N1==2 THEN
//Extrem a temperatura fixa
input({x, h, P, S, lambda, θ0, θL, L},"θ(x) Extrem a temperatura fixa",{"x = ","h = ","P = ","S = ","λ = ", "θ₀ = ", "θL = ", "L = "},{"Posició","Coeficient de convecció","Perímetre","Superfície","Coeficient de conducció", "Gradient base-ambient", "Gradient punta-ambient", "Longitud"});
MSGBOX("θ(" + x + ") = " + θ_EF(x, h, P, S, lambda, θ0, θL, L));
END;
IF N1==3 THEN
//Extrem aïllat
input({x, h, P, S, lambda, θ0, L},"θ(x) Extrem aïllat",{"x = ","h = ","P = ","S = ","λ = ", "θ₀ = ", "L = "},{"Posició","Coeficient de convecció","Perímetre","Superfície","Coeficient de conducció", "Gradient base-ambient", "Longitud"});
MSGBOX("θ(" + x + ") = " + θ_EA(x, h, P, S, lambda, θ0, L));
END;
IF N1==4 THEN
//Convecció a l'extrem
input({x, h, P, S, lambda, θ0, L},"θ(x) Convecció a l'extrem",{"x = ","h = ","P = ","S = ","λ = ", "θ₀ = ", "L = "},{"Posició","Coeficient de convecció","Perímetre","Superfície","Coeficient de conducció", "Gradient base-ambient", "Longitud"});
MSGBOX("θ(" + x + ") = " + θ_CE(x, h, P, S, lambda, θ0, L));
END;
END;
IF N == 2 THEN
//Potències totals
choose(N1,"Tria la condició de contorn",{"Aleta infinita","Extrem a temperatura fixa","Extrem aïllat","Convecció a l'extrem"});
IF N1 == 1 THEN
//Aleta infinita
input({h, P, S, lambda, θ0},"q Aleta infinita",{"h = ","P = ","S = ","λ = ", "θ₀ = "},{"Coeficient de convecció","Perímetre","Superfície","Coeficient de conducció", "Gradient base-ambient"});
MSGBOX("q = " + q_AI(h, P, S, lambda, θ0));
END;
IF N1==2 THEN
//Extrem a temperatura fixa
input({h, P, S, lambda, θ0, θL, L},"q Extrem a temperatura fixa",{"h = ","P = ","S = ","λ = ", "θ₀ = ", "θL = ", "L = "},{"Coeficient de convecció","Perímetre","Superfície","Coeficient de conducció", "Gradient base-ambient", "Gradient punta-ambient", "Longitud"});
MSGBOX("q = " + q_EF(h, P, S, lambda, θ0, θL, L));
END;
IF N1==3 THEN
//Extrem aïllat
input({h, P, S, lambda, θ0, L},"q Extrem aïllat",{"h = ","P = ","S = ","λ = ", "θ₀ = ", "L = "},{"Coeficient de convecció","Perímetre","Superfície","Coeficient de conducció", "Gradient base-ambient", "Longitud"});
MSGBOX("q = " + q_EA(h, P, S, lambda, θ0, L));
END;
IF N1==4 THEN
//Convecció a l'extrem
input({h, P, S, lambda, θ0, L},"q Convecció a l'extrem",{"h = ","P = ","S = ","λ = ", "θ₀ = ", "L = "},{"Coeficient de convecció","Perímetre","Superfície","Coeficient de conducció", "Gradient base-ambient", "Longitud"});
MSGBOX("q = " + q_CE(h, P, S, lambda, θ0, L));
END;
END;
IF N == 3 THEN
//Potències en x
choose(N1,"Tria la condició de contorn",{"Aleta infinita","Extrem a temperatura fixa","Extrem aïllat","Convecció a l'extrem"});
IF N1 == 1 THEN
//Aleta infinita
input({x, h, P, S, lambda, θ0},"q(x) Aleta infinita",{"x = ","h = ","P = ","S = ","λ = ", "θ₀ = "},{"Posició","Coeficient de convecció","Perímetre","Superfície","Coeficient de conducció", "Gradient base-ambient"});
MSGBOX("q(" + x + ") = " + qx_AI(x, h, P, S, lambda, θ0));
END;
IF N1==2 THEN
//Extrem a temperatura fixa
input({x, h, P, S, lambda, θ0, θL, L},"q(x) Extrem a temperatura fixa",{"x = ","h = ","P = ","S = ","λ = ", "θ₀ = ", "θL = ", "L = "},{"Posició","Coeficient de convecció","Perímetre","Superfície","Coeficient de conducció", "Gradient base-ambient", "Gradient punta-ambient", "Longitud"});
MSGBOX("q(" + x + ") = " + qx_EF(x, h, P, S, lambda, θ0, θL, L));
END;
IF N1==3 THEN
//Extrem aïllat
input({x, h, P, S, lambda, θ0, L},"q(x) Extrem aïllat",{"x = ","h = ","P = ","S = ","λ = ", "θ₀ = ", "L = "},{"Posició","Coeficient de convecció","Perímetre","Superfície","Coeficient de conducció", "Gradient base-ambient", "Longitud"});
MSGBOX("q(" + x + ") = " + qx_EA(x, h, P, S, lambda, θ0, L));
END;
IF N1==4 THEN
//Convecció a l'extrem
input({x, h, P, S, lambda, θ0, L},"q(x) Convecció a l'extrem",{"x = ","h = ","P = ","S = ","λ = ", "θ₀ = ", "L = "},{"Posició","Coeficient de convecció","Perímetre","Superfície","Coeficient de conducció", "Gradient base-ambient", "Longitud"});
MSGBOX("q(" + x + ") = " + qx_CE(x, h, P, S, lambda, θ0, L));
END;
END;
IF N == 4 THEN
//Potències per convecció fins a x
choose(N1,"Tria la condició de contorn",{"Aleta infinita","Extrem a temperatura fixa","Extrem aïllat","Convecció a l'extrem"});
IF N1 == 1 THEN
//Aleta infinita
input({x, h, P, S, lambda, θ0},"qc(x) Aleta infinita",{"x = ","h = ","P = ","S = ","λ = ", "θ₀ = "},{"Posició","Coeficient de convecció","Perímetre","Superfície","Coeficient de conducció", "Gradient base-ambient"});
MSGBOX("qc(" + x + ") = " + (q_AI(h, P, S, lambda, θ0)-qx_AI(x, h, P, S, lambda, θ0)));
END;
IF N1==2 THEN
//Extrem a temperatura fixa
input({x, h, P, S, lambda, θ0, θL, L},"qc(x) Extrem a temperatura fixa",{"x = ","h = ","P = ","S = ","λ = ", "θ₀ = ", "θL = ", "L = "},{"Posició","Coeficient de convecció","Perímetre","Superfície","Coeficient de conducció", "Gradient base-ambient", "Gradient punta-ambient", "Longitud"});
MSGBOX("qc(" + x + ") = " + (q_EF(h, P, S, lambda, θ0, θL, L)-qx_EF(x, h, P, S, lambda, θ0, θL, L)));
END;
IF N1==3 THEN
//Extrem aïllat
input({x, h, P, S, lambda, θ0, L},"qc(x) Extrem aïllat",{"x = ","h = ","P = ","S = ","λ = ", "θ₀ = ", "L = "},{"Posició","Coeficient de convecció","Perímetre","Superfície","Coeficient de conducció", "Gradient base-ambient", "Longitud"});
MSGBOX("qc(" + x + ") = " + (q_EA(h, P, S, lambda, θ0, L)-qx_EA(x, h, P, S, lambda, θ0, L)));
END;
IF N1==4 THEN
//Convecció a l'extrem
input({x, h, P, S, lambda, θ0, L},"qc(x) Convecció a l'extrem",{"x = ","h = ","P = ","S = ","λ = ", "θ₀ = ", "L = "},{"Posició","Coeficient de convecció","Perímetre","Superfície","Coeficient de conducció", "Gradient base-ambient", "Longitud"});
MSGBOX("qc(" + x + ") = " + (q_CE(h, P, S, lambda, θ0, L)-qx_CE(x, h, P, S, lambda, θ0, L)));
END;
END;
IF N == 5 THEN
//Eficiències d'aletes ηf
choose(N1,"Tria la geometria de l'aleta",{"Rectangular infinita", "Rectangular amb extrem aïllat", "Rectangular amb convecció a l'extrem", "Triangular", "Parabòlica", "Cònica", "Anular", "Anular (aproximació Schmidt)"});
IF N1 == 1 THEN
input({h, P, S, lambda, L},"ηf aleta recta infinita",{"h = ","P = ","S = ","λ = ","L = "},{"Coeficient de convecció","Perímetre","Superfície","Coeficient de conducció","Longitud"});
MSGBOX("ηf = " + ηf_rectaAI(h, P, S, lambda, L));
END;
IF N1 == 2 THEN
input({h, P, S, lambda, L},"ηf aleta recta extrem aïllat",{"h = ","P = ","S = ","λ = ","L = "},{"Coeficient de convecció","Perímetre","Superfície","Coeficient de conducció","Longitud"});
MSGBOX("ηf = " + ηf_rectaEA(h, P, S, lambda, L));
END;
IF N1 == 3 THEN
input({h, P, S, lambda, L},"ηf aleta recta convecció a l'extrem",{"h = ","P = ","S = ","λ = ","L = "},{"Coeficient de convecció","Perímetre","Superfície","Coeficient de conducció","Longitud"});
MSGBOX("ηf = " + ηf_rectaCE(h, P, S, lambda, L));
END;
IF N1 == 4 THEN
input({h, P, S, lambda, L},"ηf aleta triangular",{"h = ","P = ","S = ","λ = ","L = "},{"Coeficient de convecció","Perímetre","Superfície","Coeficient de conducció","Longitud"});
MSGBOX("ηf = " + ηf_triang(h, P, S, lambda, L));
END;
IF N1 == 5 THEN
input({h, P, S, lambda, L},"ηf aleta parabòlica",{"h = ","P = ","S = ","λ = ","L = "},{"Coeficient de convecció","Perímetre","Superfície","Coeficient de conducció","Longitud"});
MSGBOX("ηf = " + ηf_parab(h, P, S, lambda, L));
END;
IF N1 == 6 THEN
input({h, P, S, lambda, L},"ηf aleta cònica",{"h = ","P = ","S = ","λ = ","L = "},{"Coeficient de convecció","Perímetre","Superfície","Coeficient de conducció","Longitud"});
MSGBOX("ηf = " + ηf_conica(h, P, S, lambda, L));
END;
IF N1 == 7 THEN
input({h, lambda, d, r0, rL},"ηf aleta anular",{"h = ","λ = ","δ = ","r₀ = ","rL = "},{"Coeficient de convecció","Coeficient de conducció","Semigruix", "Radi menor", "Radi major"});
MSGBOX("ηf = " + ηf_anu(h, lambda, d, r0, rL));
END;
IF N1 == 8 THEN
input({h, lambda, d, r0, rL},"ηf aleta anular (aprox)",{"h = ","λ = ","δ = ","r₀ = ","rL = "},{"Coeficient de convecció","Coeficient de conducció","Semigruix", "Radi menor", "Radi major"});
MSGBOX("ηf = " + ηf_anuaprox(h, lambda, d, r0, rL));
END;
END;
IF N == 6 THEN
//Àrees d'aletes Af
choose(N1,"Tria la geometria de l'aleta",{"Prismàtica","Cilíndrica", "Triangular", "Parabòlica", "Cònica", "Anular"});
IF N1 == 1 THEN
//Rectangular
input({prof,L,d},"Af aleta recta",{"w = ", "L = ", "δ = "},{"Profunditat", "Longitud", "Semigruix"});
MSGBOX("Af = " + Af_recta(prof, L, d));
END;
IF N1 == 2 THEN
//Rectangular
input({D,L},"Af aleta cilíndrica",{"D = ", "L = "},{"Diàmetre", "Longitud"});
MSGBOX("Af = " + Af_cil(D, L));
END;
IF N1 == 3 THEN
//Triangular
input({prof,L,d},"Af aleta triangular",{"w = ", "L = ", "δ = "},{"Profunditat", "Longitud", "Semigruix de la base"});
MSGBOX("Af = " + Af_triang(prof, L, d));
END;
IF N1 == 4 THEN
//Parabòlica
input({prof,L,d},"Af aleta parabòlica",{"w = ", "L = ", "δ = "},{"Profunditat", "Longitud", "Semigruix de la base"});
MSGBOX("Af = " + Af_parab(prof, L, d));
END;
IF N1 == 5 THEN
//Cònica
input({D,L},"Af aleta cònica",{"D = ", "L = "},{"Diàmetre de la base", "Longitud"});
MSGBOX("Af = " + Af_conica(D, L));
END;
IF N1 == 6 THEN
//Anular
input({r0,rL},"Af aleta anular",{"r₀ = ", "rL = "},{"Radi menor", "Radi major"});
MSGBOX("Af = " + Af_anu(r0, rL));
END;
END;
END;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment