๊ณตํ์๋ฅผ ์ํ Python ์ฌ์ฉ๋ฒ 23
์ด๋ฒ์๋ FORTRAN์ผ๋ก ์ง์ฌ์ ธ ์๋ ํจ์๋ฅผ python์์ ๋ถ๋ฅผ์ ์๊ฒ ํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๊ฒ ์ต๋๋ค.
21์ธ๊ธฐ์ ๋ฌด์จ FORTRAN์ด๋ ํ๋ ์๊ฐ์ ๊ฐ์ง ์๋ ์์ง๋ง, ๊ณผ๊ฑฐ์ ๋ง์ ์์นํด์ ํ๋ก๊ทธ๋จ์ด FORTRAN์ผ๋ก ๊ฐ๋ฐ๋์๊ณ ์ด ํ๋ก๊ทธ๋จ๋ค์ด ์ฌ์ ํ ์ฌ๊ธฐ์ ๊ธฐ์์ ์ฌ์ฉ๋๊ณ ์์ต๋๋ค.ย
ํ์ง๋ง ์ด๋ฏธ ๊ฐ๋ฐ์ด ์์ฑ๋ ํจ์๋ฅผ ๋ค์ python์ผ๋ก ํด์ํ๋ ์์ ์ ๋งค์ฐ ๋ถํ์ํ๊ณ ๊ฑฐ์ถ์ฅ์ค๋ฌ์ด ์ผ์ ๋๋ค. ์ด๋ด๋๋ฅผ ์ํด์ ๊ทธ๋ฅ FORTRAN ํจ์๋ฅผ compileํด์ ์ผ์ข ์ library์ฒ๋ผ ๋ง๋ค์ด ๋ ๋ค์ python์์ ๋ถ๋ฅด๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
์ฃผ์ด์ง ๋ ์ง์ ์์น์ ๋ฐ๋ฅธ ์ง๊ตฌ์๊ธฐ์ฅ๊ฐ์ ๊ณ์ฐํด์ฃผ๋ IGRF12 ํจ์๋ฅผ ์์ ๋ก ์ฌ์ฉํด๋ณด๊ฒ ์ต๋๋ค. ์๋ FORTRAN ํ๋ก๊ทธ๋จ์ ์ฌ๊ธฐ์ ๋ด๋ ค๋ฐ์ ์ ์์ต๋๋ค.
http://www.ngdc.noaa.gov/IAGA/vmod/igrf12.f
๊ทธ๋ฆฌ๊ณ ํ๋ก๊ทธ๋จ์ ๋ํ ์ค๋ช ์ ์ฌ๊ธฐ์์ ๋ณผ ์ ์์ต๋๋ค.
http://www.ngdc.noaa.gov/IAGA/vmod/igrf.html
igrf12.f ๋ด๋ถ๋ฅผ ๋ค์ฌ๋ค ๋ณด๋ฉด ์ง๊ตฌ์๊ธฐ์ฅ์ ๊ณ์ฐํ๋ ํจ์๊ฐย
subroutine igrf12syn (isv,date,itype,alt,colat,elong,x,y,z,f)
๋ผ๋ ์ด๋ฆ์ผ๋ก ๋์ด์๊ณ ๊ทธ ์์ ์๋ ๋ด์ฉ์ ์ด ํจ์๋ฅผ ์ค์ ๋ถ๋ฌ์ ์คํํ๋ ๋ถ๋ถ์ ๋๋ค. ์ฐ๋ฆฌ๋ ์ด ํจ์๋ฅผ python์์ ๋ถ๋ฅผ๊ฒ์ด๋ฏ๋ก ์๋ถ๋ถ ๋ด์ฉ์ ํ์์๊ณ ์ด ํจ์๋ถ๋ถ๋ง ํ์ํฉ๋๋ค. ๊ทธ๋์, ์์ ๋ค ์๋ผ๋ด๊ณ ์์ ํจ์๋ง ํฌํจํ ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ด ๋ง๋ญ๋๋ค.
https://gist.githubusercontent.com/myjr52/62ca6ffc3e9c78ea0411/raw/df1ca256826579fe9810b1058ca3c2b57b928611/igrf12.f
ํ๊ฐ์ง ์์ ํ์ผ์์ ๋ด๋ถ์ ์ถ๊ฐ๋ ๋ถ๋ถ์ด ์๋๋ฐ... ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ ๋๋ค:
Cf2py intent(out) x Cf2py intent(out) y Cf2py intent(out) z Cf2py intent(out) f
์ด ๋ถ๋ถ์ด FORTRAN ํ๋ก๊ทธ๋จ์ python์์ ๋ถ๋ฅผ ์ ์๋ ํจ์๋ก ๋ฐ๊ฟ์ฃผ๋ f2py๊ฐ ์๋ํ ๋ subroutine igrf12syn์ ์๋ ๋งค๊ฐ๋ณ์ ์ค์ x, y, z, f๋ ์ถ๋ ฅ๋ณ์๋ผ๋ ๊ฒ์ ์๋ ค์ฃผ๊ธฐ ์ํจ์ ๋๋ค.
operating system prompt์์ ์ด์ f2py๋ฅผ ์ด์ฉํด ๋ณํ๋ igrf12.f๋ฅผ ๋ค์๊ณผ ๊ฐ์ด compileํฉ๋๋ค. (์ฐธ๊ณ ๋ก python์ ์ ์ฒ๋ผ anaconda๋ฅผ ํตํด ์ค์นํ๋ค๋ฉด f2py3๋ผ๋ ํ๋ก๊ทธ๋จ์ด ์ด๋ฏธ ๊ฐ์ด ๊น๋ ค์์๊ฒ๋๋ค)
> f2py -c -m igrf12_fortran igrf12.f
-c ๋ compile ํ๋ผ๋ ๋ป์ด๊ณ , -m์ library ๋ง๋ค๋ ์ด๋ฆ์ igrf12_fortran (ํน๋ณํ ๋ค๋ฅธ ์ด๋ฆ์ ์ํ๋ค๋ฉด ์ฌ๊ธฐ์ ์ด๋ฆ์ ๋ฐ๊พธ๋ฉด ๋ฉ๋๋ค)์ด๋ผ๊ณ ํ๋ผ๋ ๋ป์ ๋๋ค. ์๋ฅผ ์คํํ๊ณ ๋๋ฉด ์ด๋ค ์ด์์์คํ ์ ์ฐ๋๋์ ๋ฐ๋ผ ๋ค๋ฅธ๋ฐ...
linux์์๋ igrf12_fortran.cpython-34m.so๋ผ๋ library๊ฐ ์๊ฒผ๊ณ
mac os-x์์๋ igrf12_fortran.so๋ผ๋ library๊ฐ ์๊ฒผ์ต๋๋ค.
์ด๋ฅผ ๋ถ๋ฅด๋ ๋ฐฉ๋ฒ์ย
>> import igrf12_fortran
ํ ๋ค์์
>> igrf12_fortran.igrf12syn(.....)ย
ํ๋ฉด ๋ฉ๋๋ค.
์ข ๋ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ตํ๊ฒ ์ฐ๊ธฐ ์ํด์ ๋ค์๊ณผ ๊ฐ์ด python ํ๋ก๊ทธ๋จ์ ๋ง๋ค์์ต๋๋ค.
https://gist.githubusercontent.com/myjr52/62ca6ffc3e9c78ea0411/raw/6d8cbc3693f384a3e83f122b7a48155f71fb4b11/igrf12.py
์ด์ ๋ python์์ ๋ค์ ์์๋ก ๋ถ๋ฅด๋ฉด ๋ฉ๋๋ค.
>>ย import igrf12 ย ย ย ย ย
>> ย igrf12.igrf12(0,2016,2,4000,23,32) ย ย
(-1216.8147739252843, 24122.237297648033, 118869.7813460386)
๋ง์ง๋ง์ ๋์จ 3๊ฐ์ ์ซ์๊ฐ ์ง๊ตฌ ์๊ธฐ์ฅ์ ๋ถ์ชฝ, ๋์ชฝ, ์ง๊ตฌ ์ค์ฌ๋ฐฉํฅ ๊ฐ์ด nT๋ก ๊ณ์ฐ๋ ๊ฒ์ ๋๋ค.












