/*  
 *  - - - - - - - - -
 *   g a l _ g m . h
 *  - - - - - - - - -
 *  
 *  This header file is part of the General Astrodynamics Library  
 *
 *  Description:
 *
 *     This header file defines the gravity model structures,and
 *     constants for the gravity model identifiers.
 *  
 *  Status: 
 *  
 *     Sub-system header file  
 *
 *  This revision:  
 * 
 *     2008 May 18  
 *  
 *  Copyright (C) 2008 Paul C. L. Willmott. See notes at end. 
 *  
 *-----------------------------------------------------------------------  
 */  

#ifndef _GAL_GM_H_  
#define _GAL_GM_H_ 1  

#undef __BEGIN_DECLS  
#undef __END_DECLS  
#ifdef __cplusplus  
#define __BEGIN_DECLS extern "C" {  
#define __END_DECLS }  
#else  
#define __BEGIN_DECLS /* empty */  
#define __END_DECLS   /* empty */  
#endif
  
__BEGIN_DECLS  

/* --------------------------------------------
 * Structure to store the gravity model details
 * --------------------------------------------
 */

typedef struct {

  int    body       ;  /* Solar System Body Identifier     */
  char   name[40]   ;  /* Gravity Model name               */
  double gm         ;  /* GM ( mu ) ( m^3 s^-2 )           */
  double sma        ;  /* Semi-Major Axis ( m )            */
  int    max_degree ;  /* Highest degree of coefficients   */
  int    max_order  ;  /* Highest order of coefficients    */
  int    normalized ;  /* 1 = Normalized, 0 = Unnormalized */
  double *terms     ;  /* Pointer to spherical terms       */

} gal_gm_t ; 

/* -------------------------------------------------------
 * Structure to store the derviative parameters for derivs
 * -------------------------------------------------------
 */

typedef struct {
  gal_gm_t *gm        ; /* Gravity Model     */
  int      max_degree ; /* Max degree to use */
  int      max_order  ; /* Max order to use  */
} gal_derivsp_t ;
  
/*
 * -------------------------------------------
 * Constants for the gravity model identifiers
 * -------------------------------------------
 */
 
enum {

/*
 * Earth 
 */
 
  GAL_GMEA_EGM96        = 0,
  GAL_GMEA_JGM3         = 1,
  GAL_GMEA_WGS72        = 2,
  GAL_GMEA_WGS66        = 3,
  
/*
 * The Moon
 */
 
  GAL_GMMO_GLGM1        = 4,
  GAL_GMMO_GLGM2        = 5,
  
/*
 * Venus
 */
 
  GAL_GMVE_MGNP180U     = 6,
  GAL_GMVE_MGNP120PSAAP = 7,
  
/* 
 * Mars
 */
 
  GAL_GMMA_GMM2B        = 8,
  GAL_GMMA_MGM1025      = 9,

} ;

/*
 * ------------------------------------------------------------
 * Constants for gravity model coefficients normalization state
 * ------------------------------------------------------------
 */
 
enum {
  GAL_UNNORMALIZED = 0,
  GAL_NORMALIZED   = 1,
} ;
  
__END_DECLS
  
#endif /* !_GAL_GM_H_ */ 

/*
 *  gal - General Astrodynamics Library  
 *  Copyright (C) 2008 Paul C. L. Willmott  
 *  
 *  This program is free software; you can redistribute it and/or modify  
 *  it under the terms of the GNU General Public License as published by  
 *  the Free Software Foundation; either version 2 of the License, or  
 *  (at your option) any later version.  
 *  
 *  This program is distributed in the hope that it will be useful,  
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of  
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  
 *  GNU General Public License for more details.  
 *  
 *  You should have received a copy of the GNU General Public License along  
 *  with this program; if not, write to the Free Software Foundation, Inc.,  
 *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.  
 *    
 *  Contact:  
 *    
 *  Paul Willmott  
 *  vp9mu@amsat.org  
 */  
  
