
;+ ***********************************************************************
; NAME:
;	INIT_MALAX
;
; PURPOSE:
;	Cette procedure initialise le COMMON MALAX utilise par CALCPOS
;	pour calculer les coordonnees heliographiques d un point
;
; CATEGORY:
;	NRH General
;
; CALLING SEQUENCE:
;	INIT_MALAX,date,hmer,dec,sref
;
; INPUTS:
;	DATE	Date en [Jour, Mois, An]
;	HMER	INTARR[3], heure de passage au meridien, utilise uniquement
;			pour les sources
;	DEC	INTARR[3}, declinaison utilise uniquement pour les sources
;	SREF	= 'SOLEIL' pour les soleil
;
; KEYWORD PARAMETERS:
;	Non
;
; OUTPUTS:
;	Non
;
; COMMON BLOCKS:
;	Non
;
; SIDE EFFECTS:
;	Ce module contient les procedures suivantes
;		INITIAL_DATE	conversion de date
;		IN_MALAX	calcul d'initialisation
;
; RESTRICTIONS:
;	HMER et DEC doivent etre declares avant l'appel, meme dans le cas
;	du soleil. Les valeurs contnues dans ces 2 tableaux peuvent cependant
;	etre quelconques
;
; PROCEDURE:
;	En sortie le COMMON MALAX est initialise
;
; EXAMPLE:
;	Please provide a simple example here
;
; MODIFICATION HISTORY:
;	Ecrit par: A Kerdraon
;	Adapte par J Bonmartin@obspm.fr
;-*******************************************************************


PRO INITIAL_DATE,ij, im, ian, n
		    ; Suite de l'initialisation (obtention de la date)
; fortement simplifie rapport a mercier: juste calcul du jour et
; autres parametres, totalement retire les histoires de traitement
; de fichier


m=[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
;	   if ian lt 1900 then ian = ian + 1900
	   ian = rh_date100(ian, /FULL)

;	  Calcul du numero de jour dans l'annee.
	    n = 0
	    if im eq 1 then goto, janvier
	    im1 = im - 1
for k = 0, im1-1 do n = n + m(k)

  janvier:    n = n + ij		; n numero du jour dans l annee

            return
            end

;**************************************************************************

PRO IN_MALAX, ie0,ie1,ie2,isolsour0,adh,adm,ads,deldeg,delmin,$
	delsec,icorion0,icorpoi0,ij0,im0,ian0
	
; malax en idl. Premiere partie = initialisations
; on ne met pas l'ionosphers dans un premier temps
; quelques arguments sont recopiees dans un common pour rester disponibles dans le
; module de calcul

Common malax, ij,im,ian,icorpoi,icorion,isolsour,$
	etmer,edec,dew,new,hew,u,dns,hns,a1,nns,sinl,cosl,$
	sinp,cosp,gdel,ghmer,ahmer,c,rsol,ahmersol,sind,cosd

;print, ' entree init malax'

ij=ij0
im=im0
ian=ian0
icorpoi=icorpoi0
icorion=icorion0
isolsour=isolsour0 ; 1 pour solail, 2 pour source

etmer=0.
edec=0.
if isolsour eq 2 then begin
	ahmersour=adh+adm/60.+ads/3600.
	if deldeg lt 0. then begin
		if delmin gt 0. then delmin=-delmin
		if delsec gt 0. then delsec=-delsec
	endif

	deltasour=!PI/180.*(deldeg+delmin/60.+delsec/3600.)
	sindsour=sin(deltasour)
	cosdsour=cos(deltasour)
endif

; parametres reseau

if ie0 eq 0 then begin
	dew=99.805
	new=64
endif

if ie0 eq 1 then begin
	dew=49.903
	if ie2 eq 0 then new=64
	if ie2 eq 1 then new=128
endif

hew=0.00230 ;longitude reseau ew (radians)
u=-0.00400  ; inclinaison reseau ew sur l'equateur

dns = 54.274		;------------- NS --------
	hns = 0.042383	;	! ------------------- NS ---------
	al  = 0.826431	;	! latitude du reseau NS (radians)
	nns = 64		; seul le produit dns*nns intervient. c'est
					;! le meme pour le NS 169 MHz et le NS MF
	sinl = sin(al)
	cosl = cos(al)

; calcul du jour dans l'annee

INITIAL_DATE, ij,im,ian,n

; INITIALISATION IONOSPHERE A INSERER

c=299.792500
a=2.*!PI/365.25

p=!PI/180.*26.32*sin(a*(n-188))
	sinp  = sin(p)
	cosp  = cos(p)
	deltasol = !pi / 180. * 23.43 * sin(a * (n - 80))
	sindsol  = sin(deltasol)
	cosdsol  = cos(deltasol)
	rsol     = 16.020 + 0.268 * sin(a * (n - 278))	;ray sol minutes d'arc
	ahmersol = 11.854 + 0.125 * sin(a * n)  + $
	0.1617 * sin(2 * a * (n+9))
;    Declinaison de la source observee (soleil ou source):
if isolsour eq 1 then	begin	; soleil.
	    ahmer = ahmersol		; heures decimales (TU).
	    delta = deltasol		; radians.
	    cosd  = cosdsol
	    sind  = sindsol
endif

if isolsour eq 2  then	begin ; source non solaire.
	    ahmer = ahmersour 		; heures decimales (TS).
	    delta = deltasour		; radians.
	    cosd  = cosdsour
	    sind  = sindsour
;     init angle P et mvt centre de la source
;     car le calcul est toujours fait dans POS_HELIO
            cosp=1.
            sinp=0.
            ghmer=0.
            gdel=0.
            print,' cas source', sind,cosd,ghmer,gdel
endif

;   Calcul des derives en h et delta du soleil (rad/rad)
if isolsour eq 1  then begin
	    n = n + 1
	    deltbsol = !pi / 180. * 23.43 * sin(a * (n - 80))

	    bhmersol = 11.854 + 0.125 * sin(a * n) +$ 
		0.1617 *sin(2. * a *(n+9))

	    gdel  = (deltbsol - deltasol) / (2. * !pi)
	    ghmer = !pi / 12. * (bhmersol - ahmersol) / (2. * !pi)
endif

; fin de l'initialisation au sens mercier
        RETURN
end

;**************************************************************************
pro INIT_MALAX,date,hmer,dec,sref

	; init de malax modulaire en fortran
isour=2L
if sref EQ 'SOLEIL' then isour=1L
jour = long(date(0))
mois= long(date(1))
an = long(date(2))
icorion=0L
icorpoi= 0L
ie0 = 1L
ie1=1L
ie2=1L
	;jour=19
	;mois=8
	;an=96
	ret=2
	;nom_libso = convstring(rhenv('SOURCE_RH')+'/film1d2d/idl2d.so')
	;ret=call_external(nom_libso,'pos2d_init_',ie0,ie1,ie2,$
	;isour,hmer(0),hmer(1),hmer(2),dec(0),dec(1),dec(2),$
	;icorion,icorpoi,jour,mois,an)
IN_MALAX,ie0,ie1,ie2,$
isour,hmer(0),hmer(1),hmer(2),dec(0),dec(1),dec(2),$
icorion,icorpoi,jour,mois,an
return
end
