Привет, У меня возникают проблемы с наложением граничных условий на двумерную проблему дискретизации в fortran. Моя сетка дискретизации представляет собой двумерный квадрат, который идет от -L до L в направлениях x, y.2D граничные условия в 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