Takuya Miyashita
This site
Web
Start:
*namelistの使用方法 [#vb2cc579]
#contents
**namelistって何 [#c8d81fcc]
外部ファイルからのインプットが多少楽になる形式.~
read 文を複数行にわたって書かなくて済む.~
~
**基本的な使い方 [#s42f3e68]
***本文 [#d3f53d9f]
以下のように変数及び namelist の種類を宣言する.
#codeprettify(lang-fortran){{
integer nx,ny,nz
real*8 dx,dy,dz
character*128 listname
character*128 fnamein1 ,fnamein2
character*128 fnameout1,fnameout2
namelist /dim/nx,ny,nz,dx,dy,dz
namelist /filenamein /fnamein1 ,fnamein2
namelist /filenameout/fnameout1,fnameout2
}}
namelist と書いてある文の 2つの "/" の間の文字列は,namel...
2つ目の "/" 以降には,そのグループに含まれる変数名を書く.~
読み込む際は read のあとに 'nml=(namelistの名前)' をつけ...
#codeprettify(lang-fortran){{
!! namelistが記されたファイルを開く
open(11,file=listname,status='old',action='read')
!! 読む
read(11,nml=dim)
read(11,nml=filenamein)
read(11,nml=filenameout)
!! 閉じる
close(11)
}}
こうすると,namelist にある変数が1行の read によって読み...
***namelistのファイル [#p2d00ef1]
各値を設定するファイルには,以下のように記述する.
#codeprettify(lang-fortran){{
&dim
nx = 100 !コメントも可
ny = 150
nz = 20
dx = 5.0d0
dy = 5.0d0
dz = 10.0d0
/
&filenamein
fnamein1 = "./input/foobar.dat"
fnamein2 = "./input/hogehoge.in"
/
&filenameout
fnameout1 = "./output/foobar.csv"
fnameout2 = "./output/hogehoge.dat"
/
}}
コメント行も挿入できるし,= の間にスペースがあっても良い.~
ファイル名等を指定するcharacter型の場合は,クォーテーショ...
~
~
***注意! [#zdff83d0]
対応可能なフォーマットがコンパイラによって異なる.
例えば,
#codeprettify(lang-fortran){{
& dim
}}
のように & とリスト名の間にスペースが入ることは gfortran ...
#codeprettify(lang-fortran){{
ny = 150,
}}
のように行末カンマが必須なこともある.~
~
さらにさらに,gfortran (v12時点)では, namelist のファ...
#codeprettify{{
/
}}
が最終行だとエラーになる.後ろに1行空行を入れるだけでエラ...
ファイル末尾が "/" 前者の場合に下記のようなエラーが出て,...
#codeprettify{{
At line 47 of file hoge.f90 (unit = 11, file = 'hoge_nam...
Fortran runtime error: End of file
Error termination. Backtrace:
}}
~
**文字列を使用するとき [#i92783a0]
namelistで読んだchatacter変数を使用するときは,
#codeprettify(lang-fortran){{
open(12,file=trim(fnamein1),status='old')
open(51,file=trim(fnameout1),status='replace')
}}
のように trim を使う.trim がないと宣言した文字列の幅にな...
~
**getargを使ってnamelistを読んでみる [#pa0086d2]
namelistのファイル名をnamelist.in,実行ファイル名をfoobar...
#codeprettify(lang-fortran){{
./foobar namelist.in
}}
と実行できるようにするには,getarg を使ってコードを下記の...
#codeprettify(lang-fortran){{
if(iargc()>0)then
call getarg(1,listname)
write(*,*)trim(listname)
open(11,file=trim(listname),status='old')
read(11,nml=fname_input)
read(11,nml=fname_output)
close(11)
else
write(*,*) 'No input argument'
stop
end if
}}
End:
*namelistの使用方法 [#vb2cc579]
#contents
**namelistって何 [#c8d81fcc]
外部ファイルからのインプットが多少楽になる形式.~
read 文を複数行にわたって書かなくて済む.~
~
**基本的な使い方 [#s42f3e68]
***本文 [#d3f53d9f]
以下のように変数及び namelist の種類を宣言する.
#codeprettify(lang-fortran){{
integer nx,ny,nz
real*8 dx,dy,dz
character*128 listname
character*128 fnamein1 ,fnamein2
character*128 fnameout1,fnameout2
namelist /dim/nx,ny,nz,dx,dy,dz
namelist /filenamein /fnamein1 ,fnamein2
namelist /filenameout/fnameout1,fnameout2
}}
namelist と書いてある文の 2つの "/" の間の文字列は,namel...
2つ目の "/" 以降には,そのグループに含まれる変数名を書く.~
読み込む際は read のあとに 'nml=(namelistの名前)' をつけ...
#codeprettify(lang-fortran){{
!! namelistが記されたファイルを開く
open(11,file=listname,status='old',action='read')
!! 読む
read(11,nml=dim)
read(11,nml=filenamein)
read(11,nml=filenameout)
!! 閉じる
close(11)
}}
こうすると,namelist にある変数が1行の read によって読み...
***namelistのファイル [#p2d00ef1]
各値を設定するファイルには,以下のように記述する.
#codeprettify(lang-fortran){{
&dim
nx = 100 !コメントも可
ny = 150
nz = 20
dx = 5.0d0
dy = 5.0d0
dz = 10.0d0
/
&filenamein
fnamein1 = "./input/foobar.dat"
fnamein2 = "./input/hogehoge.in"
/
&filenameout
fnameout1 = "./output/foobar.csv"
fnameout2 = "./output/hogehoge.dat"
/
}}
コメント行も挿入できるし,= の間にスペースがあっても良い.~
ファイル名等を指定するcharacter型の場合は,クォーテーショ...
~
~
***注意! [#zdff83d0]
対応可能なフォーマットがコンパイラによって異なる.
例えば,
#codeprettify(lang-fortran){{
& dim
}}
のように & とリスト名の間にスペースが入ることは gfortran ...
#codeprettify(lang-fortran){{
ny = 150,
}}
のように行末カンマが必須なこともある.~
~
さらにさらに,gfortran (v12時点)では, namelist のファ...
#codeprettify{{
/
}}
が最終行だとエラーになる.後ろに1行空行を入れるだけでエラ...
ファイル末尾が "/" 前者の場合に下記のようなエラーが出て,...
#codeprettify{{
At line 47 of file hoge.f90 (unit = 11, file = 'hoge_nam...
Fortran runtime error: End of file
Error termination. Backtrace:
}}
~
**文字列を使用するとき [#i92783a0]
namelistで読んだchatacter変数を使用するときは,
#codeprettify(lang-fortran){{
open(12,file=trim(fnamein1),status='old')
open(51,file=trim(fnameout1),status='replace')
}}
のように trim を使う.trim がないと宣言した文字列の幅にな...
~
**getargを使ってnamelistを読んでみる [#pa0086d2]
namelistのファイル名をnamelist.in,実行ファイル名をfoobar...
#codeprettify(lang-fortran){{
./foobar namelist.in
}}
と実行できるようにするには,getarg を使ってコードを下記の...
#codeprettify(lang-fortran){{
if(iargc()>0)then
call getarg(1,listname)
write(*,*)trim(listname)
open(11,file=trim(listname),status='old')
read(11,nml=fname_input)
read(11,nml=fname_output)
close(11)
else
write(*,*) 'No input argument'
stop
end if
}}
Page:
Edit with a page name which already exists