您好,我在Fortran的二维离散化问题上施加边界条件时遇到了问题。我的离散化网格是一个二维正方形,它在x,y方向上从-L到L。Fortran中的二维边界条件
我想强加边界条件,使得在x = L的边界线上的 指定函数的值。 我也想指定边界线y = L处的边界条件。然后对x,y = -L执行相同操作。
下面是正确语法的基本尝试。 我在想,如果这个语法是正确的和/或在做我正在做的最快的方式。我假设有一种方法可以做到这一点,而不使用循环也使用冒号符号,只是不知道如何。
我的语法可能不正确,因为我不确定如何正确使用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
你为什么要循环遍历i或j,而不是在循环内部使用循环变量?在这种情况下,您应该*使用冒号记号*或*循环。 – Ross
@Ross我在第一个循环中循环遍历i,并在第一行中使用循环变量i,因为x按i定义。同样在j上的循环中,当我定义y时,我在第一行使用循环变量。这不正确或不是?我如何使用冒号符号来做到这一点?循环表示法中冒号符号是否工作? (似乎我混在一起)。谢谢你的帮助! –
我错过了x是一个点值。那么,我认为你很接近,但是你需要设置'u(i,ny)'而不是'u(:,ny)'。冒号表示'此行/列中的所有位置',并且您只需要基于x值一次设置一个。 – Ross