Skip to content

Instantly share code, notes, and snippets.

@cenit
Created November 20, 2017 11:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cenit/8471b719fb2273a749ab47a901818f79 to your computer and use it in GitHub Desktop.
Save cenit/8471b719fb2273a749ab47a901818f79 to your computer and use it in GitHub Desktop.
equivalence tests for Fortran
program equivalence
implicit none
integer, parameter :: sp = selected_real_kind(6, 37)
integer, parameter :: dp = selected_real_kind(15, 307)
integer, parameter :: dp_int = selected_int_kind(16)
integer, parameter :: hp_int = selected_int_kind(4)
integer, parameter :: qp = selected_real_kind(33, 4931)
character, dimension(8) :: res_string
real(dp) :: seventh_component
real(sp) :: weight
integer(hp_int) :: charge
integer(hp_int) :: particle_id
EQUIVALENCE (charge,res_string(1)),(particle_id,res_string(3)),(weight,res_string(5)),(seventh_component,res_string(1))
res_string(1) = char(0)
res_string(2) = char(1)
res_string(3) = char(0)
res_string(4) = char(1)
res_string(5) = char(0)
res_string(6) = char(0)
res_string(7) = char(0)
res_string(8) = char(1)
print *, 'Writing after res_string setup'
print *, seventh_component, weight, charge, particle_id
seventh_component = 0
print *, 'Writing after seventh_component setup'
print *, seventh_component, weight, charge, particle_id
weight = 2.35098870E-38
charge = 256
particle_id = 256
print *, 'Writing after single elements setup'
print *, seventh_component, weight, charge, particle_id
end program equivalence
@albz
Copy link

albz commented Dec 6, 2017

OK, ho capito, io lo avevo fatto in maniera diversa.

Io li accoppiavo così:

real(kind=16) :: whole
real(kind=8) :: first(2)
integer(kind=4) :: second(2)
integer :: P_ncmp=3
equivalence(whole,first)
equivalence(first(2),second)

ma é decisamente meno pratico e più faticoso.
Adesso vedo di capire, e settimana prossima cerchiamo di mettere tutto assieme.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment