Anche in questa analisi non è presente, laddove viene collocato il dispositivo, un anello attuatore preformato in fase di creazione della griglia di conseguenza poiché dalle analisi di sensitività riportate al Capitolo 4 si notavano variazioni delle prestazioni in funzione
SHYFEM CFD ANSYS Fluent
91
dell’ubicazione della turbina anche a risoluzioni così alte, si è reso necessario fare simulazioni preventive considerando un solo dispositivo alla volta, per poter confrontare le grandezze così ottenute con quelle ottenute con lo stesso dispositivo facente parte della terna. In questo modo si evita di falsare i risultati con comportamenti imputabili esclusivamente alla griglia di calcolo. In tabella 9 si riportano dapprima gli andamenti del campo di moto ottenuti nelle due configurazioni di terne e li si confrontano qualitativamente con i risultati ottenuti con puro CFD in [84]: gli andamenti sono da intendersi qualitativi poiché il profilo alare considerato non è il medesimo ed anche la solidità della pala è molto diversa (pari circa al 18% per [84] e 6,37 % per la turbina considerata in questa tesi). Inoltre per il caso terna triangolare in [84] le turbine ruotano tutte in senso orario. Nonostante ciò già ad una prima analisi del campo di moto (Tabella 9) si evince come quello ottenuto con SHYFEM riproduca in modo soddisfacente l’andamento del CFD. Si osserva come dalla disposizione di più dispositivi si vengano a creare zone di accelerazione tra essi e questo determinerà un diverso comportamento della turbina rispetto al caso in cui la si consideri singolarmente.
Per il caso di terna allineata si riportano in figura 82 grandezze di interesse quali CP, angolo
di attacco e velocità x e y (rapportate alla velocità indisturbata del flusso) lungo l’anello attuatore, confrontando il caso di turbina isolata con il caso della stessa turbina facente parte della terna.
Quello che ci si aspetta è che in corrispondenza dei corridoi di accelerazione tra le turbine, i dispositivi risentano di un flusso accelerato e di conseguenza abbiano una maggiore produzione di potenza: analizzando il coefficiente di potenza si osserva che esso risulta tendenzialmente più alto per la turbina del cluster rispetto alla turbina isolata, sia in upwind che in downwind; la superiore produzione upwind è sostanzialmente imputabile ai corridoi di accelerazione che si creano. Essi fanno sì che l’angolo di attacco in corrispondenza della zona corridoio sia incrementato poiché nei corridoi il flusso è costretto a procedere in direzione x anziché espandersi liberamente in direzione y perciò in corrispondenza del corridoio la componente y di velocità risulta ridotta rispetto al caso di turbina singola e contemporaneamente l’angolo di attacco risulta incrementato. Per la turbina 1, centrale nella schiera e con verso di rotazione antiorario, i corridoi di accelerazione si trovano sia a θ 0° che 180° di conseguenza si deve registrare una maggiore produzione sia all’inizio che alla fine dell’upwind: nel grafico del CP infatti per la turbina 1 si evidenzia come la campana
risulti leggermente più ampia in upwind (rispetto alla turbina isolata) sintomo della maggiore produzione laterale. Per turbina 2 e 3 invece la maggiore produzione si deve verificare all’inizio e alla fine dell’upwind rispettivamente, concorde con la presenza del corridoio di accelerazione all’inizio dell’upwind per turbina 2 e alla fine per turbina 3: tale andamento risulta rispettato. Inoltre per i diversi dispositivi della schiera risulta verificato che in corrispondenza dei corridoi la componente y di velocità è mitigata mentre l’angolo di attacco aumentato come mostrato in figura 82.
Per il downwind invece la maggiore produzione è imputabile all’incremento della componente x di velocità che viene registrato per le diverse turbine (Fig.82). Tale incremento di velocità x è dovuto al fatto che nella schiera di turbine le varie scie non sono libere di espandersi come accadrebbe se fossero isolate, perciò il tubo di flusso che generalmente si allarga a valle della turbina, si vede costretto dalle scie degli altri dispositivi: di conseguenza ad una minore sezione di passaggio corrisponde una maggiore velocità del flusso tant’è che considerando il profilo di velocità immediatamente a valle delle turbine ( 20 cm a valle) la velocità risulta maggiorata rispetto a quella che si avrebbe con dispositivo considerato singolarmente come mostrato in figura 83.
94
Per il caso di terna triangolare (Fig. 84) invece la turbina 1 registra una minore produzione rispetto al caso isolato mentre le turbine 4 e 5 sperimentano un incremento di produzione upwind: ciò è essenzialmente dovuto al fatto che la turbina 1 risente di un flusso che complessivamente è più attenuato rispetto al caso isolato, difatti la velocità x lungo l’anello attuatore è tendenzialmente più bassa; ciò si verifica a causa della maggiore resistenza fluidodinamica che la terna offre rispetto alla turbina singola e di cui quindi il flusso risente. Le turbine laterali invece registrano una produzione maggiore in upwind poiché risentono di un flusso più veloce: tale comportamento è dovuto al fatto che il flusso tende a “scappare” lateralmente alla turbina 1 poiché naturalmente tende a passare laddove la resistenza fluidodinamica è minore; così facendo il flusso viene proiettato sulle turbine laterali che quindi risentiranno di velocità tendenzialmente superiori. La turbina 4 registra una produzione maggiorata anche in downwind ciò è probabilmente legato ad effetti numerici imputabili alla griglia di calcolo e/o alla non perfetta simmetria del sistema: le scie delle turbine ad asse verticale non sono simmetriche e di conseguenza anche il campo di moto attorno ad esse non presenta piani di simmetria.
Da quest’ultima analisi applicata ad un piccolo gruppo di turbine si può concludere dunque che i meccanismi di incremento/riduzione del CP riscontrati per le turbine del cluster rispetto
alle turbine isolate sono in accordo qualitativo con le analisi descritte in [84]: ciò conferma la buona predicibilità del modello ibrido sviluppato per SHYFEM anche nel caso di raggruppamenti di turbine ravvicinate.
Capitolo 6
Conclusioni
L’obiettivo di questa tesi è quello di implementare un modello di turbina ad asse verticale all’interno di un codice di circolazione marina: il software utilizzato, sviluppato presso CNR-ISMAR di Venezia, è il codice SHYFEM di tipo Open Source. La scelta di un codice Open Source consente agli utenti una più facile implementazione ed utilizzo: difatti una delle maggiori difficoltà riscontrate durante la creazione di un modello di turbina VATT, sviluppato presso l’Università di Pisa per il software ANSYS Fluent e sul quale ci si è basati per lo sviluppo del modello per SHYFEM, risiede nel non aver accesso al codice sorgente il che rende l’implementazione molto più laboriosa e lenta.
Esistono già studi in cui modelli numerici di circolazione vengono equipaggiati con dispositivi TEC per verificarne la producibilità in siti di interesse per l’energia mareomotrice: tali studi però risultano approssimativi poiché utilizzano dei coefficienti di prestazione fissati a priori, indipendentemente dalle condizioni operative a cui sarà sottoposta la turbina, fornendo il coefficiente di potenza come dato di input.
Il modello sviluppato per SHYFEM invece è un modello ibrido 2D basato sulla teoria BEM: non sono presenti le pale nella griglia di calcolo ed il flusso viene rallentato applicando una frizione aggiuntiva al fondale. Tale frizione dipende dalle forze di cui le pale risentirebbero se fossero presenti, di conseguenza le forze sperimentate saranno il risultato di fattori come velocità relativa alla pala, coefficienti di portanza e resistenza che dipenderanno a loro volta dall’angolo di attacco; il coefficiente di potenza sarà dunque il dato di output che si otterrà in base alle condizioni di flusso cui è sottoposto il dispositivo. Diversamente da quanto fatto per ANSYS, in cui alle sole celle dell’anello attuatore si imponevano dei termini di sorgente di quantità di moto per rallentare il flusso, per SHYFEM la frizione aggiuntiva viene applicata sia agli elementi appartenenti all’anello attuatore sia agli elementi interni ad esso in modo da avere una frizione attenuata ma su una superficie più vasta, onde evitare effetti indesiderati dovuti ad elevati gradienti. Avendo svincolato l’area di produzione della turbina (zona dell’anello) dall’ubicazione della frizione si è reso necessario adottare dei metodi di pesatura della stessa: per ogni elemento di griglia la frizione dipenderà dalla distanza dell’elemento considerato dal centro della turbina.
97
Questo approccio consente di ottenere risultati prossimi al CFD ed anche al modello ibrido BEM-CFD utilizzato nel software ANSYS, garantendo però un minore onere computazionale e quindi risparmio di tempo notevole. La corrispondenza tra modello ibrido SHYFEM e modello ibrido ANSYS risulta verificata al variare del TSR, modificato andando ad agire sulla velocità di rotazione della turbina (velocità indisturbata del flusso fissata). Inoltre considerando l’ammontare complessivo dei termini di sorgente essi di poco si discostano (circa un 10%) dai risultati ottenuti con modello ibrido ANSYS ai diversi TSR: ciò assicura che, nonostante si sia disaccoppiata la zona di produzione di potenza dalla zona di applicazione della frizione, il bilancio energetico risulti comunque rispettato.
L’analisi di sensitività alla griglia evidenzia però come sia necessario avere una risoluzione adeguata in zona turbina ed anche prevedere in fase di creazione della griglia un anello preformato con inserimento di due circonferenze, per non riscontrare variazioni nelle prestazioni in base all’ubicazione del dispositivo, non trascurabili anche ad alte risoluzioni. Il modello è stato poi applicato ad una terna di turbine in due diverse configurazioni: i risultati ottenuti, se confrontati qualitativamente con la letteratura, mostrano come il modello ibrido SHYFEM sia in grado di cogliere le interazioni tra rotori ravvicinati, cosa non banale dato il comportamento altamente asimmetrico delle turbine ad asse verticale. Sviluppi futuri prevedono l’implementazione di un modello 3D per turbina ad asse verticale: ciò porterà il vantaggio di assicurare studi sull’impatto ambientale di farm di turbine ed inoltre potrà essere utilizzato per studi di previsione sulla producibilità dei dispositivi in particolari siti di interesse, essendo possibile in SHYFEM la riproduzione di batimetrie, correnti e maree così come si presentano nelle effettive condizioni operative. Manca inoltre un sotto-modello di simulazione della turbolenza: difatti non essendovi le pale nella griglia di calcolo, non si vengono a creare dei gradienti di velocità tali da indurre turbolenza. Sarà necessario dunque fornire un modello che riproduca tale aspetto poiché la vorticosità nelle scie di turbine ad asse verticale non è trascurabile e fa sì che la scia venga ri-energizzata rapidamente: tralasciare questo comportamento porterebbe ad errori nella progettazione di farm di turbine ad esempio distanziando eccessivamente i dispositivi tra loro.
98
Appendice A
In Appendice A si riporta la routine SHYFEM per il singolo dispositivo c******************************************************************* subroutine turbine use mod_hydro_vel use basin use mod_diff_visc_fric use evgeom use mod_nudging use mod_internal use mod_geom_dynamic use mod_depth use mod_bound_dynamic use mod_hydro_baro use mod_hydro use levels implicit none real ring_thick
integer, save, allocatable :: ring_ie(:),disc_ie(:) !array for ID of the elements belonging to the actuator ring, save is used to memorize the values wherever in the program and during simulation
real, save, allocatable :: ring_theta(:)
real theta,thetad !local value for the azimuthal angle in degrees of an element on the actuator ring integer app_ie !temporary value assigned to the element ID
real app_ang !temporary value assigned to the theta angle real dist,dist_2,dist_3,corda
real x,y !coordinates of the element barycentre
integer, save :: icount,disc_count !to count and check the elements found on the actuator ring real, save, allocatable ::disc_theta(:)
integer ie_prova
real r, f_Re, f_alpha,al_ds,al_in real, allocatable :: al_in0(:)
integer l,ie, n_ring, i, segno_rot, static_dyn_flag integer j,el,los
integer, save :: ie1Dcount,ie0_75Dcount,ie3Dcount,ie5Dcount integer, save :: ie_1D(1000),ie_0_75D(1000), ie_3D(1000) integer, save :: ic, ir,ie_5D(1000)
integer, save :: icall = 0
99 real W,W_n,W_t,W_n1,W_n2,W_t1,W_t2
real, allocatable :: alpha(:)
real Li, D, Re, uv,x1,x2,y1,y2,x4,y4,U_inf real pi, x0, y0, al_min, al_max, chord, nb real Cl_st, Cd_st,Cl_st2,Cd_st2, cl_fin(4001)
real aux3, aux4,aux5,alpha_aux,u_abs,yaux1,yaux2,aux9
real area_ele,area_frict,res,area_tot,area_aux,area_d! la risoluzione celle real, save :: h(30),e(5),B(5,30),G(5,30),area_losanga(20)
real, save :: theta_los(18) parameter(ring_thick=0.4)
parameter(pi=3.141592654, x0=95.9, y0=106.2, ro=998.2, r=3.) parameter(segno_rot=+1, mu=0.001003)
parameter(n_ring=300,om=1.575, chord=0.4, nb=3.) !enter +1 for counterclockwise rotation or -1 for clockwise rotation
parameter(static_dyn_flag=0) !enter 0 for dynamic condition or 1 for static condition parameter(U_inf=1.75)
allocate (alpha(0:n_ring)) allocate (al_in0(0:n_ring))
if(icall.eq.0) then !the identification of elements on the actuator ring is only for the first time step allocate (ring_ie(n_ring))
allocate (ring_theta(n_ring)) allocate (disc_ie(n_ring)) allocate (disc_theta(n_ring))
open(unit=55, file='dati.txt', status='old')
read(55,*) ir !ir number of rows (that are equal to the number of Reynolds values) read(55,*) ic !ic number of column (that are equal to the number of alpha values) read(55,*) (e(i), i=1, ir) !read Reynolds values
read(55,*) (h(i), i=1, ic) !read alpha values do i=1, ir
read(55,*) (B(i,j), j=1,ic) !read Cl values end do
do i=1, ir
read(55,*) (G(i,j), j=1,ic) !read Cd values end do
close(55)
open(unit=82,file='ID_Celle_disco.txt',status='unknown') icount=0
disc_count=0
do 10 ie=1,nel ! here starts the actuator ring elements identifiction
100 dist = sqrt((x-x0)**2 + (y-y0)**2)
aux3=r+ring_thick/2. aux4=r-ring_thick/2.
if(dist.lt.aux3.and.dist.gt.aux4)then
icount=icount+1 !a new element belonging to the actuator ring has been found ring_ie(icount)=ie
theta=(asin((x0-x)/dist))*180/pi !the function returns angles between -90 and +90 degrees
if((segno_rot*(y-y0)/dist).lt.0) then !to achieve angles in the second half of upwind and in the first half of downwind theta=180-theta
goto 99 endif
aux9=segno_rot*(y-y0)/dist
if(aux9.ge.0.and.(asin((x0-x)/dist)*180/pi).le.0)then !to achieve angles in the second half of downwind theta=theta+360
endif
endif !closes the operations to do when dist is found close to r 99 continue
ring_theta(icount)=theta
if(dist.lt.aux4)then ! here starts the internal disc elements identification disc_count=disc_count+1
disc_ie(disc_count)=ie write(82,*) ie, x, y
thetad=(asin((x0-x)/dist))*180/pi
if(((y-y0)/dist).lt.0) then !to achieve angles in the second half of upwind and in the first half of downwind thetad=180-thetad
goto 199 endif
if((y-y0)/dist.ge.0.and.(asin((x0-x)/dist)*180/pi).le.0)then !to achieve angles in the second half of downwind thetad=thetad+360
endif
199 continue
disc_theta(disc_count)=thetad endif
101 10 continue
do ie=1,nel
call baric(ie,x,y) !the subroutine calculates the coordinates of the element barycentre open(unit=78,file='ID_Celle_1D.txt',status='unknown')
open(unit=79,file='ID_Celle_075D.txt',status='unknown') open(unit=80,file='ID_Celle_3D.txt',status='unknown') open(unit=81,file='ID_Celle_5D.txt',status='unknown')
if(x.gt.77.and.x.lt.79)then !memorizzo gli ie degli elementi 1D a valle turbina ie1Dcount=ie1Dcount+1
ie_1D(ie1Dcount)=ie
write(78,*)ie_1D(ie1Dcount),ipev(ie_1D(ie1Dcount)),x,y end if
if(x.gt.67.and.x.lt.68)then !memorizzo gli ie degli elementi 0.75D a monte turbina ie0_75Dcount=ie0_75Dcount+1
ie_0_75D(ie0_75Dcount)=ie
write(79,*)ie_0_75D(ie0_75Dcount), + ipev(ie_0_75D(ie0_75Dcount)),x,y end if
if(x.gt.89.and.x.lt.90)then !memorizzo gli ie degli elementi 1D a valle turbina ie3Dcount=ie3Dcount+1
ie_3D(ie3Dcount)=ie
write(80,*)ie_3D(ie3Dcount),ipev(ie_3D(ie3Dcount)),x,y end if
if(x.gt.101.and.x.lt.103)then !memorizzo gli ie degli elementi 1D a valle turbina ie5Dcount=ie5Dcount+1 ie_5D(ie5Dcount)=ie write(81,*)ie_5D(ie5Dcount),ipev(ie_5D(ie5Dcount)),x,y end if end do if(icount.ne.n_ring) then
write(6,*) 'error: element count is not the expected one' write(6,*) icount,n_ring
102 open(unit=32,file='ID_celle_anello.txt',form='formatted', + status='unknown')
do 20 i=1,icount-1 !these two do-cycles ordinate both the arrays in ascending order of theta do j=i+1,icount if (ring_theta(i).gt.ring_theta(j)) then app_ang=ring_theta(i) app_ie=ring_ie(i) ring_theta(i)=ring_theta(j) ring_ie(i)=ring_ie(j) ring_theta(j)=app_ang ring_ie(j)=app_ie endif end do write(32,*) ring_ie(i),ipev(ring_ie(i)),ring_theta(i) 20 continue close(32)
!the two arrays are now ordinated in ascending order of theta moreover their values have been memorized to be available for all the successive time steps
open(unit=33, file='theta.txt', status='unknown') do i=1, icount call baric(ring_ie(i),x,y) write(33,*) ring_theta(i), x, y end do close(33) yaux1=y0-3.2-0.36 yaux2=y0-3.2
do i=1,18 ! here starts the calculation of the theta value of each of the 18 horizontal stripes in wich the turbine has been virtually divided yaux1=yaux1+0.36 yaux2=yaux2+0.36 do j=1,icount call baric(ring_ie(j),x,y) if(y.gt.yaux1.and.y.le.yaux2)then if(ring_theta(j).le.180)then
103 theta_los(i)=ring_theta(j) end if end if end do end do write(6,*)'theta_los',theta_los
end if !if reltive to first time step icall=0 icall=icall+1
if(icall.gt.4000) then ! the first 4000 icall are used to initialize the flow field al_max=0 al_min=0 do i=1,icount l=1 W_t1=ulnv(l,ring_ie(i))*cos(ring_theta(i)*pi/180) W_t2=(om*r+vlnv(l,ring_ie(i))*sin(ring_theta(i)*pi/180))
W_t=W_t1+segno_rot*W_t2 !tangential relative velocity W_n1=ulnv(l,ring_ie(i))*sin(ring_theta(i)*pi/180)
W_n2=-segno_rot*vlnv(l,ring_ie(i))*cos(ring_theta(i)*pi/180) W_n=W_n1+W_n2 !normal relative velocity W=sqrt(W_t**2+W_n**2)
alpha(i)=asin(W_n/W)*180/pi area_ele=12.*ev(10,ring_ie(i))
if(alpha(i).gt.al_max) then !calculation of maximum and minimum alpha values al_max=alpha(i) endif if(alpha(i).lt.al_min) then al_min=alpha(i) endif end do if(al_max.gt.89.or.al_min.lt.-89) then
write(6,*)'ERROR: alpha_max or alpha_min not acceptable' write(6,*) al_max, al_min
104 alpha(0)=0
foo=0 al_in0(:)=0
do i=1, icount !here starts the forces calculation for each actuator ring element call baric(ring_ie(i),x,y)
dist_2=abs(y0-y) l=1
W_t1=ulnv(l,ring_ie(i))*cos(ring_theta(i)*pi/180)
W_t2=(om*r+(vlnv(l,ring_ie(i)))*sin(ring_theta(i)*pi/180))
W_t=W_t1+segno_rot*W_t2 !tangential relative velocity W_n1=ulnv(l,ring_ie(i))*sin(ring_theta(i)*pi/180)
W_n2=-segno_rot*vlnv(l,ring_ie(i))*cos(ring_theta(i)*pi/180) W_n=W_n1+W_n2 !normal relative velocity W=sqrt(W_t**2+W_n**2) ! relative velocity module alpha(i)=asin(W_n/W)*180/pi if(abs(alpha(i)).lt.0.1)then alpha(i)=0 end if write(6,*)W_t,W_n,W,alpha(i) write(6,*)'u,v',ulnv(l,ring_ie(i)),vlnv(l,ring_ie(i)) write(6,*)'theta',ring_theta(i) al_in=alpha(i) al_in0=alpha(i-1) alpha_aux=alpha(i) Re=ro*om*r*chord/mu area_ele=12.*ev(10,ring_ie(i)) u_abs=sqrt(ulnv(l,ring_ie(i))**2+vlnv(l,ring_ie(i))**2) Cd_st2=0 uv=sqrt(utlnv(l,ring_ie(i))**2+vtlnv(l,ring_ie(i))**2) call static(alpha(i), Re, Cl_st2, Cd_st2, ir, ic, h, e, B, G) if(abs(ring_theta(i)).lt.180)then
call cl_dynamic(al_min, al_max,W,Re,al_in,al_in0, + chord,om,Cl_st,ir,ic,h,e,B,G,
105 + foo,icall,alpha_aux,al_ds)
write(6,*)'al_ds',al_ds,al_in
write(6,*)'foo,ring_theta(i)',foo,ring_theta(i)
Li=(0.5*foo*ro*chord*W**2)/area_ele !L and D are calculate per blade lenght unit in z direction D=(0.5*Cd_st2*ro*chord*W**2)/area_ele else Li=(0.5*Cl_st2*ro*chord*W**2)/area_ele D=(0.5*Cd_st2*ro*chord*W**2)/area_ele endif frict_1=(Li**2+D**2) frict_3=(sqrt(frict_1))*6.4*nb/(1.2732*ro*uv) frict=frict_3/(disc_count+icount) if(abs(y-y0).gt.2.9.and.abs(y-y0).lt.3.2)then rfricv(ring_ie(i))=frict else corda=2*sqrt(r**2-dist_2**2) rfricv(ring_ie(i))=frict*2*r/corda end if
open(unit=31, file='L_theta_partial.txt', status='unknown') write(31,*) icall,ring_theta(i),alpha(i),foo,Cl_st2,Cd_st2,
+ Li,D,W,area_ele,u_abs,rfricv(ring_ie(i)),utlnv(l,ring_ie(i)), + vtlnv(l,ring_ie(i)),uv
end do !end of actuator ring cycle ! here starts the internal disc elements cycle al_in0(:)=0 yaux1=y0-3.2-0.36 yaux2=y0-3.2 do j=1,18 yaux1=yaux1+0.36 yaux2=yaux2+0.36 do i=1,disc_count call baric(disc_ie(i),x,y) if(y.gt.yaux1.and.y.le.yaux2)then
106
if(x.le.x0)then !for upwind element the theta value is assigned according with theta of the actuator ring element belonging to the same stripe
disc_theta(i)=theta_los(j) end if dist_2=abs(y0-y) write(6,*)'disc_theta(i)',disc_theta(i) l=1 W_t1=ulnv(l,disc_ie(i))*cos(disc_theta(i)*pi/180) W_t2=(om*r+(vlnv(l,disc_ie(i)))*sin(disc_theta(i)*pi/180))
W_t=W_t1+segno_rot*W_t2 !tangential relative velocity W_n1=ulnv(l,disc_ie(i))*sin(disc_theta(i)*pi/180)
W_n2=-segno_rot*vlnv(l,disc_ie(i))*cos(disc_theta(i)*pi/180) W_n=W_n1+W_n2 !normal relative velocity W=sqrt(W_t**2+W_n**2) ! relative velocity module alpha(i)=asin(W_n/W)*180/pi write(6,*)'W_t,W_n,W,alpha(i)',W_t,W_n,W,alpha(i) if(abs(alpha(i)).lt.0.1)then alpha(i)=0 end if al_in=alpha(i) al_in0=alpha(i-1) alpha_aux=alpha(i) Re=ro*om*r*chord/mu area_ele=12.*ev(10,disc_ie(i)) u_abs=sqrt(ulnv(l,disc_ie(i))**2+vlnv(l,disc_ie(i))**2) Cd_st2=0 uv=sqrt(utlnv(l,disc_ie(i))**2+vtlnv(l,disc_ie(i))**2) call static(alpha(i), Re, Cl_st2, Cd_st2, ir, ic, h, e, B, G) if(abs(disc_theta(i)).lt.180)then
call cl_dynamic(al_min, al_max,W,Re,al_in,al_in0, + chord,om,Cl_st,ir,ic,h,e,B,G,
+ foo,icall,alpha_aux,al_ds)
write(6,*)'foo,disc_theta(i)',foo,disc_theta(i)
107 D=(0.5*Cd_st2*ro*chord*W**2)/area_ele else Li=(0.5*Cl_st2*ro*chord*W**2)/area_ele D=(0.5*Cd_st2*ro*chord*W**2)/area_ele end if frict_1=(Li**2+D**2) frict_3=(sqrt(frict_1))*6.4*nb/((icount+disc_count)*ro*uv) if(abs(y-y0).gt.2.9.and.abs(y-y0).lt.3.2)then rfricv(disc_ie(i))=frict_3/1.2732 else corda=2*sqrt(r**2-dist_2**2) rfricv(disc_ie(i))=frict_3*2*r/(corda*1.2732) endif
open(unit=41, file='L_theta_full.txt', status='unknown') write(41,*) icall,disc_theta(i),alpha(i),foo,Cl_st2,Cd_st2, + Li,D,W,area_ele,u_abs,rfricv(disc_ie(i)),utlnv(l,disc_ie(i)), + vtlnv(l,disc_ie(i)),uv
else ! if the element doesn’t belong to the considered stripe goto 154
end if
154 continue
end do !end of the cycle on internal disc elements end do ! end of the cycle on stripes
163 continue
open(unit=51, file='rfricv.txt', status='unknown') do j=1,disc_count
write(51,*)icall,j,rfricv(disc_ie(j))!,utlnv(l,disc_ie(j)), end do
102 continue
else !reltive to icall.lt.4000 goto 114
end if !reltive to icall.lt.4000 114 continue
108 end
!c**************************************************** !c SUBROUTINE FOR STATIC COEFFICIENT
!c****************************************************
subroutine static(alpha, Re, Cl_st, Cd_st, ir, ic, h, e, B, G) !subroutine necessary to obtain the static values of lift and drag coefficients
implicit none !input values are alpha and Reynolds values, output values are Cl and Cd static real h(30), e(5), B(5,30), G(5,30), alpha, Re
real, intent(out):: Cl_st, Cd_st
real f_Re, f_alpha, Cl, Cd, angolo, Cl1, Cl2, Cl3 real Cd1, Cd2, Cd3
integer j, t, ir, ic, segno angolo=abs(alpha) if (abs(alpha).eq.alpha) then segno=+1 else segno=-1 endif if (angolo.gt.180)then angolo=180 endif
if(Re.gt.e(5))then !this two "if" are usefull to avoid having values of Reynolds out of the range in the text file Re=e(5) endif if(Re.lt.e(1))then Re=e(1) endif do j= 1, ic if (angolo.ge.h(j-1).and.angolo.lt.h(j).or. + angolo.gt.h(j-1).and.angolo.le.h(j))then f_alpha=(angolo-h(j-1))/(h(j)-h(j-1)) do t= 1, ir if (Re.ge.e(t-1).and.Re.lt.e(t).or. + Re.gt.e(t-1).and.Re.le.e(t))then
109 f_Re=(Re-e(t-1))/(e(t)-e(t-1)) Cl1=B(t-1,j-1)*(1-f_Re)*(1-f_alpha) Cl2=B(t,j-1)*f_Re*(1-f_alpha)+B(t-1,j)*(1-f_Re)*f_alpha