SURFEX v7.3
General documentation of Surfex
|
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