codice:
program giro_forze
implicit none
integer i, j
double precision acc(12733), ang(12733)
double precision acci, angi
double precision mod, theta
double precision r(921,5)
double precision mod1, mod2, mod3, mod4
double precision x1, x2, x3, x4
double precision y1, y2, y3, y4
double precision z1, z2, z3, z4
double precision theta1, theta2
double precision xm1, xm2
double precision ym1, ym2
double precision zm1, zm2
double precision x, y, z
open(21,file='01 - Dati Giro.txt',status='old')
read(21,*)
do i=1,12733
read(21,*)acc(i),ang(i)
end do
open(22,file='02 - rette carico ant 04.txt',status='old')
do i=1,921
read(22,*)(r(i,j),j=1,5)
end do
open(23,file='04 - ciclo carico ant 04.txt',status='unknown')
23 format(1x,i8,3(f12.3,3x))
do i=1,12733
acci=acc(i)
angi=ang(i)
if (angi.lt.0.0d+00) then
theta=angi+1.8d+00
mod=-acci
else
theta=angi
mod=acci
end if
j=1
100 continue
if ((r(j,1).le.theta).and.((r(j,1)+5.0d+00).gt.theta)) then
if ((r(j,2).le.mod).and.(r(j+1,2).gt.mod)) then
x1=r(j,3)
x2=r(j+1,3)
y1=r(j,4)
y2=r(j+1,4)
z1=r(j,5)
z2=r(j+1,5)
mod1=r(j,2)
mod2=r(j+1,2)
theta1=r(j,1)
else
j=j+1
go to 100
end if
else
j=j+1
go to 100
end if
j=24
200 continue
if (((r(j,1)-5.0d+00).le.theta).and.(r(j,1).gt.theta)) then
if ((r(j,2).le.mod).and.(r(j+1,2).gt.mod)) then
x3=r(j,3)
x4=r(j+1,3)
y3=r(j,4)
y4=r(j+1,4)
z3=r(j,5)
z4=r(j+1,5)
mod3=r(j,2)
mod4=r(j+1,2)
theta2=r(j,1)
else
j=j+1
go to 200
end if
else
j=j+1
go to 200
end if
xm1=x1+(x2-x1)/(mod2-mod1)*(mod-mod1)
xm2=x3+(x4-x3)/(mod4-mod3)*(mod-mod3)
x=xm1+(xm2-xm1)/(theta2-theta1)*(theta-theta1)
ym1=y1+(y2-y1)/(mod2-mod1)*(mod-mod1)
ym2=y3+(y4-y3)/(mod4-mod3)*(mod-mod3)
y=ym1+(ym2-ym1)/(theta2-theta1)*(theta-theta1)
zm1=z1+(z2-z1)/(mod2-mod1)*(mod-mod1)
zm2=z3+(z4-z3)/(mod4-mod3)*(mod-mod3)
z=zm1+(zm2-zm1)/(theta2-theta1)*(theta-theta1)
write(23,23)i,x,y,z
end do
close(21)
close(22)
close(23)
stop
end
In questa versione il file smette di essere stampato per i=551, mentre nella versione con subroutine (che ha molti più file di input, output e continui richiami di 3 subroutine) tutti i file di output si bloccano ad i=372. La riga di output 552 (o 373) riportano un valore troncato oltre il quale non avviene più la stampa dei dati.