SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/get_mesh_index.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE GET_MESH_INDEX(KLUOUT,PLAT,PLON,KINDEX,KSSO,KISSOX,KISSOY)
00003 !     ##############################################################
00004 !
00005 !!**** *GET_MESH_INDEX* get the grid mesh where point (lat,lon) is located
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !!
00010 !!    METHOD
00011 !!    ------
00012 !!   
00013 !!    REFERENCE
00014 !!    ---------
00015 !!
00016 !!    AUTHOR
00017 !!    ------
00018 !!
00019 !!    V. Masson         Meteo-France
00020 !!
00021 !!    MODIFICATION
00022 !!    ------------
00023 !!
00024 !!    Original    12/09/95
00025 !!
00026 !----------------------------------------------------------------------------
00027 !
00028 !*    0.     DECLARATION
00029 !            -----------
00030 !
00031 USE MODD_PGD_GRID, ONLY : CGRID, XGRID_PAR, NGRID_PAR
00032 USE MODD_POINT_OVERLAY
00033 !
00034 !
00035 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00036 USE PARKIND1  ,ONLY : JPRB
00037 !
00038 USE MODI_ABOR1_SFX
00039 !
00040 USE MODI_GET_MESH_INDEX_CONF_PROJ
00041 !
00042 USE MODI_GET_MESH_INDEX_GAUSS
00043 !
00044 USE MODI_GET_MESH_INDEX_IGN
00045 !
00046 USE MODI_GET_MESH_INDEX_LONLAT_REG
00047 !
00048 USE MODI_GET_MESH_INDEX_LONLATVAL
00049 IMPLICIT NONE
00050 !
00051 !*    0.1    Declaration of arguments
00052 !            ------------------------
00053 !
00054 INTEGER,                         INTENT(IN)    :: KLUOUT  ! output listing
00055 REAL,    DIMENSION(:),           INTENT(IN)    :: PLAT    ! latitude of the point
00056 REAL,    DIMENSION(:),           INTENT(IN)    :: PLON    ! longitude of the point
00057 INTEGER, DIMENSION(:),           INTENT(OUT)   :: KINDEX  ! index of the grid mesh where the point is
00058 INTEGER,               OPTIONAL, INTENT(IN)    :: KSSO    ! number of subgrid mesh in each direction
00059 INTEGER, DIMENSION(:), OPTIONAL, INTENT(OUT)   :: KISSOX  ! X index of the subgrid mesh where the point is
00060 INTEGER, DIMENSION(:), OPTIONAL, INTENT(OUT)   :: KISSOY  ! Y index of the subgrid mesh where the point is
00061 !
00062 !*    0.2    Declaration of other local variables
00063 !            ------------------------------------
00064 !
00065 INTEGER                        :: ISSO
00066 INTEGER, DIMENSION(SIZE(PLAT)) :: IISSOX
00067 INTEGER, DIMENSION(SIZE(PLAT)) :: IISSOY
00068 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00069 !----------------------------------------------------------------------------
00070 !
00071 !*    1.     Get position
00072 !            ------------
00073 !
00074 IF (LHOOK) CALL DR_HOOK('GET_MESH_INDEX',0,ZHOOK_HANDLE)
00075 SELECT CASE (CGRID)
00076 !     
00077   CASE("CONF PROJ ","LONLAT REG","GAUSS     ","IGN      ","LONLATVAL ")
00078     IF (PRESENT(KSSO) .AND. PRESENT(KISSOX) .AND. PRESENT(KISSOY)) THEN
00079       ISSO = KSSO
00080     ELSE
00081       ISSO = 0
00082     ENDIF
00083     !
00084     IF (CGRID=="CONF PROJ ") THEN
00085       CALL GET_MESH_INDEX_CONF_PROJ(NGRID_PAR,SIZE(PLAT),XGRID_PAR,PLAT,PLON,KINDEX,ISSO,IISSOX,IISSOY)  
00086       XNUM(:)=0
00087     ENDIF
00088     IF (CGRID=="LONLAT REG") THEN
00089       CALL GET_MESH_INDEX_LONLAT_REG(NGRID_PAR,SIZE(PLAT),XGRID_PAR,PLAT,PLON,KINDEX,ISSO,IISSOX,IISSOY)  
00090       XNUM(:)=0     
00091     ENDIF
00092     IF (CGRID=="GAUSS     ") THEN
00093       CALL GET_MESH_INDEX_GAUSS(NGRID_PAR,SIZE(PLAT),XGRID_PAR,PLAT,PLON,KINDEX,ISSO,IISSOX,IISSOY)  
00094       XNUM(:)=0
00095     ENDIF
00096     IF (CGRID=="IGN       ") &
00097       CALL GET_MESH_INDEX_IGN(NGRID_PAR,SIZE(PLAT),XGRID_PAR,PLAT,PLON,KINDEX,ISSO,IISSOX,IISSOY)  
00098     IF (CGRID=="LONLATVAL ") &
00099       CALL GET_MESH_INDEX_LONLATVAL(NGRID_PAR,SIZE(PLAT),XGRID_PAR,PLAT,PLON,KINDEX,ISSO,IISSOX,IISSOY)  
00100     !
00101     IF (PRESENT(KSSO) .AND. PRESENT(KISSOX) .AND. PRESENT(KISSOY)) THEN
00102       KISSOX = IISSOX
00103       KISSOY = IISSOY
00104     ENDIF
00105 
00106   CASE DEFAULT
00107     WRITE(KLUOUT,*) 'error in physiographic fields computations (routine GET_MESH_INDEX)'
00108     WRITE(KLUOUT,*) 'It is impossible to retrieve geographical coordinates (latitude, longitude)'
00109     WRITE(KLUOUT,*) 'for the following grid type: CGRID = ', CGRID
00110     CALL ABOR1_SFX('GET_MESH_INDEX: IMPOSSIBLE TO RETRIEVE GEOGRAPHICAL COORDINATES')
00111 END SELECT
00112 IF (LHOOK) CALL DR_HOOK('GET_MESH_INDEX',1,ZHOOK_HANDLE)
00113 !
00114 !-------------------------------------------------------------------------------
00115 !
00116 END SUBROUTINE GET_MESH_INDEX