GWH_777 2023-03-03 15:03 采纳率: 50%
浏览 25
已结题

fortran编译问题

我的数组文件(d_R)中有两列数值,分别为横纵坐标,现在我想将数组文件中的每个纵坐标数值除以其中的最大值(R_max),最大值我已经在程序之外求出具体数值,并且在程序中进行了赋值,但是将数组(mx)/最大值的结果乘以原来公式时,算出的计算结果为NaN。
目的:我想知道问题出在哪里?又该如何解决(猜想一:是不是因为我的数组中有两列数值,但是我却直接除以最大值,导致了NaN的出现;猜想二:跟循环有关,需要数组中每个数值循环除以最大值)
黑体部分为我重新添加的部分,这方面我第一次尝试,请各位指导,如果能附上正确代码,感激不尽。

COMPLEX , DIMENSION(N_x) :: Psi_xz_R
INTEGER , PARAMETER :: N_R=8192
REAL(8) , DIMENSION(N_R) :: d_R
**INTEGER , PARAMETER :: R_max=0.246882**

Open(unit=17, file='d_R.dat', status='old')
Do R=1,N_R
    read(17,*) d_R(R)
End do
CLOSE(17) 
 
Open(unit=3, file='Eigen_wave0.dat', status='old')
x=x_min+INT(abs(-1.0-x_min_0)/d_x_0)*d_x_0
Do mx=INT(abs(-1.0-x_min_0)/d_x_0)+1, INT(abs(-1.0-x_min_0)/d_x_0)+N_x_0
    Read(3,*) x, RPsi6    !, IPsi6
    IPsi6=0.0D0
    Psi_xz_0(mx)=CMPLX(RPsi6,IPsi6)
    Psi_xz_R(mx)=**(d_R(mx)/R_max)***Psi_xz_0(mx)
    Psi_xz(mx)=Psi_xz_R(mx)
    norm_t=norm_t+d_x*ABS(Psi_xz_R(mx))**2
Enddo
CLOSE(17)
CLOSE(3)

  • 写回答

2条回答 默认 最新

  • 地球屋里老师 2023-03-04 11:43
    关注

    maxval函数可以求数组最大值。
    出现nan,你可以修改设置,使之报错,这样就能找到是哪里出问题了。项目属性-fortran-floating point,第一个选项改为
    Underflow gives 0.0; Abort on other IEEE exceptions (/fpe:0)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月21日
  • 已采纳回答 3月13日
  • 创建了问题 3月3日

悬赏问题

  • ¥15 Stata链式中介效应代码修改
  • ¥15 latex投稿显示click download
  • ¥15 请问读取环境变量文件失败是什么原因?
  • ¥15 在若依框架下实现人脸识别
  • ¥15 添加组件无法加载页面,某块加载卡住
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用