fortran - 为什么 Fortran 写入 fort.x?
问题描述
我正在使用 Fortran 90 代码进行 MPI 并行模拟,并希望将一些信息写入一个名为“logBubbles.out”的文件。在模拟的每个时间步长中,应将一定数量的行添加到特定文件中。我的代码如下所示:
open(UNIT=s_IOunitNumber,FILE='./logBubbles.out',STATUS='OLD',POSITION='append',ACTION='WRITE')
write(s_IOunitNumber,*) bubbleindex,' ',this%ptrTime_%t_,' ',interfArea,' ',bubVol
close(s_IOunitNumber)
...其中bubbleindex 是一个整数,其余的是双精度数。
但是,当我运行模拟时,只有大约 50% 的相应行被添加到logBubbles.out
,同时创建了一个附加文件fort.50
。它总是只包含一行,并且不时更改。参数s_IOunitNumber
为50
。
我尝试了各种方法,但我无法弄清楚为什么会发生这种情况。我的写命令错了吗?
附加信息
Comiler -> mpif90
环境 -> OpenSUSE Leap 15.0
整个子程序:
!========================================================================================!
subroutine computeInterfacialArea(this,vofb)
type(VOF), intent(in) ::this
type(vofBlock), intent(in) :: vofb
integer :: lbi,ubi,lbj,ubj,lbk,ubk,i,j,k,bubbleindex
real(DP) :: dalphadx, dalphady, dalphadz, deltaS,interfArea,bubVol
character(len=20) :: dirName
bubbleindex=vofb%bn !bn is the global bubble index of the vof block
lbi = 1+lbound(vofb%stx,1) !this value would be 1 too low because the grid indices are x staggered
ubi = ubound(vofb%stx,1) !all the other bounding values are correct
lbj = lbound(vofb%stx,2)
ubj = ubound(vofb%stx,2)
lbk = lbound(vofb%stx,3)
ubk = ubound(vofb%stx,3)
interfArea=0.d0
bubVol=0.d0
do k=lbk,ubk
do j=lbj,ubj
do i=lbi,ubi
dalphadx=(vofb%c(i+1,j,k)-vofb%c(i-1,j,k))/(vofb%dxc(i+1)+vofb%dxc(i)) !central differences for dalpha/dx...
dalphady=(vofb%c(i,j+1,k)-vofb%c(i,j-1,k))/(vofb%dyc(j+1)+vofb%dyc(j)) !...dalpha/dy...
dalphadz=(vofb%c(i,j,k+1)-vofb%c(i,j,k-1))/(vofb%dzc(k+1)+vofb%dzc(k)) !...and dalpha/dz on a collocated grid
deltaS=sqrt(dalphadx*dalphadx+dalphady*dalphady+dalphadz*dalphadz) !deltaS is the magnitude
interfArea=interfArea+vofb%dxf(i)*vofb%dyf(j)*vofb%dzf(k)*deltaS !stepwise Volume integral of deltaS
bubVol=bubVol+vofb%dxf(i)*vofb%dyf(j)*vofb%dzf(k)*vofb%c(i,j,k) !stepwise Volume integral of cvof for volume
end do
end do
end do
open(UNIT=s_IOunitNumber,FILE='./logBubbles.out',&
STATUS='OLD',POSITION='append',ACTION='WRITE')
write(s_IOunitNumber,*) bubbleindex,' ',this%ptrTime_%t_,' ',interfArea,' ',bubVol
close(s_IOunitNumber)
end subroutine
!========================================================================================!
解决方案
推荐阅读
- android - 如何从源代码中隐藏 AdMob 应用 ID
- javascript - 数据表日期时间格式排序问题
- composer-php - Composer 不拉包 v10.4.21
- azure - 如何在 Azure 运行管道菜单中添加默认变量
- conda - conda-forge 安全吗?
- django - 如何在 djhtml 中配置 tabwidth?
- python - 使用 camelot-py (lattice) 提取 PDF 表:split_text 不起作用
- android - 如何修复他的错误异常:Gradle 任务 assembleDebug 失败,退出代码为 1
- angular - 离子服务不适用于“应用内浏览器”插件
- python - Python程序对矩阵的每一行和每一列求和