Fortran Coder

vs报错0x00007FF63AE76A66 处(位于 ceshi1.exe 中)引发的异常: 0xC0000...

查看数: 2387 | 评论数: 2 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2023-2-4 12:47

正文摘要:

vs 报错:0x00007FF63AE76A66 处(位于 ceshi1.exe 中)引发的异常: 0xC[Fortran] 纯文本查看 复制代码program gongcheng     implicit none     real(kind=8),parameter::G=1.3218278962236387e- ...

回复

观星游月 发表于 2023-2-4 15:41:53
真的非常感谢,我打算从头开始再做一遍
fcode 发表于 2023-2-4 14:14:54
你的问题太多了,我都不知道该怎么给你说起。

比如:
1. 数组定义时不要用浮点数做为数组的大小。
2. 函数的接口一定要明确,例如 function f(r,p,m) 是三个参数,但 rungekutta 函数里调用却写成了 k1=f(x(i),y(i)) 只有2个参数。并且 f q 函数的定义是返回大小为 20000 的数组,但 rungekutta 里面却认为返回的是一个单变量。
real,external::f 这样的写法并不会让编译器帮助你检查函数接口,所以 interface 是更好的选择。
3. 一定要写 implicit none,例如 rungekutta 函数里没有写,导致 p0 没有定义,也没有值。(昨天给你提出来,但你没有改)
昨天提的死循环的问题也没有改。
4. 大量相同大小的常数,例如 20000,990 可以写成 integer , parameter :: N = 2000 , S = 990 这样后期比较容易修改。

我给你的建议是,先从简单的代码写起。能得心应手的书写一二十行的代码之后,再来写几百行的代码。
每个程序单元,先做单元测试。然后再组织成稍大的程序。

例如,你先确定从 EOS.txt 中读取数组,单步调试,确保读取的数组是正确的。
然后,再调试插值函数,确保 spline 插值后的结果是符合自己预期的。(实际上,你的死循环就出现在插值函数里)
一般来说,从 EOS中读取数组,插值。是先做的,而你的代码逻辑是,每次对 f 和 q 求解,都去读 EOS文件、插值。显然是做了很多无用功。

最后,确保读取数据和插值正确了,再调试龙格库塔。

注意认真分析,每个函数应该设计几个参数?输入应该是什么,输出应该是什么?是单变量还是数组?数组的话,大小应该是多大?

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

GMT+8, 2024-5-6 19:55

Powered by Tencent X3.4

© 2013-2024 Tencent

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