24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 1301  |  回复: 8
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

575406210

银虫 (初入文坛)

[求助] 【求助】求帮忙看一下程序,卡在这里好几天了,一直想不通 已有1人参与

错误是Error        37         error #6633: The type of the actual argument differs from the type of the dummy argument.   [S]        C:\Users\zyl\Desktop\console\Console6\Console6\Source1.f90        5424       
这是第一个子程序:
SUBROUTINE BMATCH (SM,LAM,A1,A3,S,T,E,V,W,NN,LR,FLOAD,FAMP)      
      IMPLICIT REAL*8 (A-H,O-Z)                                                                                                              
      COMPLEX*16 SM(1),LAM(1),A1(1),A3(1),S(1),T(1),E(NN)               
      COMPLEX*16 V(NN,NN),W(NN,NN),C,CC,D,DD                           
      COMPLEX*16 FLOAD(1),FAMP(1)                                       
      COMMON /LRCHK/ NCOMF                                                                                                                     
      N1=NN-1                                                           
      N2=NN-2                                                           
      N3=NN-3                                                           
      F=.5D0                                                                                                                                 
      DO 30 J=1,NN                                                      
      C=E(J)*(0.0D0,1.0D0)                                             
      DO 30 I=1,NN                                                      
   30 W(I,J)=V(I,J)*C                                                                                                                        
      DO 60 J=1,NN                                                      
      S(1)=A1(1)*W(1,J)+A3(1)*W(3,J)                                    
      S(2)=A1(2)*W(2,J)+A3(2)*W(4,J)                                    
      S(N1)=A1(N1)*W(N1,J)+A3(N3)*W(N3,J)                              
      S(NN)=A1(NN)*W(NN,J)+A3(N2)*W(N2,J)                              
      DO 50 I=3,N2                                                      
   50 S(I)=A3(I-2)*W(I-2,J)+A1(I)*W(I,J)+A3(I)*W(I+2,J)                 
      DO 60 I=1,NN                                                      
   60 W(I,J)=S(I)                                                                                                                             
      CALL INVERT  (V,NN,NN,S,T,DET)      错误定位在这一行,说S的类型不对。                                                                                                     
      DO 80 I=1,NN                                                      
      DO 70 J=I,NN                                                      
      S(J)=(0.0D0,0.0D0)                                                
      DO 70 K=1,NN                                                      
   70 S(J)=S(J)+W(I,K)*V(K,J)                                          
      DO 80 J=I,NN                                                      
   80 W(I,J)=S(J)                                                                                                                             
      CC=(0.0D0,0.0D0)                                                  
      DD=(0.0D0,0.0D0)                                                  
      M=0                                                               
      DO 100 I=2,N2,2                                                   
      K=I-1                                                            
      M=M+1                                                            
      C=F*LAM(M)                                                        
      D=F*SM(M)                                                         
      W(K,I)=W(K,I)+C-CC                                                
      W(K,K+3)=W(K,K+3)-C                                               
      W(I,I+1)=W(I,I+1)-D                                               
      CC=C                                                              
  100 DD=D                                                              
      W(N1,NN)=W(N1,NN)-CC+F*LAM(M+1)                                   
      DO 105 I=1,NN                                                     
      DO 105 J=I,NN                                                     
  105 W(J,I)=W(I,J)                                                                                                                           
      L=0                                                               
      DO 150 J=1,NN                                                     
      DO 150 I=1,J                                                      
      L=L+1                                                            
      V(L,1)=W(I,J)                                                     
  150 W(L,1)=V(L,1)                                                                                                                           
      M=0                                                               
      K=-2                                                              
      DO 200 I=1,NN,2                                                   
      K=K+4                                                            
      L=M+1                                                            
      M=L+K                                                            
      N=L+1                                                            
      DO 180 J=N,M,2                                                   
      IF (NCOMF.EQ.0) GO TO 181                                         
      W(J,1)=-W(J,1)                                                   
      GO TO 180                                                         
