2013-07-01 13 views
8

Zauważyłem, że wyniki listy wyjściowej z listą write(*,*) w Fortranie zależą od kompilatora.Unikaj nowego wiersza w polecanych listach wyjściowych za pomocą kompilatora Intel Fortran

Rzeczywiście, z kodem:

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 kompilator ifort daje standardową wyjście uszkodzony przez nową linię:

3.16227769851685  4.47213602066040  5.47722530364990  
    6.32455539703369  7.07106781005859  

podczas gfortran daje równoważne wyniki jeden wiersz:

3.1622776601683795  4.4721359549995796  5.4772255750516612  6.3245553203367590  7.0710678118654755  

Myślę, że ifort zapisuje maksymalnie 3 elementy w linii (przy pływających liczbach rzeczywistych). Czy istnieje sposób na to, aby wyjście ifort było jak gfrotran, czyli unikanie znaku nowej linii? Idealnie chciałbym zachować instrukcje wyjściowe w postaci listy (*,*), więc szukam czegoś w rodzaju opcji kompilatora lub tak, jeśli w ogóle.

Odpowiedz

5

Od Verson 14, Intel Fortran kompilator ma opcję -no-wrap-margines.

Domyślnie rekord jest pakowany po 80 znaków; użycie -no-wrap-margin usuwa to zachowanie.

+0

Uwaga: mogą występować problemy http://stackoverflow.com/questions/24492202/iforts-no-wrap-margin-works-only-partially, ale wciąż najlepsza odpowiedź – Mark

2

Sprawdź w deskryptorach edycji w ulubionej książce Fortran lub w dokumentacji online. Możesz użyć specyfikatora fmt w instrukcji write, aby określić deskryptory edycji. Na przykład:

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

powinien wypisać coś podobnego do: (w dowolnym formacie) Wyjście

3.1623 4.4721 5.4772 6.3246 7.0711 
+0

dziękuję, ale nadal mam na myśli instrukcję "darmowego formatu". Czasami (szczególnie w fazie debugowania, kiedy potrzebne są szybkie wyjścia) rozmiar tablicy zależy od parametrów, więc formatowanie jest irytującym zadaniem. – gluuke

+1

Można użyć specyfikatora 'FMT' w połączeniu z pętlą' DO' i 'ADVANCE =" nie "'. Może to być dodatkowe kilka linii kodu, ale jeśli jest to, czego chcesz ... –

+1

@gluuke OK, czego szukasz, to wyjście z listingu, a nie format wolny. Odpowiednio zredagowałem twoje pytanie. – milancurcic

7

Nr Lista skierowane zapewnia wygodę, ale zrezygnować z kontroli. Różne aspekty danych wyjściowych są nieokreślone i mogą być wybrane do kompilatora. Jeśli chcesz mieć pełną kontrolę, musisz użyć sformatowanego wyjścia.