• Non ci sono risultati.

- 1 -APPENDICE III: PROGRAMMA DI CALCOLO

N/A
N/A
Protected

Academic year: 2021

Condividi "- 1 -APPENDICE III: PROGRAMMA DI CALCOLO"

Copied!
42
0
0

Testo completo

(1)

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 dati

CALL 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)

(2)

! 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

(3)

! 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

(4)

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

(5)

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

(6)

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

(7)

! 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

(8)

! 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

(9)

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)

(10)

! 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

(11)

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

(12)

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

(13)

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

(14)

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

(15)
(16)

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

(17)

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

(18)

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

(19)

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

(20)

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

(21)

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

(22)

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

(23)

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

(24)

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

(25)

! 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)

(26)

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

(27)

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)

(28)

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

(29)

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

(30)

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)

(31)

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

(32)

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

(33)

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

(34)

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

(35)

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

(36)

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

(37)

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

(38)

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

(39)

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)

(40)

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

(41)

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))

(42)

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

Riferimenti

Documenti correlati

• Al turno n, con 2 ≤ n ≤ 9, Giorgio lancia n monete regolari: se esce almeno una croce, il gioco finisce in questo turno e Giorgio vince n euro; se invece escono tutte teste, il

La scena rappresenta un momento successivo alla decapitazione di Oloferne con Giuditta all’interno della tenda del nemico mentre consegna la testa mozzata alla

associando cioè all'immagine di un determinato territorio diverse categorie di beni, con il fine di determinare come varia la percezione della qualità suggerita dal COO

The community proved to be a particularly fruitful standpoint to investigate the issue of ‘faith and citizenship’ because in the Risale Nursi provides a sophisticated theory of

Ancora una volta, non sono presenti nel testo fenomeni culturali tipici della cultura emittente, sono invece presenti fenomeni socioculturali specifici della

Secondly, given that the buyer’s information acquisition strategy is consistent with the BBM information structure, there is another optimal mechanism for the monopolist that leaves

L’esigenza di riportare ad un ruolo centrale la figura dell’ispettore, non solo quale soggetto dotato di indiscussi poteri sanzionatori e repressivi, ma anche quale

By giving courts such discretion, the aim of predictability of legal decisions would be foiled.64 Furthermore, in Sweden, the labour law system does not explicitly provide the