181   CONTINUE                                                         
      V(J,1)=-V(J,1)                                                   
180   CONTINUE                                                         
  200 CONTINUE                                                         
      READ (24) (FAMP(LK),LK=1,NN)                                      
      IF (LR-2) 300,400,300                                             
  300 WRITE (23) M, (W(J,1),J=1,M)                                      
      CALL FVECT(NN,FLOAD,W,FAMP)                                       
      IF (LR .EQ. 3) GO TO 400                                          
      RETURN                                                            
  400 WRITE (23) M, (V(J,1),J=1,M)                                      
      CALL FVECT(NN,FLOAD,V,FAMP)                                       
      RETURN                                                            
      END           

以下是错误定位的那一行调用的子程序:
SUBROUTINE INVERT (A,NN,N,M,C,DET)                                
      IMPLICIT REAL*8 (A-H,O-Z)                                                                                                              
      DIMENSION M(1)                                                   
      COMPLEX*16 A(N,1),C(1),D,TEMP,DE                                                                                                        
      DE=(1.0D0,0.0D0)                                                  
      IF (NN-1)  300,350,100                                            
  100 DO 110  I = 1,NN                                                  
  110 M(I) = -I                                                         
      DO 200  I = 1,NN                                                                                                                        
      X=0.0D0                                                           
      DO 130  L = 1,NN                                                  
      IF (M(L).GT.0)  GO TO 130                                         
      DO 120  K = 1,NN                                                  
      IF (M(K).GT.0) GO TO 120                                          
      D=A(L,K)                                                         
      Y=DABS(DREAL(D))+DABS(DIMAG(D))                                   
      IF (X.GT.Y) GO TO 120                                             
      LD = L                                                            
      KD = K                                                            
      X=Y                                                               
  120 CONTINUE                                                         
  130 CONTINUE                                                         
      D=A(LD,KD)                                                        
      DE=DE*D                                                                                                                                 
      L = -M(LD)                                                        
      M(LD) = M(KD)                                                     
      M(KD) = L                                                         
      DO 140  J = 1,NN                                                  
      C(J) = A(LD,J)                                                   
      A(LD,J) = A(KD,J)                                                
  140 A(KD,J) = C(J)                                                                                                                          
      DO 150  K = 1,NN                                                  
  150 A(K,KD) = A(K,KD)/D                                                                                                                     
      DO 170  J = 1,NN                                                  
      IF (J.EQ.KD)  GO TO 170                                          
      DO 160  K = 1,NN                                                  
  160 A(K,J) = A(K,J) - C(J)*A(K,KD)                                    
  170 CONTINUE                                                                                                                                
      C(KD) =(-1.0D0,0.0D0)                                             
      DO 180  K = 1,NN                                                  
  180 A(KD,K) = -C(K)/D                                                
  200 CONTINUE                                                                                                                                 
      DO 240  I = 1,NN                                                  
      L = 0                                                            
  220 L = L + 1                                                         
      IF (M(L).NE.I)  GO TO 220                                         
      M(L) = M(I)                                                      
      M(I) = I                                                         
      DO 240  K = 1,NN                                                  
      TEMP = A(K,L)                                                     
      A(K,L) = A(K,I)                                                   
  240 A(K,I) = TEMP                                                     
      DET=CDABS(DE)                                                     
  300 RETURN                                                            
  350 A(1,1) = 1.0D0/A(1,1)                                             
      DET=CDABS(A(1,1))                                                
      GO TO 300                                                         
      END   
错误中提到的同一个变量  在两个程序中被声明为两种格式,怎么办?
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jiangxingge

金虫 (正式写手)

【答案】应助回帖

