Fortran Coder

查看: 6419|回复: 2
打印 上一主题 下一主题

[子程序] 编译提示形参实参类型不对应

[复制链接]

9

帖子

3

主题

0

精华

入门

F 币
68 元
贡献
37 点
跳转到指定楼层
楼主
发表于 2015-1-12 21:22:20 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 mkingx 于 2015-1-12 21:23 编辑

这是编译错误提示,另附代码!!!!

hah.png (24.05 KB, 下载次数: 214)

编译错误提示

编译错误提示

pcppp.f90

2.05 KB, 下载次数: 3

这是共轭梯度解方程组的程序

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

135

帖子

15

主题

0

精华

版主

F 币
1159 元
贡献
637 点

爱心勋章管理勋章

沙发
发表于 2015-1-12 21:41:05 | 只看该作者

回帖奖励 +1

请把implicit real*8(a-z)
换成implicit real*8(a-h,o-z)
[Fortran] 纯文本查看 复制代码
module conj
implicit real*8(a-h,o-z)
integer :: IMAX=200
real*8 :: tol=1d-7
contains

subroutine solve(A,b,x,x0,N)
implicit real*8(a-h,o-z)
integer :: i,j,k
real*8 :: A(N,N),b(N),x(N),x0(N)
real*8 :: r0(N),r1(N),p0(N),p1(N)
real*8 :: x1(N),x2(N)

    write(102,501)
    501 format(//,18x,'共轭梯度法中间结果',//)
x1=x0    
r0=b-Ar(A,x1,N)
p0=r0
do k=1,IMAX
    tmp1=dr(r0,N)
    tmp2=rAr(A,p0,N)
    afa=tmp1/tmp2
    x2=x1+afa*p0
    !记录迭代中间值
    write(101,502)k,x2
    502 format(I3,4F12.8)
    !
    !
    dr_s=dsqrt(dr(r0,N))
    if (dr_s<tol) exit
    r1=r0-afa*Ar(A,p0,N)
    tmp3=dr(r1,N)
    beta=tmp3/tmp1
    p1=r1+beta*p0
    r0=r1
    p0=p1
    x1=x2
end do
    x=x2
end subroutine solve


function dr(r,N)
implicit real*8(a-h,o-z)
real*8 :: r(N),dr
s=0
do i=1,N
    s=s+r(i)**2
end do
dr=s
end function dr


function Ar(A,r,N)
implicit real*8(a-h,o-z)
integer :: i,N
real*8 :: A(N,N),r(N),temp(N),Ar(N)
temp=0
do i=1,N
    do j=1,n
        temp(i)=temp(i)+A(i,j)*r(j)
    end do
end do
Ar=temp
end function ar


function v1v2(v1,v2,N)
implicit real*8(a-h,o-z)
integer :: n
real*8 :: v1(n),v2(n)
integer :: i
v1v2=0
do i=1,n
    v1v2=v1v2+v1(i)*v2(i)
end do
end function 


function rAr(A,r,N)
implicit real*8(a-h,o-z)
integer :: i,N
real*8 :: A(N,N),r(N),temp(N)
temp=Ar(A,r,N)
rAr=v1v2(r,temp,N)
end function rAr
end module conj

program main
use conj
implicit real*8(a-h,o-z)
integer,parameter :: N=4
real*8 :: A(N,N),b(N),x(N),x0(N)
    open(unit=101,file='result.txt')
    open(unit=102,file='Im_result.txt')
    !迭代初值
    x0=(/0d0,0d0,0d0,0d0/)
    b=(/62d0,87d0,91d0,90d0/)
    A=reshape((/5d0,7d0,6d0,5d0,&
                7d0,10d0,8d0,7d0,&
                6d0,8d0,10d0,9d0,&
                5d0,7d0,9d0,10d0/),(/4,4/))
    call solve(A,b,x,x0,N)
    write(101,501)x
    501 format(/,T10,'共轭梯度法',//,&
                2x,'x(1)=',F15.8,/,&
                2x,'x(2)=',F15.8,/,&
                2x,'x(3)=',F15.8,/,&
                2x,'x(4)=',F15.8)
end program main
    
    

评分

参与人数 1F 币 +9 贡献 +9 收起 理由
fcode + 9 + 9 很给力!

查看全部评分

9

帖子

3

主题

0

精华

入门

F 币
68 元
贡献
37 点
板凳
 楼主| 发表于 2015-1-13 10:00:28 | 只看该作者
珊瑚虫 发表于 2015-1-12 21:41
请把implicit real*8(a-z)
换成implicit real*8(a-h,o-z)
[mw_shl_code=fortran,true]module conj

3Q,完美解决!!!!!
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-10 21:23

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表