我给你的代码里并没有对 mesh_1.txt 的读取。所以你的错误是其他的代码造成的。 |
fcode 发表于 2015-10-31 19:06 好的,谢谢版主! |
QQ交流的话,请加我我们论坛的QQ群:2338021 |
fcode 发表于 2015-10-31 15:53 论坛里有大牛存在果然不一样,多谢指点!我其实也是刚接触Fortran不久,大概两周左右,所以水平很低不要见怪,实际上这个程序是做有限元网格映射的,因为涉及到很多数据文件操作,有好几个子程序,所以就没有把代码和数据文件给全,这里要感谢版主这几天来的耐心指点,说实话这几天为这个事情真的是寝食难安,头都大了,奈何能力有限,一直难以有所突破。如果方便,我还有些关于Fortran文件操作的问题想请教版主,我的QQ:913111805,还望版主不吝指点。 |
pasuka 发表于 2015-10-31 16:24 对。newunit 是个好东西。从刚学fortran我就想这个,因此还自己写过一个 function 叫 GetFreeFileUnit。现在有了 NewUnit ,我就把以前代码里的这个函数都删掉了 [Fortran] 纯文本查看 复制代码 Integer Function GetFreeFileUnit() Logical :: bOpen Integer :: i Do i=11,2**20 Inquire( i , Opened = bOpen ) IF ( .Not.bOpen ) Exit End Do FreeFileUnit = i End Function GetFreeFileUnit |
fcode 发表于 2015-10-31 15:53 文件通道直接上newunit吧,这样省心 |
对比你前后的两个代码,你并没有解决问题。而是把代码改得更简单,功能更少,以此“回避”了所有问题。 请看以下代码的注释内容: [Fortran] 纯文本查看 复制代码 program Mesh_reflection implicit none integer::i_node,i_element integer::n_node1,n_element1!,n_node2 ,n_element2 !//你不需要以 2 结束的变量 integer,allocatable::ij_element1(:,:)!,ij_element2(:,:)!//同上 real(8),allocatable::coordinate_n1(:,:)!,coordinate_n2(:,:),stress_1(:,:),stress_2(:,:) !//同上 open(unit=4,file="data.txt") open(unit=5,file="mdata_new.txt") !read(4,*)n_node1,n_element1 // 您的数据文件里并没有 n_node1 , n_element1 !read(5,*)n_node2,n_element2 // 同上 n_node1 = 7751 ; n_element1 = 7647 !// 需要赋值 allocate(ij_element1(n_node1,4),coordinate_n1(n_node1,2))!// 删掉了不需要的变量 !读入数据. do i_node=1,n_node1 read(4,*)coordinate_n1(i_node,1),coordinate_n1(i_node,2) end do do i_element=1,n_element1 read(4,*)ij_element1(i_element,:) end do do i_node=1,n_node1 !// n_node2-> n_node1 write(5,*)coordinate_n1(i_node,:) !// read 改为 write , coordinate_n2 改为 coordinate_n1 end do do i_element=1,n_element1 !// n_element2 -> n_element1 write(5,*)ij_element1(i_element,:) !// read 改为 write , ij_element2 改为 ij_element1 enddo write(*,*)coordinate_n1(i_node,1),coordinate_n1(i_node,2) !// 4 改为 * endprogram 其中,第9和第10行,是导致错误的开始。 PS:文件通道号建议10以上,不要用10以下的数字。但为了向你证明不是 Open 语句导致的,所以我没有改动你的文件通道号。 |
fcode 发表于 2015-10-31 12:19 这是我之前的代码,我的水平有限,实在找不出来哪里有问题,如果方便劳驾帮我看看,谢谢。 [Fortran] 纯文本查看 复制代码 program Mesh_reflection implicit none integer::i_node,i_element integer::n_node1,n_element1,n_node2,n_element2 integer,allocatable::ij_element1(:,:),ij_element2(:,:) real(8),allocatable::coordinate_n1(:,:),coordinate_n2(:,:),stress_1(:,:),stress_2(:,:) open(unit=4,file="data.txt") open(unit=5,file="mdata_new.txt") read(4,*)n_node1,n_element1 read(5,*)n_node2,n_element2 allocate(ij_element1(n_node1,4),ij_element2(n_node2,4),coordinate_n1(n_node1,2),coordinate_n2(n_node2,2) ,stress_1(n_node1,4),stress_2(n_node2,4)) !读入数据. do i_node=1,n_node1 read(4,*)coordinate_n1(i_node,1),coordinate_n1(i_node,2) end do do i_element=1,n_element1 read(4,*)ij_element1(i_element,:) end do do i_node=1,n_node2 read(5,*)coordinate_n2(i_node,:) end do do i_element=1,n_element2 read(5,*)ij_element2(i_element,:) enddo write(4,*)coordinate_n1(i_node,1),coordinate_n1(i_node,2) endprogram |
捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )
GMT+8, 2024-11-23 11:46