codice:
program giro_forze
implicit none
integer i, j, k
integer a
double precision acc(12733), ang(12733)
double precision acci, angi
double precision mod, theta
double precision r(37,25,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 post 01.txt',status='old')
read(22,*)(r(1,1,k),k=1,5)
do k=1,5
r(1,2,k)=r(1,1,k)
r(1,3,k)=r(1,1,k)
end do
do j=4,25
read(22,*)(r(1,j,k),k=1,5)
end do
do i=2,36
do j=1,25
read(22,*)(r(i,j,k),k=1,5)
end do
end do
read(22,*)(r(37,1,k),k=1,5)
do k=1,5
r(37,2,k)=r(37,1,k)
r(37,3,k)=r(37,1,k)
end do
do j=4,25
read(22,*)(r(37,j,k),k=1,5)
end do
open(23,file='04 - ciclo carico post 01.txt',status='unknown')
23 format(1x,i8,7(3x,f12.3))
do i=1,12733
acci=acc(i)
angi=ang(i)
if (angi.lt.0.0d+00) then
theta=angi+1.8d+02
mod=-acci
else
theta=angi
mod=acci
end if
a=theta/5
a=a+1
j=1
100 continue
if ((r(a,j,2).le.mod).and.(r(a,j+1,2).gt.mod)) then
x1=r(a,j,3)
x2=r(a,j+1,3)
y1=r(a,j,4)
y2=r(a,j+1,4)
z1=r(a,j,5)
z2=r(a,j+1,5)
mod1=r(a,j,2)
mod2=r(a,j+1,2)
theta1=r(a,j,1)
else
j=j+1
go to 100
end if
j=1
200 continue
if ((r(a+1,j,2).le.mod).and.(r(a+1,j+1,2).gt.mod)) then
x3=r(a+1,j,3)
x4=r(a+1,j+1,3)
y3=r(a+1,j,4)
y4=r(a+1,j+1,4)
z3=r(a+1,j,5)
z4=r(a+1,j+1,5)
mod3=r(a+1,j,2)
mod4=r(a+1,j+1,2)
theta2=r(a+1,j,1)
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