C======================================================================= subroutine GEOLLLP(lat,lon,nl,np,chn,crdu) C=============================================[ documentation ]========= C---------------------------------------------[ identification ]-------- C auteur : CMS, mise a jour le 20/11/96 C---------------------------------------------[ role ]------------------ C conversion latitude, longitude --> ligne, point 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) 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 ! numero de 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 crdu=-3 coordonnees demandees incoherentes C---------------------------------------------[ variables globales ]---- C---------------------------------------------[ commons ]--------------- #include "c_pog.h" C---------------------------------------------[ variables locales ]----- double precision anglig,angpix,lati,long,clat,rayter double precision smx,smy,smz double precision smx2,smy2,smz2,dsm double precision ad2,bd,c,deltad2,demisom C---------------------------------------------[ equivalences ]---------- C---------------------------------------------[ data ]------------------ C---------------------------------------------[ fonctions appelees ]---- C=============================================[ instructions ]========== c c test coherence coordonnees demandees c if(ABS(lat).le.pi/2.d0 .and. ABS(lon).le.pi) then c c parametres canal demande initialises? c if(chn.le.nbcan)then c c conversion degres->radians, calcul latitude geocentrique c et rayon terrestre au point vise c long = lon - rflon lati = DATAN( rp2_re2 * DTAN(lat) ) clat = DCOS(lati) rayter = rpo / DSQRT (1.d0 - exct2 * clat * clat ) C c calcul du vecteur SM satellite-point vise 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 smx = - rayter * clat * DSIN(long) smy = rayter * DSIN(lati) smz = rsat - rayter * clat * DCOS(long) C c calculs analogues a LPLALO pour controler si le point est visible c par le satellite c smx2 = smx * smx smy2 = smy * smy smz2 = smz * smz dsm = DSQRT( smx2 + smy2 + smz2) ad2 = smx2 + re2_rp2 * smy2 + smz2 bd = rsat * smz c = rsat * rsat - re2 deltad2 = bd * bd - ad2 * c demisom = bd * dsm / ad2 if(deltad2.ge.0.d0.and.dsm.le.demisom) then anglig = DATAN( smy / DSQRT( smx*smx + smz*smz ) ) angpix = DATAN( smx / smz) nl = SNGL(anglig/(LPSI*DELTALN(chn))+NBLIN(chn)/2.d0+0.5d0) np = SNGL(angpix/(LPSI*DELTAPX(chn))+NBPIX(chn)/2.d0+0.5d0) crdu=0 else crdu=-1 nl = 0. np = 0. endif c c parametres canal demande pas initialises c else crdu=-2 nl = 0. np = 0. endif c c coordonnees demandees incoherentes c else crdu=-3 nl = 0. np = 0. endif return C=============================================[ formats ]=============== end