我想计算一些子程序。这是我用来写名称和执行持续时间的模板:
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Style.Triggers>
<DataTrigger Binding="{Binding Sex}" Value="Male">
<Setter Property="Background" Value="Blue"/>
</DataTrigger>
<DataTrigger Binding="{Binding Sex}" Value="Female">
<Setter Property="Background" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
这是一个示例输出:
SUBROUTINE get_sigma_vrelp
...declarations...
real(8) :: starttime, endtime
CHARACTER (LEN = 200) timebuf
starttime = MPI_Wtime()
...do stuff...
endtime = MPI_Wtime()
write (timebuf, '(30a,e20.10e3)') 'get_sigma_vrelp',endtime-starttime
call pout(timebuf)
END SUBROUTINE get_sigma_vrelp
为什么打印一个奇怪的字符而不是endtime-starttime的数值?顺便说一句,pout()只是以线程安全的方式将缓冲区写入特定于进程的文件。它不应该与问题有任何关系,但是如果这里没有其他任何东西可以导致错误输出,那么我可以发布它的正文。
答案 0 :(得分:3)
你错了方向!该行应为
write (timebuf, '(a30,e20.10e3)') 'get_sigma_vrelp',endtime-starttime
这样,您需要一个长度为30个字符(a30
)的字符串,而不是30个任意长度的字符串(30a
)。 write
语句在第一个字符串后不接收字符,而是浮点数的相应字节。因此垃圾。
你的角色字面只有15个字符长,所以你可以把这行写成
write (timebuf, '(a15,e20.10e3)') 'get_sigma_vrelp',endtime-starttime
或让编译器自行决定长度:
write (timebuf, '(a,e20.10e3)') 'get_sigma_vrelp',endtime-starttime