Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
текстовка.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.01 Mб
Скачать

2.4.2. Робоча підпрограма

Для реалізації поставленої задачі була написана програми мовою Fortran.

Підключення бібліотек

program totogravmagn

use msflib

intrinsic dsin,dcos,dabs,dsqrt,dlog,datan

Оголошення змінних та точність

real(8),allocatable:: cappa(:,:,:),cappa1(:,:,:)

CHARACTER(10)dat,tim,zon

Задаються координати поля

write(*,*) 'Vvedite a,n'

read (*,*)a,n

write(*,*) 'a=',a,' n=',n

Задається параметри моделі для гравітаційного поля

nx=24; ny=24; nx7=47; ny7=47

zz11=0.07; aax = 0.46; aay=0.46

zz441=1.070+0.;zz46=-2.0; zz447=0.57+0.; zz44a=1.57+0.

bbxd=0.40;bbyd=0.20*0

Обчислюються за формулами – похідними функціями гравітаційного поля

Запис і зчитування даних

24 format((2f8.0,f16.12))

open(602,file='d:\work\temp\testgo602.dat',status='unknown',form='formatted')

read(12,*) ZecsigT

rewind 12

print '(1x,i3,1X,2f9.0,f9.4)',((j,(ZecsigT(i,j,k),i=1,3),j=1,261,3),k=1,1)

close(12)

Гравітаційне поле на інтервалах розв’язку

open(602,file='d:\work\temp\testgo602.dat',status='unknown',form='formatted')

write(602,33) gtolerg

rewind 602

read(602,33) gtole

rewind 602

print '(1x,10f7.2)',gtole

close(602)

Задаємо початкові умови для розв’язку оберненої задачі гравітаційного поля 1шару

Розв’язок гравітаційного поля для 1-го шару

print*, ' 1- sloy '

open(602,file='d:\work\temp\testgo602.dat',status='unknown',access='sequential',form='formatted')

read(602,46) sv

rewind 602

close(602)

Задаємо початкові умови для розв’язку оберненої задачі гравітаційного поля 1шару

Розв’язок гравітаційного поля для 2-го шару

print*, ' 2- sloy '

open(716,file='d:\work\temp\testgo716.dat',status='unknown',access='sequential',form='formatted')

read(716,22) sv

rewind 716

close(716)

Початок розв’язування задачі

do i=2,46

do j=2,46

gtole(i,j)=(gtolerg(i-1,j-1)+gtolerg(i,j)+gtolerg(i+1,j+1))/3

end do;end do

Оголошення динамічної пам’яті

allocate( cappa(nx7,ny7,m),cappa1(nx7,ny7,m) )

do j16=1,2

do i9=1,m

carra(i9)=0.0

do i4=1,nx7

do j4=1,ny7

cappa(i4,j4,i9)=xyzz(i4,j4,i9)*ffonty(i4,j4)/lambda(i4,j4)

carra(i9)=carra(i9)+xyzz(i4,j4,i9)*ffonty(i4,j4)

if (j16==2) then

cappa1(i4,j4,i9)=xyzz(i4,j4,i9)*ffonty1(i4,j4)/lambda(i4,j4)

END IF

enddo; end do; end do

Закриття динамічної пам’яті

deallocate(cappa,cappa1)

goto 1006

ajo=0.0

ajo1=0.0

bjo=0.0

bjo1=0.0

bjo2=0.0

bbb11=0.0

ccc11=0.0

do i12=1,m

ajo=ajo+bbb(i12)*acappa(i12)

bjo=bjo+acappa(i12)*acappa(i12)

bjo2=bjo2+acappa(i12)*acappa1(i12)

End do

do i120=1,m

ajo1=ajo1+bbb(i120)*acappa1(i120)

bjo1=bjo1+acappa1(i120)*acappa1(i120)

end do

Обчислення намагніченості

do j3=1,m

xypi=xypi+xyzz(i,j20,j3)*Vecsig(j3) !{vybrannoe pole}

end do

Запис результатів обчислення

open(602,file='d:\work\temp\testgo602.dat',status='unknown',form='formatted')

close (602)

Формули функцій для обчислення коефіцієнтів зв’язку теоретичного та вимірюваного гравітаційного поля

CONTAINS

function gg (x1,x2,y1,y2,z1,z2,x0,y0);

real(8)::gg

real(8):: xsq111,xsq211,xsq121,xsq221,xsq112,xsq212,xsq122, &

xsq222,ysq111,ysq211,ysq121,x1,x2,y1,y2,z1,z2,x0,y0

real(8):: ysq221,ysq112,ysq212,ysq122,ysq222,t1a,t2a,ty2ln, &

ty1ln,ttx2ln,ttx1ln

XSQ111=x1-x0+dsqrt((x1-x0)*(x1-x0)+(y1-y0)*(y1-y0)+z1*z1)

XSQ211=x2-x0+dsqrt((x2-x0)*(x2-x0)+(y1-y0)*(y1-y0)+z1*z1)

XSQ121=x1-x0+dsqrt((x1-x0)*(x1-x0)+(y2-y0)*(y2-y0)+z1*z1)

XSQ221=x2-x0+dsqrt((x2-x0)*(x2-x0)+(y2-y0)*(y2-y0)+z1*z1)

XSQ112=x1-x0+dsqrt((x1-x0)*(x1-x0)+(y1-y0)*(y1-y0)+z2*z2)

XSQ212=x2-x0+dsqrt((x2-x0)*(x2-x0)+(y1-y0)*(y1-y0)+z2*z2)

XSQ122=x1-x0+dsqrt((x1-x0)*(x1-x0)+(y2-y0)*(y2-y0)+z2*z2)

XSQ222=x2-x0+dsqrt((x2-x0)*(x2-x0)+(y2-y0)*(y2-y0)+z2*z2)

YSQ111=y1-y0+dsqrt((x1-x0)*(x1-x0)+(y1-y0)*(y1-y0)+z1*z1)

YSQ121=y2-y0+dsqrt((x1-x0)*(x1-x0)+(y2-y0)*(y2-y0)+z1*z1)

YSQ211=y1-y0+dsqrt((x2-x0)*(x2-x0)+(y1-y0)*(y1-y0)+z1*z1)

YSQ221=y2-y0+dsqrt((x2-x0)*(x2-x0)+(y2-y0)*(y2-y0)+z1*z1)

YSQ112=y1-y0+dsqrt((x1-x0)*(x1-x0)+(y1-y0)*(y1-y0)+z2*z2)

YSQ122=y2-y0+dsqrt((x1-x0)*(x1-x0)+(y2-y0)*(y2-y0)+z2*z2)

YSQ212=y1-y0+dsqrt((x2-x0)*(x2-x0)+(y1-y0)*(y1-y0)+z2*z2)

YSQ222=y2-y0+dsqrt((x2-x0)*(x2-x0)+(y2-y0)*(y2-y0)+z2*z2)