Ciao a tutti.

Non sono un esperto ma ho sempre usato fortran77 per fare codici di calcolo ed evitarmi lavoro.
Al momento sono alle prese con un codice che legge 12733 coppie di dati...ogni coppia è l'input per l'identificazione di alcuni riferimenti che vengono interpolati per ottenere un valore legato appunto a quella coppia.

La compilazione non da problemi ma durante l'esecuzione si blocca...il file di output è scritto ed i dati corrispondono, ma ad un certo punto la scrittura viene interrotta (addirittura l'ultimo dato scritto è incolpleto).

Di solito uso Force come compilatore. Ho provato ad usare Silverfrost e mi si blocca ugualmente (anche se ad una punto leggermente diverso). Silverfrost mi da Runtime Error dicendo che c'è un Floating Point co-processor fault non so cosa sia.

Quì di seguito metto il codice in una versione semplificata che lavora senza subroutine e con un solo file di input (si blocca comunque ma evita di postarvi inutili reiterazioni di subroutine che uso per fare calcoli su più fronti):

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.

Cos'è che non funziona?? Lavoro in Win7...ho anche già provato a modificare la compatibilità dell'.exe creato per WinXPsp3 ed esecuzione come amministratore (non si sa mai) ma non funzia. Specifico inoltre che con altre decine di codici non ho mai avuto problemi...

Grazie a chiunque mi voglia rispondere!