Сайт Александра Зеленина

Сайт Александра Зеленина

Граничные условия для FDTD-1

 

Александр Зеленин.

Граничные условия для FDTD.

В счетном объеме каждый вектор Е или Н вычисляется через 4 соседних вектора. Так происходит по всему объему. Но на границах самые последние векторы Е имеют: на гранях параллелепипеда счетного объема только три соседних вектора Н из четырех необходимых; на ребрах - два. Поэтому точно вычислить поле Е на границах невозможно.

Проблема вычисления граничных полей решается различными способами.

1. Условия PEC - идеальный проводник.

Условия PEC таковы, что граничные вектора Е никогда не вычисляются, а, значит, всегда равны нулю. Как известно, поле Е всегда равно нулю в идеальном проводнике, поэтому такие границы ведут себя как идеальный проводник: электромагнитные волны 100 % отражаются обратно в счетный объем.

2. Условия симметрии.

В некоторых случаях поле Е или поле Н может быть симметричным относительно некоторой плоскости. Тогда в этой плоскости можно задать условие симметрии и тем самым вдвое уменьшить счетный объем. При этом рядом с данной плоскостью симметрии будет проходить граница счетного объема с условиями симметрии.

Симметрия может быть четной или нечетной.

При нечетной симметрии плоскость симметрии проходит внутри счетного объема параллельно грани на расстоянии пол-ячейки от грани. Условия нечетной симметрии для симметрии по Е получаются простым переносом значений ближайших к границе векторов Е на саму границу, а для симметрии по Н получаются так же, но при этом вектор Е меняет свой знак. Ниже приведены примеры нечетной симметрии для Е и Н.

Пример: нечетная симметрия по Е:

  // ПЛОСКОСТЬ Y=1/2 симметрична по E

          For I:=1 to NX-1 do

             For K:=1 to NZ do  EX[I,1,K]:=EX[I,2,K];

          For I:=1 to NX do

             For K:=1 to NZ-1 do  EZ[I,1,K]:=EZ[I,2,K];

Пример: нечетная симметрия по Н:

  // ПЛОСКОСТЬ Y=1/2 симметрична по H

          For I:=1 to NX-1 do

             For K:=1 to NZ do  EX[I,1,K]:=-EX[I,2,K];

          For I:=1 to NX do

             For K:=1 to NZ-1 do  EZ[I,1,K]:=-EZ[I,2,K];

Условия четной симметрии несколько сложнее. Плоскость симметрии проходит на расстоянии целой ячейки от границы, поэтому кроме поля Е на границе необходимо помнить о прилегающих к границе векторах Н. При этом симметрии по Е и Н отличаются друг от друга только знаками переносимых значений.

Пример: четная симметрия по Н:

  // ПЛОСКОСТЬ Y=1 симметрична по H, вычисление поля Е

     begin

         For K:=1 to NZ do

            For I:=1 to NX-1 do   EX[I,1,K]:=-EX[I,3,K];

         For K:=1 to NZ-1 do

            For I:=1 to NX do     EZ[I,1,K]:=-EZ[I,3,K];

     end;

  // ПЛОСКОСТЬ Y=1 симметрична по H, вычисление поля Н

     begin

         For K:=1 to NZ-1 do

            For I:=1 to NX do   HX[I,1,K]:=HX[I,2,K];

         For K:=1 to NZ do

            For I:=1 to NX-1 do     HZ[I,1,K]:=HZ[I,2,K];

     end;                 

Пример: четная симметрия по Е:

  // ПЛОСКОСТЬ Y=1 симметрична по Е, вычисление поля Е

     begin

         For K:=1 to NZ do

            For I:=1 to NX-1 do   EX[I,1,K]:=EX[I,3,K];

         For K:=1 to NZ-1 do

            For I:=1 to NX do     EZ[I,1,K]:=EZ[I,3,K];

     end;

  // ПЛОСКОСТЬ Y=1 симметрична по Е, вычисление поля Н

     begin

         For K:=1 to NZ-1 do

            For I:=1 to NX do   HX[I,1,K]:=-HX[I,2,K];

         For K:=1 to NZ do

            For I:=1 to NX-1 do     HZ[I,1,K]:=-HZ[I,2,K];

     end;                 

