#author("2018-07-26T00:26:19+09:00","default:Miyashita","Miyashita") #author("2019-11-06T15:34:37+09:00","default:Miyashita","Miyashita") *構造体配列の作成 [#b4b988cf] **はじめに [#s20e628a] 複数の2次元領域で同じ変数を扱う場合は,領域数をnとすると #codeprettify(lang-fortran){{ !!! 宣言部 !-- 宣言部 real*8, allocatable :: z(:,:,:) !***** ... !!! 配列の作成 !-- 配列の作成 allocate(z(ny,nx,n)) }} ということをしても問題ないが,各領域の要素の数(=ny,nx)が領域ごとに大きく異なる場合は無駄が多い.~ 構造体かつ動的配列を作成することで,この問題を解消しようということがこれの目的. **方法 [#p48f8c3e] #codeprettify(lang-fortran){{ !!! 構造体変数の定義 !-- 構造体変数の定義 type GEO2D real*8, allocatable :: eta(:,:) !構造体の中の変数を動的配列にする end type GEO2D !!! 宣言 !-- 宣言 type(GEO2D), allocatable :: geo(:) !geoという変数の名前をつける,これも動的 }} #codeprettify(lang-fortran){{ !!! 配列の作成 !-- 配列の作成 allocate(geo(nregion)) ! 領域の数だけgeoの配列を作成 do k=1,nregion allocate(geo(k)%eta(ny(k),nx(k))) !領域それぞれでallocate enddo }} nyやnxを構造体の中に入れても良い.その場合参照するときは #codeprettify(lang-fortran){{ geo(k)%nx }} のようになるので注意.