我正在写信寻求一些建议来优化我的Fortran代码。
Fortran子例程在Visual Studio 2013的Windows 10上运行。在此程序中,首先执行MATLAB的m文件,以生成用于后续Fortran代码的数据文件。 MATLAB完成其任务需要花费一些时间(从几秒钟到十秒钟不等)。有可能在MATLAB过程完成之前开始运行后续的Fortran代码。我写了一段代码,如下所示。考虑到15秒的睡眠时间,它可以工作,但效率不高。总的来说,我想提出一些建议来提高该操作的效率。提前致谢。
logical (4) :: result_matlab
logical (4) :: exists
real (kind=dbl),dimension(1000) :: dataoutofmatlab
result_matlab = SYSTEMQQ("directory of matlab\matlab.exe" -nodesktop -nosplash -r "my_mfile")
INQUIRE (FILE = dataoutofmatlab, EXIST = exists) % MATLAB generates ‘dataoutofmatlab.dat’
if (.NOT. exists) then
call sleep(15)
end if
open(2, file = 'dataoutofmatlab.dat', form = 'formatted') % Fortran codes read ‘dataoutofmaltab.dat’
do i = 1, 1000
read(2,*) dataoutofmatlab(i)
end do
close(2)
call execute_command_line (command [, wait] [, exitstat] [, cmdstat] [, cmdmsg])
其中参数如下:
command
具有意图,并且是标量默认字符串,包含要由处理器解释的命令行。wait
具有意图,它是标量默认逻辑,指示是否应异步执行命令(wait=.false.
),或在返回Fortran程序之前该过程是否应等待其终止(默认) 。
[exitstat
具有意图inout,并且是一个标量默认整数变量,除非wait为false,否则将从命令中为其分配“进程退出状态”(其含义也取决于系统)。
cmdstat
具有意图,是分配为零的标量默认整数变量如果执行execute_command_line本身没有错误,则为-1,如果处理器不支持命令执行,则为-2,如果指定了wait=.true.
,但处理器不支持异步命令执行,则为正值;如果发生任何其他错误,则为正值。
cmdmsg
具有意图inout,并且是标量默认字符串,如果cmdstat为分配一个正值,分配一个解释性消息。