При четной симметрии граничные поля Е и Н устанавливаются не одновременно, а на соответствующих полушагах по времени.

3. Простые условия поглощения (АВС)

Для условий поглощения значения векторов электрического поля на границе вычисляются на основании известных полей в приграничных слоях. Причем берутся приграничные поля не только на текущем шаге по времени, но и на предыдущих шагах. Все эти условия пытаются спрогнозировать поле на границе.

В литературе встречается описание целого ряда простых условий поглощения разных авторов. Всего их наберется с десяток. Практически чаще всего применяют условия Мура (Mur) и Лиао (Liao). Остальные не применяют или используют очень редко из-за их более низкой эффективности (Trefethen-Halpern, Higdon) или неудобства в использовании (Retarded Time - RT), или из-за неприменимости в декартовых координатах (Bayliss-Turkel), или из-за тенденции к потере стабильности (относится почти ко всем условиям, но особо - к условиям, основанным на высших порядках точности конечных разностей).

Все условия имеют довольно низкий коэффициент отражения от границы, составляющий порядка 0,1..1 %, но только при падении волны на границу под прямым углом. При падении под острым углом коэффициент отражения растет вплоть до 100 % при падении по касательной. Из-за этого границы необходимо располагать как можно дальше от источника электромагнитных волн, чтобы волны приходили к границе под как можно большими углами, желательно по нормали к границе.

Следует отметить, что оценка эффективности тех или иных простых граничных условий различна у разных авторов. Например, один источник пишет, что условия Лиао на 20 dB эффективнее условий Мура 2-го порядка. Другой пишет, что условия Лиао на 12 dB хуже условий Мура 1-го порядка. Имеется ввиду коэффициент отражения. И оба доказывают свои выводы графиками сравнительных расчетов.

Истина, скорее всего, посередине: для каждой конкретной задачи имеются свои оптимальные граничные условия. Одно плохо - заранее никогда не знаешь, КАКИЕ лучше.

Примечание. Возможно, введение чисел двойной точности радикально повысит стабильность, но пока это непозволительная роскошь, расходующая в два раза больше памяти и времени.

Итак, граничных условий много. Здесь рассмотрим три варианта простейших граничных условий: Мура 1-го порядка, Лиао 3-го порядка и RT. В таблице S (большое) и s (малое) - разные переменные! S = (dT * c)/ D - число Куранта, где D - шаг по пространству, dT- шаг по времени, с- скорость света, а s - координата границы. s-1 - одна ячейка внутрь счетного объема, s-2 - две ячейки от границы и т.д. На поясняющих рисунках от границы (surface - внешней поверхности счетного объема) по горизонтали отложена координата s, а по вертикали - время в шагах счета (n - временной индекс). Формула приведена в двух видах, дополняющих друг друга в пространстве и времени. На рисунках пустой кружок - вычисляемое значение, черные кружки - требуемые значения. Сразу можно определить, какие переменные приграничной области нужно хранить в дополнительных массивах и сколько шагов по времени они должны храниться.

Условия

Формула

Поясняющая картинка

Mur 1-го порядка

типично S=0,5 для минимального отражения под прямым углом, но может меняться для получения минимального коэффициента отражения под другими углами.

Liao 3-го порядка

Для данного случая S=0,5.

Примечание: в литературе условия Лиао часто ставят особняком с условиями ABC, т.к. они базируются на других исходных предпосылках.

RT-ABC

Для данного случая S=0,5, шаг по времени строго полшага по пространству*, шаг по пространству строго одинаков во всех направлениях.

*Когда речь идет о сопоставлении времени и размеров пространства, то, конечно, секунды с метрами не сравниваются. Время превращается в расстояние при умножении на скорость. В данном случае шаг по времени умножается на скорость света в вакууме и результат сравнивается с шагом по пространству: (dT c) = 0,5 D или, иначе, dT = 0,5 D/ c.

 

Видно, что больше всего массивов переменных нужно хранить для условий RT (5), меньше всего - для условий Мура (1). Для условий Лиао нужно 3 дополнительных массива переменных.

 

А теперь пример реализации условий Мура 1-го порядка.

Procedure MursFirstABC;

  var I,J,K: Integer;

begin

// УСЛОВИЯ ПОГЛОЩЕНИЯ. Массивы вида EZX1, EZXN и т.п. - массивы сохраненных на предыдущем шаге по времени значений поля Е в приграничной области. Процедура сохранения приводится ниже.

// коэффициенты Tx, Ty и Tz равны c*dT/dX, c*dT/dY и c*dT/dZ соответственно. c-скорость света, dT- шаг по времени; dX, dY, dZ - шаги по пространству.

 

  //ЛЕВАЯ И ПРАВАЯ ПЛОСКОСТИ

 // Ez для двух плоскостей YxZ (левой и правой)

      for J:=2 to NY-1 do

      for K:=1 to NZ-1 do begin

                EZ[1,J,K]:=EZX1[J,K]+(Tx-1)/(Tx+1)*(EZ[2,J,K]-EZ[1,J,K]);

                EZ[NX,J,K]:=EZXN[J,K]+(Tx-1)/(Tx+1)*(EZ[NX-1,J,K]-EZ[NX,J,K]);

      end;

 // Ey для двух плоскостей YxZ [левой и правой]

      for J:=1 to NY-1 do

      for K:=2 to NZ-1 do begin

             EY[1,J,K]:=EYX1[J,K]+(Tx-1)/(Tx+1)* (EY[2,J,K]-EY[1,J,K]);

           EY[NX,J,K]:=EYXN[J,K]+(Tx-1)/(Tx+1)* (EY[NX-1,J,K] -EY[NX,J,K]);

      end;

 

  //ВЕРХНЯЯ И НИЖНЯЯ ПЛОСКОСТИ

 // Ex для двух плоскостей XxZ [верхней и нижней]

      for K:=2 to NZ-1 do

      for I:=1 to NX-1 do begin

             EX[I,1,K]:=  EXY1[I,K]+(Ty-1)/(Ty+1)*(EX[I,2,K]-EX[I,1,K]);

             EX[I,NY,K]:=  EXYN[I,K]+(Ty-1)/(Ty+1)*(EX[I,NY-1,K]-EX[I,NY,K]);

      end;

 

 // Ez для двух плоскостей XxZ [верхней и нижней]

      for K:=1 to NZ-1 do

      for I:=2 to NX-1 do begin

             EZ[I,1,K]:=  EZY1[I,K]+(Ty-1)/(Ty+1)*(EZ[I,2,K]-EZ[I,1,K]);

             EZ[I,NY,K]:=  EZYN[I,K]+(Ty-1)/(Ty+1)*(EZ[I,NY-1,K]-EZ[I,NY,K]);

      end;

 

  //БЛИЖНЯЯ И ДАЛЬНЯЯ ПЛОСКОСТИ

 // Ey для двух плоскостей XxY [ближней и дальней]

      for I:=2 to NX-1 do

      for J:=1 to NY-1 do begin

              EY[I,J,NZ]:=EYZN[I,J]+(Tz-1)/(Tz+1)*(EY[I,J,NZ-1]-EY[I,J,NZ]);

              EY[I,J,1]:=EYZ1[I,J]+(Tz-1)/(Tz+1)*(EY[I,J,2]-EY[I,J,1]);

      end;

 

 // Ex для двух плоскостей XxY [ближней и дальней]

      for I:=1 to NX-1 do

      for J:=2 to NY-1 do begin

            EX[I,J,NZ]:=  EXZN[I,J]+(Tz-1)/(Tz+1)*(EX[I,J,NZ-1]-EX[I,J,NZ]);

            EX[I,J,1]:=  EXZ1[I,J]+(Tz-1)/(Tz+1)*(EX[I,J,2]-EX[I,J,1]);

      end;

 

// РЕБРА, параллельные оси Z

      for K:=1 to NZ-1 do begin

                EZ[1,1,K]:=EZX1[1,K]+(Tx-1)/(Tx+1)*(EZ[2,1,K]-EZ[1,1,K]);

                EZ[1,NY,K]:=EZX1[NY,K]+(Tx-1)/(Tx+1)*(EZ[2,NY,K]-EZ[1,NY,K]);

                EZ[NX,1,K]:=EZXN[1,K]+(Tx-1)/(Tx+1)*(EZ[NX-1,1,K]-EZ[NX,1,K]);

                EZ[NX,NY,K]:=EZXN[NY,K]+(Tx-1)/(Tx+1)*(EZ[NX-1,NY,K]-EZ[NX,NY,K]);

      end;

 

// РЕБРА, параллельные оси Y

      for J:=1 to NY-1 do begin

               EY[1,J,1]:=EYX1[J,1]+(Tx-1)/(Tx+1)*(EY[2,J,1]-EY[1,J,1]);

               EY[1,J,NZ]:=EYX1[J,NZ]+(Tx-1)/(Tx+1)*(EY[2,J,NZ]-EY[1,J,NZ]);

               EY[NX,J,1]:=EYXN[J,1]+(Tx-1)/(Tx+1)*(EY[NX-1,J,1]-EY[NX,J,1]);

               EY[NX,J,NZ]:=EYXN[J,NZ]+(Tx-1)/(Tx+1)*(EY[NX-1,J,NZ]-EY[NX,J,NZ]);

      end;

 

// РЕБРА, параллельные оси X

      for I:=1 to NX-1 do begin

                 EX[I,1,1]:=EXY1[I,1]+ (Ty-1)/(Ty+1)*(EX[I,2,1]-EX[I,1,1]);

                 EX[I,1,NZ]:=EXYN[I,NZ]+(Ty-1)/(Ty+1)*(EX[I,2,NZ]-EX[I,1,NZ]);

                 EX[I,NY,1]:=EXY1[I,1]+(Ty-1)/(Ty+1)*(EX[I,NY-1,1]-EX[I,NY,1]);

                 EX[I,NY,NZ]:=EXYN[I,NZ]+(Ty-1)/(Ty+1)*(EX[I,NY-1,NZ]-EX[I,NY,NZ]);

      end;

end;

// сохранение приграничных полей для MursFirstABC

Procedure GetBorderValues;

  var I,J,K: Integer;

begin

     // слева и справа

      for J:=1 to NY do for k:=1 to NZ-1 do

          begin

          EZX1[J,K]:=EZ[2,J,K];

          EZXN[J,K]:=EZ[NX-1,J,K];

          end;

      for J:=1 to NY-1 do for k:=1 to NZ do

          begin

          EYX1[J,K]:=EY[2,J,K];

          EYXN[J,K]:=EY[NX-1,J,K];

          end;

     // верх и низ

      for I:=1 to NX do for k:=1 to NZ-1 do

          begin

          EZY1[I,K]:=EZ[I,2,K];

          EZYN[I,K]:=EZ[I,NY-1,K];

          end;

      for I:=1 to NX-1 do for k:=1 to NZ do

          begin

          EXY1[I,K]:=EX[I,2,K];

          EXYN[I,K]:=EX[I,NY-1,K];

          end;

     // ближняя и дальняя

      for I:=1 to NX do for J:=1 to NY-1 do

          begin

          EYZ1[I,J]:=EY[I,J,2];

          EYZN[I,J]:=EY[I,J,NZ-1];

          end;

      for I:=1 to NX-1 do for J:=1 to NY do

          begin

          EXZ1[I,J]:=EX[I,J,2];

          EXZN[I,J]:=EX[I,J,NZ-1];

          end;

end;

Примечание: в литературе встречается и несколько иная форма записи условий Мура 1-го порядка. К приведенной здесь формуле добавляется еще один член, который сам Мур относит к условиям второго порядка, а другие авторы утверждают, что этот член должен быть и в формуле 1-го порядка.

Далее об условиях PML.

файл:/zfdtd/method/abc.htm