BagaBaga
Full Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору фортран (параметр art не используется, на вход - географическая долгота и коширота, на выход - геомагнитная долгота [dolm] и коширота [tetm]) Код: SUBROUTINE GGMRAW(ART,DOLG,TET,DOLM,TETM) INTEGER ART DOUBLE PRECISION ZPI,FAKTOR,CBG,CI,SI,XLM,BM,CBM,SBM, * CLM,SLM,SBG,BG,SLG,CLG,XLG,YLG ZPI=6.28318530718 FAKTOR=0.01745329252 CBG=11.4*FAKTOR CI=DCOS(CBG) SI=DSIN(CBG) BG=90.-TET XLG=DOLG YLG=XLG+69.8 CBG=DCOS(BG*FAKTOR) SBG=DSIN(BG*FAKTOR) CLG=DCOS(YLG*FAKTOR) SLG=DSIN(YLG*FAKTOR) SBM=SBG*CI+CBG*CLG*SI BM=DASIN(SBM) CBM=DCOS(BM) SLM=(CBG*SLG)/CBM CLM=(-SBG*SI+CBG*CLG*CI)/CBM if(abs(clm).gt.1.0d0)then CLM=sign(10.0d-1,CLM) endif XLM=DACOS(CLM) IF(SLM.LT.0.0) XLM=ZPI-DACOS(CLM) BM=BM/FAKTOR XLM=XLM/FAKTOR DOLM=XLM IF(ABS(TET-180.).LT.1.E-3)DOLM=0. TETM=90.-BM RETURN END | питон Код: def ggr2ggm(colat, lon): """ Input: geographic co-latitude and longitude Output: geomagnetic co-latitude and longitude """ if not (0 <= colat <= 180): raise ValueError('Colatitude should be in range [0..180]') if not ((-180<= lon <= 180) or (0 <= lon <= 360)): raise ValueError("Longitude should be in [-180..180] or [0..360]") #GGR colatitude TET = colat #GGR longitude DOLG = lon ZPI=6.28318530718 FAKTOR=0.01745329252 CBG=11.4*FAKTOR CI=cos(CBG) SI=sin(CBG) BG=90.0-TET XLG=DOLG YLG=XLG+69.8 CBG=cos(BG*FAKTOR) SBG=sin(BG*FAKTOR) CLG=cos(YLG*FAKTOR) SLG=sin(YLG*FAKTOR) SBM=SBG*CI+CBG*CLG*SI BM=asin(SBM) CBM=cos(BM) SLM=(CBG*SLG)/CBM CLM=(-SBG*SI+CBG*CLG*CI)/CBM if(abs(CLM)>1.0): CLM=copysign(10.0E-1,CLM) XLM=acos(CLM) if SLM < 0.0: XLM=ZPI-acos(CLM) BM=BM/FAKTOR XLM=XLM/FAKTOR DOLM=XLM if abs(TET-180.0) < 1.0E-3: DOLM=0.0 TETM=90.0-BM assert (0 <= TETM <= 180), 'Colatitude should be in range [0..180]' assert ((-180<= DOLM <= 180) or (0 <= DOLM <= 360)), "Longitude should be [-180..180] or [0..360]" return (TETM, DOLM) | | Всего записей: 463 | Зарегистр. 14-11-2005 | Отправлено: 21:30 13-05-2013 | Исправлено: BagaBaga, 21:30 13-05-2013 |
|