!переменный, общие для beta1 и функций aksi и delta
Common /cblock/ a,ak,m,b
pi = 3.14159
!входные данные; при указанных значениях
!результат для контроля: h = 0.8958030
!длина волны; размерности alambda и t одинаковые
alambda = 0.85
!толщина волноведущего слоя
t = 5.
!отн. диэл. проницаемость покрытия
e1 = 2.11
!отн. диэл. проницаемость волноведущего слоя
e2 = 2.14
!отн. диэл. проницаемость подложки
e3 = 2.12
!номер моды
m = 1
!погрешность значения корня
eps = 1e-6
!вычисляется коэффициент A
a = 2 * sqrt(e2-e3) * t/alambda
!вычисляется коэффициент K
ak = (e2-e1) / (e2-e3)
!вычисляется параметр B по (3.10)
b = atan(sqrt(ak-1)) / pi
!подготовка начальных данных для итерационной процедуры
!начальное значения параметра кривизны
d1 = b - 1 + 2*(1+1/sqrt(ak))/pi
If(ak.eq. 1) then
!для K=1
d2 = 1 - 2*sqrt(2)/pi
Else
!для K>1
d2 = 1 - b - 2/pi
Endif
!нижняя граница области решения
aksi1 = aksi(d1)
!верхняя граница области решения
aksi2 = aksi(d2)
!итерационная процедура;
!цикл пока не достигнута заданная точность
Do while(abs(aksi2-aksi1).gt. eps)
!обращения к функции вычисления параметра кривизны
|
|
d1 = delta(aksi1)
d2 = delta(aksi2)
!обращения к функции решения квадратного уравнения
aksi1 = aksi(d1)
aksi2 = aksi(d2)
Enddo
!определение h
h = (aksi1+aksi2)/2 * 2*pi/alambda * sqrt(e2-e3)
!вывод результата
print *, h
End
!--------------------------------------------------------------
!Функция вычисления корня уравнения по формуле (3.21а)
Function aksi(d)
!переменные, получаемые из beta2
Common /cblock/ a,ak,m,b
!дискриминант квадратного уравнения
dis = (1-b-d)**2 + 4*(a+d)*(a-b-m)
if(dis.lt. 0) stop 'Недопустимое сочетание вх. данных'
!корень уравнения
aksi = 1 - ((sqrt(dis)-1+b+d) / (2*(a+d)))**2
Return
End
!--------------------------------------------------------------
!Функция вычиления параметра кривизны по формуле (3.21б)
Function delta(x)
!переменные, получаемые из beta2
Common /cblock/ a,ak,m,b
!ф-ция f1
f1 = atan(sqrt(1/x**2-1))
f1 = (f1 + atan(sqrt(ak/x**2-1))) / 3.14159
!числитель
t2 = b + (1-b)*sqrt(1-x) - f1
!знаменатель
t1 = sqrt(1-x) -1+x
!параметр кривизны
delta = t2/t1
Return
End
!--------------------------------------------------------------
*)программмы к разделам 3.2.2 и 3.3.2 разработаны доцентом Д.В.Багно