SURFEX v7.3
General documentation of Surfex
|
00001 ! ################################################################ 00002 SUBROUTINE READ_NAM_GRID_LONLAT_REG(HPROGRAM,KGRID_PAR,KL,PGRID_PAR) 00003 ! ################################################################ 00004 ! 00005 !!**** *READ_NAM_GRID_LONLAT_REG* - routine to read in namelist the horizontal grid 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 MODE_POS_SURF 00037 ! 00038 USE MODI_OPEN_NAMELIST 00039 USE MODI_CLOSE_NAMELIST 00040 USE MODI_GET_LUOUT 00041 ! 00042 USE MODE_GRIDTYPE_LONLAT_REG 00043 ! 00044 ! 00045 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00046 USE PARKIND1 ,ONLY : JPRB 00047 ! 00048 IMPLICIT NONE 00049 ! 00050 !* 0.1 Declarations of arguments 00051 ! ------------------------- 00052 ! 00053 CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program 00054 INTEGER, INTENT(INOUT) :: KGRID_PAR ! size of PGRID_PAR 00055 INTEGER, INTENT(OUT) :: KL ! number of points 00056 REAL, DIMENSION(KGRID_PAR), INTENT(OUT) :: PGRID_PAR ! parameters defining this grid 00057 ! 00058 !* 0.2 Declarations of local variables 00059 ! ------------------------------- 00060 ! 00061 INTEGER :: ILUOUT ! output listing logical unit 00062 INTEGER :: ILUNAM ! namelist file logical unit 00063 ! 00064 REAL, DIMENSION(:), ALLOCATABLE :: ZLAT ! latitude of all points 00065 REAL, DIMENSION(:), ALLOCATABLE :: ZLON ! longitude of all points 00066 ! 00067 REAL, DIMENSION(:), POINTER :: ZGRID_PAR 00068 ! 00069 LOGICAL :: GFOUND 00070 ! 00071 ! 00072 !* 0.3 Declarations of namelist 00073 ! ------------------------ 00074 ! 00075 REAL :: XLONMIN ! minimum longitude (degrees) 00076 REAL :: XLONMAX ! maximum longitude (degrees) 00077 REAL :: XLATMIN ! minimum latitude (degrees) 00078 REAL :: XLATMAX ! maximum latitude (degrees) 00079 INTEGER :: NLON ! number of points in longitude 00080 INTEGER :: NLAT ! number of points in latitude 00081 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00082 NAMELIST/NAM_LONLAT_REG/XLONMIN, XLONMAX, XLATMIN, XLATMAX, NLON, NLAT 00083 ! 00084 !------------------------------------------------------------------------------ 00085 ! 00086 !* 1. opening of namelist 00087 ! 00088 IF (LHOOK) CALL DR_HOOK('READ_NAM_GRID_LONLAT_REG',0,ZHOOK_HANDLE) 00089 CALL GET_LUOUT(HPROGRAM,ILUOUT) 00090 ! 00091 CALL OPEN_NAMELIST(HPROGRAM,ILUNAM) 00092 ! 00093 !--------------------------------------------------------------------------- 00094 ! 00095 !* 2. Reading of projection parameters 00096 ! -------------------------------- 00097 ! 00098 CALL POSNAM(ILUNAM,'NAM_LONLAT_REG',GFOUND,ILUOUT) 00099 IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_LONLAT_REG) 00100 ! 00101 !--------------------------------------------------------------------------- 00102 ! 00103 !* 3. Number of points 00104 ! ---------------- 00105 ! 00106 KL = NLON * NLAT 00107 ! 00108 !--------------------------------------------------------------------------- 00109 CALL CLOSE_NAMELIST(HPROGRAM,ILUNAM) 00110 !--------------------------------------------------------------------------- 00111 ! 00112 !* 4. All this information stored into pointer PGRID_PAR 00113 ! -------------------------------------------------- 00114 ! 00115 ALLOCATE(ZLAT(KL)) 00116 ALLOCATE(ZLON(KL)) 00117 ! 00118 CALL LATLON_LONLAT_REG(XLONMIN,XLONMAX,XLATMIN,XLATMAX,& 00119 NLON,NLAT,ZLON,ZLAT ) 00120 ! 00121 CALL PUT_GRIDTYPE_LONLAT_REG(ZGRID_PAR,XLONMIN,XLONMAX,XLATMIN,XLATMAX, & 00122 NLON,NLAT,KL,ZLON,ZLAT ) 00123 ! 00124 DEALLOCATE(ZLAT) 00125 DEALLOCATE(ZLON) 00126 ! 00127 !--------------------------------------------------------------------------- 00128 ! 00129 !* 1st call : initializes dimension 00130 ! 00131 IF (KGRID_PAR==0) THEN 00132 KGRID_PAR = SIZE(ZGRID_PAR) 00133 ! 00134 ELSE 00135 ! 00136 !* 2nd call : initializes grid array 00137 ! 00138 PGRID_PAR(:) = 0. 00139 PGRID_PAR(:) = ZGRID_PAR 00140 END IF 00141 ! 00142 DEALLOCATE(ZGRID_PAR) 00143 IF (LHOOK) CALL DR_HOOK('READ_NAM_GRID_LONLAT_REG',1,ZHOOK_HANDLE) 00144 ! 00145 !--------------------------------------------------------------------------- 00146 ! 00147 END SUBROUTINE READ_NAM_GRID_LONLAT_REG