5

안녕하세요 포트란의 2 차원 이산화 문제에 경계 조건을 부과하는 데 어려움이 있습니다. 내 이산화 격자는 x, y 방향으로 -L에서 L까지가는 2 차원 사각형입니다.포트란의 2D 경계 조건

x = L에서 경계선에 이 있고 그 값이 지정되는 경계 조건을 부과하고자합니다. 또한 경계선 y = L에서 경계 조건을 지정하려고합니다. 그런 다음 x, y = -L에 대해서도 동일하게하십시오.

올바른 구문에 대한 기본적인 시도는 다음과 같습니다. 이 구문이 정확하고 내가하는 일을하는 가장 빠른 방법인지 궁금합니다. 어떻게 해야할지 모르겠지만 콜론 표기법을 사용하여 루프를 수행하지 않는 방법이 있다고 가정합니다.

u (:) 표기법을 올바르게 사용하는 방법이나 : for : 나를 위해 실제로 수행하고있는 방법이 확실하지 않으므로 구문이 잘못 될 수 있습니다. 감사! 아크 라이트 포인트는 밖으로, 종종 초보자를위한 문제를 혼동으로

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 
+0

왜 i 또는 j로 반복하고 루프 내에서 루프 변수를 전혀 사용하지 않습니까? 이 경우 콜론 표기 * 또는 *를 사용해야합니다. – Ross

+0

@ 로스 나는 첫 번째 루프에서 i를 반복하고, x는 i의 관점에서 정의되기 때문에 첫 번째 라인에서 루프 변수 i를 사용합니다. 또한 j 이상의 루프에서는 y를 정의 할 때 첫 번째 줄에 루프 변수를 사용합니다. 이게 정확하지 않습니까? 콜론 표기법을 사용하면 어떻게됩니까? 루프 표기법에서 콜론 표기법이 작동합니까? (나는 둘 다 섞여 보인다.) 당신의 도움을 주셔서 감사합니다! –

+1

나는 x가 포인트 값이라는 것을 놓쳤습니다. 그렇다면 가까운 사이라고 생각합니다.하지만'u (:, ny)'대신'u (i, ny)'를 설정해야합니다. 콜론은 '이 행/열의 모든 위치'를 나타내며 x 값에 따라 한 번에 하나씩 만 설정하려고합니다. – Ross

답변

4

콜론, 여기에 불필요합니다. 인덱스 값 (i 또는 j)으로 경계를 반복하면서 올바른 것입니다. 해당 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- 인덱스에서 가능한 각 i- 인덱스에 대해 1D 배열입니다. 따라서 전체 경계 조건을 한 번에 하나의 값으로 설정했습니다.

또 다른 빠른 조언 : 루프 및 기타 구조물을 들여 씁니다. 코드는 그렇게 쉽게 읽을 수 있습니다.

관련 문제