File data and FORTRAN program for compute and drawing simple surface profiles:
The gnudwing-cl battens profiles will be designed wiht the program.
'profile.dat'
Profile data
25. a1 elipse
25. a2 circle
35. a3 line
15. a4 reflex
14. a5 vertex
10. b1 max thickness
8. b2 thickness at a1+a2
1. b5 thickness at vertex
50. le_dia leading edge diameter mm
15. le_ds double surface lenght
FORTRAN PROGRAM for simple surface profiles
(Compiles under g77 GNU Fortran)
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
c
c HANG GLIDER SIMPLE SURFACE PROFILE v-0.1 (2004-01-26)
c by
c Pere Hernández Casellas
c LABORATORI D'ENVOL
c http://www.geocities.com/Yosemite/Meadows/2822/
c
c Program computes points (x,y) for a simple surface profile
c and creates 'profile.txt' result and 'profile.dxf' grafic
c Reads data from 'profile.dat' or internal code
c
c Runs well under g77 fortran compiler in Debian GNU/Linux 3.0
c
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
PROGRAM hgssprofile
REAL a1,a2,a3,a4,a5,b1,b2,b3,b4,b5
REAL le_ds, le_dia
REAL PI
REAL x,y,x1,y1,x2,y2,xx
REAL mu, omega, s, radius,m,theta
REAL p1x,p2x,p1y,p2y
REAL k1,k2,k3,ym,yym,xn,xxn
c Basic parameters (see schemes)
a1= 25.
a2= 25.
a3= 35.
a4= 15.
a5= 14.
b1= 10.
b2= 8.
c b3 derived
c b4 derived
b5= 1.
le_dia= 50.
le_ds= 15.
PI=4.*atan(1.)
write (*,*) 'PI=',PI
c Read parameters from a profile.dat file. Comment if desired.
open (unit=15,file='profile.dat')
read (15,'(/)')
read (15,*) a1
read (15,*) a2
read (15,*) a3
read (15,*) a4
read (15,*) a5
read (15,*) b1
read (15,*) b2
read (15,*) b5
read (15,*) le_dia
read (15,*) le_ds
close(15)
write (*,*) a1,a2,a3,b5,le_ds
c Open result file wiht coordinates x,y
open(unit=10,file='profile.txt')
i=0
c Ellipse
do theta=0.,90.,5.
i=i+1
x=a1-a1*cos(theta*PI/180.)
y=b1*sin(theta*PI/180.)
write(10,*) x,y
end do
write(*,*) i,x,'fi elipse'
c Circle
mu=atan(a2/(b1-b2))
omega=PI-2.*mu
s=sqrt(a2*a2+(b1-b2)*(b1-b2))
radius=0.5*s/sin(0.5*omega)
do theta=0.,omega,0.0088
i=i+1
x=a1+radius*sin(theta)
y=b2-(radius-(b1-b2))+radius*cos(theta)
write(10,*) x,y
end do
write (*,*) i,x,'fi circle'
c Line
b3=b2-a3*tan(omega)
write(*,*) 'hola'
write(*,*) 'b3,b2,omega=',b3,b2,omega
m=(b3-b2)/a3
do xx=0.,a3,a3/4.
i=i+1
x=a1+a2+xx
y=m*xx+b2
write(10,*) x,y
end do
write(*,*) i,x,m,'fi line'
c Reflex
k1=(b3-b5+m*a5)/(-a5*a5)
k2=m+2.*k1*a5
k3=b5
do xx=-a5,a4-a5,a4/20.
i=i+1
x=a1+a2+a3+a5+xx
y=k1*xx*xx+k2*xx+k3
write(10,*) x,y
end do
write(*,*) i,x,'fi reflex'
c Close result file
close (10)
c Open result file wiht coordinates x,y
open(unit=10,file='profile.txt')
do j=1,i
read (10,*) x,y
write(*,*) j,x,y
end do
write (*,*) i
write (*,*) 'fi arxiu'
close(10)
c Generation of .dxf drawing profile
open(unit=10,file='profile.txt')
open(unit=20,file='profile.dxf')
c Grid
do ym=0.,5.,1.
yym=ym*4.
call line(0.,-yym,100.,-yym,7)
end do
do xn=0.,10.,1.
xxn=xn*10.
call line(xxn,-0.,xxn,-20.,7)
end do
c Profile
do j=1,i-1
read (10,*) x1,y1
read (10,*) x2,y2
call line(x1,-y1,x2,-y2,2)
backspace (10)
end do
c Close the output .dxf file
write(20,'(/,A,/,I1,/,A)') "ENDSEC",0,"EOF"
c Close units
close (10)
close (20)
100 FORMAT (F6.2,3x,F6.2,/)
end
SUBROUTINE line(p1x,p1y,p2x,p2y,linecolor)
c line P1-P2
write(20,*)
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