1 | subroutine sub_land_sea_alti(alat,alon,init,flagtermer,iunittm |
---|
2 | & ,indtermer,nomfichtermer) |
---|
3 | C***************************************************************** |
---|
4 | C |
---|
5 | C PROCEDURE DE LECTURE ET DE DECODAGE DE L'INDICE TERRE/MER |
---|
6 | C (RESOLUTION = 1/6 DEGRE DE 90N A 90S DE LATITUDE ET DE |
---|
7 | C 0 a 360 DEGRES DE LONGITUDE). |
---|
8 | C ON A UN ENREGISTREMENT PAR LATITUDE (1080 ENREGISTREMENTS). |
---|
9 | C POUR CHAQUE LATITUDE, ON A 2160 LONGITUDES DIFFERENTES QUI SONT CODEES |
---|
10 | C SUR 72 INTEGER*4 (SOIT LES 30 PREMIERS BITS UTILISES DE CHAQUE ENTIER). |
---|
11 | C LE BIT EST MIS A 1 LORSQUE L'ON EST SUR MER. |
---|
12 | C |
---|
13 | C***************************************************************** |
---|
14 | C Declaration A rajouter dans le programme principal |
---|
15 | real alat,alon |
---|
16 | integer*4 indtermer(2160,1080),flagtermer,init,iunittm |
---|
17 | character*200 nomfichtermer |
---|
18 | C Fin ********************************************** |
---|
19 | integer*2 nb_lon,indi_relief(2160),alti_relief(2160) |
---|
20 | |
---|
21 | C *** INIT=0 : LECTURE DES 72*1080 INTEGER*4 DANS LE FICHIER |
---|
22 | C *** nomfichtermer D'UNITE LOGIQUE iunittm |
---|
23 | if(init.eq.0) then |
---|
24 | open(iunittm,file=nomfichtermer,form='unformatted') |
---|
25 | do ilat=1,1080 |
---|
26 | do ilon=1,2160 |
---|
27 | indtermer(ilon,ilat)=-1 |
---|
28 | enddo |
---|
29 | read(1)nb_lon,(indi_relief(ilon) |
---|
30 | & ,alti_relief(ilon),ilon=1,nb_lon) |
---|
31 | do ilon=1,nb_lon |
---|
32 | indtermer(indi_relief(ilon),ilat)=alti_relief(ilon) |
---|
33 | if(alti_relief(ilon).eq.-30) write(*,*) ilon,ilat |
---|
34 | enddo |
---|
35 | enddo |
---|
36 | close(iunittm) |
---|
37 | else |
---|
38 | |
---|
39 | C *** UNIT = 1 : RECHERCHE ET DECODAGE DE L'INTEGER*4 QUI CONTIENT |
---|
40 | C *** L'INDICE TERRE/MER POUR LA LATITUDE alat ET LA LONGITUDE alon |
---|
41 | C *** ILAT = NUMERO DU RECORD A LIRE DANS LE FICHIER EN ACCES DIRECT |
---|
42 | C *** ILON = INDICE DE 1 A 2160 POUR LA LONGITUDE |
---|
43 | C *** INDMOT = NUMERO DE L'INTEGER*4 DANS LE TABLEAU indtermer |
---|
44 | C *** NUMBIT = NUMERO DU BIT A RETENIR POUR AVOIR L'INDICE TERRE/MER |
---|
45 | C *** CORRESPONDANT A alat ET alon |
---|
46 | ilat=int((90.+1./12.-alat)*6.+0.5) |
---|
47 | if(ilat.le.0) ilat=1 |
---|
48 | if(ilat.gt.1080) ilat=1080 |
---|
49 | ilon=int(alon*6.+0.5) |
---|
50 | if(alon.lt.0) ilon=int((alon+360.)*6.+0.5) |
---|
51 | if(ilon.le.0) ilon=1 |
---|
52 | flagtermer=indtermer(ilon,ilat) |
---|
53 | if(ilat.le.0.or.ilat.gt.1080) |
---|
54 | & write(*,*) alat,ilat,alon,ilon,indmot,numbit, |
---|
55 | & indtermer(ilon,ilat) |
---|
56 | endif |
---|
57 | return |
---|
58 | end |
---|