Program beta2

!переменный, общие для 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 разработаны доцентом Д.В.Багно


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: