Un dels projectes de
Laboratori d'envol és la creació d'un
programari propi pel disseny de parapents. Aquesta tasca ja s'ha
iniciat, amb un primer mòdul per la generació en planta
(mòdul 1) de parapents amb vora d'atac i vora de fuga de formes
el·liptiques. La idea és realitzar una série de
mòduls programats en llenguatge FORTRAN, amb lectura de dades
des de fitxers de text i obtenció de resultats en forma de
fitxers de text i arxius de dibuix .dxf per visualitzar i tractar amb
programes convencionals de CAD.
Mòduls en estudi:
1- generació bàsica de plantes
2- optimització de plantes
3- generació de geometria frontal (lòbul)
4- generació de perfils aerodinàmics
5- estudi de l'equilibri longitudinal, calatge
6- càlcul de la geometria 3D
7- geometria i equilibri de suspentatge
8- patronatge
- ...
Recentment he ampliat el codi amb possibilitat de generar calaixos a
mida qualsevol, amb gruixos variables,
i la generació del lòbul frontal de l'ala (mòduls
2 i 3).
Les properes millores seran generar completament els perfils, definir
la torsió relativa, i calcular el calatge global.
Falta tenir em compte l'ovalització dels calaixos degut a que la
presió interior ha de ser superior a la exterior.
Un dels punts interessants és dibuixar la forma exacta de cada
panell, tenint en compte el seu desenvolupament en
superficie plana, l'ovalització, la forma dels perfils i la seva
incidència relativa.
Vegeu una mostra del resultats que genera actualment el programa (V 0.2
1-9-2006):
Fig 1. Les dades entrades al fitxer para.dat

Fig 2. Dibuix resultant de l'ala en planta i alçat. El
suspentatge de moment es dibuixa de forma simplificada,
sense optimitzar les ramificacions.

