モジュール関数でつまづいた 

 一つのモジュール副プログラムとモジュール関数を書いた。しかし、エラーが出るので修正しているのだが、なかなかうまく行かない。


module subprogs
implicit none
contains
subroutine set_gridx(x,n1,n2)
integer::m=2,n1,n2,i,j,k,is,fno=10
real(8),allocatable::x(:,:,:),p(:,:)


write(*,*)'input n1:'
read(*,*)n1
write(*,*)'input n2:'
read(*,*)n2
write(*,*)'input n1,n2=',n1,n2
allocate(x(m,n1,n2),stat = is)
if(is/=0) stop 'cannot allocate(n1 or n2 is too large)'!割付け不可なら停止
allocate(p(n1,n2))
!x(m,n1,n2)の初期化
do k=1,n2
do j=1,n1
do i=1,m
x(i,j,k)=0
enddo
enddo
enddo
do k=1,n2
do j=1,n1
do i=1,m
write(*,'(2e12.4)')x(1:m,j,k)
enddo
enddo
enddo
write(*,*)' '
!x(m,n1,n2)の初期化終了
!x(1,j,k)とx(2,j,k)で一組の座標値
do k=2,n2
do j=2,n1
x(1,j,k)=(dble(j-1))/(dble(n1-1))
x(2,j,k)=(dble(k-1))/(dble(n2-1))
enddo
enddo
do k=1,n2
do j=1,n1
do i=1,m
write(*,'(2e12.4)')x(1:m,j,k )
enddo
enddo
enddo

!ファイル出力
open(fno,file='grid.d')
do k=1,n2
do j=1,n1
write(fno,'(2e12.4)')x(1,j,k),x(2,j,k)
enddo
enddo
!ファイル出力終了
close(fno)
write(*,*)' '

!p(i,j)の初期化
do i=1,n1
do j=1,n2
p(i,j)=0
enddo
enddo
do j=1,n2
do i=1,n1
write(*,*)p(i,j)
enddo
enddo
!p(i,j)の初期化終了

deallocate(x)
deallocate(p)

write(*,*)' '
end subroutine set_gridx
end module subprogs

module aaa
implicit none
contains
function theory(x,i,j,n1,n2)result(phi(i,j))
real(8),allocatable,intent(in)::x(:,:,:)
integer,intent(in)::i,j,n1,n2
real(8),allocatable::phi(:,:)
real(8) pi

!phi(i,j)の初期化
allocate(phi(n1,n2))
do i=1,n1
do j=1,n2
phi(i,j)=0
enddo
enddo
do j=1,n2
do i=1,n1
write(*,*)phi(i,j)
enddo
enddo
!phi(i,j)の初期化終了

!piの計算
pi=2.0d0*acos(0.0d0)
write(*,*)pi
write(*,*)' '

!phi(i,j)の計算
do j=1,n2
do i=1,n1
phi(i,j)=sin(pi*dble(i-1)/dble(n1-1))*sinh(pi*(1-(dble(j-1))/(dble(n2-1))))/(sinh(pi))
enddo
enddo
!phi(i,j)の計算終了
do j=1,n2
do i=1,n1
write(*,*)phi(i,j)
enddo
enddo
deallocate(phi)
end function theory
end module aaa


program main
use subprogs
use aaa
implicit none
real(8)::x(:,:,:),p(:,:),q(:,:)
integer i,j,n1,n2
allocate(q(n1,n2))
call set_gridx(x,n1,n2)
q(i,j)=theory(x,i,j,n1,n2)
deallocate(q)
end program main

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック