Лабораторная работа № 1
Расчет магнитного поля в зазоре
электрической машины методом конечных разностей для различных способов
намагничивания
Методические указания. Описание программы расчета.
Программа составлена на языке Fortran 5.1 фирмы Microsoft.
Вначале в качестве исходных данных вводят следующие величины:
-
размеры расчетной области по осям x и y (т.е. число узлов сетки в этих направлениях) dim_x и dim_y;
-
величина зазора, ширина зубца и ширина паза, выраженные в числе узлов расчетной сетки, delta, bz и bp;
-
потенциалы гладкой поверхности, центрального и соседнего зубцов, совокупность которых определяет способ намагничивания, h_1, h_z_1 и h_z_2;
-
максимально допустимое число итераций max_iter;
-
требуемая точность решения (допустимая невязка) eps;
-
коэффициент релаксации omega.
Затем выделяют память под рабочие массивы согласно заявленным размерам
расчетной области
ALLOCATE
(u(1:dim_y,1:dim_x),res(1:dim_y,1:dim_x),b(1:dim_y),STAT=ier)
Начальные значения
DO i =
1,dim_y
DO j =
1,dim_x
u(i,j) =
0.0
res(i,j)
= 0.0
END DO
END DO
Задание граничных условий первого рода
k1 =
delta+1
l2 = bz/2+1+1
l3 =
l2+bp
гладкая поверхность:
DO j =
1,dim_x
u(i,j) =
h_1
END DO
центральный зубец:
DO j =
1,12
u(k1,j) =
h_z_1
END DO
DO i =
k1,dim_y
u(i,l2) =
h_z_1
END DO
соседний зубец:
DO j =
l3,dim_x
u(k1,j) =
h_z_2
END DO
DO i =
k1,dim_y
u(i,l3) =
h_z_2
END DO
Инициализация счетчика итераций и начало итерационного цикла
iter = 1
DO WHILE(
.TRUE. )
Обнуление контролируемой величины максимального остатка на текущей итерации
r = 0.0
Задание граничных условий второго рода
DO i =
1,k1-1
u(i,1) =
u(i,3)
u(i,dim_x)
= u(i,dim_x-2)
END DO
DO j =
l2+1,l3-1
u(dim_y,j)
= u(dim_y-2,j)
END DO
Расчет скалярных потенциалов методом конечных разностей
DO i =
2,dim_y-1
DO j =
2,dim_x-1
IF (i
.GE. k1) THEN
! исключение из расчетной
IF
(j .LE. l2) CYCLE
! области массивов централь-
IF (j
.GE. l3) CYCLE
! ного и соседнего зубцов
END IF
res(i,j) = u(i-1,j)+u(i+1,j)+u(i,j-1)+u(i,j+1)-4*u(i,j)
u(i,j) = u(i,j) + omega*res(i,j)/4
IF
(ABS(res(i,j)) .GT. r) r = ABS(res(i,j))
END DO
END DO
Проверка достигнутой точности
IF
(r .LE. eps) EXIT
iter =
iter+1
Проверка на максимум итераций
IF (iter
.GT. max_iter) EXIT
Завершение итерационного цикла
END DO
Расчет индукции на гладкой поверхности
DO j =
2,dim_x-1
b(j) = (-11*u(2,j)+18*u(3,j)-9*u(4,j)+2*u(5,j))/6
END DO
Затем идет вывод результатов расчета на экран и возможное сохранение в
файле числовой и графической информации.
Перед завершением программы следует освободить
занимаемую память от рабочих массивов для следующего расчета
DEALLOCATE (u,res,b,STAT=ier)