Fig 3. Resum paràmetres del model 002, un parapent de 43
calaixos, 29m2 de planta i 5,22 d'allargament.
Codi font de programa (FORTRAN g77) versió 0.2 (1-9-2006):
c***************************************************************
c PHC PARAGLIDING
c Pere Hernández Casellas
c Laboratori d'envol
c perehc AT geocities DOT com
c Versió 0.1 experimental
2005-02-13
c Versió 0.2 2006-09-01
c FORTRAN g77 (GNU/Linux)
c***************************************************************
program phcparagliding
integer ncolor, ct
integer linecolor,pointcolor
real sep(100),
xperfil(0:100), corda(0:100), gruix(0:100)
real xf(0:100),
yf(0:100),pend(0:100), alfa(0:100)
real
ax(0:100),ay(0:100),bx(0:100),by(0:100)
real gruixm(0:100),
grula(0:100), grulb(0:100)
character*100 nomdelmodel
area=0.
c Aquest programa genera una planta
i l'alçat de parapent doblement
c el·liptic "parapent.dxf",
que es pot editar en un programa de CAD
c Les dades es contenen al fitxer
de text "para.dat"
open(unit=20,file='parapent.dxf')
open(unit=22,file='parapent.txt')
open(unit=23,
file='para.dat' )
pi=4.*atan(1.)
c Definició de
paràmetres geomètrics de planta
c Lectura de fitxer de dades
para.dat
read (23,*) nomdelmodel
read (23,*) a1 ! semieix
major el·lipse vora d'atac
read (23,*) b1 ! semieix
menor el·lipse vora d'atac
read (23,*) c1 ! centre
el·lipse vora d'atac
read (23,*) a2 ! semieix
major el·lipse vora de fuga
read (23,*) b2 ! semieix
menor el·lipse vora de fuga
read (23,*) c2 ! centre
el·lipse vora de fuga
read (23,*) nperfils !
nombre de perfils a situar
ample=0. !inicialitza
semiample ala
do i=1,nperfils
read (23,*) separacio,
gruix(i)
sep(i)=separacio
c write (*,*) i,
sep(i)
ample=ample+sep(i)
end do
gruix(nperfils+1)=0.
c write (*,*) "Ample= ",
ample ! semiample ala sense estabilitzador
c Lectura paràmetres
estabilitzador
read (23,*) estab !
ample estabilitzador
read (23,*) esta1 !
disminució corda estabilitzador a vora d'atac
read (23,*) esta2 !
... a vora de fuga
write(*,*) "Un
moment...estic calculant..."
c Calcula el nombre de calaixos
total
if(sep(1).ne.0.) then
!nombre imparell de calaixos
ncalaixos=2*nperfils+1
end if
if(sep(1).eq.0.) then
!nombre parell de calaixos
ncalaixos=2*nperfils
end if
c write (*,*) "Nombre de
calaixos = ",ncalaixos
c Entrades d'aire
read (23,*) air1 ! cm
a l'inici de la corda
read (23,*) air2 !
llarg entrades d'aire
read (23,*)
ct ! cel·les tancades a l'extrem
c Dibuixa els perfils
ncolor=9
c Calcula posicio x en planta de
cada perfil
xperfil(0)=0.0
do i=1,nperfils
xperfil(i)=xperfil(i-1)+sep(i) ! la posició x del perfil i
c write (*,*)
i,sep(i),xperfil(i)
end do
xperfil(nperfils+1)=xperfil(nperfils)+estab
xini=-xperfil(1)
xfin=xperfil(nperfils)
c Calcula i dibuixa la corda del
perfil i
do i=1,nperfils
x=xperfil(i)
yva=c1-b1*sqrt(1.-x*x/(a1*a1))
yvf=c2+b2*sqrt(1.-x*x/(a2*a2))
corda(i)=yvf-yva
call
line(x,yva,x,yvf,ncolor) !dibuixa la corda del perfil i
call
line(-x,yva,-x,yvf,ncolor) !dibuixa la corda del perfil -i
end do
yfinva=c1-b1*sqrt(1.-xfin*xfin/(a1*a1))
yfinvf=c2+b2*sqrt(1.-xfin*xfin/(a2*a2))
c call
line(xfin,yfinva,xfin,yfinvf,ncolor)
c call
line(-xfin,yfinva,-xfin,yfinvf,ncolor)
c Dibuixa la vora d'atac i vora de
fuga
ncolor=1
do i=1,nperfils-1
x=xperfil(i)
yva=c1-b1*sqrt(1.-x*x/(a1*a1))
yvf=c2+b2*sqrt(1.-x*x/(a2*a2))
xx1=xperfil(i)
yy1=yva
zz1=yvf
if(i.eq.1) then
call
line(-xx1,yy1,xx1,yy1,ncolor) ! vora d'atac c central
call
line(-xx1,zz1,xx1,zz1,ncolor) ! vora de fuga c central
areacc=(yvf-yva)*2.*xperfil(1) ! area calaix
central
end if
xx2=xperfil(i+1)
yy2=c1-b1*sqrt(1.-xx2*xx2/(a1*a1))
zz2=c2+b2*sqrt(1.-xx2*xx2/(a2*a2))
call
line(xx1,yy1,xx2,yy2,ncolor) ! vora d'atac L
call
line(xx1,zz1,xx2,zz2,ncolor) ! vora de fuga L
call
line(-xx1,yy1,-xx2,yy2,ncolor) ! vora d'atac R
call
line(-xx1,zz1,-xx2,zz2,ncolor) ! vora de fuga R
c Calcula l'Àrea, sense
estabilitzadors ni calaix central
corda1=yvf-yva
corda2=zz2-yy2
area=area+0.5*(corda1+corda2)*sep(i+1)
end do
c Dibuixa l'estabilo
ncolor=5
yfinva=c1-b1*sqrt(1.-xfin*xfin/(a1*a1))
yfinvf=c2+b2*sqrt(1.-xfin*xfin/(a2*a2))
call
line(xfin,yfinva,xfin+estab,yfinva+esta1,ncolor)
call
line(xfin,yfinvf,xfin+estab,yfinvf+esta2,ncolor)
call
line(xfin+estab,yfinva+esta1,xfin+estab,yfinvf+esta2,
+ ncolor)
call
line(-xfin,yfinva,-xfin-estab,yfinva+esta1,ncolor)
call
line(-xfin,yfinvf,-xfin-estab,yfinvf+esta2,ncolor)
call
line(-xfin-estab,yfinva+esta1,-xfin-estab,yfinvf+esta2,
+ ncolor)
c Area estabilo
corda1e=yfinvf-yfinva
corda2e=yfinvf+esta2-(yfinva+esta1)
corda(nperfils+1)=corda2e
!corda de l'estabilo
areae=estab*0.5*(corda1e+corda2e) ! area 1 estabilo
c Area total, span i allargament
areat=(2.*area+2.*areae)+areacc
span=2.*(ample+estab)
allargament=span*span/areat
c Dibuixa les entrades d'aire,
proporcionals a la corda
ncolor=11
do i=1,nperfils-ct-1
x=xperfil(i)
yva=c1-b1*sqrt(1.-x*x/(a1*a1))
yvf=c2+b2*sqrt(1.-x*x/(a2*a2))
corda1=yvf-yva
cordamax=b1+b2
xx1=xperfil(i)
yy1=yva+air1*corda1/cordamax
zz1=yva+air2*corda1/cordamax
xx2=xperfil(i+1)
yy2=c1-b1*sqrt(1.-xx2*xx2/(a1*a1))
zz2=c2+b2*sqrt(1.-xx2*xx2/(a2*a2))
corda2=zz2-yy2
yy2=yy2+air1*corda2/cordamax
zz2=(c1-b1*sqrt(1.-xx2*xx2/(a1*a1)))+air2*corda2/cordamax
if(i.eq.1) then
call
line(-xx1,yy1,xx1,yy1,ncolor) ! inici entrades d'aire
call
line(-xx1,zz1,xx1,zz1,ncolor) ! fi d'entrades d'aire
end if
call
line(xx1,yy1,xx2,yy2,ncolor) ! inici entrades d'aire
call
line(xx1,zz1,xx2,zz2,ncolor) ! fi d'entrades d'aire
call
line(-xx1,yy1,-xx2,yy2,ncolor) ! inici entrades d'aire
call
line(-xx1,zz1,-xx2,zz2,ncolor) ! fi d'entrades d'aire
end do
c Dibuixa lobul de l'ala en vista
frontal
read (23,*) paf
read (23,*) pbf
read (23,*) py0
read (23,*) pyk
c write(*,*) paf, pbf, py0,
pyk
xllarg=0.
c do i=1,nperfils+1
i=1
xllarg=0.
c calcul previ de longitud x maxima
projectada
xllarg=0.
delta=0.
j=0
do xi=0.,ample+estab,0.001
!increment x per calcular longituds
xx1=xi
xx2=xi+0.001
yy1=pbf*sqrt(1.-((xx1*xx1)/(paf*paf)))+py0+pyk*xx1
yy2=pbf*sqrt(1.-((xx2*xx2)/(paf*paf)))+py0+pyk*xx2
delta=sqrt(((xx2-xx1)*(xx2-xx1))+((yy2-yy1)*(yy2-yy1)))
xllarg=xllarg+delta
if(xllarg.ge.xperfil(nperfils+1)) then
j=j+1
if(j.eq.1) then
c write(*,*) xllarg, " ",
nperfils+1, " ",xperfil(nperfils+1)
xmp=xx2 ! longitud maxima
projectada
xllargf=xllarg
end if
j=j+1
end if
end do
c write(*,*)
"xllarg=",xllargf," ",nperfils," x_maxprojectat=",xmp
c calcula coordenades frontals xf
yf al perfil i
do i=0,nperfils+1
xllarg=0.
delta=0.
j=0
do xi=0.,ample+estab,0.001
!increment x per calcular longituds
xx1=xi
xx2=xi+0.001
yy1=pbf*sqrt(1.-((xx1*xx1)/(paf*paf)))+py0+pyk*xx1
yy2=pbf*sqrt(1.-((xx2*xx2)/(paf*paf)))+py0+pyk*xx2
delta=sqrt(((xx2-xx1)*(xx2-xx1))+((yy2-yy1)*(yy2-yy1)))
xllarg=xllarg+delta
if(xllarg.ge.xperfil(i)) then
if(j.eq.1) then
xf(i)=0.5*(xx1+xx2)
yf(i)=0.5*(yy1+yy2)
pend(i)=(yy2-yy1)/(xx2-xx1)
xllargf=xllarg
c write(*,*) xllargf, i,
xf(i), yf(i), pend(i)
end if
j=j+1
end if
end do
end do
write (*,*) "OK"
c Dibuixa el lòbul frontal
de l'ala
ncolor=11
do i=0,nperfils
xx1=xf(i)
yy1=-yf(i)
xx2=xf(i+1)
yy2=-yf(i+1)
call
line(xx1,yy1,xx2,yy2,ncolor)
call
line(-xx1,yy1,-xx2,yy2,ncolor)
end do
c Dibuixa la posició dels
perfils
c Criteri perfil perpendicular a
linea mitja del lobul
ax(nperfils+1)=xf(nperfils+1)
ay(nperfils+1)=yf(nperfils+1)
bx(nperfils+1)=xf(nperfils+1)
by(nperfils+1)=yf(nperfils+1)
do i=1,nperfils
gruixm(i)=(gruix(i)/100.)*corda(i)
grula(i)=0.7*gruixm(i)
grulb(i)=0.3*gruixm(i)
gruixm(i+1)=(gruix(i+1)/100.)*corda(i+1)
grula(i+1)=0.7*gruixm(i+1)
grulb(i+1)=0.3*gruixm(i+1)
c write(*,*)
i,gruix(i),gruixmax, corda(i), xf(i),yf(i)
alfa(i)=-atan(pend(i))
alfa(i+1)=-atan(pend(i+1))
ax(i)=xf(i)+grula(i)*sin(alfa(i))
ay(i)=yf(i)+grula(i)*cos(alfa(i))
bx(i)=xf(i)-grulb(i)*sin(alfa(i))
by(i)=yf(i)-grulb(i)*cos(alfa(i))
ax(i+1)=xf(i+1)+grula(i+1)*sin(alfa(i+1))
ay(i+1)=yf(i+1)+grula(i+1)*cos(alfa(i+1))
bx(i+1)=xf(i+1)-grulb(i+1)*sin(alfa(i+1))
by(i+1)=yf(i+1)-grulb(i+1)*cos(alfa(i+1))
c Perfils en vista frontal
ncolor=3
call
line(ax(i),-ay(i),bx(i),-by(i),ncolor)
call
line(-ax(i),-ay(i),-bx(i),-by(i),ncolor)
c Extrados A i intradós B en
vista frontal
ncolor=10
call
line(ax(i),-ay(i),ax(i+1),-ay(i+1),ncolor)
call
line(bx(i),-by(i),bx(i+1),-by(i+1),ncolor)
call
line(-ax(i),-ay(i),-ax(i+1),-ay(i+1),ncolor)
call
line(-bx(i),-by(i),-bx(i+1),-by(i+1),ncolor)
end do
c calaix central
call
line(-ax(1),-ay(1),ax(1),-ay(1),ncolor)
call
line(-bx(1),-by(1),bx(1),-by(1),ncolor)
c Lectura de dades conus de
suspentatge
read(23,*) conus !
alçada conus de suspentatge
read(23,*) maillon
!distancia entra maillons
ac1=yf(0)
ac2=conus-ac1
arx=-0.5*maillon
ary=-ac2
alx=0.5*maillon
aly=-ac2
c Dibuixa conus de suspentatge
simplificat
do i=1,nperfils+1
xx1=alx
yy1=aly
xx2=bx(i)
yy2=by(i)
call
line(xx1,-yy1,xx2,-yy2,9)
call
line(xx1,-yy1,xx2,-yy2,9)
call
line(-xx1,-yy1,-xx2,-yy2,9)
call
line(-xx1,-yy1,-xx2,-yy2,9)
end do
c Escriu resum de paràmetres
de l'ala
10 CONTINUE
write (*,*) "Laboratori
d'envol PHC PARAGLIDING"
write (*,*) "Pere
Hernández Casellas"
write (*,*)
write (*,*) "Model: " ,
nomdelmodel
write (*,*) "Nombre de
calaixos=", ncalaixos
write (*,*) "corda central
(cm) =", b1+b2+c2-c1
write (*,*) "corda extrem
(cm) =", corda1e
write (*,*) "corda
estabilitzador (cm) =", corda2e
write (*,*) "amplada ala
(span) (m)=", 2.*(ample+estab)/100.
write (*,*) "amplada
projectada (m)=", 2.*xmp/100.
write (*,*) "àrea
total (m2)=", areat/10000.
write (*,*) "àrea
ccentral =", areacc/10000.
write (*,*) "A/R allargament
en planta=", allargament
write (*,*) "conus
suspentatge=", conus
write(*,*) "N perfil
","Corda ","Gruix ", "xf "
do i=1,nperfils+1
write(*,*) i, corda(i),
gruix(i),"% ",xf(i)
end do
!###########################################################
c Close the output .dxf file
write(20,'(/,A,/,I1,/,A)')
"ENDSEC",0,"EOF"
c Close units
close (20)
close (22)
end
!###################################################################
SUBROUTINE
line(p1x,p1y,p2x,p2y,linecolor)
c line P1-P2
integer linecolor
write(20,'(A,/,I1,/,A)')
"LINE",8,"default"
write(20,'(I1,/,A)') 6,"CONTINUOUS"
write(20,'(I2,/,F6.1,/,I2,/,F6.1)')
10,p1x,20,-p1y
write(20,'(I2,/,F6.1,/,I2,/,F6.1)')
11,p2x,21,-p2y
write(20,'(I2,/,I2,/,I2,/,I2,/,I2)')
39,0,62,linecolor,0
return
end
El fitxer de dades para.dat:
Laboratori_002
605 ! semieiex major el·lipse vora d'atac
140 ! semieiex menor el·lipse vora d'atac
200 ! centre el·lipse vora d'atac
700 ! semieix major el·lipse vora de fuga
80 ! semieiex menor el·lipse vora de fuga
260 ! centre el·lipse vora de fuga
21 ! nombre de perfils a situar
15 18 ! perfil 1, separacio relativa respecte
centre, gruix %
30 18 ! perfil 2, separacio relativa respecte
perfil anterior, gruix %
30 18 ! perfil 3
30 18 ! perfil 4
30 17.5 ! perfil 5
30 17.5 ! perfil 6
30 17 ! perfil 7
30 17 ! perfil 8
30 17 ! perfil 9
30 17 ! perfil 10
30 16 ! perfil 11
30 16 ! perfil 12
30 16 ! perfil 13
30 16 ! perfil 14
30 15 ! perfil 15
25 15 ! perfil 16
25 15 ! perfil 17
25 14 ! perfil 18
25 14 ! perfil 19
25 14 ! perfil 20
25 13 ! perfil 21
30 ! ample de l'estabilitzador
38 ! disminució de corda a vora d'atac
-30 ! disminució de corda a vora de fuga
3 ! cm a l'inici entrada aire
15 ! llarg entrada aire
1 ! cel·les tancades a l'extrem
600 ! parametre a elipse frontal
300 ! parametre b elipse frontal
0 ! parametre y0 recta compensacio
-0.01 !parametre pendent recta de compensacio
755 !conus de suspentatge
43 !separació ancoratges arnés