您好,我在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