有没有办法在 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 构造定义的域上运行。谢谢
在 f1
和 f2
是非元素函数的情况下,这些函数的计算基于参数数组的所有元素。
但是,对于基本函数 f1
或 f2
,只有 a
和 b
中与真实掩码匹配的那些元素将被处理(基本)。
查看您的示例函数,元素函数不适合,因此您必须使用替代方法。但是,如果您可以用 where
构造来包装整个函数,那么您可能会幸运地使用元素。
我想做这样的事情:
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 构造定义的域上运行。谢谢
在 f1
和 f2
是非元素函数的情况下,这些函数的计算基于参数数组的所有元素。
但是,对于基本函数 f1
或 f2
,只有 a
和 b
中与真实掩码匹配的那些元素将被处理(基本)。
查看您的示例函数,元素函数不适合,因此您必须使用替代方法。但是,如果您可以用 where
构造来包装整个函数,那么您可能会幸运地使用元素。