Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Fortran 2018中访问远程团队_Fortran_Fortran2018 - Fatal编程技术网

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

如何在Fortran 2018中访问远程团队,fortran,fortran2018,Fortran,Fortran2018,我已经编写了一个使用团队的简短Fortran程序,但它的功能并没有达到预期。我想知道我的编程语法是否正确,或者我的编译器中是否有错误 我一直在读一本关于Fortran 2018及其一些较新实现(包括团队)的书。很少有教科书谈到团队,我能找到的唯一一本没有提供任何程序示例。我编写、编译并运行了一个非常短的程序,该程序应该可以打印一个团队的值,同时在另一个团队中工作。语法似乎相当直截了当,但程序不起作用。我使用OpenCoarrays 2.7.1编译器以及2.8.0版编译了该程序 program r

我已经编写了一个使用团队的简短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
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
我不明白为什么它不打印对方团队编号中的图像数量,然后打印当前团队编号中的图像数量。相反,它只是将同一内容打印两次,表示方括号索引“[]”不起作用

我做错了什么?是否有任何Fortran 2018程序员能够解释这一点

谢谢你抽出时间

史蒂夫·莱昂内尔,感谢你提出的关于研究与
变更团队
声明的关联选项的建议。我的书中提到了这个选项,但不幸的是,再次没有例子

根据书中描述的语法,我修改了我的程序,如下所示:

2    3    3
1    2    2
2    3    3
1    2    2
2    3    3
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)
它似乎认为我试图使用
团队编号
作为一个函数,而不是像书中描述的那样作为索引选项


由于没有任何公开的工作示例,无论是在书中还是在网上,我都不知道编译器想要我做什么。本书通常显示了这些定义的“参考书”表示。所以我从来都不太确定这些陈述到底应该是什么样子。然而,在我如何编写这两个语句的情况下,它们使用了书中描述的相同选项。非常感谢您的任何建议或想法。

您不是要求“对方团队编号”提供
tempnum
,而是要求您当前团队中的图1或图2。由于该团队中所有图像的图像数量相同,因此您看到的结果是正确的


当一个团队成立并且您进行了
更改团队
时,当前团队的图像索引是从1开始的有序集合。您可能想看看可选的“Association coarray”参数到
CHANGE TEAM

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

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