有没有办法在 where 构造中进行函数调用?

Is there a way to make a function call within a where construct?

我想做这样的事情:

Real a(10)
Real b(10)

! define a and b, then

where (a<b)
  a = f1(a,b)
elsewhere
  a = f2(a,b)
endwhere

function f1(a,b)
! somehow or another operates only where a < b
end function f1

function f2(a,b)
! somehow or another operates only where a>=b
end function f2

我想我可以做类似的事情

a = f1(a,b)
a = f2(a,b)

function f1(a,b)
where (a<b) ...
end function f1

function f2(a,b)
where (a>=b) ...
end function f2

但我认为我试图解决问题的方式在某些方面会很好。有办法吗?

为了回应一些评论,我想通过调用已定义的函数来对 a 进行操作,这些函数的代码行太多,无法很好地适应此处。我无法讨论这些功能,但可以说,例如它们依赖于某种收敛循环:

function f1(a,b)

real a(10), b(10)
real f1(10)

real tmp(10), conv

real tol = 1.e-5
tmp = a
f1 = sin(b*a)
conv = max(abs(f1-tmp))

while (conv > tol)
  tmp = f1
  f1 = sin(b*tmp)
  conv = max(abs(f1-tmp))
endwhile

return

end function

有很多方法可以改进这一点,数学可能不会收敛等等,但这是一个可以理解我所说内容的例子。问题是,我希望它只在 where 构造定义的域上运行。谢谢

f1f2 是非元素函数的情况下,这些函数的计算基于参数数组的所有元素。

但是,对于基本函数 f1f2,只有 ab 中与真实掩码匹配的那些元素将被处理(基本)。

查看您的示例函数,元素函数不适合,因此您必须使用替代方法。但是,如果您可以用 where 构造来包装整个函数,那么您可能会幸运地使用元素。