Witam Mam problem z nałożeniem warunków brzegowych na dwuwymiarowy problem dyskretyzacji w fortran. Moja siatka dyskretyzacji to dwuwymiarowy kwadrat, który przechodzi od -L do L w kierunkach x, y.Warunki brzegowe 2D w Fortranie
Chcę narzucić warunek brzegowy, aby na linii granicznej na x = L, wartość funkcji została określona. Chcę również określić warunek brzegowy na linii granicznej y = L. Następnie wykonaj to samo dla x, y = -L.
Podstawowa próba poprawnej składni znajduje się poniżej. Zastanawiam się, czy ta składnia jest poprawna i/lub najszybszy sposób robienia tego, co robię. Zakładam, że istnieje sposób, aby to zrobić bez pętli również przy użyciu notacji dwukropka po prostu nie wiem jak.
Moja składnia może być niepoprawna, ponieważ nie jestem pewien, jak poprawnie użyć notacji u (:) lub: co naprawdę robi dla mnie. Dzięki!
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
Dlaczego używasz pętli i lub j i nie używasz zmiennej pętli we wszystkich pętlach? Powinieneś * albo * użyć w tym przypadku notacji dwukropka * lub * pętli. – Ross
@Ross Pętlę I w pierwszej pętli, i używając zmiennej pętli, I, w pierwszym wierszu, ponieważ x jest zdefiniowany jako i. Również w pętli nad j, używam zmiennej pętli w pierwszym wierszu, gdy definiuję y. Czy to nie jest poprawne, czy nie? Jak to zrobić za pomocą zapisu dwukropka? Czy notacja dwukropka działa w notacji pętli? (Wydaje się, że miksuję oba). Dzięki za pomoc! –
Brakowało mi, że x jest wartością punktową. Wtedy myślę, że jesteś blisko, ale musisz ustawić 'u (i, ny)' zamiast 'u (:, ny)'. Dwukropek wskazuje "wszystkie lokalizacje w tym wierszu/kolumnie", a chcesz ustawić tylko jeden na raz na podstawie wartości x. – Ross