こんにちは、私はfortranの2次元離散化問題に境界条件を課すことに問題があります。私の離散化グリッドは、x、y方向に-LからLに向かう2次元の正方形です。Fortranの2D境界条件
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
ループ内でループ変数を使用していないのはなぜですか?この場合は、コロン表記*または*を使用する必要があります。 – Ross
@Ross私は最初のループでiをループしています。そして、xはiに関して定義されているので、最初の行でループ変数iを使用しています。また、jを超えるループでは、yを定義するときに最初の行にループ変数を使用します。これは正しいのではありませんか?コロンの表記法を使用してこれをどうすればできますか?コロン記法はループ表記の中で機能しますか? (私は両方を混合しているようだ)。ご協力いただきありがとうございます! –
私はxがポイント値であることを忘れました。それから、あなたは近いと思いますが、 'u(:、ny)'ではなく 'u(i、ny)'を設定する必要があります。コロンは「この行/列内のすべての場所」を示し、x値に基づいて一度に1つずつしか設定しません。 – Ross