|
SURFEX v7.3
General documentation of Surfex
|
00001 ! ################################################################ 00002 SUBROUTINE READ_NAM_GRID_LONLATVAL(HPROGRAM,KGRID_PAR,KL,PGRID_PAR) 00003 ! ################################################################ 00004 ! 00005 !!**** *READ_NAM_GRID_LONLATVAL* - 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 !! E. Martin *Meteo France* 00027 !! 00028 !! MODIFICATIONS 00029 !! ------------- 00030 !! Original 10/2007 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_LONLATVAL 00043 ! 00044 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00045 USE PARKIND1 ,ONLY : JPRB 00046 ! 00047 IMPLICIT NONE 00048 ! 00049 !* 0.1 Declarations of arguments 00050 ! ------------------------- 00051 ! 00052 CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program 00053 INTEGER, INTENT(INOUT) :: KGRID_PAR ! size of PGRID_PAR 00054 INTEGER, INTENT(OUT) :: KL ! number of points 00055 REAL, DIMENSION(KGRID_PAR), INTENT(OUT) :: PGRID_PAR ! parameters defining this grid 00056 ! 00057 !* 0.2 Declarations of local variables 00058 ! ------------------------------- 00059 ! 00060 INTEGER :: ILUOUT ! output listing logical unit 00061 INTEGER :: ILUNAM ! namelist file logical unit 00062 00063 REAL, DIMENSION(:), ALLOCATABLE :: ZX ! X conformal coordinate of grid mesh 00064 REAL, DIMENSION(:), ALLOCATABLE :: ZY ! Y conformal coordinate of grid mesh 00065 REAL, DIMENSION(:), ALLOCATABLE :: ZDX ! X grid mesh size 00066 REAL, DIMENSION(:), ALLOCATABLE :: ZDY ! Y grid mesh size 00067 ! 00068 !* 0.3 Declarations of namelist 00069 ! ------------------------ 00070 ! 00071 INTEGER :: NPOINTS ! number of points 00072 REAL, DIMENSION(100000) :: XX ! X coordinate of grid mesh center (in meters) 00073 REAL, DIMENSION(100000) :: XY ! Y coordinate of grid mesh center (in meters) 00074 REAL, DIMENSION(100000) :: XDX ! X mesh size (in meters) 00075 REAL, DIMENSION(100000) :: XDY ! Y mesh size (in meters) 00076 ! 00077 REAL, DIMENSION(:), POINTER :: ZGRID_PAR 00078 ! 00079 LOGICAL :: GFOUND 00080 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00081 ! 00082 NAMELIST/NAM_LONLATVAL/NPOINTS,XX,XY,XDX,XDY 00083 ! 00084 !------------------------------------------------------------------------------ 00085 ! 00086 !* 1. opening of namelist 00087 ! 00088 IF (LHOOK) CALL DR_HOOK('READ_NAM_GRID_LONLATVAL',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_LONLATVAL',GFOUND,ILUOUT) 00099 IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_LONLATVAL) 00100 ! 00101 !--------------------------------------------------------------------------- 00102 CALL CLOSE_NAMELIST(HPROGRAM,ILUNAM) 00103 !--------------------------------------------------------------------------- 00104 ! 00105 !* 3. Number of points 00106 ! ---------------- 00107 ! 00108 KL = NPOINTS 00109 ! 00110 !--------------------------------------------------------------------------- 00111 ! 00112 !* 3. Array of X and Y coordinates 00113 ! ---------------------------- 00114 ! 00115 ! 00116 ALLOCATE(ZX(KL)) 00117 ALLOCATE(ZY(KL)) 00118 ZX(:) = XX(:KL) 00119 ZY(:) = XY(:KL) 00120 ! 00121 !--------------------------------------------------------------------------- 00122 ! 00123 !* 4. Array of X and Y increments 00124 ! --------------------------- 00125 ! 00126 ALLOCATE(ZDX(KL)) 00127 ALLOCATE(ZDY(KL)) 00128 ZDX(:) = XDX(:KL) 00129 ZDY(:) = XDY(:KL) 00130 ! 00131 !--------------------------------------------------------------------------- 00132 ! 00133 !* 8. All this information stored into pointer PGRID_PAR 00134 ! -------------------------------------------------- 00135 ! 00136 CALL PUT_GRIDTYPE_LONLATVAL(ZGRID_PAR,ZX,ZY,ZDX,ZDY) 00137 ! 00138 !--------------------------------------------------------------------------- 00139 DEALLOCATE(ZX) 00140 DEALLOCATE(ZY) 00141 DEALLOCATE(ZDX) 00142 DEALLOCATE(ZDY) 00143 !--------------------------------------------------------------------------- 00144 ! 00145 !* 1st call : initializes dimension 00146 ! 00147 IF (KGRID_PAR==0) THEN 00148 KGRID_PAR = SIZE(ZGRID_PAR) 00149 ! 00150 ELSE 00151 ! 00152 !* 2nd call : initializes grid array 00153 ! 00154 PGRID_PAR(:) = 0. 00155 PGRID_PAR(:) = ZGRID_PAR 00156 END IF 00157 ! 00158 DEALLOCATE(ZGRID_PAR) 00159 IF (LHOOK) CALL DR_HOOK('READ_NAM_GRID_LONLATVAL',1,ZHOOK_HANDLE) 00160 ! 00161 !--------------------------------------------------------------------------- 00162 ! 00163 END SUBROUTINE READ_NAM_GRID_LONLATVAL
1.8.0