728x90
iris.edu 에서 제공하는 자료를 이용한다.
https://www.iris.edu/hq/inclass/lesson/determining_and_measuring_earths_layered_interior
최종 목표를 이야기 하자면 그냥 외핵의 반지름을 추정하는 것이다.
위에 첨부해둔 링크에서 필요한 자료를 다운받을 수 있다.
위의 그림에서는 P파의 주행시간을 알 수 있다. IRIS에서 제공하는 자료를 이용하여 외핵의 반지름을 추정하는 방법은 다음과 같다.
1. 각거리별 P파의 주행시간을 구한다.
2. 관측소의 각거리별 수직 거리를 구하고 이론적 P파 주행시간을 구한다.
3. P파의 주행시간에 큰 차이가 나는 지점을 결정한다.
4. 위 데이터를 이용하여 외핵의 반지름을 추정한다.
위 방법은 충분히 자동화 시킬 수 있으며, 아래의 코드로 금방 끝낼 수 있다. (주행시간의 큰 차이는 2분으로 잡았다.)
#include <bits/stdc++.h>
using namespace std;
double pi=acos(-1);
vector<double>vd,vlf,d;
int main(){
int N,part=-1;
double R=4.6,ceta;
cout<<"Number of Observatory: ";
cin>>N;
cout<<"input: Angular Distance(deg), Observed Arrival Time[min]\n";
d.resize(N+1);
bool flag=false;
for(int i=0;i<N;i++){
printf("%3d: ",i+1);
double q;
cin>>d[i]>>q;
d[i]*=2*pi/360;
vlf.push_back(q);
vd.push_back(2*R*cos((d[i]>pi/2)?(pi-d[i])/2:(pi/2-d[i]/2)));
if(flag)continue;
if(abs(vlf[i]-vd[i]*1274.2/660)>2){
flag=true;
part=i;
if(i==0){ceta=d[i];continue;}
ceta=(d[i]+d[i-1])/2;
}
}
cout<<"Theoretician Data\n(Model[cm], Theoretical[km], Arrival Time[min]\n";
for(int i=0;i<N;i++){
printf("(%4.1lf, %5.0lf, %4.1lf)",vd[i],1274.2*vd[i],1274.2*vd[i]/660);
if(part==i)cout<<" <- Starting Point of a Big Diffrence";
cout<<"\n";
}
cout<<"\nRadius of Outer Core: "<<1274.2*R*cos(ceta/2)<<"km\n";
return 0;
}
위와 같은 결과가 나오게 된다.
위 링크에서 자료를 다운받아 보면, 사용되는 모델의 축척은 (1cm : 1274.2km)이다.
대충 간단한 수학적인 방법으로 위의 코드가 나오는 것은 너무 쉬우므로(중등 교육과정이다.) 따로 설명은 하지 않는다.
728x90