SUBROUTINE GGM(ART,LONG,LATI,MLONG,MLAT)
c	taken from the IRI s/r IRINHSUBS.FOR
c
c-----	last modified 4-jun-87
c******* gives wrong sign for geog lat of geom pole ***************
c
C CALCULATES GEOMAGNETIC LONGITUDE (MLONG) AND LATITUDE (MLAT)
C FROM GEOGRAFIC LONGITUDE (LONG) AND LATITUDE (LATI) FOR ART=0
C AND REVERSE FOR ART=1. ALL ANGLES IN DEGREE.
C LATITUDE:-90 TO 90. LONGITUDE:0 TO 360 EAST.
	implicit real*8 (a-h,o-z)
      INTEGER ART
      REAL MLONG,MLAT,LONG,LATI
cccccc      COMMON/CONST/FAKTOR
	pi = 4.d0 * datan(1.d0)
	faktor = pi/180.d0
      ZPI=FAKTOR*360.d0
      CBG=11.4d0*FAKTOR
      CI=dCOS(CBG)
      SI=dSIN(CBG)
      IF(ART.EQ.0.d0) GOTO 10
      CBM=dCOS(MLAT*FAKTOR)
      SBM=dSIN(MLAT*FAKTOR)
      CLM=dCOS(MLONG*FAKTOR)
      SLM=dSIN(MLONG*FAKTOR)
      SBG=SBM*CI-CBM*CLM*SI
      LATI=dASIN(SBG)
      CBG=dCOS(LATI)
      SLG=(CBM*SLM)/CBG
      CLG=(SBM*SI+CBM*CLM*CI)/CBG
        IF(CLG.GT.1.d0) CLG=1.d0
      LONG=dACOS(CLG)
      IF(SLG.LT.0.0d0) LONG=ZPI-dACOS(CLG)
      LATI=LATI/FAKTOR
      LONG=LONG/FAKTOR
      LONG=LONG-69.8d0
      IF(LONG.LT.0.0d0) LONG=LONG+360.0d0
	if(long.gt.360.d0) long = long - 360.d0
      RETURN
10    YLG=LONG+69.8d0
      CBG=dCOS(LATI*FAKTOR)
      SBG=dSIN(LATI*FAKTOR)
      CLG=dCOS(YLG*FAKTOR)
      SLG=dSIN(YLG*FAKTOR)
      SBM=SBG*CI+CBG*CLG*SI
	if(dabs(sbm).gt.1.d0) sbm = dsign(1.0d0,sbm)
      MLAT=dASIN(SBM)
      CBM=dCOS(MLAT)
      SLM=(CBG*SLG)/CBM
      CLM=(-SBG*SI+CBG*CLG*CI)/CBM
        IF(CLM.GT.1.d0) CLM=1.d0
      MLONG=dACOS(CLM)
      IF(SLM.LT.0.d0) MLONG=ZPI-dACOS(CLM)
      MLAT=MLAT/FAKTOR
      MLONG=MLONG/FAKTOR
	if(mlong.lt.0.0d0 ) mlong = mlong + 360.d0
	if(mlong.gt.360.d0) mlong = mlong - 360.d0
      RETURN
      END