gpt4 book ai didi

fortran - Fortran 中的二维边界条件

转载 作者:行者123 更新时间:2023-12-04 19:36:50 29 4
gpt4 key购买 nike

嗨,我在 Fortran 中对二维离散化问题强加边界条件时遇到了麻烦。我的离散化网格是一个二维正方形,在 x,y 方向上从 -L 到 L。

我想强加这样的边界条件,
在 x=L 的边界线上,指定了函数的值。
我还想指定边界线 y=L 处的边界条件。然后对 x,y=-L 做同样的事情。

下面是对正确语法的基本尝试。
我想知道这种语法是否正确和/或做我正在做的事情的最快方法。我认为有一种方法可以在不使用 do 循环的情况下使用冒号表示法,只是不确定如何。

我的语法可能不正确,因为我不确定如何正确使用 u(:) 表示法,或者 : 真正为我做什么。谢谢!

integer :: i,j
integer, parameter :: nx=60, ny=60
real, parameter :: h=0.1 !step size
real, dimension(-nx:nx,-ny:ny) :: u
real :: L

L=h*nx

do i = -nx, nx

x = real(i)*h

u(:,ny) = cos(atan(L/x)) ! is this correct?
u(:,-ny) = cos(atan((-L)/x))

end do

do j = -ny, ny

y = real(j)*h

u(nx, :) = cos(atan(y/L))
u(-nx, :) = cos(atan(y/(-L)))

end do

最佳答案

冒号在这里是不必要的,正如 arclight 指出的那样,对于初学者来说,经常会混淆这个问题。您正在使用索引值( ij )遍历边界,这是正确的。你只需要设置相应的u用您的索引变量索引的值。例如,对于 i 上的循环:

do i = -nx, nx
x = real(i)*h
u(i,ny) = cos(atan(L/x))
u(i,-ny) = cos(atan((-L)/x))
end do

冒号在其他地方很有用,它引用数组的一个子集。 u(:,ny)u(-nx:nx,ny) 相同,它是 ny 的 j-index 处每个可能的 i-index 的一维数组。因此,您已将整个边界条件一次性设置为一个值。

另一个快速建议:确保缩进循环和其他结构。这样,代码可读性更高。

关于fortran - Fortran 中的二维边界条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39667981/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com