Class | linlib |
In: |
src/util/linlib.f90
|
A(LN) : | real(8), intent(in)
| ||
B(LN-1) : | real(8), intent(in) | ||
C(LN-1) : | real(8), intent(in) | ||
D(LN) : | real(8), intent(inout)
|
利用する線形計算パッケージに配列を渡す
subroutine LinSolv(A, B, C, D) !=== Dependency !=== Input real(8), intent(in) :: A(LN) real(8), intent(in) :: B(LN-1) real(8), intent(in) :: C(LN-1) !=== In/Out real(8), intent(inout) :: D(LN) !=end !=== Work real(8) :: AA(LN) real(8) :: BB(LN-1) real(8) :: CC(LN-1) call BeginSub("linsolv", fmt="%c", c1="call linear algebra library.") !--- 用いるライブラリの初期化 if (LLib == 's') then call ssl2_ltx(A, B, C, D) elseif (LLib == 'l') then !=== 属性が inout なので, 内部変数を使うことに. AA = A BB = B CC = C call lapack_dgtsv(AA, BB, CC, D) else call MessageNotify("Error", "linlib", "unknown LLib") end if call EndSub("linsolv") end subroutine LinSolv
cfgfile : | character(*), intent(in)
| ||
N : | integer, intent(in)
|
利用する線形計算パッケージを NAMELIST から設定し, 配列の大きさを決定する
subroutine linlib_init(cfgfile, N) !=== Dependency !=== Input integer, intent(in) :: N !配列サイズ character(*), intent(in) :: cfgfile !設定ファイル (NAMELIST) !=== NAMELIST NAMELIST /linlib/ LLib !=end open (10, FILE=cfgfile) read(10, NML=linlib) close(10) call BeginSub("linlib_init", fmt="%c", c1="Initialize linear algebra library.") !--- 配列サイズを保管 LN = N !--- 用いるライブラリの初期化 if (LLib == 's') then call MessageNotify("Message", "linlib.f90", "Call SSL II in the calculation") call ssl2_ltx_init(LN) elseif (LLib == 'l') then call MessageNotify("Message", "linlib.f90", "Call LAPACK in the calculation") call lapack_dgtsv_init(LN) else call MessageNotify("Error", "linlib.f90", "Unknown LLib ", c1=LLib) end if call EndSub("linlib_init") end subroutine linlib_init