C======================================================================= subroutine GEOLPLL(nl,np,lat,lon,chn,crdu) C=============================================[ documentation ]========= C---------------------------------------------[ identification ]-------- C auteur : CMS, mise a jour le 20/11/96 C---------------------------------------------[ role ]------------------ C conversion ligne, point --> latitude, longitude C le canal est en entree, le satellite a ete defini auparavant C---------------------------------------------[ domaine de validite ]--- C le common pog doit avoir ete initialise par la subroutine defgeo C---------------------------------------------[ modifications ]--------- C---------------------------------------------[ remarques ]------------- C---------------------------------------------[ syntaxe d'appel ]------- C---------------------------------------------[ variables globales ]---- C---------------------------------------------[ common ]---------------- C---------------------------------------------[ entrees/sorties ]------- C---------------------------------------------[ modules appeles ]------- C=============================================[ declarations ]========== implicit none C---------------------------------------------[ parameters ]------------ #include "p_earth.h" double precision pi parameter ( pi = 3.14159265358979311600d0) double precision twopi parameter ( twopi = 2.d0 * pi ) C---------------------------------------------[ arguments ]------------- double precision lat ! latitude en radians (de -pi/2 a pi/2, >0 au nord) double precision lon ! longitude en radians (de -pi a pi, >0 a l'est) double precision nl ! numero de ligne double precision np ! numero de point integer chn ! no canal integer crdu ! compte-rendu c crdu=0 ok c crdu=-1 point pas visible par satellite c crdu=-2 parametres canal pas initialises C---------------------------------------------[ variables globales ]---- C---------------------------------------------[ commons ]--------------- #include "c_pog.h" C---------------------------------------------[ variables locales ]----- double precision a,b,c,delta double precision anglig,angpix,distSM double precision smcx,smcy,smcz double precision omx,omy,omz C---------------------------------------------[ equivalences ]---------- C---------------------------------------------[ data ]------------------ C---------------------------------------------[ fonctions appelees ]---- C=============================================[ instructions ]========== C C************************************************************************** C c c parametres canal demande initialises? c if(chn.le.nbcan)then C angpix = (DBLE(np) -NBPIX(chn)/2.d0 -0.5d0) *LPSI*DELTAPX(chn) anglig = (DBLE(nl) -NBLIN(chn)/2.d0 -0.5d0) *LPSI*DELTALN(chn) C c cosinus directeurs du vecteur SM satellite-point vise c dans repere satellite c axes Z, X: plan equatorial, Z : satellite -> centre de la terre c X : vers l'ouest c Y: parallele a l'axe des poles, positif vers le nord c smcx = DCOS(anglig) * DSIN(angpix) smcy = DSIN(anglig) smcz = DCOS(anglig) * DCOS(angpix) c c calcul de la distance satellite-point vise c a = smcx * smcx + re2_rp2 * smcy * smcy + smcz * smcz b = rsat * smcz c = rsat * rsat - re2 delta = b * b - a * c C if(delta.ge.0.d0) then distSM = ( b - DSQRT(delta) ) / a c c calcul du vecteur OM, centre de la terre - point vise dans le repere c terrestre c axes Z, X: plan equatorial, Z : centre de la terre -> satellite c X : vers l'est c Y: axe des poles, positif vers le nord C omx = - distSM * smcx omy = distSM * smcy omz = rsat - distSM * smcz C lat = DATAN ( re2_rp2 * omy / DSQRT(omx*omx + omz*omz) ) lon = DATAN(omx/omz) lon = lon + rflon if(lon.lt.-pi) lon = lon + twopi if(lon.gt. pi) lon = lon - twopi crdu=0 C else crdu=-1 lat = 9999.d0 lon = 9999.d0 endif c c parametres canal demande pas initialises c else crdu=-2 nl = 0. np = 0. endif return C=============================================[ formats ]=============== end