SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/write_grid.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE WRITE_GRID(HPROGRAM,HGRID,PGRID_PAR,PLAT,PLON,PMESH_SIZE,KRESP,PDIR,HDIR)
00003 !     #########################################
00004 !
00005 !!****  *WRITE_GRID* - routine to write the horizontal grid of a scheme
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !!
00010 !!**  METHOD
00011 !!    ------
00012 !!
00013 !!    EXTERNAL
00014 !!    --------
00015 !!
00016 !!
00017 !!    IMPLICIT ARGUMENTS
00018 !!    ------------------
00019 !!
00020 !!    REFERENCE
00021 !!    ---------
00022 !!
00023 !!
00024 !!    AUTHOR
00025 !!    ------
00026 !!      V. Masson   *Meteo France*      
00027 !!
00028 !!    MODIFICATIONS
00029 !!    -------------
00030 !!      Original    01/2004 
00031 !-------------------------------------------------------------------------------
00032 !
00033 !*       0.    DECLARATIONS
00034 !              ------------
00035 !
00036 USE MODI_WRITE_SURF
00037 !
00038 !
00039 !
00040 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00041 USE PARKIND1  ,ONLY : JPRB
00042 !
00043 USE MODI_WRITE_GRIDTYPE_CARTESIAN
00044 !
00045 USE MODI_WRITE_GRIDTYPE_CONF_PROJ
00046 !
00047 USE MODI_WRITE_GRIDTYPE_GAUSS
00048 !
00049 USE MODI_WRITE_GRIDTYPE_IGN
00050 !
00051 USE MODI_WRITE_GRIDTYPE_LONLAT_REG
00052 !
00053 USE MODI_WRITE_GRIDTYPE_LONLATVAL
00054 IMPLICIT NONE
00055 !
00056 !*       0.1   Declarations of arguments
00057 !              -------------------------
00058 !
00059  CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM   ! calling program
00060  CHARACTER(LEN=10),  INTENT(IN)  :: HGRID      ! type of horizontal grid
00061 REAL, DIMENSION(:), POINTER     :: PGRID_PAR  ! parameters defining this grid
00062 REAL, DIMENSION(:), INTENT(IN)  :: PLAT       ! latitude  (degrees)
00063 REAL, DIMENSION(:), INTENT(IN)  :: PLON       ! longitude (degrees)
00064 REAL, DIMENSION(:), INTENT(IN)  :: PMESH_SIZE ! horizontal mesh size (m2)
00065 INTEGER,            INTENT(OUT) :: KRESP      ! error return code
00066 REAL, DIMENSION(:), INTENT(IN) , OPTIONAL :: PDIR ! heading of main axis of grid compared to North (degrees)
00067  CHARACTER(LEN=1),    INTENT(IN), OPTIONAL :: HDIR ! type of field :
00068                                                   ! 'H' : field with
00069                                                   !       horizontal spatial dim.
00070                                                   ! 'A' : (complete) field with
00071                                                   !       horizontal spatial dim.
00072                                                   ! '-' : no horizontal dim.
00073 !
00074 !*       0.2   Declarations of local variables
00075 !              -------------------------------
00076 !
00077  CHARACTER(LEN=100) :: YCOMMENT
00078  CHARACTER(LEN=1) :: YDIR
00079 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00080 !---------------------------------------------------------------------------
00081 !
00082 !*       1.    Write type of grid
00083 !              ------------------
00084 !
00085 IF (LHOOK) CALL DR_HOOK('WRITE_GRID',0,ZHOOK_HANDLE)
00086 YCOMMENT='GRID TYPE'
00087  CALL WRITE_SURF(HPROGRAM,'GRID_TYPE',HGRID,KRESP,YCOMMENT)
00088 !
00089 !---------------------------------------------------------------------------
00090 !
00091 !*       2.    Write parameters of the grid
00092 !              ----------------------------
00093 !
00094 YDIR='H'
00095 IF (PRESENT(HDIR)) YDIR = HDIR
00096 !
00097 SELECT CASE (HGRID)
00098   CASE("CONF PROJ ")
00099     CALL WRITE_GRIDTYPE_CONF_PROJ(HPROGRAM,SIZE(PLAT),SIZE(PGRID_PAR),PGRID_PAR(:),KRESP,YDIR)
00100   CASE("CARTESIAN ")
00101     CALL WRITE_GRIDTYPE_CARTESIAN(HPROGRAM,SIZE(PLAT),SIZE(PGRID_PAR),PGRID_PAR(:),KRESP,YDIR)
00102   CASE("LONLAT REG")
00103     CALL WRITE_GRIDTYPE_LONLAT_REG(HPROGRAM,SIZE(PLAT),SIZE(PGRID_PAR),PGRID_PAR(:),KRESP)
00104   CASE("GAUSS     ")
00105     CALL WRITE_GRIDTYPE_GAUSS(HPROGRAM,SIZE(PLAT),SIZE(PGRID_PAR),PGRID_PAR(:),KRESP)
00106   CASE("IGN       ")
00107     CALL WRITE_GRIDTYPE_IGN(HPROGRAM,SIZE(PLAT),SIZE(PGRID_PAR),PGRID_PAR(:),KRESP)
00108   CASE("LONLATVAL ")
00109     CALL WRITE_GRIDTYPE_LONLATVAL(HPROGRAM,SIZE(PLAT),SIZE(PGRID_PAR),PGRID_PAR(:),KRESP)
00110   CASE("NONE      ")
00111     YCOMMENT='LON (DEGREES)'
00112     CALL WRITE_SURF(HPROGRAM,'LON',      PLON,KRESP,YCOMMENT)
00113     IF (KRESP/=0 .AND. LHOOK) CALL DR_HOOK('WRITE_GRID',1,ZHOOK_HANDLE)
00114     IF (KRESP/=0) RETURN
00115     YCOMMENT='LAT (DEGREES)'
00116     CALL WRITE_SURF(HPROGRAM,'LAT',      PLAT,KRESP,YCOMMENT)
00117     IF (KRESP/=0 .AND. LHOOK) CALL DR_HOOK('WRITE_GRID',1,ZHOOK_HANDLE)
00118     IF (KRESP/=0) RETURN
00119     YCOMMENT='MESH SIZE (M2)'
00120     CALL WRITE_SURF(HPROGRAM,'MESH_SIZE',PMESH_SIZE,KRESP,YCOMMENT)
00121     IF (KRESP/=0 .AND. LHOOK) CALL DR_HOOK('WRITE_GRID',1,ZHOOK_HANDLE)
00122     IF (KRESP/=0) RETURN
00123 END SELECT
00124 IF (LHOOK) CALL DR_HOOK('WRITE_GRID',1,ZHOOK_HANDLE)
00125 !
00126 !---------------------------------------------------------------------------
00127 !
00128 END SUBROUTINE WRITE_GRID