将 OR 逻辑运算符从 C++ 转换为 Fortran



以下C++逻辑运算符转换为Fortran 90(.f90(会是什么?如果 (vx存在或vy存在(。这里vxvy是速度的组成部分

if(vx || vy){
vT=sqrt(vx*vx + vy*vy);
}

我试过以下

if(vx .or. vy) then
vT = sqrt(vx*vx + vy*vy)
end if

但是我收到错误:

operands of logical operator `.or.` at (1) are REAL(8)/REAL(8).

谁能指导我到这里?

C++版本隐式地将vxvy与零进行比较。

在 Fortran 中,您必须显式执行此操作1

if (vx /= 0 .or. vy /= 0) then

由于if语句看起来像是性能优化,因此可能值得质疑它是否完全需要,或者是否可以替换为对vT的无条件赋值(如果vxvy都为零,则会将vT设置为零(。

1我希望我做对了;很多年没有用Fortran编程了。

在本例中,它无关紧要,但通常应该注意的是,Fortran逻辑运算不会短路。因此,例如,以下C++代码

if (a == 0 || 10 / a == 1)
{
...
}

不等同于

if (a == 0 .or. 10 / a == 1) then
...
end if

在福特兰。编译器可能决定先评估第二个术语,然后再...哎呀。它应该使用两个嵌套ifs 编写。

最新更新