#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
}}
のようになるので注意.

Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes