Articles of fortran

modifica delle dimensioni dell’array in fortran

Esistono fondamentalmente due modi per passare gli array a una subroutine in Fortran 90/95: PROGRAM ARRAY INTEGER, ALLOCATABLE :: A(:,:) INTEGER :: N ALLOCATE(A(N,N)) CALL ARRAY_EXPLICIT(A,N) ! or CALL ARRAY_ASSUMED(A) END PROGRAM ARRAY SUBROUTINE ARRAY_EXPLICIT(A,N) INTEGER :: N INTEGER :: A(N,N) ! bla bla END SUBROUTINE ARRAY_EXPLICIT SUBROUTINE ARRAY_ASSUMED(A) INTEGER, ALLOCATABLE :: A(:,:) N=SIZE(A,1) ! […]

Chiamando una subroutine FORTRAN da C

Sto cercando di chiamare una funzione FORTRAN da C Le mie domande sono: Se fortRoutine è il nome della mia subroutine fortran, allora lo chiamo da C come fortRoutine_ . Se fortRoutine contiene solo un argomento dell’array di caratteri, allora posso passare così: fortRoutine_(“I am in fortran”); Durante la chiamata alle subroutine FORTRAN, quando dovrei […]

Fortran è più facile da ottimizzare rispetto a C per i calcoli pesanti?

Di tanto in tanto leggo che Fortran è o può essere più veloce di C per calcoli pesanti. È proprio vero? Devo ammettere che conosco a malapena Fortran, ma il codice Fortran che ho visto finora non mostra che il linguaggio abbia caratteristiche che C non ha. Se è vero, per favore dimmi perché. Per […]

Come passare gli array allocabili alle subroutine in Fortran

Il seguente codice restituisce un errore di segmentazione perché l’array allocabile che sto cercando di passare non viene riconosciuto correttamente (la dimensione restituisce 1, quando dovrebbe essere 3). In questa pagina (http://www.eng-tips.com/viewthread.cfm?qid=170599) un esempio simile sembra indicare che dovrebbe funzionare correttamente in F95; il mio file di codice ha un’estensione .F90, ma ho provato a […]

Invio di array 2D in Fortran con MPI_Gather

Voglio inviare 2d blocchi di dati usando MPI_GATHER.Ad esempio ho array 2×3 su ciascun nodo e voglio array 8×3 su root, se ho 4 nodes. per gli array 1d MPI_GATHER ordina i dati in base ai ranghi MPI ma per i dati 2d crea confusione !. Qual è il modo pulito per mettere in ordine […]

Perché gli elementi di una matrice sono formattati come zeri quando vengono moltiplicati per 1/2 o 1/3?

Sto scrivendo gli elementi di un array come segue: write(6,'(i4,200(1x,e15.7))’)Jtot0, (a*PJjv(i,Jtot0,j,iv),i=1,nenerdif,100) dove a è una costante. Tuttavia, quando questa costante è uguale a 1/2 o 1/3 l’output è zero e se è uguale a 1, ogni cosa va bene. Gli elementi dell’array sono real*8 . Come posso superare questo, dando che sono obbligato a moltiplicare […]

Passaggio della funzione esterna di più variabili in funzione di una variabile in Fortran

Sto cercando di utilizzare le routine in QUADPACK per eseguire l’integrazione numerica. Le routine si aspettano che le funzioni vengano passate come REAL,EXTERNAL , quindi non ho la libertà di usare i puntatori o qualsiasi altra cosa. È ansible aliasare una funzione f(x,a,b,…) come una funzione f(x) per la routine che si aspetta solo una […]

Chiamare codice a 32 bit dal processo a 64 bit

Ho un’applicazione che stiamo cercando di migrare a 64 bit da 32 bit. È .NET, compilato usando i flag x64. Tuttavia, abbiamo un numero elevato di DLL scritte in FORTRAN 90 compilato per 32 bit. Le funzioni nelle DLL FORTRAN sono abbastanza semplici: si inseriscono i dati, si estraggono i dati; nessun stato di alcun […]

Calcolo del prodotto incrociato di due vettori in Fortran 90

Vorrei calcolare il prodotto incrociato di due vettori in Fortran 90. Ad esempio, a parole, il prodotto incrociato di (1, 2, 3) e (4, 5, 6) risulta essere (-3, 6, -3) in coordinate cartesiane. Ho scritto il seguente codice (programma principale seguito dalla definizione della funzione): PROGRAM crosstest IMPLICIT NONE INTEGER, DIMENSION(3) :: m, n […]

Fortran formato di file non formattato

Non capisco il formato dei file non formattati in fortran. Per esempio: open (3,file=filename,form=”unformatted”,access=”sequential”) write(3) matrix(i,:) emette una colonna di una matrice in un file. Ho scoperto che riempie il file con 4 byte su entrambe le estremità, tuttavia non capisco perché, o come controllare questo comportamento. C’è un modo per rimuovere il padding? Grazie