| 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