2
Fortran內部函數transfer
可用於將派生類型轉換爲實數或整數數組。當在依賴原始類型(整數,實數等)的數組進行持久化的遺留系統中工作時,這可能非常有用。確定內存中的Fortran派生類型大小
下面的代碼運行至少在ifort
和gfortran
和一個簡單的派生類型例如轉換爲整數陣列(與溶液更新):
program main
implicit none
integer, parameter :: int_mem_size = storage_size(1)
type subtype
integer a
double precision b
end type subtype
type :: mytype
integer :: foo
double precision :: bar
type(subtype) :: some_type
end type
type(mytype) :: my_var
type(subtype) :: my_subtype
! Old version: integer :: x(30)
integer, allocatable :: x(:)
integer :: mem_size
!Allocate array with required size
mem_size = storage_size(my_var)
allocate(x(mem_size/int_mem_size))
my_subtype%a = 1
my_subtype%b = 2.7
my_var%foo = 42
my_var%bar = 3.14
my_var%some_type = my_subtype
write(*,*) "transfering..."
x = transfer(my_var, x)
write(*,*) "Integer transformation:", x
end program main
在我的PC,這是輸出(此結果是至少依賴於平臺):
transfering...
Integer transformation: 42 0 1610612736 1074339512
999 0 -1610612736 1074108825
我的問題是,我「猜測」,一個30元件長整型陣列足夠大,以存儲該數據結構。有什麼方法可以確定數組需要多大才能存儲整個數據結構?
這似乎是伎倆,謝謝!我已經更新了示例代碼以反映任何感興趣的人的解決方案 – Paul