APPENDICE III: PROGRAMMA DI CALCOLO
! PROGRAMMA ANALYSIS ! USE DFLIB COMMON/VETT/ALUNG(120), TAUX(120),TAUY(120) COMMON/COEF/AIJ(14641),BIJ(14641) COMMON/CONT/BPIC(121) COMMON/PASS/BETAS,SOLID,PISUD COMMON/SCHR/X(121),Y(121) COMMON/SCHRP/XP(121),YP(121) COMMON/PSEP/JSEP,SSEP,UESEP,DELSEP,TETSEP,CFSEP,HSEP,ISEP COMMON/BOLLA/IBOLLA,SIB,JIB,HIB,UEIB,TETAIB, 1 REYTIB,SFB,JFB,DXBOL,UEFB,AL1,AL2 COMMON/DORSO/JTRD,UETRD,DELTRD,TETRD,DSTRD,JSEPD,UESEPD,DLSEPD, 1 TETSPD,HSEPD,XTRD,YTRD,XSEPD,YSEPD,SSEPD,ISEPD, 2 DELRSD,DSTRSD,TETRSD,HRSTD,REYRSD,BOLLD COMMON/PTRN/JTR,STR,UETR,DELTR,TETATR,CFTR,HTR,CFT, 1 HTRT,DXTR,DSTARTR COMMON/SLOUT/DELTA(121),DSTAR(121),TETA(121),CF(121) COMMON/RISTGN/DELRS,DSTRS,TETRS,HRST,REYTRS,JRIST,JRIST1 COMMON/PUNTI/X0,Y0,XIB,YIB,XSEP,YSEP,XFB,YFB,XTR,YTR DIMENSION DES(121),S(121) DIMENSION YB(50),DYBDS(12),DYBDDS(12),YBD(50) DIMENSION WSUW1(120),GAM(121),DGAM(121),DGAMS(121),QPIC(121), 1 DDSTDS(121),DUEDS(121) DIMENSION QPICT(121),QSTAR(121),SCOR(121),TETS(121),GAMSTAR(121), 1 VEL(121),UE(121),DELS(121),DSTS(121),SSOM(121),CFS(121) PARAMETER(EPS=1.0E-04) PARAMETER(W=5000, ITERMAX=3) PARAMETER(PIGR=3.141592654, RAD=PIGR/180.0) PARAMETER(NFILE=12) ! Introduzione datiCALL GESTIONE(BETA1, INDTR,OMEGA) ! Spaziatura dei profili
SPAZ=1.0/SOLID PISUD=PIGR/SPAZ
! Definizione delle coordinata del profilo per il calcolo dello strato limite
CALL PROFILO(NP1,S) N=NP1-1
! Calcolo dei valori di Cp sui nodi del profilo CALL CALCOLOWSUW1(WSUW1,NP1)
! Inizializzazione delle sorgenti QPIC DO J=1,NP1
QPIC(J)=0.0
DGAM(J)=0.0
GAM(J)=0.0
END DO
! Calcolo dei coefficienti della matrice d'influenza CALL MATRIX(S,NP1)
! INIZIO CALCOLO ITERATIVO ITER=0
100 ITER=ITER+1
! Calcolo delle vorticità incrementali tenendo conto della condizione di Kutta GAMSTAR(NP1)=SQRT(WSUW1(NP1)**2-QPIC(NP1)**2)-(GAM(NP1)+DGAM(NP1)) DO J=2,N GAMSTAR(J)=GAMSTAR(NP1)*(2.0*S(J)/S(NP1)-1.0) END DO GAMSTAR(1)=-GAMSTAR(NP1) ! Calcolo della vorticità GAM
CALL PROFVEL(NP1,BETA1, GAMSTAR(NP1), DGAM,QPIC, GAM) ! Velocità tangenziale totale
DO J=1,NP1 UE(J)=GAM(J)+GAMSTAR(J)+DGAM(J) END DO ! Grafico di confronto: CALL GRAFICOXY(NFILE,NP1,XP,WSUW1, 1, 1.0) ! Grafico finale: CALL GRAFICOXY(NFILE,NP1,XP,UE, 2, 1.0) ! WRITE(6,'(1X,F10.5,3X,F10.5,3X,F10.5,3X,F10.5/)')(UE(J), J=1,NP1) ! STOP
! Calcolo delle sorgenti e del deltagamma DGAM sperimentali DO J=1,NP1
IF (UE(J)**2 .GT. WSUW1(J)**2) THEN
DGAMS(J)=WSUW1(J)-(GAM(J)+GAMSTAR(J)) QSTAR(J)=0.0
ELSE
DGAMS(J)=0.0
QSTAR(J)=SQRT(WSUW1(J)**2-UE(J)**2) QSTAR(J)=SIGN (QSTAR(J), UE(J+1)-UE(J))
END IF
END DO
! SORGENTI
! Test di convergenza delle sorgenti DO J=1,NP1 IF(ABS(QPIC(J)-QSTAR(J)) .GT. EPS)GO TO 110 END DO GO TO 300 110 IF(ITER .GE.ITERMAX)GO TO 310 ! Metodo di rilassamento DO J=1,NP1 QPIC(J)=(W*QPIC(J)+QSTAR(J))/(1+W) END DO GO TO 100 300 CONTINUE ! DGAM
! Test di convergenza del delta gamma DO J=1,NP1 IF(ABS(DGAM(J)-DGAMS(J)) .GT. EPS)GO TO 210 END DO GO TO 320 ! Metodo di rilassamento 210 DO J=1,NP1 DGAM(J)=(W*DGAM(J)+DGAMS(J))/(1+W) END DO GO TO 100 320 CONTINUE
! Grafico di confronto delle velocità:
310 CALL GRAFICOXY(NFILE,NP1,XP,WSUW1, 1, 1.0) ! Grafico finale:
CALL GRAFICOXY(NFILE,NP1,XP,UE, 2, 1.0) ! Calcolo del punto di ristagno
200 FORMAT(///5X,'STOP: ERRORE NELLA UE'/) DO 130 J=2,N IF (UE(J)*UE(J+1).LE.0.0) GO TO 120 130 CONTINUE 120 JRIST=J JRIST1=JRIST+1 DS=UE(JRIST)/(UE(JRIST1)-UE(JRIST)) S0=S(JRIST)-(S(JRIST1)-S(JRIST))*DS X0=X(JRIST)-(X(JRIST1)-X(JRIST))*DS Y0=Y(JRIST)-(Y(JRIST1)-Y(JRIST))*DS VEL(1)=0.0 SCOR(1)=0.0
! Calcolo dello strato limite sul dorso del profilo K=1 DO 150 J=JRIST1,NP1 K=K+1 SCOR(K)=S(J)-S0 VEL(K)=UE(J) 150 CONTINUE NDORSO=K
! Strato limite sul dorso
CALL STRLIM(NDORSO,SCOR,VEL,DELS,DSTS,TETS,CFS,INDTR, + YB,DYBDS,NPASP1)
CALL TRASF(S,NDORSO, JRIST1,NP1,+1,0,SCOR,DELS, + DSTS,TETS,CFS)
! Memorizzazioni dei dati relativi al dorso JTRD=JTR STRD=STR UETRD=UETR DELTRD=DELTR TETRD=TETATR DSTRD=DSTARTR JSEPD=JSEP UESEPD=UESEP DLSEPD=DELSEP TETSPD=TETSEP HSEPD=HSEP XTRD=XTR YTRD=YTR XSEPD=XSEP
YSEPD=YSEP SSEPD=SSEP ISEPD=ISEP DELRSD=DELRS DSTRSD=DSTRS TETRSD=TETRS HRSTD=HRST REYRSD=REYTRS IBOLLD=IBOLLA IF(IBOLLD-1)68,65,65 65 XIBD=XIB YIBD=YIB DXBOLD=DXBOL JIBD=JIB JFBD=JFB HIBD=HIB UEFBD=UEFB AL1D=AL1 AL2D=AL2 DO 66 J=1,NPASP1 66 YBD(J)=YB(J) K=0 DO 67 J=JIBD,JFBD K=K+1 67 DYBDDS(K)=DYBDS(K) NPSP1D=NPASP1
! Calcolo dello strato limite sul ventre 68 J=JRIST1 DO 70 K=2,JRIST1 J=J-1 SCOR(K)=S0-S(J) VEL(K)=-UE(J) 70 CONTINUE NVENTRE=K
! Strato limite sul ventre
CALL STRLIM(NVENTRE,SCOR,VEL,DELS,DSTS,TETS,CFS,INDTR, + YB,DYBDS,NPASP1)
CALL TRASF(S,NVENTRE,1,JRIST,-1,JRIST1,SCOR,DELS, 1 DSTS,TETS,CFS)
! Calcolo delle sorgenti QPICT derivanti dalla trattazione teorica DES(1)=S(2)-S(1) DO J=2,N DES(J)=S(J+1)-S(J-1) END DO DES(N+1)=S(N+1)-S(N) QPICT(1)=UE(2)*DSTAR(2)/DES(1) DO J=2,N QPICT(J)=(UE(J+1)*DSTAR(J+1)-UE(J-1)*DSTAR(J-1))/DES(J) END DO QPICT(N+1)=-UE(N)*DSTAR(N)/DES(N+1) IF (IBOLLA.GT.0)THEN K=0 DO J=JFB, JIB K=K+1 QPICT(J)=QPICT(J)+UE(JIB)*DYBDS(K) END DO
END IF ! DO J=1,NP1 ! WRITE(6,*)QPIC(J),QPICT(J) ! END DO ! Grafico di confronto: CALL GRAFICOXY(NFILE,NP1,XP,QPIC, 1, 5.0) ! Grafico finale: CALL GRAFICOXY(NFILE,NP1,XP,QPICT, 2, 5.0) CALL PRESTAZ(NP1,BETA1,UE,QPIC, CF, CX, CY,
1 BETA2,VORTEX,QTOT,W2,CP2,DELV,DELU) WRITE(6,*)CX,CY
SUBROUTINE GESTIONE(BETA1, INDTR,OMEGA) ! Gestione dei dati d'ingresso
CHARACTER (30) NOME COMMON/PASS/BETAS,SOLID,PISUD COMMON/OPER/REYN COMMON/TULIV/TUINF K=0 100 K=K+1 WRITE(6,'(//1X,A\)')
+ 'Nome del file dei dati d''ingresso: ' READ(5,*)NOME
OPEN(2, FILE=NOME, STATUS='OLD', ERR=110) GO TO 120
110 IF(K .LT. 3)GO TO 100 WRITE(6,*)
+ 'Errore nella definizione dei dati d''ingresso' STOP ' CONTROLLARE'
120 READ(2,*)BETA1, REYN
READ(2,*)BETAS, SOLID READ(2,*)TUINF,INDTR READ(2,*)PASSO, OMEGA
! Chiusura del file dei dai d'ingresso CLOSE(2,STATUS='KEEP')
END
! SUBROUTINE PROFILO(NP1,S)
! Definizione coordinate del Profilo USE DFLIB
INTEGER (4) Frequenza, Durata INTEGER (4) STATUS2 CHARACTER (30) NOME COMMON/LEDEDG/KMIN COMMON/VETT/ALUNG(120),TAUX(120),TAUY(120) COMMON/SCHR/X(121),Y(121) COMMON/PASS/BETAS,SOLID,PISUD COMMON/SCHRP/XP(121),YP(121) DIMENSION S(121) PARAMETER(PIGR=3.141592654, RAD=PIGR/180.0)
PARAMETER(Frequenza=4000, Durata=200, NFILE1=11, NFILE2=14) ! Apertura File di lettura. Coordinate [X,Y]
CALL BEEPQQ (Frequenza, Durata) K=0
100 K=K+1
WRITE(6,'(//1X,A\)')
+ 'Nome del file di lettura delle coordinate del profilo: ' READ(5,*)NOME
OPEN(2, FILE=NOME, STATUS='OLD', ERR=110) GO TO 120
110 IF(K .LT. 3)GO TO 100 WRITE(6,*)
+ 'Errore nella definizione del file delle coordinate del profilo' STOP ' CONTROLLARE' 120 M=0 DO WHILE(.NOT. EOF(2)) M=M+1 READ(2,*)X(M),Y(M) END DO CLOSE(2,STATUS='KEEP')
! Grafico del profilo nella schiera CALL BEEPQQ (Frequenza, Durata) c CALL GRAFICOXY(6, M,X,Y)
! Definizione della corda CORDA=0.0 JMIN=1 DO J=2,M DIST= SQRT((X(J)-X(1))**2+(Y(J)-Y(1))**2) IF (DIST.GT.CORDA) THEN JMIN=J CORDA=DIST END IF END DO
! Adimensionalizzazione DO J=1,M X(J)=X(J)/CORDA Y(J)=Y(J)/CORDA END DO CORDA=1
! Traslazione degli assi in modo che il punto Jmin si trovi sull'origine XORIG=X(JMIN) YORIG=Y(JMIN) DO J=1,M X(J)=X(J)-XORIG Y(J)=Y(J)-YORIG END DO
! Rotazione degli assi in modo che X(1) ed X(Jmin) stiano sull'asse X ! Nuovo sistema di riferimento [XP, YP]
CSTET=X(1)/CORDA SNTET=Y(1)/CORDA DO J=1,M XP(J)=X(J)*CSTET+Y(J)*SNTET YP(J)=Y(J)*CSTET-X(J)*SNTET END DO
! Definizione del numero N degli intervalli di rappresentazione del contorno del profilo
WRITE(6,'(/A\)')
+' Numero N degli intervalli di rappresentazione + del contorno del profilo:'
READ(5,*)N NP1=N+1
! Definizione delle coordinate del profilo con la legge del coseno ! Nuovo sistema di riferimento [X, Y]
! ( Raggio = [X(1)-X(JMIN)]/2 = 0.5 )
CALL BEEPQQ (Frequenza, Durata) DPSI=2*PIGR/N DO K=1,NP1 X(K)=0.5*(1+COS(DPSI*(K-1))) END DO KMIN=1 DO K=2,NP1 IF (X(K).LT.X(KMIN))KMIN=K END DO
! COSTRUZIONE DEL PROFILO
DO K=1,NP1
Y(K)=0.0 END DO
! Calcolo delle coordinate Y(X) del contorno inferiore K1=1
DO 215 J=1, JMIN-1 JP1=J+1
DO K=K1,KMIN-1
IF (X(K) .LE. XP(JP1))GO TO 210 K2=K
END DO
210 IF(K .EQ. K1)GO TO 215
IND=1
IF(J .EQ. 1)IND=0
CALL INTERPOLA(XP(J),YP(J),XP(JP1),YP(JP1), + K1,K2, X, IND, -1.0,DERYP, Y) IF(K2 .EQ. KMIN-1)GO TO 220
K1=K2+1 215 CONTINUE
! Calcolo delle coordinate Y(X) del contorno superiore 220 K1=KMIN DO 235 J=JMIN,M-1 JP1=J+1 DO K=K1,NP1 IF (X(K).GE. XP(JP1))GO TO 230 K2=K END DO
230 IF(J .EQ. M-1 .AND. K .EQ. NP1)THEN K2=NP1
GO TO 236
END IF
IF(K .EQ. K1)GO TO 235
236 IND=1
IF(J .EQ. M-1)IND=0
CALL INTERPOLA(XP(J),YP(J), XP(JP1),YP(JP1), + K1,K2, X, IND, +1.0,DERYP, Y) IF(K2 .EQ. NP1)GO TO 240
K1=K2+1 235 CONTINUE
! Grafico profilo di input:
240 CALL GRAFICOXY(NFILE1, M,XP,YP, 1, 3.0) ! Grafico profilo di output:
CALL GRAFICOXY(NFILE1,NP1,X,Y, 2, 3.0)
! Ripristino derl sistema di riferimento della schiera DO J=1,NP1
XP(J)=X(J)*CSTET-Y(J)*SNTET YP(J)=X(J)*SNTET+Y(J)*CSTET
END DO
! Coordinate del profilo nel sistema X,Y della schiera CSTET=COSD(BETAS) SNTET=SIND(BETAS) DO J=1,NP1 X(J)=XP(J)*SNTET-YP(J)*CSTET Y(J)=XP(J)*CSTET+YP(J)*SNTET END DO
! Grafico profilo di output nel sistema della schiera: CALL GRAFICOXY(NFILE2,NP1,X,Y, 1, 5.0)
! Preparazione delle coordinate X,Y per i calcoli COST=PIGR*SOLID DO J=1,NP1 X(J)=X(J)*COST Y(J)=Y(J)*COST END DO
! Calcolo dei coseni direttori e dell'ascissa curvilinea S(1)=0.0 DO 40 J=1,NP1-1 DXJ=X(J+1)-X(J) DYJ=Y(J+1)-Y(J) ALUNG(J)=SQRT(DXJ*DXJ+DYJ*DYJ) TAUX(J)=DXJ/ALUNG(J) TAUY(J)=DYJ/ALUNG(J) S(J+1)=S(J)+ALUNG(J) 40 CONTINUE 231 FORMAT(3X,I2,2(3X,F9.5)) RETURN END
SUBROUTINE CALCOLOWSUW1(WSUW1,NP1)
! Lettura dei valori di WSUW1 e delle coordinate X USE DFLIB
INTEGER (4) Frequenza, Durata INTEGER (4) STATUS2 CHARACTER (30) NOME COMMON/LEDEDG/KMIN COMMON/SCHR/X(121),Y(121) COMMON/SCHRP/XP(121),YP(121) DIMENSION WSUW1(121),X1(121),WSUW11(121) PARAMETER(PIGR=3.141592654, RAD=PIGR/180.0) PARAMETER(Frequenza=4000, Durata=200, NFILE=12)
! Video in forma grafica e definizione dei Pixels: CALL GRAPHICSMODE(1)
! Apertura File di lettura.
CALL BEEPQQ (Frequenza, Durata) I=0
100 I=I+1
WRITE(6,'(//1X,A\)')
+ 'Nome del file di lettura dei valori di WSUW1 (X1): ' READ(5,*)NOME
OPEN(2, FILE=NOME, STATUS='OLD', ERR=110) GO TO 120
110 IF(I .LT. 3)GO TO 100 WRITE(6,*)
+ 'Errore nella definizione del file delle coordinate del profilo' STOP ' CONTROLLARE'
! Lunghezza della corda del profilo sul quale si hanno i valori di Cp 120 READ(2,*)CORDA,MVENTRE,MDORSO
! Coordinate [X,WSUW1] sul ventre DO M=2,MVENTRE+1 READ(2,*)X1(M),WSUW11(M) ! Velocità WSUW11(M)=-SQRT(1.0-WSUW11(M)) ! Adimensionalizzazione X1(M)=X1(M)/CORDA END DO MVENTRE=MVENTRE+1 X1(1)=XP(1) WSUW11(1)=WSUW11(2)+(WSUW11(2)-WSUW11(3))/(X1(2) + - X1(3))*(X1(1)-X1(2))
! Coordinate [X,WSUW1] sul dorso DO M=MVENTRE+1,MVENTRE+MDORSO
READ(2,*)X1(M),WSUW11(M) ! Velocità
WSUW11(M)=SQRT(1.0-WSUW11(M)) ! Adimensionalizzazione
X1(M)=X1(M)/CORDA END DO X1(MVENTRE+MDORSO+1)=XP(NP1) WSUW11(MVENTRE+MDORSO+1)=WSUW11(MVENTRE+MDORSO)+ + (WSUW11(MVENTRE+MDORSO)-WSUW11(MVENTRE+MDORSO-1))/ + (X1(MVENTRE+MDORSO)-X1(MVENTRE+MDORSO-1))* + (XP(NP1)-X1(MVENTRE+MDORSO)) MDORSO=MDORSO+1 CLOSE(2,STATUS='KEEP') CALL BEEPQQ (Frequenza, Durata)
! Ridefinizione del WSUW1 al bordo d'uscita
WSUW11(1)=(WSUW11(1)-WSUW11(MVENTRE+MDORSO))/2.0 WSUW11(MVENTRE+MDORSO)=-WSUW11(1)
! COSTRUZIONE DELLA CURVA
DO L=1,NP1
WSUW1(L)=0.0 END DO
! Calcolo dei valori del WSUW1 sul ventre L1=1 DO 215 I=1, MVENTRE-1 IP1=I+1 DO L=L1,KMIN-1 IF (XP(L) .LE. X1(IP1))GO TO 210 L2=L END DO
210 IF(L .EQ. L1)GO TO 215
IND=1
IF(I .EQ. 1)IND=0
CALL INTERPOLA(X1(I),WSUW11(I),X1(IP1),WSUW11(IP1), + L1,L2, XP, IND, -1.0, DERYP, WSUW1) IF(L2 .EQ. KMIN-1)GO TO 235
L1=L2+1 215 CONTINUE
! Calcolo dei valori del WSUW1 al bordo di attacco 235 X1DORSO=X1(MVENTRE+1)
L1=L2+1
DO L2=KMIN,NP1
IF(XP(L2) .GE. X1DORSO)GO TO 236
END DO
236 L2=L2-1 I=MVENTRE IND=1
CALL INTERPOLA(X1(I),WSUW11(I),X1(I+1),WSUW11(I+1), + L1,L2, XP, IND, -1.0, DERYP, WSUW1) ! Calcolo dei valori del WSUW1 sul dorso
L1=L2+1 DO 315 I=MVENTRE+1,MVENTRE+MDORSO-1 IP1=I+1 DO L=L1,NP1 IF (XP(L) .GE. X1(IP1))GO TO 310 L2=L END DO
310 IF(L .EQ. L1)GO TO 315 IF(L .EQ. NP1)L2=NP1
IND=1
CALL INTERPOLA(X1(I),WSUW11(I),X1(IP1),WSUW11(IP1), + L1,L2, XP, IND, +1.0, DERYP, WSUW1) IF(L2 .EQ. NP1)GO TO 335
L1=L2+1 315 CONTINUE
335 CONTINUE
! Grafico iniziale:
CALL GRAFICOXY(NFILE, MVENTRE+MDORSO,X1,WSUW11, 1, 1.0) ! Grafico finale:
CALL GRAFICOXY(NFILE,NP1,XP,WSUW1, 2, 1.0) RETURN
SUBROUTINE INTERPOLACp(X1,Cp1, X2,Cp2, K1,K2, X, IND, SGN, + DERY1,Cp)
! Calcolo delle ordinate Y[X(K)] nell'intervallo X1,X2 DIMENSION X(K2),Cp(K2)
PARAMETER(EPS=1.0E-04) SELECT CASE (IND)
! Interpolazione lineare CASE (0)
! Derivata del segmento:
DERY1L=(Cp2-Cp1)/(X2-X1) DO K=K1,K2 Cp(K)=Cp1+DERY1L*(X(K)-X1) END DO DERY1=DERY1L RETURN
! Interpolazione con parti di parabola passanti per ! 2 punti con tangente imposta nel primo
CASE (1) DERY1L=(Cp2-Cp1)/(X2-X1) ! IF(DERY1-DERY1L)110,111,110 110 APIC=(Cp2-Cp1-DERY1L*(X2-X1))/(X2-X1)**2 BPIC=DERY1L-2*APIC*X1 CPIC=Cp1-APIC*X1**2-BPIC*X1 DO K=K1,K2 Cp(K)=APIC*X(K)**2+BPIC*X(K)+CPIC END DO DERY1=2*APIC*X2+BPIC RETURN 111 DO K=K1,K2 Cp(K)=Cp1+DERY1L*(X(K)-X1) END DO DERY1=DERY1L RETURN END SELECT END
SUBROUTINE MATRIX(S,NP1) ! MATRICE D'INFLUENZA COMMON/SCHR/X(121),Y(121) COMMON/VETT/ALUNG(120), TAUX(120),TAUY(120) COMMON/COEF/AIJ(14641),BIJ(14641) COMMON/CONT/BPIC(121) COMMON/VORTG/PESOG(121),ADIJ(14641) DIMENSION T1(120),T2(120),T3(120),T4(120) DIMENSION S(121) PARAMETER(Frequenza=4000, Durata=400) PARAMETER(PIGR=3.141592654, RAD=PIGR/180.0) ! Vettore d'influenza N=NP1-1 BPIC(1)=ALUNG(1)/2.0 DO 50 J=2,N BPIC(J)=(ALUNG(J)+ALUNG(J-1))/2.0 50 CONTINUE BPIC(NP1)=ALUNG(N)/2.0
! Condizioni di tangenza agli N lati NP1XN=NP1*N
DO 10 I=1,N
XC=(X(I)+X(I+1))/2. YC=(Y(I)+Y(I+1))/2.
CALL ELEM(XC,YC,T1,T2,T3,T4, N,I) AIJ(I)=(T4(1)-T2(1))*TAUY(I)+(T1(1)-T3(1))*TAUX(I) 1 +BPIC(1)*TAUX(I) BIJ(I)=(T1(1)-T3(1))*TAUY(I)+(T2(1)-T4(1))*TAUX(I) 1 +BPIC(1)*TAUY(I) DO 20 J=2,N JM1=J-1 AIJ(I+NP1*JM1)=(T4(J)-T2(J)-T4(JM1))*TAUY(I) 1 +(T1(J)-T3(J)+T3(JM1))*TAUX(I) 2 +BPIC(J)*TAUX(I) BIJ(I+NP1*JM1)=(T1(J)-T3(J)+T3(JM1))*TAUY(I) 1 +(T2(J)-T4(J)+T4(JM1))*TAUX(I) 2 +BPIC(J)*TAUY(I) 20 CONTINUE AIJ(I+NP1XN)=T3(N)*TAUX(I)-T4(N)*TAUY(I) 1 +BPIC(NP1)*TAUX(I) BIJ(I+NP1XN)=T3(N)*TAUY(I)+T4(N)*TAUX(I) 1 +BPIC(NP1)*TAUY(I) 10 CONTINUE
! Vettore della vorticità iniziale DO I=1,N
PESOG(I)=0.0 DO J=1,NP1 JM1=J-1
END DO END DO ! Condizione di Kutta AIJ(NP1)=1.0 BIJ(NP1)=1.0 DO 30 J=2,N AIJ(NP1*J)=0.0 BIJ(NP1*J)=0.0 30 CONTINUE AIJ(NP1*NP1)=1.0 BIJ(NP1*NP1)=1.0
! Modifica della prima e dell'ultima colonna NMEZ=N/2 DO 40 I=NMEZ+1,N AIJ(I)=-0.079577471 BIJ(I)=-0.079577471 40 CONTINUE DO 60 I=1,NMEZ AIJ(I+NP1XN)=0.079577471 BIJ(I+NP1XN)=0.079577471 60 CONTINUE DO I=1,N ADIJ(I)=AIJ(I) DO J=1,NP1 JM1=J-1 ADIJ(I+NP1*JM1)=AIJ(I+NP1*JM1) END DO END DO
! Inversione della matrice d'influenza CALL MINV(AIJ,NP1*NP1,NP1,DET)
IF(DET .EQ. 0.0)THEN
CALL BEEPQQ (Frequenza, Durata) STOP 3
ELSE
RETURN ENDIF
SUBROUTINE ELEM(XC,YC,T1,T2,T3,T4, N, I)
! CALCOLO DEGLI INTEGRALI DI INFLUENZA DELLA POLIGONALE VORTICOSA COMMON/SCHR/X(121),Y(121) COMMON/VETT/ALUNG(120),TAUX(120),TAUY(120) DIMENSION T1(N),T2(N),T3(N),T4(N) PARAMETER(EPS1=1.0E-05, EPS2=1.0E-04, PGR=3.141592654, 1 EPSINF=5.0E-03, KAPPA=21) ! Inizializzazioni DXJ=XC-X(1) DYJ=YC-Y(1) SHJ=SINH(DXJ) SNJ=SIN(DYJ) ANUM=SHJ**2+SNJ**2 ROJ=SHJ*COS(DYJ) ETJ=COSH(DXJ)*SNJ
! Calcolo degli integrali I0 ed I1 degli N segmenti contigui DO 10 J=1,N JP1=J+1 DXJP1=XC-X(JP1) DYJP1=YC-Y(JP1) SHJP1=SINH(DXJP1) SNJP1=SIN(DYJP1) DENOM=SHJP1**2+SNJP1**2 ROJP1=SHJP1*COS(DYJP1) ETJP1=COSH(DXJP1)*SNJP1 IF(I. EQ. J)THEN
C INTEGRALE I0 NEL CASO I.EQ.J T1(J)=0.0
T2(J)=0.0
C INTEGRALE I1 NEL CASO I.EQ.J SPIC=(ALUNG(J)*EPSINF)**2 AGR=SPIC/9.0 BGR=SPIC/25.0 T3(J)=TAUX(J)*(AGR*(1.0+BGR*(TAUX(J)**2-3.0*TAUY(J)**2))+1.0) T4(J)=TAUY(J)*(AGR*(1.0+BGR*(3.0*TAUX(J)**2-TAUY(J)**2))-1.0)
CALL TRAPEZ(EPSINF,0.5, 0.0,0.0, X(JP1)-X(J),Y(JP1)-Y(J), 1 KAPPA, ALUNG(J), AGR,BGR)
T3(J)=2.0*(AGR-EPSINF*T3(J)) T4(J)=2.0*(BGR-EPSINF*T4(J)) ELSE
C INTEGRALE I0 NEL CASO I.NE.J AGR=ALOG(ANUM/DENOM)/2.0 CHI=ROJ*ROJP1+ETJ*ETJP1
PSI=ETJ*ROJP1-ROJ*ETJP1
CHI=SQRT(CHI*CHI+PSI*PSI)+CHI IF(CHI .LE. EPS1)THEN
SPIC=CHI/PSI COST=SIGN(PGR,PSI) ELSE SPIC=-PSI/CHI COST=0.0 ENDIF
IF(ABS(SPIC) .LE. EPS2)THEN
TGSPIC=SPIC-SPIC**3/3.0+SPIC**5/5.0-SPIC**7/7.0 ELSE TGSPIC=ATAN(SPIC) ENDIF BGR=COST-2.0*TGSPIC T1(J)=TAUX(J)*AGR+TAUY(J)*BGR T2(J)=TAUX(J)*BGR-TAUY(J)*AGR C INTEGRALE I1 NEL CASO I.NE.J
CALL TRAPEZ(0.0,1.0, DXJ,DYJ, X(JP1)-X(J),Y(JP1)-Y(J), 1 KAPPA, ALUNG(J), T3(J),T4(J)) ENDIF C Memorizzazioni DXJ=DXJP1 DYJ=DYJP1 ANUM=DENOM ROJ=ROJP1 ETJ=ETJP1 10 CONTINUE END
SUBROUTINE TRAPEZ(S0,S1, DXC,DYC, DXJ,DYJ, KAPPA, ALJ, AGR,BGR) C INTEGRAZIONE DI I1=AGR+iBGR CON LA REGOLA DEI TRAPEZI
DELTAS=(S1-S0)/KAPPA AS2=2.0*(DXC-DXJ*S0) BS2=2.0*(DYC-DYJ*S0) DGR=S0/(COSH(AS2)-COS(BS2))/2.0 AGR=SINH(AS2)*DGR BGR=-SIN(BS2)*DGR DO 10 MPIC=2,KAPPA SPIC=S0+DELTAS*(MPIC-1) AS2=2.0*(DXC-DXJ*SPIC) BS2=2.0*(DYC-DYJ*SPIC) DGR=SPIC/(COSH(AS2)-COS(BS2)) AGR=AGR+SINH(AS2)*DGR BGR=BGR-SIN(BS2)*DGR 10 CONTINUE AS2=2.0*(DXC-DXJ*S1) BS2=2.0*(DYC-DYJ*S1) DGR=S1/(COSH(AS2)-COS(BS2))/2.0 AGR=AGR+SINH(AS2)*DGR BGR=BGR-SIN(BS2)*DGR DELTAS=ALJ*DELTAS AGR=DELTAS*AGR BGR=DELTAS*BGR RETURN END
SUBROUTINE MINV(A,NXN,N,D)
C INVERSIONE DI UNA MATRICE A(N,N) DIMENSION L(121),M(121), 1 A(NXN) D=1. NK=-N DO 80 K=1,N NK=NK+N L(K)=K M(K)=K KK=NK+K BIGA=A(KK) DO 20 J=K,N IZ=N*(J-1) DO 20 I=K,N IJ=IZ+I IF(ABS(BIGA)-ABS(A(IJ)))15,20,20 15 BIGA=A(IJ) L(K)=I M(K)=J 20 CONTINUE J=L(K) IF(J-K)35,35,25 25 KI=K-N DO 30 I=1,N KI=KI+N HOLD=-A(KI) JI=KI-K+J A(KI)=A(JI) 30 A(JI)=HOLD 35 I=M(K) IF(I-K)45,45,38 38 JP=N*(I-1) DO 40 J=1,N JK=NK+J JI=JP+J HOLD=-A(JK) A(JK)=A(JI) 40 A(JI)=HOLD 45 IF(BIGA)48,46,48 46 D=0. WRITE(*,1)
1 FORMAT(///1X,10(1H*),' MATRICE SINGOLARE ',10(1H*)//) STOP 48 DO 55 I=1,N IF(I-K)50,55,50 50 IK=NK+I A(IK)=A(IK)/(-BIGA) 55 CONTINUE DO 65 I=1,N IK=NK+I HOLD=A(IK) IJ=I-N DO 65 J=1,N IJ=IJ+N IF(I-K)60,65,60 60 IF(J-K)62,65,62 62 KJ=IJ-I+K
A(IJ)=HOLD*A(KJ)+A(IJ) 65 CONTINUE KJ=K-N DO 75 J=1,N KJ=KJ+N IF(J-K)70,75,70 70 A(KJ)=A(KJ)/BIGA 75 CONTINUE D=D*BIGA A(KK)=1./BIGA 80 CONTINUE K=N 100 K=K-1 IF(K)150,150,105 105 I=L(K) IF(I-K)120,120,108 108 JQ=N*(K-1) JR=N*(I-1) DO 110 J=1,N JK=JQ+J HOLD=A(JK) JI=JR+J A(JK)=-A(JI) 110 A(JI)=HOLD 120 J=M(K) IF(J-K)100,100,125 125 KI=K-N DO 130 I=1,N KI=KI+N HOLD=A(KI) JI=KI-K+J A(KI)=-A(JI) 130 A(JI)=HOLD GO TO 100 150 RETURN END
SUBROUTINE PROFVEL(NP1,BETA1, GAMSTAR, DGAM,QPIC, GAM) ! VELOCITA' SUL CONTORNO DEL PROFILO
COMMON/VETT/ALUNG(120),TAUX(120),TAUY(120) COMMON/COEF/AIJ(14641),BIJ(14641) COMMON/VORTG/PESOG(121),ADIJ(14641) DIMENSION GAM(NP1),QPIC(NP1),DGAM(NP1) DIMENSION TNOTO(121) PARAMETER(PGR=3.141592654, RAD=PGR/180.0, PGR2=2.0*PGR) ! Flusso asintotico ALFA=90.0-BETA1
IF(ABS(ALFA) .LE. 0.5)THEN ALFA=ALFA*RAD SN=ALFA*ALFA/2.0 CS=ALFA*(1.0-SN/3.0) SN=1.0-SN ELSE BETAR=RAD*BETA1 SN=SIN(BETAR) CS=COS(BETAR) ENDIF ! Termini noti DO I=1,NP1-1 TNOTO(I)=PGR2*(TAUX(I)*CS-TAUY(I)*SN)-GAMSTAR*PESOG(I) DO J=1,NP1 JM1=J-1 TNOTO(I)=TNOTO(I)-BIJ(I+NP1*JM1)*QPIC(J) END DO DO J=1,NP1 TNOTO(I)=TNOTO(I)-PGR*(QPIC(I)+QPIC(I+1)) + -ADIJ(I+NP1*(J-1))*DGAM(I) END DO END DO TNOTO(NP1)=0.0
! Velocita' GAM sul contorno del profilo DO 20 I=1,NP1 GAM(I)=0.0 DO 20 J=1,NP1 GAM(I)=GAM(I)+AIJ(I+NP1*(J-1))*TNOTO(J) 20 CONTINUE RETURN END
SUBROUTINE GRAFICOXY(NFILE, NPUNTI,X,Y, K, AMULTI) !
! Rappresentazione grafica dei grafici Y(J) in funzione di X(J) !
USE DFLIB
REAL (8) XMINV,YMINV,XMAXV,YMAXV, STEP, STEPA INTEGER (2) maxx, maxy
INTEGER (2) STATUS1 INTEGER (4) STATUS2
INTEGER (4) ISFONDO, IASSI, IGRAF, ITEST CHARACTER (3) TXX
CHARACTER (7) TYY TYPE (WXYCOORD) WT
COMMON/videopix/maxx, maxy DIMENSION X(NPUNTI), Y(NPUNTI) IF(K .EQ.2)GO TO 100
! Apertura dello schermo grafico NFILE:
OPEN (NFILE, FILE = 'CON', STATUS = 'UNKNOWN', ERR=99) CALL GRAPHICSMODE(NFILE)
! Messa in fuoco dello schermo grafico NFILE: STATUS2=SETACTIVEQQ(NFILE)
! Definizione degli estremi del grafico: XMIN=X(1)
XMAX=X(1) DO J=1,NPUNTI
IF(X(J) .LT. XMIN) XMIN=X(J)
IF(X(J) .GT. XMAX) XMAX=X(J)
END DO
YMIN=0.0 YMAX=0.0 DO J=1,NPUNTI
IF(Y(J) .LT. YMIN) YMIN=Y(J)
IF(Y(J) .GT. YMAX) YMAX=Y(J)
END DO
YMIN=ANINT(YMIN+SIGN (0.5,YMIN))/AMULTI YMAX=ANINT(YMAX+SIGN (0.5,YMAX))/AMULTI ! Intervalli degli assi e della griglia:
DX=(XMAX-XMIN)/10.0 DY=(YMAX-YMIN)/10.0
! Definizione degli estremi dello schermo XMINV=XMIN-DX*2.0
XMAXV=XMAX+DX*1.0 YMINV=YMIN-DY*2.0 YMAXV=YMAX+DY*1.0
! Sfondo:
ISFONDO=RGBTOINTEGER ( 0, 0, 255) STATUS2 = SETCOLORRGB(ISFONDO)
STATUS1 = RECTANGLE_W ($GFILLINTERIOR, XMINV,YMINV, XMAXV,YMAXV) ! Cornice degli Assi:
IASSI =RGBTOINTEGER (255, 255, 255) STATUS2 = SETCOLORRGB(IASSI)
CALL SETLINESTYLE(#FFFF) STATUS1 = RECTANGLE_W ($GBORDER,
+ DBLE(XMIN), DBLE(YMIN), + DBLE(XMAX), DBLE(YMAX)) ! Asse X: STEP=YMIN-0.05/AMULTI DO I=0,10 STEPA=XMIN+DX*I
CALL MOVETO_W (STEPA, DBLE(YMIN), WT) STATUS1 = LINETO_W (STEPA, STEP)
END DO
! Asse Y:
STEP=XMIN-0.01 DO I=0,10
STEPA=YMIN+DY*I
CALL MOVETO_W (DBLE(XMIN), STEPA, WT) STATUS1 = LINETO_W (STEP, STEPA)
END DO ! Griglia: IASSI =RGBTOINTEGER (255, 255, 255) STATUS2 = SETCOLORRGB(IASSI) CALL SETLINESTYLE(#EEEE) DO I=1,9 STEPA=YMIN+DY*I
CALL MOVETO_W (DBLE(XMIN), STEPA, WT) STATUS1 = LINETO_W (DBLE(XMAX), STEPA)
END DO
DO I=1,9
STEPA=XMIN+DX*I
CALL MOVETO_W (STEPA, DBLE(YMIN), WT) STATUS1 = LINETO_W (STEPA, DBLE(YMAX))
END DO
! Label:
STATUS1 = INITIALIZEFONTS() ITEST = RGBTOINTEGER (0, 0, 0) STATUS2 = SETCOLORRGB(ITEST)
STATUS1 = SETFONT ('t''Courier''h20w8') ! Asse X: OPEN (8,FILE='PROFILO.AXY',STATUS='UNKNOWN') DO I=0,10 STEPA=XMIN+DX*I WRITE(8,'(F3.1)')STEPA END DO REWIND (8)
STEP=YMIN-0.1/AMULTI DO I=0, 10
READ(8,'(A3)')TXX STEPA=XMIN+DX*I
CALL MOVETO_W (STEPA, STEP, WT) CALL OUTGTEXT (TXX) END DO CLOSE(8, STATUS='DELETE') ! Asse Y: OPEN (8,FILE='PROFILO.AXY',STATUS='UNKNOWN') DO I=0,10 STEPA=YMIN+DY*I WRITE(8,'(F7.2)')STEPA END DO REWIND (8) STEP=XMIN-0.15 DO I=0, 10 READ(8,'(A7)')TYY STEPA=YMIN+DY*I
CALL MOVETO_W (STEP, STEPA, WT) CALL OUTGTEXT (TYY)
END DO
CLOSE(8, STATUS='DELETE') ! Grafico:
100 IF(K .EQ. 1)THEN
IGRAF =RGBTOINTEGER (255, 0, 0) TXX='A' ELSE IGRAF =RGBTOINTEGER ( 0, 176, 0) TXX='B' ENDIF STATUS2 = SETCOLORRGB(IGRAF) CALL SETLINESTYLE(#FFFF)
CALL MOVETO_W (DBLE(X(1)), DBLE(Y(1)), WT) DO J=2,NPUNTI
STATUS1 = LINETO_W (DBLE(X(J)), DBLE(Y(J)))
END DO
CALL MOVETO_W (DBLE(X(NPUNTI)+0.02), DBLE(Y(NPUNTI)), WT) CALL OUTGTEXT (TXX)
IF(K .EQ. 1)RETURN
CLOSE(NFILE, STATUS='KEEP') RETURN
99 STOP 'Errore nell''apertura del file' END
SUBROUTINE STRLIM(NP1,S,UE,DELTA,DSTAR,TETA,CF,INDTR, + YB,DYBDS, NPASP1)
! Calcolo dello starto limite sulla superficie COMMON/OPER/REYN COMMON/TULIV/TUINF COMMON/TURB/PASSO COMMON/PTRN/JTR,STR,UETR,DELTR,TETATR,CFTR,HTR,CFT, 1 HTRT,DXTR,DSTARTR COMMON/PSEP/JSEP,SSEP,UESEP,DELSEP,TETSEP,CFSEP,HSEP,ISEP COMMON/BOLLA/IBOLLA,SIB,JIB,HIB,UEIB,TETAIB, 1 REYTIB,SFB,JFB,DXBOL,UEFB,AL1,AL2 DIMENSION S(NP1),UE(NP1),DELTA(NP1),DSTAR(NP1),TETA(NP1),CF(NP1) DIMENSION YB(50),DYBDS(12)
209 FORMAT(///'***STOP NEL CALCOLO ITERATTIVO DELLA S DI INIZIO 1 TRANSIZIONE NATURALE***')
213 FORMAT(///'***STOP NEL CALCOLO ITERATTIVO DELLA S DI INIZIO 1 SEPARAZIONE***') ! Punto di ristagno DUEDS=UE(2)/S(2) AUX=REYN*DUEDS DELTA(1)=SQRT(7.052/AUX) TETA(1)=SQRT(0.0770/AUX) DSTAR(1)=0.24123*DELTA(1) CF(1)=1.0E+10 H=DSTAR(1)/TETA(1) ! Flusso laminare LPBOL=-0.09 EPSL=1.0E-04 EPSR=0.1 KMAX=100 NPRO=NP1 NPROM1=NPRO-1 DO 10 J=1,NPROM1 JP1=J+1 CALL LAMINA(S(J),UE(J),TETA(J),S(JP1),UE(JP1),LPBOL, 1 DELTA(JP1),DSTAR(JP1),TETA(JP1),CF(JP1),H,REYTET,LPIC) IF(ABS(LPIC-LPBOL).LE.EPSL)GO TO 13 IF(LPIC.LT.LPBOL)GO TO 14 REYCR=TRANS(INDTR,S(JP1),UE(JP1),LPIC) IF(ABS(1.0-REYTET/REYCR).LE.EPSR)GO TO 15 IF (REYTET.GT.REYCR)GO TO 16 10 CONTINUE
! Punto di transizione sul bordo d'uscita JTR=NPRO
STR=S(JTR) UETR=UE(JTR) TETATR=TETA(JTR) DELTR=DELTA(JTR)
DSTARTR=DSTAR(JTR) CFTR=CF(JTR)
HTR=H
REYTR=REYTET GO TO 170
! Definizione della s di inizio bolla 14 JP1=J H=DSTAR(J)/TETA(J) REYTET=REYN*UE(J)*TETA(J) 13 JIB=JP1 SIB=S(JP1) TETAIB=TETA(JP1) HIB=H REYTIB=REYTET UEIB=UE(JIB) ! Geometria della bolla
CALL BOLL(NP1,S,YB,DYBDS,NPASP1)
! Caratteristiche dello strato limite nella zona laminare della bolla DO 150 J=JIB,JTR JP1=J+1 IF(J.EQ.JTR)GO TO 155 CALL LAMINA(S(J),UE(J),TETA(J),S(JP1),UE(JP1),LPBOL, 1 DELTA(JP1),DSTAR(JP1),TETA(JP1),CF(JP1),H,REYTET,LPIC) 150 CONTINUE 155 DUEDS=(UE(JTR+1)-UE(JTR))/(S(JTR+1)-S(JTR)) UETR=UE(JTR)+DUEDS*(STR-S(JTR)) IF(JTR.EQ.NPRO)GO TO 500 IF(STR.EQ.S(JTR))GO TO 500 CALL LAMINA(S(JTR),UE(JTR),TETA(JTR),STR,UETR,LPBOL, 1 DELTR,DSTARTR,TETATR,CFTR,HTR,REYTR,LPIC) GO TO 180 500 TETATR=TETA(JTR) DELTR=DELTA(JTR) DSTARTR=DSTAR(JTR) CFTR=CF(JTR) HTR=H REYTR=REYTET GO TO 180
! Definizione della s di transizione naturale 165 JP1=J H=DSTAR(J)/TETA(J) REYTET=REYN*UE(J)*TETA(J) 15 JTR=JP1 STR=S(JP1) UETR=UE(JP1) DELTR=DELTA(JP1) DSTARTR=DSTAR(JP1) TETATR=TETA(JP1) CFTR=CF(JP1) HTR=H REYTR=REYTET GO TO 170
16 JTR=J S0=S(J) S1=S(JP1) DUEDS=(UE(JP1)-UE(J))/(S1-S0) K=0 160 K=K+1 STR=(S0+S1)/2. DS=STR-S(J) IF(ABS(DS).LE.EPSL)GO TO 165 UETR=UE(J)+DUEDS*DS CALL LAMINA(S(J),UE(J),TETA(J),STR,UETR,LPBOL, 1 DELTR,DSTARTR,TETATR,CFTR,HTR,REYTR,LPIC) REYCR=TRANS(INDTR,STR,UETR,LPIC) IF(ABS(1.0-REYTR/REYCR).LE.EPSR)GO TO 170 IF(K-KMAX)162,161,161 161 WRITE(6,209) STOP 162 IF(REYTR-REYCR)163,170,164 163 S0=STR GO TO 160 164 S1=STR GO TO 160
! Lunghezza della zona di transizione 170 IBOLLA=0
TUL=TULOC(UETR)
SIGMA2=5.0-6.18*ALOG10(TUL)
DXTR=TETATR/530.0*(1.0E+04*SIGMA2-70.0*REYTR) IF(DXTR.LT.0.0)DXTR=0.0
! Flusso turbolento a valle del punto di transizione 180 IF(STR-S(1))181,181,182 181 JTR=2 STR=S(2) UETR=UE(2) 182 CALL SHAPEH(DELTR,TETATR,HTR,UETR,HTRT,DSTART,CFT) JIN=JTR+1 CALL TURBO(STR,UETR,DELTR,DSTART,TETATR,CFT,S(JIN),UE(JIN), 1 DELTA(JIN),DSTAR(JIN),TETA(JIN),CF(JIN),H,REYTET,JTR,NPRO) IF(JIN-NPRO)45,55,40 C40 NPRO=NPRO+1 40 CONTINUE GO TO 55 ! Flusso turbolento 45 HSEP=2.8 DO 50 J=JIN,NPROM1 JP1=J+1 CALL TURBO(S(J),UE(J),DELTA(J),DSTAR(J),TETA(J),CF(J),S(JP1), 1 UE(JP1),DELTA(JP1),DSTAR(JP1),TETA(JP1),CF(JP1), 2 H,REYTET,J,NPRO) IF(ABS(H-HSEP).LE.EPSR)GO TO 17 IF(H.GT.HSEP)GO TO 18 50 CONTINUE
! Inizio scia turbolenta 55 JSEP=NP1
SSEP=S(JSEP) ISEP=0 C DO 60 J=NPRO,N C JP1=J+1 C CALL TURBO(S(J),UE(J),DELTA(J),DSTAR(J),TETA(J),CF(J),S(JP1), C 1 UE(JP1),DELTA(JP1),DSTAR(JP1),TETA(JP1),CF(JP1), C 2 H,REYTET,J,NPRO) C 60 CONTINUE RETURN
! Definizione della s di separazione 305 JP1=J H=DSTAR(J)/TETA(J) REYTET=REYN*UE(J)*TETA(J) 17 JSEP=JP1 SSEP=S(JP1) UESEP=UE(JP1) DELSEP=DELTA(JP1) DSTSEP=DSTAR(JP1) TETSEP=TETA(JP1) CFSEP=CF(JP1) REYSEP=REYTET WRITE(6,*)JSEP STOP GO TO 400
! Calcolo iterattivo della s di inizio separazione 18 JSEP=J S0=S(J) S1=S(JP1) DUEDS=(UE(JP1)-UE(J))/(S1-S0) K=0 300 K=K+1 SSEP=(S0+S1)/2.0 DS=SSEP-S(J) IF(ABS(DS).LE.EPSL)GO TO 305 UESEP=UE(J)+DUEDS*DS CALL TURBO(S(J),UE(J),DELTA(J),DSTAR(J),TETA(J),CF(J),SSEP, 1 UESEP,DELSEP,DSTSEP,TETSEP,CFSEP,H,REYSEP,J,NPRO) IF(ABS(H-HSEP).LE.EPSR)GO TO 400 IF(K-KMAX)302,301,301 301 WRITE(6,213) STOP 302 IF(H-HSEP)303,400,304 303 S0=SSEP GO TO 300 304 S1=SSEP GO TO 300 ! Flusso separato 400 CONTINUE HSEP=H JSEP=J JSEPP1=JSEP+1 HSTARS=3.3+1.535*(HSEP-0.7)**(-2.715) DO 410 J=JSEPP1,NPRO HSTAR=((HSTARS-3.0)**1.653+1.653*0.0306/TETSEP*(S(J)-SSEP)) HSTAR=HSTAR**(1.0/1.653)+3.0 H=0.7+(1.535/(HSTAR-3.3))**0.368324125 DSTAR(J)=H*TETSEP DELTA(J)=HSTAR*TETSEP+DSTAR(J)
CF(J)=0.0 TETA(J)=TETSEP 410 CONTINUE RETURN END SUBROUTINE LAMINA(S1,UE1,TETA1,S2,UE2,LPBOL, 1 DELTA2,DSTAR2,TETA2,CF2,H,REYTET,LPIC) ! Calcolo delle caratteristiche dello strato limite laminare COMMON/OPER/REYN EPS=1.0E-04 EPST=0.04 DS=S2-S1 DUEDS=(UE2-UE1)/DS AUX=(UE1/UE2)**6 IF(ABS(DUEDS).LE.EPS)GO TO 10 TETA2=AUX*TETA1**2+0.47/REYN*(1.0-AUX)/(6.*DUEDS) GO TO 20 10 TETA2=AUX*(TETA1**2+0.47/REYN*(1.0+2.5*AUX*DUEDS/UE1)*DS/UE1) 20 LPIC=TETA2*REYN*DUEDS TETA2=SQRT(TETA2) 40 LGRA=LAMDA(LPIC) DELTA2=TETA2/(0.117460317-LGRA/945.0-LGRA**2/9072.0) 60 DSTAR2=DELTA2*(0.3-LGRA/120.0) CF2=(4.0+LGRA/3.0)/(REYN*UE2*DELTA2) H=DSTAR2/TETA2 REYTET=REYN*UE2*TETA2 RETURN END
FUNCTION LAMDA(LPIC)
! Calcolo di lamda con il metodo dicotomico IF(LPIC+0.15673)10,10,20 10 LAMDA=-12. RETURN 20 IF(LPIC-0.0948)40,30,30 30 LAMDA=+12 RETURN 40 KMAX=100 EPS=1.0E-06 K=0 IF(ABS(LPIC)-EPS)50,50,60 50 LAMDA=0.0 RETURN 60 LGRA0=7.052 LPIC0=0.0770 IF(LPIC-LPIC0)70,80,90 70 LGRA1=LGRA0 LGRA0=-12. GO TO 100 80 LAMDA=LGRA0 RETURN 90 LGRA1=+12. 100 K=K+1 LAMDA=(LGRA0+LGRA1)/2. LPICM=(0.117460317-LAMDA/945.0-LAMDA**2/9072.0)**2*LAMDA IF(ABS(LPIC-LPICM).LE.EPS)RETURN IF(K.EQ.KMAX) GO TO 120 IF(LPIC-LPICM)110,120,130 110 LGRA1=LAMDA GO TO 100 130 LGRA0=LAMDA GO TO 100 120 WRITE (6,200) STOP
200 FORMAT (//5X,'STOP NELLA FUNZIONE LAMDA') END
SUBROUTINE SHAPEH(DELTAL,TETAL,HL,UE,HT,DSTART,CFT) ! PASSAGGIO DELLO STRATO LIMITE DA LAMINARE A TURBOLENTO COMMON/OPER/REYN
C---Precisione e passo di indagine PARAMETER( EPS=1.0E-04, KMAX=100 ) DA=0.1 C---Costante e controllo B=DELTAL/TETAL-4. IF(B.LE.2.)GO TO 999 C---Inizializzazione A=HL-0.7 F0=1.535/A**2.715+A-B K=0 C---INIZIO ITERAZIONI 100 K=K+1 A=A-DA F=1.535/A**2.715+A-B IF(ABS(F).LE.EPS)GO TO 200 CNTR=F*F0 IF(CNTR)80,80,90 80 A=A+DA DA=DA/2. GO TO 100 90 IF(K.GE.KMAX)GO TO 998 F0=F GO TO 100 200 REYTET=UE*TETAL*REYN HT=A+0.7 DSTART=HT*TETAL CFT=0.246/REYTET**0.268/10.0**(0.678*HT) RETURN 998 WRITE(4,301) WRITE(4,302)K WRITE(6,301) WRITE(6,302)K STOP 999 WRITE(4,301) WRITE(4,303)B,DELTAL,TETAL WRITE(6,301) WRITE(6,303)B,DELTAL,TETAL STOP
301 FORMAT(//5X,'*** STOP NELLA SUB. SHAPEH ***') 302 FORMAT(/5X,'K =',I4)
303 FORMAT(/5X,'B =',E13.5/5X,'DELTAL =',E13.5/ 1 5X,'TETAL =',E13.5)
END
FUNCTION TRANS(INDTR, XTR, UE, LPIC)
! Calcolo del REYNOLDS critico basato sulle diverse definizioni COMMON/OPER/REYN
COMMON/TULIV/TUINF DIMENSION REYCR(4) IF(INDTR-5)20,10,10 ! Flusso completamente laminare 10 TRANS=1.0E+10
RETURN
! Livello di turbolenza locale 20 TUL=TULOC(UE) ! Metodo di MICHEL REYXTR=XTR*UE*REYN IF(REYXTR.LT.1.E+06.OR.60.E+06.LT.REYXTR)GO TO 30 REYCR(1)=1.174*(1.+22400./REYXTR)*REYXTR**0.46 GO TO 40 30 REYCR(1)=1.0E+10 ! Metodo di HALL e GIBBINS
40 REYCR(2)=190.+EXP(6.88-1.03*TUL) ! Metodo di DUNHAM TUMED=(TUINF+TUL)/2. TUMEDSTAR=((TUMED+0.75)/21.) IF(LPIC.GT.TUMEDSTAR)GO TO 50 REYCR(3)=(0.27+0.73*EXP(-0.8*TUMED))*(550.0+680.0/ 1 (1.0+TUMED-21.0*LPIC)) GO TO 60 50 REYCR(3)=1.0E+10 ! Metodo di SEYB 60 REYCR(4)=1000./(1.2+0.7*TUL)+10.0*((0.09+LPIC)/ 1 (0.0106+0.0306*TUL))**2.62
! Scelta del Reycr
IF(INDTR)80,80,70 70 TRANS=REYCR(INDTR) RETURN 80 TRANS=REYCR(1) DO 100 J=2,4 IF(REYCR(J).LT.TRANS) TRANS=REYCR(J) 100 CONTINUE RETURN END
FUNCTION TULOC(UE) !
! Livello di turbolenza del flusso locale in funzione ! di quella del flusso asintotico
! COMMON/TULIV/TUINF IF(UE-1.0)20,10,30 10 TULOC=TUINF RETURN 20 AUX=SQRT(1./UE**3-1.0) F=ATAN(AUX)/AUX GO TO 40 30 AUX=SQRT(1.-1./UE**3) F=ALOG(UE**1.5*(1.+AUX))/AUX 40 TULOC=TUINF*SQRT(0.5/UE*(1.+F/UE**3)) RETURN END
SUBROUTINE BOLL(NP1,S,YB,DYBDS,NPASP1)
! Calcolo dei punti di transizione e di fine bolla ! Calcolo della lunghezza della bolla e della sua forma COMMON/BOLLA/IBOLLA,SIB,JIB,HIB,UEIB,TETAIB, 1 REYTIB,SFB,JFB,DXBOL,UEFB,AL1,AL2 COMMON/PTRN/JTR,STR,UETR,DELTR,TETATR,CFTR,HTR,CFT, 1 HTRT,DXTR,DSTARTR DIMENSION YB(50),DYBDS(12),S(NP1) PARAMETER(PIGR=3.141592654, RAD=PIGR/180.0) ! Variabile di controllo ed esistenza della bolla IBOLLA=1
EPSSBL=0.9
! Calcolo della lunghezza della bolla laminare TUL=TULOC(UEIB) SIGMA2=5.0-6.18*ALOG10(TUL) AL1=TETAIB/530.*(1.0E+04*SIGMA2-70.*REYTIB) ! U riattacco / U separazione URSUS=0.8062258 UEFB=URSUS*UEIB
! Calcolo lunghezza della bolla turbolenta
AL2=(1.0-URSUS)*TETAIB/(0.011233*URSUS-0.003033) ! Lunghezza totale della bolla
DXBOL=AL1+AL2
IF(DXBOL.LT.0.0)DXBOL=0.0 ! Calcolo ascisse curvilinee STR=SIB+AL1 SFB=SIB+DXBOL DO 10 J=JIB,NP1 IF(STR-S(J))15,10,10 10 CONTINUE JTR=NP1 STR=S(JTR) SFB=STR JFB=NP1 GO TO 30 15 JTR=J-1 DO 20 J=JTR,NP1 IF(SFB-S(J))25,20,20 20 CONTINUE SFB=S(NP1) JFB=NP1 GO TO 30 25 JFB=J-1 JFBP1=JFB+1
DSB=S(JFBP1)-SFB ALJ=S(JFBP1)-S(JFB) IF(DSB/ALJ-EPSSBL)27,27,29 27 SFB=S(JFBP1) JFB=JFBP1 GO TO 30 29 SFB=S(JFB) 30 TGGAM=17.5/REYTIB PSI=ATAN(TGGAM)/RAD ALB=ABS(SFB-SIB) NJ=JFB-JIB NSEGM=5 NPAS=NSEGM*NJ NPASP1=NPAS+1 YB(1)=0.0 DYBDS(1)=TGGAM X=0.0 K=1 I=1 JFBM1=JFB-1 DO 40 J=JIB,JFBM1 DS=S(J+1)-S(J) DX=DS/FLOAT(NSEGM) I=I+1 DO 35 L=1,NSEGM X=X+DX K=K+1 35 YB(K)=(1.0-X/ALB)*X*TGGAM DYBDS(I)=TGGAM*(1.0-2.0*X/ALB) 40 CONTINUE YB(NPASP1)=0.0 RETURN END
SUBROUTINE TURBO(S1,UE1,DELTA1,DSTAR1,TETA1,CF1,
1 S2,UE2,DELTA2,DSTAR2,TETA2,CF2,H,REYTET,J,NP1) ! Integrazione dello strato limite turbolento
COMMON/OPER/REYN COMMON/TURB/PASSO ! Inizializzazioni IF(J-NP1)75,70,60 60 CF1=0.0 CF2=0.0 GO TO 80 70 CF2=0.0 GO TO 80 75 CF2=CF1/2 80 DUEDS=(UE2-UE1)/(S2-S1) H=DSTAR1/TETA1 HSTET=DELTA1-DSTAR1 HSTAR=HSTET/TETA1 UE=UE1 TETA2=TETA1 S1STAR=S1 DELTA2=DELTA1 ! Integrazione 100 S2STAR=S1STAR+PASSO+DELTA2 IF(S2STAR.GT.S2)S2STAR=S2 AUX=DUEDS/UE DTEDS=CF2-TETA2*(2.0+H)*AUX DHSDS=0.0306/(HSTAR-3.0)**0.653-HSTET*AUX DS=S2STAR-S1STAR TETA2=TETA2+DTEDS*DS HSTET=HSTET+DHSDS*DS HSTAR=HSTET/TETA2 IF(HSTAR.LT.3.3001)HSTAR=3.3001 IF(HSTAR-3.480481)81,82,82 81 HSTAR=3.480481 HSTET=HSTAR*TETA2 82 H=0.7+(1.535/(HSTAR-3.3))**0.368324124125 DS=S2STAR-S1 UE=UE1+DUEDS*DS REYTET=UE*TETA2*REYN IF(J-NP1)86,84,84 84 CF2=0.0 GO TO 89 86 CF2=0.123/REYTET**0.268/10.0**(0.678*H) 89 DSTAR2=H*TETA2 DELTA2=HSTET+DSTAR2 IF(S2STAR-S2)90,200,200 90 S1STAR=S2STAR GO TO 100 200 CF2=CF2*2 RETURN END
SUBROUTINE TRASF(S,IDIM, JIN,JFIN,ISGN,JSTAR,SCOR,DELS, 1 DSTS,TETS,CFS)
! Routine incaricata della trasformazione dei valori dello ! S.L. nel sistema assoluto
COMMON/SLOUT/DELTA(121),DSTAR(121),TETA(121),CF(121) COMMON/PSEP/JSEP,SSEP,UESEP,DELSEP,TETSEP,CFSEP,HSEP,ISEP COMMON/BOLLA/IBOLLA,SIB,JIB,HIB,UEIB,TETAIB, 1 REYTIB,SFB,JFB,DXBOL,UEFB,AL1,AL2 COMMON/PTRN/JTR,STR,UETR,DELTR,TETATR,CFTR,HTR,CFT, 1 HTRT,DXTR,DSTARTR COMMON/SCHR/X(121),Y(121) COMMON/RISTGN/DELRS,DSTRS,TETRS,HRST,REYTRS,JRIST,JRIST1 COMMON/PUNTI/X0,Y0,XIB,YIB,XSEP,YSEP,XFB,YFB,XTR,YTR DIMENSION S(121) DIMENSION SCOR(IDIM) DIMENSION DELS(121),DSTS(121),TETS(121),CFS(121) ! Caratteristiche dello strato limite sul profilo K=1 DO 10 L=JIN,JFIN J=JSTAR+L*ISGN K=K+1 DELTA(J)=DELS(K) DSTAR(J)=DSTS(K) TETA(J)=TETS(K) CF(J)=CFS(K) 10 CONTINUE
! Ricerca delle coordinate del punto di transizione e di ! separazione turbolenta del profilo
KTR=JTR KSEP=JSEP K=1 DO 50 L=JIN,JFIN J=JSTAR+L*ISGN K=K+1 IF(K-KTR)50,25,29 25 JTR=J DS=(STR-SCOR(K))/(SCOR(K+1)-SCOR(K)) XTR=X(J)+(X(J+ISGN)-X(J))*DS YTR=Y(J)+(Y(J+ISGN)-Y(J))*DS STR=S(J)+(S(J+ISGN)-S(J))*DS 29 IF(K-KSEP)50,35,59 35 JSEP=J C DS=(SSEP-SCOR(K))/(SCOR(K+1)-SCOR(K)) C XSEP=X(J)+(X(J+ISGN)-X(J))*DS C YSEP=Y(J)+(Y(J+ISGN)-Y(J))*DS C SSEP=S(J)+(S(J+ISGN)-S(J))*DS XSEP=X(J+ISGN)
YSEP=Y(J+ISGN) SSEP=S(J+ISGN) GO TO 59 50 CONTINUE 59 IF(IBOLLA-1)100,61,61 61 KIB=JIB KFB=JFB K=1 DO 80 L=JIN,JFIN J=JSTAR+L*ISGN K=K+1 IF(K-KIB)80,67,71 67 JIB=J XIB=X(J) YIB=Y(J) 71 IF(K-KFB)80,75,100 75 JFB=J XFB=X(J) YFB=Y(J) GO TO 100 80 CONTINUE
! Caratteristiche dello strato limite nel punto di ristagno. 100 DELRS=DELS(1) DSTRS=DSTS(1) TETRS=TETS(1) HRST=DSTS(1)/TETS(1) REYTRS=0.0 RETURN END
SUBROUTINE PRESTAZ(NP1,BETA1,UE,QPIC, CF,CX,CY,
1 BETA2,VORTEX,QTOT,W2,CP2,DELV,DELU) ! PRESTAZIONI DELLA SCHIERA
COMMON/SCHR/X(121),Y(121) COMMON/VETT/ALUNG(120),TAUX(120),TAUY(120) COMMON/PASS/BETAS,SOLID,PISUD DIMENSION UE(NP1),QPIC(NP1),CF(NP1) PARAMETER(PGR=3.141592654, RAD=PGR/180.0)
! Vorticità e sorgenti totali VORTEX=0.0 QTOT=0.0 DO 10 J=1,NP1-1 VORTEX=VORTEX+(UE(J)+UE(J+1))*ALUNG(J) QTOT=QTOT+(QPIC(J)+QPIC(J+1))*ALUNG(J) 10 CONTINUE VORTEX=VORTEX/(2*PISUD) QTOT=QTOT/(2*PISUD) ! Flusso all'infinito a valle DELV=-VORTEX*SOLID DELU=QTOT*SOLID BETAR=BETA1*RAD V2=COS(BETAR)+DELV U2=SIN(BETAR)+DELU W2=SQRT(U2**2+V2**2) BETA2=ACOS(V2/W2)/RAD CP2=1.0-W2**2 ! Coefficienti fluidodinamici CX=0. CY=0. CFX=0. CFY=0. W2J=UE(1)**2+QPIC(1)**2 CFJ=CF(1)*UE(1)*ABS(UE(1)) DO 90 J=1,NP1-1 JP1=J+1 DXJ=X(JP1)-X(J) DYJ=Y(JP1)-Y(J) W2JP1=UE(JP1)**2+QPIC(JP1)**2 AMI=UE(JP1)*UE(J)+QPIC(J)*QPIC(JP1) SJ=W2J+W2JP1+AMI CX=CX+SJ*DYJ CY=CY+SJ*DXJ CFJP1=CF(JP1)*UE(JP1)*ABS(UE(JP1))
SJ=(CFJ+CFJP1)/2 CFX=CFX+DYJ*SJ CFY=CFY+DXJ*SJ CFJ=ABS(CFJ) W2J=SQRT(W2J)*ABS(UE(J))/UE(J) CFJ=CFJP1 W2J=W2JP1 90 CONTINUE W2JP1=SQRT(W2JP1)*ABS(UE(JP1))/UE(JP1) CX=-CX/3.0+Y(JP1)-Y(1)+CFX CY=CY/3.0+X(1)-X(JP1)+CFY RETURN END