Vous êtes sur la page 1sur 8

!

fixed to free format changed file


!
Last change: GP 19 Feb 2005
9:44 pm
!
****************************************************************
!
*
PROGRAM PANEL
*
!
* SMITH-HESS (DOUGLAS) PANEL METHOD FOR SINGLE-ELEMENT LIFTING *
!
*
AIRFOIL IN TWO DIMENSIONAL INCOMPRESSIBLE FLOW
*
!
*
*
!
****************************************************************
!
!
------NODES controls the maximum number of nodes permitted------PARAMETER (NODES=100)
!
-----------------NODES1=NODES+1, NODES2=NODES+2---------------PARAMETER (NODES1=101,NODES2=102)
DIMENSION X(NODES),Y(NODES), COSTHE(NODES),SINTHE(NODES)
DIMENSION A(NODES1,NODES2)
DIMENSION CP(NODES)
!
OPEN(14,FILE='OGEOM.DAT')
OPEN(15,FILE='OPRES.DAT')
OPEN(16,FILE='OPANEL')
!
PI=
4.*ATAN(1.)
WRITE(*,1000)
!
----------------------read NACA data----------------------------CALL INDATA(NLOWER,NUPPER, NACA,TAU,EPSMAX,PTMAX)
!
-----------calculate discretized airfoil geometry---------------CALL SETUP(NACA,TAU,EPSMAX,PTMAX, NLOWER,NUPPER,NODTOT,
X,Y, COSTHE,SINTHE)
!
---------------------input angle of attack----------------------100 WRITE(*,1010)
READ(*,1100) ALPHA
IF(ALPHA.GT.90.) GO TO 200
WRITE(*,1110) ALPHA
WRITE(16,1110) ALPHA
COSALF =COS(ALPHA*PI/180.)
SINALF =SIN(ALPHA*PI/180.)
!
----------------calculate influence coefficients----------------CALL COFISH(SINALF,COSALF, NODTOT,
X,Y, COSTHE,SINTHE, NEQNS,A)
!
---------------------solve linear system------------------------CALL GAUSS(NEQNS,1,A)
!
----------------find velocities and pressures-------------------CALL VELDIS(SINALF,COSALF, NODTOT,
X,Y,COSTHE,SINTHE, NEQNS,A, CP)
!
----------------find total forces and moments-------------------CALL FANDM(ALPHA,SINALF,COSALF, NODTOT, X,Y, CP)
!
-------------------read next angle of attack--------------------GO TO 100
200 STOP
!
1000 FORMAT(//'====================================================='/
' Hess-Smith (Douglas) panel method for single element'/
' lifting airfoil in two dimensional incompressible '/
' flow. Automatic data generation for NACA 4- or 5- '/
' digit series is included.
'/
' Reference : J.Moran - "Introduction to Theoretical'/
'
and Computational Aerodynamics"
'/
' Disribution : Unlimited
'/
' Instructions: The program opens 3 files:
'/
' 1. OPRES which contains pressure results for plot- '/

&

&

&

&
&
&
&
&
&
&
&
&
&

'
ting purposes.
'/
&
' 2. OGEOM which contains section geometrical data '/
&
'
for plotting purposes.
'/
&
' 3. OPANEL which contains tabulated results.
'/
&
'====================================================='/)
1010 FORMAT(//' Input angle of attack (ALPHA) in degrees in floating point form
at '/&
' Note that if ALPHA > 90.0 deg. program stops
'/)
1100 FORMAT(F10.6)
1110 FORMAT(//' Angle of attack (deg) ALPHA = ',F10.6,/
&
'========================================='/)
END
!
!
******************************I N D A T A*************************
SUBROUTINE INDATA(NLOWER,NUPPER, NACA,TAU,EPSMAX,PTMAX)
!
Set parameters of body shape,flow situation and node distribution
!
!
The following parameters have to be entered by the user:
!
1. NLOWER: number of nodes on lower surface
!
2. NUPPER: number of nodes on upper surface
!
3. Plus data for use in subroutine BODY
!
!
WRITE(*,1000)
1000 FORMAT(' Input please NLOWER No.of nodes on lower surface '/
&
'
NUPPER No.of nodes on upper surface '/
&
'
NACA Naca series hydrofoil number '/
&
' Note that
NLOWER+NUPPER < 100 '/
&
' Using the format 3I5, i.e. ___20___20_4412'/)
READ(*,1100) NLOWER,NUPPER,NACA
WRITE(*,1110) NLOWER,NUPPER,NACA
WRITE(16,1110) NLOWER,NUPPER,NACA
1100 FORMAT(3I5)
1110 FORMAT(/' No. of nodes on lower surface NLOWER = ',I5/
&
' No. of nodes on upper surface NUPPER = ',I5/
&
' NACA series hydrofoil number NACA = ',I5/
&
'============================================='/)
!
------------calculate NACA description parameters----------------IEPS
=NACA/1000
IPTMAX =NACA/100-10*IEPS
ITAU
=NACA-1000*IEPS-100*IPTMAX
!
maximum camber as percent of chord
EPSMAX =IEPS*.01
!
distance from the l.e. of the point of maximum camber as % chord
PTMAX =IPTMAX*.1
!
maximum section thickness as % chord
TAU
=ITAU*.01
IF(IEPS.LT.10) RETURN
PTMAX =0.2025
EPSMAX =2.6595*PTMAX**3
RETURN
END
!
!
*****************************S E T U P****************************
SUBROUTINE SETUP(NACA,TAU,EPSMAX,PTMAX, NLOWER,NUPPER,NODTOT,
&
X,Y, COSTHE,SINTHE)
!
------NODES controls the maximum number of nodes permitted------PARAMETER (NODES=100)
DIMENSION X(NODES),Y(NODES), COSTHE(NODES),SINTHE(NODES)
!

PI
= 4.*ATAN(1.)
set coordinates of nodes on body surface, start with lower surface
WRITE(*,1000)
NPOINTS =NLOWER
SIGN
=-1.0
NSTART =0
----------------loop on lower and upper surface-----------------DO 110 NSURF=1,2
----------------loop on points on this surface------------------DO 100 N=1,NPOINTS
FRACT =FLOAT(N-1)/FLOAT(NPOINTS)
Z
=.5*(1.-COS(PI*FRACT))
I
=NSTART+N
-calculate coordinates of node I using iso-cosine chord spacing-CALL BODY(NACA,TAU,EPSMAX,PTMAX, Z,SIGN,X(I),Y(I))

!
!

!
!
100
!

110
!

200
1000
1100
!
!
!
!
!
!
!
!

WRITE(14,1100) X(I),Y(I)
WRITE(*,1100) X(I),Y(I)
CONTINUE
----end loop on nodes on lower surface, upper surface next:-----NPOINTS=NUPPER
SIGN=1.0
NSTART=NLOWER
CONTINUE
--------------------end loop on surfaces------------------------NODTOT=NLOWER+NUPPER
X(NODTOT+1)=X(1)
Y(NODTOT+1)=Y(1)
------------set slopes of panels, loop on panels----------------DO 200 I=1,NODTOT
DX=X(I+1)-X(I)
DY=Y(I+1)-Y(I)
DIST=SQRT(DX*DX+DY*DY)
SINTHE(I)=DY/DIST
COSTHE(I)=DX/DIST
CONTINUE
FORMAT(//' BODY SHAPE'/4X,'X',10X,'Y'/'===================='/)
FORMAT(2F10.6)
RETURN
END
******************************B O D Y*****************************
SUBROUTINE BODY(NACA,TAU,EPSMAX,PTMAX, Z,SIGN,X,Y)
-----returns the coordinates of a point on the body surface------Z
: nondimensional chordwise position
X,Y : cartesian coordinates, nondimensionalized by chord
SIGN : +1.:upper side/-1.:lower side
-------care for the 'correct' scan of nodes on lower side-------IF(SIGN.LT.0.) Z=1.-Z

!
CALL NACA45(NACA,TAU,EPSMAX,PTMAX, Z,THICK,CAMBER,BETA)
!
X = Z-SIGN*THICK*SIN(BETA)
Y = CAMBER+SIGN*THICK*COS(BETA)
RETURN
END
!
!

***************************N A C A 4 5****************************
SUBROUTINE NACA45(NACA,TAU,EPSMAX,PTMAX, Z,THICK,CAMBER,BETA)

!
!
!
!
!
!
!
!

--evaluates thickness and camber for NACA 4- or 5- digit airfoil-----------Z is the nondimensional chordwise position-------------EPSMAX is the maximum camber as percent of chord
PTMAX is the dist. from l.e. to the point of max.camber as % chord
TAU is the maximum section thickness as % chord
BETA is the camber line slope at position Z

100
!

!
110
120
130
!
140

150

!
!
!
!
!
!
!
!

THICK
=0.
IF(Z.LT.1.E-10) GO TO 100
THICK =5.*TAU*(.2969*SQRT(Z)-Z*(.126+Z*(.3537
-Z*(.2843-Z*.1015))))
IF(EPSMAX.EQ.0.) GO TO 130
IF (NACA.GT.9999) GO TO 140
IF(Z.GT.PTMAX)
GO TO 110
--------------------------Z<PTMAX-------------------------------CAMBER =EPSMAX/PTMAX/PTMAX*(2.*PTMAX-Z)*Z
DCAMDX =2.*EPSMAX/PTMAX/PTMAX*(PTMAX-Z)
GO TO 120
-------------------------1>Z>PTMAX------------------------------CAMBER =EPSMAX/(1.-PTMAX)**2*(1.+Z-2.*PTMAX)*(1.-Z)
DCAMDX =2.*EPSMAX/(1.-PTMAX)**2*(PTMAX-Z)
BETA
=ATAN(DCAMDX)
RETURN
CAMBER =0.
BETA
=0.
RETURN
-------------------------NACA>9999------------------------------IF(Z.GT.PTMAX) GO TO 150
W
=Z/PTMAX
CAMBER =EPSMAX*W*((W-3)*W+3.-PTMAX)
DCAMDX =EPSMAX*3.*W*(1.-W)/PTMAX
GO TO 120
CAMBER =EPSMAX*(1-Z)
DCAMDX =-EPSMAX
GO TO 120
END

***************************C O F I S H****************************
SUBROUTINE COFISH(SINALF,COSALF, NODTOT,
X,Y, COSTHE,SINTHE, KUTTA,A)
----------Calculate coefficients of the linear system------------------NODES controls the maximum number of nodes permitted-------PARAMETER (NODES=100)
-----------------NODES1=NODES+1, NODES2=NODES+2---------------PARAMETER (NODES1=101,NODES2=102)
DIMENSION X(NODES),Y(NODES), COSTHE(NODES),SINTHE(NODES)
DIMENSION A(NODES1,NODES2)

!
!
PI
= 4.*ATAN(1.)
PI2INV =.5/PI
KUTTA =NODTOT+1
!
--------------------initialize coefficients---------------------DO 90 J=1,KUTTA
90 A(KUTTA,J)=0.
!
---------------------loop on control points----------------------

&

&

DO 120 I=1,NODTOT
XMID =.5*(X(I)+X(I+1))
YMID =.5*(Y(I)+Y(I+1))
A(I,KUTTA)=0.
!
------------------------loop on panels--------------------------DO 110 J=1,NODTOT
FLOG
=0.
BIJ
=PI
IF(J.EQ.I) GO TO 100
DXJ
=XMID-X(J)
DYJ
=YMID-Y(J)
DXJP
=XMID-X(J+1)
DYJP
=YMID-Y(J+1)
FLOG
=.5*ALOG((DXJP*DXJP+DYJP*DYJP)/(DXJ*DXJ+DYJ*DYJ))
BIJ
=ATAN2(DYJP*DXJ-DXJP*DYJ,DXJP*DXJ+DYJP*DYJ)
100 CTIMTJ =COSTHE(I)*COSTHE(J)+SINTHE(I)*SINTHE(J)
STIMTJ =SINTHE(I)*COSTHE(J)-SINTHE(J)*COSTHE(I)
!
----contribution of the Jth panel to the Ith control point:-----A(I,J) =PI2INV*(BIJ *CTIMTJ+FLOG*STIMTJ)
HELP
=PI2INV*(FLOG*CTIMTJ-BIJ *STIMTJ)
!
-contribution of the uniformly distributed vorticity to Ith C.P.:
A(I,KUTTA)
=A(I,KUTTA)+HELP
IF((I.GT.1).AND.(I.LT.NODTOT)) GO TO 110
!
---------------coeficients for the Kutta condition---------------!
only I=1 and I=NODTOT C.P. contribute to the coefs of Kutta cond.
A(KUTTA,J)
=A(KUTTA,J)-HELP
A(KUTTA,KUTTA) =A(KUTTA,KUTTA)+A(I,J)
110 CONTINUE
!
----------------------end loop on panels-------------------------!
----------------calculate known right hand sides-----------------A(I,KUTTA+1)
=SINTHE(I)*COSALF-COSTHE(I)*SINALF
120 CONTINUE
!
------------------end loop on control points---------------------A(KUTTA,KUTTA+1)=-(COSTHE(1)+COSTHE(NODTOT))*COSALF
-(SINTHE(1)+SINTHE(NODTOT))*SINALF
RETURN
END
!
!
*****************************G A U S S****************************
SUBROUTINE GAUSS(NEQNS,NRHS,A)
!
--------------------Solution of a linear system------------------!
A
: Matrix of coefficients and right hand sides (the last
!
NRHS columns of A contain the Known right hand side
!
data of the linear system, thus A(NEQNS,NEQNS+NRHS) )
!
After run, the last NRHS columns of A contain the
!
corresponding solution vectors.
!
NEQNS : Number of equations
!
NRHS : Number of right hand sides
!
!
------NODES controls the maximum number of nodes permitted-------!
NODES1 and NODES2 control the dimension of coeficients and right
!
hand side data as required by the GAUSS subroutine, in our case:
!
-----------------NODES1=NODES+1, NODES2=NODES+2----------------PARAMETER (NODES1=101,NODES2=102)
DIMENSION A(NODES1,NODES2)
!
NP=NEQNS+1
NTOT=NEQNS+NRHS
!---- GAUSS REDUCTION
DO 150 I=2,NEQNS

&

!---- PIVOTING
IM=I-1
IMAX=IM
AMAX=ABS(A(IM,IM))
DO 110 J=1,NEQNS
IF(AMAX.GE.ABS(A(J,IM))) GO TO 110
IMAX=J
AMAX=ABS(A(J,IM))
110 CONTINUE
!---- SWITCH (i-1)th AND IMAX EQUATIONS
IF(IMAX.NE.IM) GO TO 140
DO 130 J=IM,NTOT
TEMP=A(IM,J)
A(IM,J)=A(IMAX,J)
A(IMAX,J)=TEMP
130 CONTINUE
!---- ELIMINATE (I-1)TH UNKNOWN
140 DO 150 J=I,NEQNS
R=A(J,IM)/A(IM,IM)
DO 150 K=I,NTOT
150 A(J,K)=A(J,K)-R*A(IM,K)
!---- BACK SUBSTITUTION
DO 220 K=NP,NTOT
A(NEQNS,K)=A(NEQNS,K)/A(NEQNS,NEQNS)
DO 210 L=2,NEQNS
I=NEQNS+1-L
IP=I+1
DO 200 J=IP,NEQNS
200 A(I,K)=A(I,K)-A(I,J)*A(J,K)
210 A(I,K)=A(I,K)/A(I,I)
220 CONTINUE
RETURN
END
!
!
***************************V E L D I S****************************
SUBROUTINE VELDIS(SINALF,COSALF, NODTOT,
X,Y,COSTHE,SINTHE, KUTTA,A, CP)
!
-----------calculate and print pressure distribution-------------!
------NODES controls the maximum number of nodes permitted-------PARAMETER (NODES=100)
!
-----------------NODES1=NODES+1, NODES2=NODES+2----------------PARAMETER (NODES1=101,NODES2=102)
DIMENSION X(NODES),Y(NODES), COSTHE(NODES),SINTHE(NODES)
DIMENSION A(NODES1,NODES2)
DIMENSION CP(NODES)
!
DIMENSION Q(NODES)
!
PI
= 4.*ATAN(1.)
PI2INV =.5/PI
WRITE(*,1000)
WRITE(16,1200)
!
------------------retrieve solution from A-matrix---------------DO 50 I=1,NODTOT
50 Q(I)=A(I,KUTTA+1)
GAMMA=A(KUTTA,KUTTA+1)
!
-find tangential velocity VTAND and CP at midpoint of Ith panel-!
---------------------loop on control points---------------------DO 130 I=1,NODTOT
XMID=.5*(X(I)+X(I+1))

&

100

120
!

130
!
1000
1200

1210
1220
1100
!
!
!

YMID=.5*(Y(I)+Y(I+1))
VTANG = COSALF*COSTHE(I)+SINALF*SINTHE(I)
------------------------loop on panels--------------------------DO 120 J=1,NODTOT
FLOG=0.
BIJ =PI
IF(I.EQ.J) GO TO 100
DXJ=XMID-X(J)
DYJ=YMID-Y(J)
DXJP=XMID-X(J+1)
DYJP=YMID-Y(J+1)
FLOG=.5*ALOG((DXJP*DXJP+DYJP*DYJP)/(DXJ*DXJ+DYJ*DYJ))
BIJ =ATAN2(DYJP*DXJ-DXJP*DYJ,DXJP*DXJ+DYJP*DYJ)
CTIMTJ=COSTHE(I)*COSTHE(J)+SINTHE(I)*SINTHE(J)
STIMTJ=SINTHE(I)*COSTHE(J)-SINTHE(J)*COSTHE(I)
AA=PI2INV*(BIJ *CTIMTJ+FLOG*STIMTJ)
B =PI2INV*(FLOG*CTIMTJ-BIJ *STIMTJ)
VTANG=VTANG-B*Q(J)+GAMMA*AA
CONTINUE
-----------------------end loop on panels-----------------------CP(I)=1.-VTANG*VTANG
WRITE(15,1100) XMID,CP(I)
WRITE(*,1100) XMID,CP(I)
WRITE(16,1210) X(I),Y(I),XMID,CP(I)
CONTINUE
-------------------end loop on control points-------------------WRITE(16,1220)
FORMAT(//' PRESSURE DISTRIBUTION'/4X,'X',10X,'CP'/
' ------------------------')
FORMAT(//' FOIL GEOMETRY
CONTROL POINT PRESS.COEF. '/
' ------------------------------------------------------ '/
' |
X/C
|
Y/C | Xmid/C
|
Cp
|'/
' ------------------------------------------------------')
FORMAT(' |',F10.4,' |',F10.4,' |',F12.6,' |',F15.6,' |')
FORMAT(
' ------------------------------------------------------'/)
FORMAT(2F10.6)
RETURN
END
*****************************F A N D M****************************
SUBROUTINE FANDM(ALPHA,SINALF,COSALF, NODTOT, X,Y, CP)
---------------calculate and print CD,CL and CM------------------PARAMETER (NODES=100)
DIMENSION X(NODES),Y(NODES), CP(NODES)

!
CFX=0.
CFY=0.
CM=0.
DO 100 I=1,NODTOT
XMID=.5*(X(I)+X(I+1))
YMID=.5*(Y(I)+Y(I+1))
DX=X(I+1)-X(I)
DY=Y(I+1)-Y(I)
CFX=CFX+CP(I)*DY
CFY=CFY-CP(I)*DX
CM =CM +CP(I)*(DX*XMID+DY*YMID)
100 CONTINUE
CD=CFX*COSALF+CFY*SINALF
CL=CFY*COSALF-CFX*SINALF

&
&
&
&
&

WRITE(*,1000) ALPHA,CD,CL,CM
WRITE(16,1000) ALPHA,CD,CL,CM
1000 FORMAT(//'===================================================='/
' I N T E G R A T E D C O E F F I C I E N T S
'/
'===================================================='/
' Alpha = ',F10.6,' Degrees'/
' CDrag = ',F10.6/' CLift = ',F10.6,/' CMom. = ',F10.6/
'===================================================='/)
RETURN
END

&
&
&
&
&

Vous aimerez peut-être aussi