Sto cercando di leggere un codice Fortran, ma non posso determinare cosa fa il %
(segno percentuale).Cosa significa "%" in Fortran?
E 'in una linea come:
x = a%rho * g * (-g*a%sigma + m%gb * m%ca * (1.6 * a%rho+g))
Che cosa fa?
Sto cercando di leggere un codice Fortran, ma non posso determinare cosa fa il %
(segno percentuale).Cosa significa "%" in Fortran?
E 'in una linea come:
x = a%rho * g * (-g*a%sigma + m%gb * m%ca * (1.6 * a%rho+g))
Che cosa fa?
In Fortran 90 consentono di creare strutture come in C++. Funziona fondamentalmente come l'operatore punto (.).
Da http://www.lahey.com/lookat90.htm:
Structures (tipi derivati)
È possibile raggruppare i dati utilizzando tipi derivati. Ciò consente agli utenti di combinare tipi intrinseci (inclusi array e puntatori) in nuovi tipi ai quali è possibile accedere ai singoli componenti utilizzando il segno di percentuale come delimitatore. (I tipi derivati sono noti come record in VAX Fortran.) ! Esempio utilizzando tipi e moduli derivati.
module pipedef
type pipe ! Define new type 'pipe', which
real diameter ! is made up of two reals, an
real flowrate ! integer, and a character.
integer length
character(len=10) :: flowtype
end type pipe
end module pipedef
program main
use pipedef ! Associate module pipedef with main.
type(pipe) water1, gas1 ! Declare two variables of type 'pipe'.
water1 = pipe(4.5,44.8,1200,"turbulent") ! Assign value to water1.
gas1%diameter = 14.9 ! Assign value to parts
gas1%flowrate = 91.284 ! of gas1.
gas1%length = 2550
gas1%flowtype = 'laminar'
.
.
.
end program
È un identificatore di parte per un tipo derivato. Controllalo. http://www.lahey.com/lookat90.htm
%
come un token ha un certo numero di utilizzi strettamente correlati. Come ha dimostrato Fortran, questi usi sono aumentati di numero.
Tornando a Fortran 90 e l'utilizzo visto nella domanda, %
viene utilizzato per accedere ai componenti di un tipo derivato. Considerare il tipo derivato a_t
con oggetto a
di questo tipo:
type a_t
real rho, sigma
end type
type(a_t) a
I componenti rho
e sigma
di a
si accede mediante a%rho
e a%sigma
. Come si può vedere nella domanda, questi componenti possono essere utilizzati nelle espressioni (come a%rho * g
) o possono essere il lato sinistro di un incarico (a%rho=1.
).
Un componente di un tipo derivato può essere esso stesso un oggetto di tipo derivato:
type b_t
type(a_t) a
end type
type(b_t) b
e quindi possono esserci diverse partite di %
in un singolo riferimento:
b%a%rho = ...
Qui, la componente rho
dell'oggetto derivato a
, che è esso stesso un componente di b
, è l'obiettivo dell'assegnazione. Si può vedere un conteggio abbastanza orribile di %
s in un riferimento, ma i riferimenti alle parti sono sempre risolti da sinistra a destra.
Venendo a Fortran 2003 si vede quindi %
relative ai tipi di derivati in un paio di altri modi:
consideri il tipo derivato
type a_t(n)
integer, len :: n=1
real x(n)
contains
procedure f
end type
type(a_t(2)) a
L'oggetto a
ha un unico parametro di lunghezza-type e una procedura di bound. In un'espressione come
x = a%f()
il legame f
dell'oggetto tipo derivato viene fatto riferimento.
Il parametro n
di a
potrebbe essere fatto riferimento come
print *, a%n, SIZE(a%x)
quanto il componente x
può fare riferimento.
Infine, dal Fortran 2008 %
possono essere utilizzati per accedere alle parti reale e immaginaria di un oggetto complesso:
complex x, y(3)
x%im = 1.
x%re = 0.
y = (2., 1.)
print *, y(2)%im+y(3)%re
dispiace ma come può una risposta descrivere qualcosa fuori un'altra lingua, che cosa succede se qualcuno non è familiare con operatori C++ o punto? –
È semplicemente un modo per accedere a una variabile che è interna a un modulo. Quindi, come nell'esempio, è possibile modificare direttamente una singola variabile dall'oggetto "gas1" senza dover utilizzare l'intero costruttore _i.e._ senza utilizzare tutte le variabili necessarie ('water1 = pipe (4.5,44.8,1200, "turbolenta") '). – Garini