如何在Fortran 2018中访问远程团队

史蒂文

我编写了一个简短的使用团队的Fortran程序,但是它不能按预期运行。我想知道我的编程语法是否正确,或者我的编译器中是否有错误。

我一直在阅读有关Fortran 2018及其一些较新实现(包括团队)的书。很少有关于团队的教科书,而我唯一能找到的教科书没有提供任何程序示例。我已经编写,编译并运行了一个很短的程序,该程序应该在一个团队中工作时打印出一个团队的价值。语法看起来很简单,但是该程序无法正常工作。我已经使用OpenCoarrays 2.7.1编译器以及版本2.8.0编译了程序。

program remote_team2
    use iso_fortran_enf
    implicit none

    type(team_type) :: new_team
    integer, codimension[*] :: tempnum

    form team(1+mod(this_image(),2),new_team)

    change team(new_team)
        tempnum = num_images()
        sync team(new_team)

        select case (team_number())
            case(1)
                print *, 1, ' ', tempnum[2], ' ', num_images()
            case(2)
                print *, 2, ' ', tempnum[1], ' ', num_images()
        end select
    end team
end program remote_team2

如果我使用5个处理器运行该程序,则cafrun -np 5 remote_team2希望在屏幕上打印出如下所示的内容:

2    3    2
1    2    3
2    3    2
1    2    3
2    3    2

相反,我得到以下信息:

2    3    3
1    2    2
2    3    3
1    2    2
2    3    3

我不明白为什么它不打印相反团队编号的图像数量,然后再打印当前团队编号的图像数量。相反,它只打印两次相同的内容,表示方括号索引“ []”不起作用。

我究竟做错了什么?有任何Fortran 2018程序员可以解释这一点吗?

谢谢你的时间。

史蒂夫·莱昂内尔(Steve Lionel),非常感谢您提出的关于将关联选项与change team语句一起使用的建议我的书中提到了此选项,但是不幸的是,再次没有示例。

基于本书中描述的语法,我将程序修改为如下所示:

program remote_team2
    use iso_fortran_enf
    implicit none

    type(team_type) :: new_team
    integer, codimension[*] :: tempnum
    integer, codimension[2,*] :: tn

    form team(1+mod(this_image(),2),new_team)

    change team(new_team, tempnum[*] => tn)
        tempnum = num_images()
        sync team(new_team)

        select case (team_number())
            case(1)
                print *, 1, ' ', tempnum[1, team_number = 2], ' ', num_images()
            case(2)
                print *, 2, ' ', tempnum[1, team_number = 1], ' ', num_images()
        end select
    end team
end program remote_team2

但是,现在我的编译器为我的语句提供了语法错误change team该错误显示为:

change team(new_team, tempnum[*] = > tn)
                   1
Error: Syntax error in CHANGE TEAM statement at (1)

编译器还会给出以下错误消息:

print *, 1, ' ', tempnum[1, team_number = 2], ' ', num_images()
                                      1
Error: Function 'team_number' requires an argument list at (1)

似乎认为我正在尝试将其team_number用作函数,而不是如书中所述的索引选项。

没有书中或网上都没有任何公开的工作实例可以讲,我不知道编译器要我做什么。该书通常显示这些定义的“参考书”表示。因此,我永远不确定这些语句的外观。但是,就我编写这两种语句的方式而言,它们使用的是本书中所述的相同选项。任何建议或想法,将不胜感激。

史蒂文

最近,我从我读过的这本书的一位作者那里了解到,更新程序的语法是正确的,甚至可以简化。他建议我的编译器尚不支持在不同团队之间访问信息的功能。

至少我现在知道我的语法是正确的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Fortran中处理大整数?

来自分类Dev

如何在Fortran中读取/写入矩阵?

来自分类Dev

如何在Fortran 90中刷新stdout?

来自分类Dev

如何在fortran中读取“ enter”键

来自分类Dev

如何在fortran中添加双标签?

来自分类Dev

如何在Fortran中实施BCD?

来自分类Dev

如何在Fortran 90中刷新stdout?

来自分类Dev

如何在fortran中拆分数组?

来自分类Dev

如何在 Squish 中访问远程环境?

来自分类Dev

如何在Fortran中声明变量中间例程

来自分类Dev

如何在fortran中调用数组值函数?

来自分类Dev

如何在fortran中获取数组的起始索引

来自分类Dev

如何在fortran中获取最大值的位置?

来自分类Dev

如何在Fortran中初始化大数组?

来自分类Dev

如何在Fortran中实现数组结构而不是结构数组?

来自分类Dev

如何在OpenVMS Fortran中获取命令行参数?

来自分类Dev

如何在Fortran中定义周期函数?

来自分类Dev

如何在Fortran中声明变量中间例程

来自分类Dev

您如何在fortran中调用bind-C函数?

来自分类Dev

如何在fortran 90中声明复杂类型数组

来自分类Dev

如何在Fortran中返回类型化数组?

来自分类Dev

如何在Fortran 90中创建圆形网格?

来自分类Dev

如何在 Fortran 77 中交换虚拟变量?

来自分类Dev

如何在 Fortran 中复制未知类型的数据?

来自分类Dev

如何在 Fortran 中设置 dll 搜索路径?

来自分类Dev

如何在 TFS 2018 中升级团队项目的流程模板?

来自分类常见问题

如何在Elasticsearch 2.0中启用远程访问/请求?

来自分类Dev

如何在centos中启用mysql的远程访问?

来自分类Dev

如何在centos中启用mysql的远程访问?