構造体配列の作成

はじめに

複数の2次元領域で同じ変数を扱う場合は,領域数をnとすると

!-- 宣言部
real*8, allocatable :: z(:,:,:)
!***** ...
!-- 配列の作成
allocate(z(ny,nx,n))

ということをしても問題ないが,各領域の要素の数(=ny,nx)が領域ごとに大きく異なる場合は無駄が多い.
構造体かつ動的配列を作成することで,この問題を解消しようということがこれの目的.

方法

!-- 構造体変数の定義
type GEO2D
    real*8, allocatable :: eta(:,:) !構造体の中の変数を動的配列にする
end type GEO2D
!-- 宣言
type(GEO2D), allocatable :: geo(:) !geoという変数の名前をつける,これも動的
!-- 配列の作成
allocate(geo(nregion)) ! 領域の数だけgeoの配列を作成
do k=1,nregion
    allocate(geo(k)%eta(ny(k),nx(k))) !領域それぞれでallocate
enddo

nyやnxを構造体の中に入れても良い.その場合参照するときは

geo(k)%nx

のようになるので注意.


Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2018-06-15 (Fri) 09:27:25 (2140d)