program Dirihle_task implicit none real, allocatable, dimension(:,:) :: u,ff real, allocatable, dimension(:) :: x,y real :: temp, dmax, dm integer :: N,i,j real :: eps real :: h integer :: iter, itermax eps = 0.001 ! точность вычисления N = 20 ! N*N = количество узлов сетки внутри границ, всего (N+2)*(N+2) itermax = 1000 !Максимально допустимое число итерации h = 1.0/(N+1) allocate(u(0:(N+1),0:(N+1))) allocate(ff(0:(N+1),0:(N+1))) allocate(x(0:(N+1))) allocate(y(0:(N+1))) call random_number(u) ! инициализация u случайными значениями, можно и по другому. ! Задание сеток по x и y и граничных условий: ??????? ! Вычисление правой части в узлах сетки: ???????? ! Итерации алгоритма Гаусса-Зейделя dmax = 1000.0 iter = 0 do while ((dmax > eps).and.(iter < itermax)) ???????? ! В этом цикле обязательно должны изменяться dmax и iter end do write(*,*) "Число итераций: ",iter write(*,*) "Максимальное расхождение: ",dmax open(1,file="dirihle_sequential.output",form="formatted") do i=0,N+1 write(1,'(2000(F5.2,2X,:))') (u(i,j), j=0,N+1) end do close(1) deallocate(u) deallocate(ff) deallocate(x) deallocate(y) contains real function f(x,y) real :: x,y f = 0.0 ! Начните с уравнения Лапласа, после отладки можно уже задать функцию end function f real function g(x,y) real :: x,y real :: retval retval = ?????? g = retval end function g end program Dirihle_task