SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/LIB/TRIP/mode_rw_trip.F90
Go to the documentation of this file.
00001 !######################
00002 MODULE MODE_RW_TRIP
00003 !######################
00004 !
00005 !!****  *MODE_RW_TRIP*
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !    
00010 !      The purpose of this routine is to store here all routines 
00011 !      used by TRIP for read/write variables.
00012 !
00013 !!
00014 !!**  IMPLICIT ARGUMENTS
00015 !!    ------------------
00016 !!       NONE          
00017 !!
00018 !!    REFERENCE
00019 !!    ---------
00020 !!
00021 !!
00022 !!    AUTHOR
00023 !!    ------
00024 !!      B. Decharme       * Meteo France *
00025 !!
00026 !!    MODIFICATIONS
00027 !!    -------------
00028 !!      Original    25/04/08
00029 !--------------------------------------------------------------------------------
00030 !
00031 !*       0.    DECLARATIONS
00032 !              ------------
00033 !
00034 !
00035 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00036 USE PARKIND1  ,ONLY : JPRB
00037 !
00038   INTERFACE READ_TRIP
00039       MODULE PROCEDURE READ_TRIP_XY
00040       MODULE PROCEDURE READ_TRIP_XYZ
00041   END INTERFACE
00042 !
00043   INTERFACE WRITE_TRIP
00044       MODULE PROCEDURE WRITE_TRIP_XY
00045       MODULE PROCEDURE WRITE_TRIP_XYZ
00046   END INTERFACE
00047 !
00048 !-------------------------------------------------------------------------------
00049 !
00050 CONTAINS
00051 !
00052 !-------------------------------------------------------------------------------
00053 !
00054 !     ##################################################
00055       SUBROUTINE READ_TRIP_XY(KLUOUT,HFILE,HVNAME,PREAD)
00056 !     ##################################################
00057 !
00058 !!    PURPOSE
00059 !!    -------
00060 !    
00061 !     Read a XY variable in a netcdf file
00062 !
00063 USE MODE_TRIP_NETCDF
00064 USE MODD_TRIP_n, ONLY : LNCPRINT
00065 !
00066 IMPLICIT NONE
00067 !
00068 include 'netcdf.inc'
00069 !
00070 !*      declarations of arguments
00071 !
00072  CHARACTER(LEN=*), INTENT(IN) :: HFILE
00073  CHARACTER(LEN=*), INTENT(IN) :: HVNAME
00074 !
00075 INTEGER, INTENT(IN) :: KLUOUT
00076 !
00077 REAL, DIMENSION(:,:), INTENT(OUT) :: PREAD
00078 !
00079 !*      declarations of local variables
00080 !
00081  CHARACTER(LEN=nf_max_name) :: YFILE
00082  CHARACTER(LEN=nf_max_name) :: YVNAME
00083 !
00084 LOGICAL, PARAMETER     :: LRW = .FALSE.
00085 !
00086 INTEGER :: INCID
00087 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00088 !
00089 !*      procedure
00090 !
00091 IF (LHOOK) CALL DR_HOOK('MODE_RW_TRIP:READ_TRIP_XY',0,ZHOOK_HANDLE)
00092 YFILE  = HFILE (1:LEN_TRIM(HFILE ))
00093 YVNAME = HVNAME(1:LEN_TRIM(HVNAME))
00094 !
00095  CALL NCOPEN(KLUOUT,LRW,LNCPRINT,YFILE,INCID)
00096  CALL NCREAD(KLUOUT,INCID,YVNAME,PREAD,LNCPRINT)
00097  CALL NCCLOSE(KLUOUT,LNCPRINT,YFILE,INCID)
00098 IF (LHOOK) CALL DR_HOOK('MODE_RW_TRIP:READ_TRIP_XY',1,ZHOOK_HANDLE)
00099 !
00100 END SUBROUTINE READ_TRIP_XY
00101 !
00102 !-------------------------------------------------------------------------------
00103 !
00104 !     ##################################################
00105       SUBROUTINE READ_TRIP_XYZ(KLUOUT,HFILE,HVNAME,PREAD)
00106 !     ##################################################
00107 !
00108 !!    PURPOSE
00109 !!    -------
00110 !    
00111 !     Read a XYZ variable in a netcdf file
00112 !
00113 USE MODE_TRIP_NETCDF
00114 USE MODD_TRIP_n, ONLY : LNCPRINT
00115 !
00116 IMPLICIT NONE
00117 !
00118 include 'netcdf.inc'
00119 !
00120 !*      declarations of arguments
00121 !
00122  CHARACTER(LEN=*), INTENT(IN) :: HFILE
00123  CHARACTER(LEN=*), INTENT(IN) :: HVNAME
00124 !
00125 INTEGER, INTENT(IN) :: KLUOUT
00126 !
00127 REAL, DIMENSION(:,:,:), INTENT(OUT) :: PREAD
00128 !
00129 !*      declarations of local variables
00130 !
00131  CHARACTER(LEN=nf_max_name) :: YFILE
00132  CHARACTER(LEN=nf_max_name) :: YVNAME
00133 !
00134 LOGICAL, PARAMETER       :: LRW = .FALSE.
00135 !
00136 INTEGER :: INCID
00137 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00138 !
00139 !*      procedure
00140 !
00141 IF (LHOOK) CALL DR_HOOK('MODE_RW_TRIP:READ_TRIP_XYZ',0,ZHOOK_HANDLE)
00142 YFILE  = HFILE (1:LEN_TRIM(HFILE ))
00143 YVNAME = HVNAME(1:LEN_TRIM(HVNAME))
00144 !
00145  CALL NCOPEN(KLUOUT,LRW,LNCPRINT,YFILE,INCID)
00146  CALL NCREAD(KLUOUT,INCID,YVNAME,PREAD,LNCPRINT)
00147  CALL NCCLOSE(KLUOUT,LNCPRINT,YFILE,INCID)
00148 IF (LHOOK) CALL DR_HOOK('MODE_RW_TRIP:READ_TRIP_XYZ',1,ZHOOK_HANDLE)
00149 !
00150 END SUBROUTINE READ_TRIP_XYZ
00151 !
00152 !-------------------------------------------------------------------------------
00153 !
00154 !     ######################################################################
00155       SUBROUTINE WRITE_TRIP_XY(KLUOUT,HFILE,HVNAME,PMASK,PWRITE,KTNUM,KTVAL)
00156 !     ######################################################################
00157 !
00158 !!    PURPOSE
00159 !!    -------
00160 !    
00161 !     Write a XY variable in HFILE
00162 !
00163 USE MODE_TRIP_NETCDF
00164 USE MODD_TRIP_n,   ONLY : LNCPRINT
00165 USE MODD_TRIP_PAR, ONLY : XTRIP_UNDEF
00166 !
00167 IMPLICIT NONE
00168 !
00169 include 'netcdf.inc'
00170 !
00171 !*      declarations of arguments
00172 !
00173  CHARACTER(LEN=*), INTENT(IN) :: HFILE
00174  CHARACTER(LEN=*), INTENT(IN) :: HVNAME
00175 !
00176 INTEGER, INTENT(IN) :: KLUOUT
00177 !
00178 REAL, DIMENSION(:,:), INTENT(IN) :: PMASK
00179 REAL, DIMENSION(:,:), INTENT(IN) :: PWRITE
00180 !
00181 INTEGER, INTENT(IN), OPTIONAL :: KTNUM
00182 INTEGER, INTENT(IN), OPTIONAL :: KTVAL
00183 !
00184 !*      declarations of local variables
00185 !
00186  CHARACTER(LEN=nf_max_name) :: YFILE
00187  CHARACTER(LEN=nf_max_name) :: YVNAME
00188 !
00189 LOGICAL, PARAMETER     :: LRW = .TRUE.
00190 !
00191 REAL, DIMENSION(SIZE(PWRITE,1),SIZE(PWRITE,2)) :: ZWRITE
00192 !
00193 INTEGER :: INCID
00194 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00195 !
00196 !*      procedure
00197 !
00198 IF (LHOOK) CALL DR_HOOK('MODE_RW_TRIP:WRITE_TRIP_XY',0,ZHOOK_HANDLE)
00199 YFILE  = HFILE (1:LEN_TRIM(HFILE ))
00200 YVNAME = HVNAME(1:LEN_TRIM(HVNAME))
00201 !
00202 ZWRITE = PWRITE
00203 WHERE(PMASK(:,:)==0.0) ZWRITE(:,:)=XTRIP_UNDEF
00204 !
00205  CALL NCOPEN(KLUOUT,LRW,LNCPRINT,YFILE,INCID)
00206 IF(PRESENT(KTNUM).AND.PRESENT(KTVAL))THEN
00207   CALL NCSTORE(KLUOUT,INCID,YVNAME,ZWRITE,LNCPRINT,KTNUM,KTVAL)
00208 ELSE
00209   CALL NCSTORE(KLUOUT,INCID,YVNAME,ZWRITE,LNCPRINT)
00210 ENDIF
00211  CALL NCCLOSE(KLUOUT,LNCPRINT,YFILE,INCID)
00212 !
00213 IF (LHOOK) CALL DR_HOOK('MODE_RW_TRIP:WRITE_TRIP_XY',1,ZHOOK_HANDLE)
00214 !
00215 END SUBROUTINE WRITE_TRIP_XY
00216 !
00217 !-------------------------------------------------------------------------------
00218 !
00219 !     #######################################################################
00220       SUBROUTINE WRITE_TRIP_XYZ(KLUOUT,HFILE,HVNAME,PMASK,PWRITE,KTNUM,KTVAL)
00221 !     #######################################################################
00222 !
00223 !!    PURPOSE
00224 !!    -------
00225 !    
00226 !     Write a XY variable in HFILE
00227 !
00228 USE MODE_TRIP_NETCDF
00229 USE MODD_TRIP_n,   ONLY : LNCPRINT
00230 USE MODD_TRIP_PAR, ONLY : XTRIP_UNDEF
00231 !
00232 IMPLICIT NONE
00233 !
00234 include 'netcdf.inc'
00235 !
00236 !*      declarations of arguments
00237 !
00238  CHARACTER(LEN=*), INTENT(IN) :: HFILE
00239  CHARACTER(LEN=*), INTENT(IN) :: HVNAME
00240 !
00241 INTEGER, INTENT(IN) :: KLUOUT
00242 !
00243 REAL, DIMENSION(:,:),   INTENT(IN) :: PMASK
00244 REAL, DIMENSION(:,:,:), INTENT(IN) :: PWRITE
00245 !
00246 INTEGER, INTENT(IN), OPTIONAL :: KTNUM
00247 INTEGER, INTENT(IN), OPTIONAL :: KTVAL
00248 !
00249 !*      declarations of local variables
00250 !
00251  CHARACTER(LEN=nf_max_name) :: YFILE
00252  CHARACTER(LEN=nf_max_name) :: YVNAME
00253 !
00254 LOGICAL, PARAMETER     :: LRW = .TRUE.
00255 LOGICAL, PARAMETER     :: LZW = .TRUE.
00256 !
00257 REAL, DIMENSION(SIZE(PWRITE,1),SIZE(PWRITE,2)) :: ZWRITE
00258 !
00259 INTEGER :: INCID, IZLEN, J
00260 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00261 !
00262 !*      procedure
00263 !
00264 IF (LHOOK) CALL DR_HOOK('MODE_RW_TRIP:WRITE_TRIP_XYZ',0,ZHOOK_HANDLE)
00265 IZLEN=SIZE(PWRITE,3)
00266 !
00267 YFILE  = HFILE (1:LEN_TRIM(HFILE ))
00268 YVNAME = HVNAME(1:LEN_TRIM(HVNAME))
00269 !
00270  CALL NCOPEN(KLUOUT,LRW,LNCPRINT,YFILE,INCID)
00271 DO J=1,IZLEN
00272    WHERE(PMASK(:,:)>0.0)
00273          ZWRITE(:,:) = PWRITE(:,:,J)
00274    ELSEWHERE
00275          ZWRITE(:,:)=XTRIP_UNDEF
00276    ENDWHERE
00277    IF(PRESENT(KTNUM).AND.PRESENT(KTVAL))THEN
00278      CALL NCSTORE(KLUOUT,INCID,YVNAME,ZWRITE,LNCPRINT,KTNUM,KTVAL,J,LZW)
00279    ELSE
00280      CALL NCSTORE(KLUOUT,INCID,YVNAME,ZWRITE,LNCPRINT,KLEVEL=J,OVARZDIM=LZW)
00281    ENDIF
00282 ENDDO
00283  CALL NCCLOSE(KLUOUT,LNCPRINT,YFILE,INCID)
00284 !
00285 IF (LHOOK) CALL DR_HOOK('MODE_RW_TRIP:WRITE_TRIP_XYZ',1,ZHOOK_HANDLE)
00286 !
00287 END SUBROUTINE WRITE_TRIP_XYZ
00288 !
00289 !-------------------------------------------------------------------------------
00290 !
00291 END MODULE MODE_RW_TRIP