★ ★ ★ ★ ★
575406210: 金币+5, ★★★很有帮助 2015-06-07 13:55:59
修改建议:
1,所有的变量都写出类型声明,不要用缺省。 比如 DET 是实型。
2,数组维数也是 有问题的 ,比如 V(nn,nn) 和 A(N,1) 也是 对不上的,它们虽然类型一致。
3,根据子程序中 M的用法,编程时是当做整形在使用的。而 S 上面传下来就是 复数。这有严重的矛盾,并不是简单的修改变量类型问题。所以 你搞清楚 那个 S 到底是啥? 那个 INVERT 子程序 是不是 抄来的,不好直接使用?
5楼2015-06-05 14:54:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 9 个回答

575406210

银虫 (初入文坛)

是不是给的金币太少了?有好人么?帮我简单看一下下啊
2楼2015-06-04 14:58:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

575406210

银虫 (初入文坛)

3楼2015-06-05 11:16:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jiangxingge

金虫 (正式写手)

【答案】应助回帖

感谢参与,应助指数 +1
明显地,在主调程序中 ,s 被定义为 Complex*16 S(1),所以 是 复数数组;
而在 子程序中对应的 M 被定义为  dimension M(1),此处根据 FORTRAN规定 M开头 的 缺省类型 是 整形,所以是整形数组。
两者 类型明显不匹配!
4楼2015-06-05 14:42:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 一志愿南开大学0710生物学359求调剂 +6 兔兔兔111223314 2026-03-29 8/400 2026-04-02 22:37 by louise0220
[考研] 085600,320分求调剂 +6 大馋小子 2026-04-02 6/300 2026-04-02 21:54 by dongzh2009
[考研] 085601一志愿北理325分求调剂 +4 找调剂,, 2026-04-02 4/200 2026-04-02 21:29 by dongzh2009
[考研] 085602化工求调剂(331分) +9 111@127 2026-03-30 9/450 2026-04-02 20:00 by dick_runner
[考研] 求调剂 +7 Aniyaio 2026-04-02 7/350 2026-04-02 16:42 by zzsw+
[考研] 282求调剂 +18 ycy1201 2026-04-01 20/1000 2026-04-02 16:39 by liumengping
[考研] 农学考研求调剂 +3 dkdkxm 2026-04-01 3/150 2026-04-02 16:04 by wangjagri
[考研] 初试301,代码085701环境工程,本硕一致,四六级已过,有二区一作,共发表5篇论文 +6 axibli 2026-04-01 6/300 2026-04-02 13:42 by Ecowxq666!
[考研] 08工科求调剂290分 +5 1314捧花 2026-04-02 8/400 2026-04-02 13:16 by 乔哒哒哒
[考研] 一志愿北交大材料工程总分358 +8 cs0106 2026-04-01 9/450 2026-04-02 10:36 by 不吃魚的貓
[考研] 求调剂0703 +5 周嘉尧 2026-03-31 8/400 2026-04-01 20:32 by ltltkkk
[考研] 286求调剂 +5 Sa67890. 2026-04-01 7/350 2026-04-01 19:50 by 6781022
[考研] 358求调剂 +3 王向阳花 2026-03-31 3/150 2026-04-01 09:56 by zzchen2000
[考研] 353求调剂 +3 江上枫_26 2026-03-28 3/150 2026-03-31 15:53 by jp9609
[考研] 22408 359分调剂 +4 Qshers 2026-03-27 8/400 2026-03-31 08:53 by Qshers
[考研] 调剂 +4 GK72 2026-03-30 4/200 2026-03-30 20:32 by dick_runner
[考研] 279求调剂 +12 j的立方 2026-03-29 12/600 2026-03-30 20:30 by dick_runner
[考研] 085602 化学工程专硕 340分求调剂 +4 qianbai11 2026-03-29 4/200 2026-03-30 11:34 by 唐沐儿
[考研] 291求调剂 +5 Y-cap 2026-03-29 6/300 2026-03-29 13:18 by mumin1990
[考研] 298求调剂 +3 种圣赐 2026-03-29 3/150 2026-03-29 12:06 by longlotian
信息提示
请填处理意见