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