2013-07-01 9 views
8

Ho notato i risultati dell'output di lista write(*,*) in Fortran dipende dal compilatore.Evita newline nell'output lista-diretto con il compilatore Intel Fortran

Infatti, con il codice:

program one 
real(8), dimension(5):: r1 
do i=1,5 
    r1(i)=sqrt(i*10.0) 
end do 
write(*,*) (r1(i), i =1,5) 
end program one 

Intel compilatore ifort dà uscita standard interrotta da una nuova riga:

3.16227769851685  4.47213602066040  5.47722530364990  
    6.32455539703369  7.07106781005859  

mentre gfortran dà l'equivalente risultato una riga:

3.1622776601683795  4.4721359549995796  5.4772255750516612  6.3245553203367590  7.0710678118654755  

Penso che ifort stia scrivendo al massimo 3 elementi per riga (quando i numeri reali sono fluttuanti). Esiste un modo per rendere l'output ifort come gfrotran, ad esempio evitare la newline? Idealmente, mi piacerebbe mantenere le istruzioni (*,*) di output diretto alle liste, quindi sto cercando qualcosa come un'opzione per il compilatore o così, se presente.

risposta

5

Dal Verson 14, Intel compilatore fortran ha la possibilità -no-wrap-margine.

Per impostazione predefinita, il record viene spostato dopo 80 caratteri; l'uso di -no-wrap-margin rimuove questo comportamento.

+0

Nota possono esserci dei problemi http://stackoverflow.com/questions/24492202/iforts-no-wrap-margin-works-only-partially ma resta la migliore risposta – Mark

2

Esaminare i descrittori di modifica nel libro Fortran preferito o nella documentazione online. È possibile utilizzare l'identificatore fmt nell'istruzione write per specificare i descrittori di modifica. Per esempio:

write(*,fmt='(5(F6.4,3X))') (r1(i), i =1,5) 

dovrebbe produrre qualcosa di simile a:

3.1623 4.4721 5.4772 6.3246 7.0711 
+0

grazie, ma intendo ancora l'istruzione "formato libero". A volte (specialmente nella fase di debug, quando sono necessarie uscite rapide) la dimensione dell'array dipende dal parametro e quindi la formattazione è un'attività noiosa. – gluuke

+1

È possibile utilizzare l'identificatore 'FMT' in congiunzione con un ciclo' DO' e 'ADVANCE =" no "'. Potrebbe essere qualche riga di codice in più, ma se è quello che vuoi ... –

+1

@gluuke OK, quello che stai cercando è un output diretto alle liste, non un formato libero. Ho modificato la tua domanda di conseguenza. – milancurcic

7

No. List-directed (formato libero) Uscita fornisce la convenienza, ma si dà il controllo. Vari aspetti dell'output non sono specificati e possono essere scelti dal compilatore. Se si desidera il pieno controllo, è necessario utilizzare l'output formattato.

Problemi correlati