|
SURFEX v7.3
General documentation of Surfex
|
00001 !###################### 00002 MODULE MODE_TRIP_NETCDF 00003 !###################### 00004 ! 00005 !!**** *MODE_TRIP_NETCDF* 00006 !! 00007 !! PURPOSE 00008 !! ------- 00009 ! 00010 ! The purpose of this routine is to store here all routines 00011 ! used by TRIP for read/store variables in netcdf. 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 NCOPEN 00039 MODULE PROCEDURE NCOPEN 00040 END INTERFACE 00041 ! 00042 INTERFACE NCCLOSE 00043 MODULE PROCEDURE NCCLOSE 00044 END INTERFACE 00045 ! 00046 INTERFACE NCREAD 00047 MODULE PROCEDURE NCREAD_X 00048 MODULE PROCEDURE NCREAD_XY 00049 MODULE PROCEDURE NCREAD_XYZ 00050 END INTERFACE 00051 ! 00052 INTERFACE NCCREATE 00053 MODULE PROCEDURE NCCREATE 00054 END INTERFACE 00055 ! 00056 INTERFACE NCSTORE 00057 MODULE PROCEDURE NCSTORE 00058 END INTERFACE 00059 ! 00060 !------------------------------------------------------------------------------- 00061 ! 00062 CONTAINS 00063 ! 00064 !------------------------------------------------------------------------------- 00065 ! 00066 ! ###################################################### 00067 SUBROUTINE NCOPEN(KLUOUT,ORW,OVERBOSE,HFILENAME,KNCID) 00068 ! ###################################################### 00069 ! 00070 !! PURPOSE 00071 !! ------- 00072 ! 00073 ! Open a netcdf file name YFILENAME 00074 ! 00075 IMPLICIT NONE 00076 ! 00077 include 'netcdf.inc' 00078 ! 00079 !* declarations of arguments 00080 ! 00081 CHARACTER(LEN=nf_max_name), INTENT(IN) :: HFILENAME 00082 ! 00083 LOGICAL, INTENT(IN) :: ORW, OVERBOSE 00084 ! 00085 INTEGER, INTENT(IN) :: KLUOUT 00086 ! 00087 INTEGER, INTENT(OUT) :: KNCID 00088 ! 00089 !* declarations of local variables 00090 ! 00091 CHARACTER(LEN=nf_max_name) :: YFNAME 00092 ! 00093 INTEGER :: IC 00094 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00095 ! 00096 !* procedure 00097 ! 00098 IF (LHOOK) CALL DR_HOOK('MODE_TRIP_NETCDF:NCOPEN',0,ZHOOK_HANDLE) 00099 YFNAME = HFILENAME(1:LEN_TRIM(HFILENAME)) 00100 ! 00101 IF(ORW)THEN 00102 IC = NF_OPEN(YFNAME,NF_WRITE,KNCID) 00103 ELSE 00104 IC = NF_OPEN(YFNAME,NF_NOWRITE,KNCID) 00105 ENDIF 00106 ! 00107 IF(IC/=NF_NOERR)THEN 00108 WRITE(KLUOUT,*)'NCOPEN for TRIP : Error opening file ',HFILENAME(1:LEN_TRIM(HFILENAME)) 00109 WRITE(KLUOUT,*)NF_STRERROR(IC) 00110 STOP 00111 ELSEIF(OVERBOSE)THEN 00112 WRITE(KLUOUT,*)'NCOPEN for TRIP : Opening file ',HFILENAME(1:LEN_TRIM(HFILENAME)) 00113 ENDIF 00114 IF (LHOOK) CALL DR_HOOK('MODE_TRIP_NETCDF:NCOPEN',1,ZHOOK_HANDLE) 00115 ! 00116 END SUBROUTINE NCOPEN 00117 ! 00118 !------------------------------------------------------------------------------- 00119 ! 00120 ! ################################################### 00121 SUBROUTINE NCCLOSE(KLUOUT,OVERBOSE,HFILENAME,KNCID) 00122 ! ################################################### 00123 ! 00124 !! PURPOSE 00125 !! ------- 00126 ! 00127 ! Close a netcdf file 00128 ! 00129 IMPLICIT NONE 00130 ! 00131 include 'netcdf.inc' 00132 ! 00133 !* declarations of arguments 00134 ! 00135 CHARACTER(LEN=nf_max_name), INTENT(IN) :: HFILENAME 00136 ! 00137 LOGICAL, INTENT(IN) :: OVERBOSE 00138 INTEGER, INTENT(IN) :: KLUOUT 00139 INTEGER, INTENT(IN) :: KNCID 00140 ! 00141 !* declarations of local variables 00142 ! 00143 INTEGER :: IC 00144 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00145 ! 00146 !* procedure 00147 ! 00148 IF (LHOOK) CALL DR_HOOK('MODE_TRIP_NETCDF:NCCLOSE',0,ZHOOK_HANDLE) 00149 IC = NF_CLOSE(KNCID) 00150 IF(OVERBOSE)WRITE(KLUOUT,*)'NCCLOSE for TRIP : Close file ',HFILENAME(1:LEN_TRIM(HFILENAME)) 00151 IF (LHOOK) CALL DR_HOOK('MODE_TRIP_NETCDF:NCCLOSE',1,ZHOOK_HANDLE) 00152 ! 00153 END SUBROUTINE NCCLOSE 00154 ! 00155 !------------------------------------------------------------------------------- 00156 ! 00157 ! ######################################################################### 00158 SUBROUTINE NCREAD_X(KLUOUT,KNCID,HVNAME,PVECT,OVERBOSE) 00159 ! ######################################################################### 00160 ! 00161 !! PURPOSE 00162 !! ------- 00163 ! 00164 ! Read a XY variable in a netcdf file 00165 ! 00166 IMPLICIT NONE 00167 ! 00168 include 'netcdf.inc' 00169 ! 00170 !* declarations of arguments 00171 ! 00172 CHARACTER(LEN=nf_max_name), INTENT(IN) :: HVNAME 00173 ! 00174 INTEGER, INTENT(IN) :: KLUOUT 00175 INTEGER, INTENT(IN) :: KNCID 00176 ! 00177 LOGICAL, INTENT(IN) :: OVERBOSE 00178 ! 00179 REAL, DIMENSION(:), INTENT(OUT) :: PVECT 00180 ! 00181 !* declarations of local variables 00182 ! 00183 CHARACTER(LEN=nf_max_name) :: YVNAME 00184 ! 00185 INTEGER :: IC, ID 00186 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00187 ! 00188 !* procedure 00189 ! 00190 IF (LHOOK) CALL DR_HOOK('MODE_TRIP_NETCDF:NCREAD_X',0,ZHOOK_HANDLE) 00191 YVNAME = HVNAME(1:LEN_TRIM(HVNAME)) 00192 ! 00193 IC = NF_INQ_VARID(KNCID,YVNAME,ID) 00194 ! 00195 IF(IC/=NF_NOERR)THEN 00196 WRITE(KLUOUT,*)'NCREAD_X for TRIP : Error reading variable ',HVNAME(1:LEN_TRIM(HVNAME)) 00197 WRITE(KLUOUT,*)NF_STRERROR(IC) 00198 STOP 00199 ELSE 00200 IC=NF_GET_VAR_DOUBLE(KNCID,ID,PVECT) 00201 IF(IC/=NF_NOERR)THEN 00202 WRITE(KLUOUT,*)'NCREAD_X for TRIP : Error reading variable ',HVNAME(1:LEN_TRIM(HVNAME)) 00203 WRITE(KLUOUT,*)NF_STRERROR(IC) 00204 STOP 00205 ELSEIF(OVERBOSE)THEN 00206 WRITE(KLUOUT,*)'NCREAD_X for TRIP : Success in reading variable ',HVNAME(1:LEN_TRIM(HVNAME)) 00207 ENDIF 00208 ENDIF 00209 IF (LHOOK) CALL DR_HOOK('MODE_TRIP_NETCDF:NCREAD_X',1,ZHOOK_HANDLE) 00210 ! 00211 END SUBROUTINE NCREAD_X 00212 !------------------------------------------------------------------------------- 00213 ! 00214 ! ######################################################################### 00215 SUBROUTINE NCREAD_XY(KLUOUT,KNCID,HVNAME,PVECT,OVERBOSE) 00216 ! ######################################################################### 00217 ! 00218 !! PURPOSE 00219 !! ------- 00220 ! 00221 ! Read a XY variable in a netcdf file 00222 ! 00223 IMPLICIT NONE 00224 ! 00225 include 'netcdf.inc' 00226 ! 00227 !* declarations of arguments 00228 ! 00229 CHARACTER(LEN=nf_max_name), INTENT(IN) :: HVNAME 00230 ! 00231 INTEGER, INTENT(IN) :: KLUOUT 00232 INTEGER, INTENT(IN) :: KNCID 00233 ! 00234 LOGICAL, INTENT(IN) :: OVERBOSE 00235 ! 00236 REAL, DIMENSION(:,:), INTENT(OUT) :: PVECT 00237 ! 00238 !* declarations of local variables 00239 ! 00240 CHARACTER(LEN=nf_max_name) :: YVNAME 00241 ! 00242 INTEGER :: IC, ID 00243 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00244 ! 00245 !* procedure 00246 ! 00247 IF (LHOOK) CALL DR_HOOK('MODE_TRIP_NETCDF:NCREAD_XY',0,ZHOOK_HANDLE) 00248 YVNAME = HVNAME(1:LEN_TRIM(HVNAME)) 00249 ! 00250 IC = NF_INQ_VARID(KNCID,YVNAME,ID) 00251 ! 00252 IF(IC/=NF_NOERR)THEN 00253 WRITE(KLUOUT,*)'NCREAD_XY for TRIP : Error reading variable ',HVNAME(1:LEN_TRIM(HVNAME)) 00254 WRITE(KLUOUT,*)NF_STRERROR(IC) 00255 STOP 00256 ELSE 00257 IC=NF_GET_VAR_DOUBLE(KNCID,ID,PVECT) 00258 IF(IC/=NF_NOERR)THEN 00259 WRITE(KLUOUT,*)'NCREAD_XY for TRIP : Error reading variable ',HVNAME(1:LEN_TRIM(HVNAME)) 00260 WRITE(KLUOUT,*)NF_STRERROR(IC) 00261 STOP 00262 ELSEIF(OVERBOSE)THEN 00263 WRITE(KLUOUT,*)'NCREAD_XY for TRIP : Success in reading variable ',HVNAME(1:LEN_TRIM(HVNAME)) 00264 ENDIF 00265 ENDIF 00266 IF (LHOOK) CALL DR_HOOK('MODE_TRIP_NETCDF:NCREAD_XY',1,ZHOOK_HANDLE) 00267 ! 00268 END SUBROUTINE NCREAD_XY 00269 !------------------------------------------------------------------------------- 00270 ! 00271 ! ######################################################################### 00272 SUBROUTINE NCREAD_XYZ(KLUOUT,KNCID,HVNAME,PVECT,OVERBOSE) 00273 ! ######################################################################### 00274 ! 00275 !! PURPOSE 00276 !! ------- 00277 ! 00278 ! Read a XYZ variable in a netcdf file 00279 ! 00280 IMPLICIT NONE 00281 ! 00282 include 'netcdf.inc' 00283 ! 00284 !* declarations of arguments 00285 ! 00286 CHARACTER(LEN=nf_max_name), INTENT(IN) :: HVNAME 00287 ! 00288 INTEGER, INTENT(IN) :: KLUOUT 00289 INTEGER, INTENT(IN) :: KNCID 00290 ! 00291 LOGICAL, INTENT(IN) :: OVERBOSE 00292 ! 00293 REAL, DIMENSION(:,:,:), INTENT(OUT) :: PVECT 00294 ! 00295 !* declarations of local variables 00296 ! 00297 CHARACTER(LEN=nf_max_name) :: YVNAME 00298 ! 00299 INTEGER :: IC, ID 00300 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00301 ! 00302 !* procedure 00303 ! 00304 IF (LHOOK) CALL DR_HOOK('MODE_TRIP_NETCDF:NCREAD_XYZ',0,ZHOOK_HANDLE) 00305 YVNAME = HVNAME(1:LEN_TRIM(HVNAME)) 00306 ! 00307 IC = NF_INQ_VARID(KNCID,YVNAME,ID) 00308 ! 00309 IF(IC/=NF_NOERR)THEN 00310 WRITE(KLUOUT,*)'NCREAD_XYZ for TRIP : Error reading variable ',HVNAME(1:LEN_TRIM(HVNAME)) 00311 WRITE(KLUOUT,*)NF_STRERROR(IC) 00312 STOP 00313 ELSE 00314 IC=NF_GET_VAR_DOUBLE(KNCID,ID,PVECT) 00315 IF(IC/=NF_NOERR)THEN 00316 WRITE(KLUOUT,*)'NCREAD_XYZ for TRIP : Error reading variable ',HVNAME(1:LEN_TRIM(HVNAME)) 00317 WRITE(KLUOUT,*)NF_STRERROR(IC) 00318 STOP 00319 ELSEIF(OVERBOSE)THEN 00320 WRITE(KLUOUT,*)'NCREAD_XYZ for TRIP : Success in reading variable ',HVNAME(1:LEN_TRIM(HVNAME)) 00321 ENDIF 00322 ENDIF 00323 IF (LHOOK) CALL DR_HOOK('MODE_TRIP_NETCDF:NCREAD_XYZ',1,ZHOOK_HANDLE) 00324 ! 00325 END SUBROUTINE NCREAD_XYZ 00326 ! 00327 !------------------------------------------------------------------------------- 00328 ! 00329 ! ######################################################## 00330 SUBROUTINE NCCREATE(KLUOUT,HFILENAME,HTITLE,HTIMEUNIT, & 00331 HVNAME,HVLNAME,HUNIT,PLON,PLAT, & 00332 PMISSVAL,OVERBOSE,KNCID,OTIME, & 00333 KZLEN,OVARZDIM) 00334 ! ######################################################## 00335 ! 00336 !! PURPOSE 00337 !! ------- 00338 ! 00339 ! Open a netcdf file name YFILENAME 00340 ! 00341 IMPLICIT NONE 00342 ! 00343 include 'netcdf.inc' 00344 ! 00345 !* declarations of arguments 00346 ! 00347 CHARACTER(LEN=nf_max_name), INTENT(IN) :: HFILENAME, HTITLE, HTIMEUNIT 00348 ! 00349 CHARACTER(LEN=nf_max_name), DIMENSION(:), INTENT(IN) :: HVNAME, HVLNAME, HUNIT 00350 ! 00351 REAL, DIMENSION(:), INTENT(IN) :: PLON 00352 REAL, DIMENSION(:), INTENT(IN) :: PLAT 00353 ! 00354 LOGICAL, INTENT(IN) :: OVERBOSE 00355 ! 00356 REAL, INTENT(IN) :: PMISSVAL 00357 ! 00358 INTEGER, INTENT(IN) :: KLUOUT 00359 ! 00360 INTEGER, INTENT(OUT) :: KNCID 00361 ! 00362 LOGICAL, INTENT(IN) :: OTIME 00363 ! 00364 INTEGER, INTENT(IN), OPTIONAL :: KZLEN 00365 LOGICAL, DIMENSION(:), INTENT(IN), OPTIONAL :: OVARZDIM 00366 ! 00367 !* declarations of local variables 00368 ! 00369 CHARACTER(LEN=nf_max_name) :: YWORK 00370 ! 00371 REAL, DIMENSION(:), ALLOCATABLE :: ZWORK 00372 ! 00373 INTEGER :: ILONDIM, ILATDIM, ILEVDIM, ITIMEDIM 00374 INTEGER :: ILON_ID, ILAT_ID, ILEV_ID, ITIME_ID, VAR_ID 00375 INTEGER :: IC, IWORK, INVAR 00376 INTEGER :: JVAR 00377 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00378 ! 00379 !* procedure 00380 ! 00381 ! 00382 !Creation 00383 IF (LHOOK) CALL DR_HOOK('MODE_TRIP_NETCDF:NCCREATE',0,ZHOOK_HANDLE) 00384 YWORK = HFILENAME(1:LEN_TRIM(HFILENAME)) 00385 IC = NF_CREATE(YWORK,NF_CLOBBER,KNCID) 00386 IF(IC/=NF_NOERR)THEN 00387 WRITE(KLUOUT,*)'NCCREATE for TRIP : Error create file ',HFILENAME(1:LEN_TRIM(HFILENAME)) 00388 WRITE(KLUOUT,*)NF_STRERROR(IC) 00389 STOP 00390 ELSEIF(OVERBOSE)THEN 00391 WRITE(KLUOUT,*)'NCCREATE for TRIP : Success in creating file ',HFILENAME(1:LEN_TRIM(HFILENAME)) 00392 ENDIF 00393 ! 00394 !Attributs 00395 YWORK = HTITLE(1:LEN_TRIM(HTITLE)) 00396 IC = NF_PUT_ATT_TEXT(KNCID,NF_GLOBAL,'title',LEN_TRIM(YWORK),YWORK) 00397 YWORK = 'COARDS' 00398 IC = NF_PUT_ATT_TEXT(KNCID,NF_GLOBAL,'Conventions',LEN_TRIM(YWORK),YWORK) 00399 ! 00400 !Dimensions 00401 IWORK = SIZE(PLON) 00402 IC = NF_DEF_DIM(KNCID,'longitude',IWORK,ILONDIM) 00403 IWORK = SIZE(PLAT) 00404 IC = NF_DEF_DIM(KNCID,'latitude',IWORK,ILATDIM) 00405 IF(PRESENT(KZLEN)) IC = NF_DEF_DIM(KNCID,'level',KZLEN,ILEVDIM) 00406 IF(OTIME) IC = NF_DEF_DIM(KNCID,'time',NF_UNLIMITED,ITIMEDIM) 00407 ! 00408 !Variable attributs 00409 ! 00410 IC = NF_DEF_VAR(KNCID,'longitude',NF_DOUBLE,1,ILONDIM,ILON_ID) 00411 IC = NF_DEF_VAR(KNCID,'latitude' ,NF_DOUBLE,1,ILATDIM,ILAT_ID) 00412 YWORK = 'degrees_east' 00413 IC = NF_PUT_ATT_TEXT(KNCID,ILON_ID,'units',LEN_TRIM(YWORK),YWORK) 00414 YWORK = 'degrees_north' 00415 IC = NF_PUT_ATT_TEXT(KNCID,ILAT_ID,'units',LEN_TRIM(YWORK),YWORK) 00416 IF(PRESENT(KZLEN))THEN 00417 IC = NF_DEF_VAR(KNCID,'level',NF_DOUBLE,1,ILEVDIM,ILEV_ID) 00418 YWORK = 'level' 00419 IC = NF_PUT_ATT_TEXT(KNCID,ILEV_ID,'units',LEN_TRIM(YWORK),YWORK) 00420 ENDIF 00421 ! 00422 IF(OTIME)THEN 00423 YWORK = HTIMEUNIT(1:LEN_TRIM(HTIMEUNIT)) 00424 IC = NF_DEF_VAR(KNCID,'time',NF_INT,1,ITIMEDIM,ITIME_ID) 00425 IC = NF_PUT_ATT_TEXT(KNCID,ITIME_ID,'units',LEN_TRIM(YWORK),YWORK) 00426 ENDIF 00427 ! 00428 !Variables parametres 00429 ! 00430 INVAR = SIZE(HVNAME) 00431 ! 00432 DO JVAR=1,INVAR 00433 YWORK = HVNAME(JVAR)(1:LEN_TRIM(HVNAME(JVAR))) 00434 IF(PRESENT(KZLEN))THEN 00435 IF(OTIME)THEN 00436 IF(OVARZDIM(JVAR))THEN 00437 IC = NF_DEF_VAR(KNCID,YWORK,NF_DOUBLE,4,(/ILONDIM,ILATDIM,ILEVDIM,ITIMEDIM/),VAR_ID) 00438 ELSE 00439 IC = NF_DEF_VAR(KNCID,YWORK,NF_DOUBLE,3,(/ILONDIM,ILATDIM,ITIMEDIM/),VAR_ID) 00440 ENDIF 00441 ELSE 00442 IF(OVARZDIM(JVAR))THEN 00443 IC = NF_DEF_VAR(KNCID,YWORK,NF_DOUBLE,3,(/ILONDIM,ILATDIM,ILEVDIM/),VAR_ID) 00444 ELSE 00445 IC = NF_DEF_VAR(KNCID,YWORK,NF_DOUBLE,2,(/ILONDIM,ILATDIM/),VAR_ID) 00446 ENDIF 00447 ENDIF 00448 ELSE 00449 IF(OTIME)THEN 00450 IC = NF_DEF_VAR(KNCID,YWORK,NF_DOUBLE,3,(/ILONDIM,ILATDIM,ITIMEDIM/),VAR_ID) 00451 ELSE 00452 IC = NF_DEF_VAR(KNCID,YWORK,NF_DOUBLE,2,(/ILONDIM,ILATDIM/),VAR_ID) 00453 ENDIF 00454 ENDIF 00455 YWORK = HVLNAME(JVAR)(1:LEN_TRIM(HVLNAME(JVAR))) 00456 IC = NF_PUT_ATT_TEXT(KNCID,VAR_ID,'long_name',LEN_TRIM(YWORK),YWORK) 00457 YWORK = HUNIT(JVAR)(1:LEN_TRIM(HUNIT(JVAR))) 00458 IC = NF_PUT_ATT_TEXT(KNCID,VAR_ID,'units',LEN_TRIM(YWORK),YWORK) 00459 IC = NF_PUT_ATT_DOUBLE(KNCID,VAR_ID,'missing_value',NF_DOUBLE,1,PMISSVAL) 00460 ENDDO 00461 ! 00462 IC = NF_ENDDEF(KNCID) 00463 ! 00464 !Write dimensions 00465 IC = NF_PUT_VAR_DOUBLE(KNCID,ILON_ID,PLON) 00466 IC = NF_PUT_VAR_DOUBLE(KNCID,ILAT_ID,PLAT) 00467 IF(PRESENT(KZLEN))THEN 00468 ALLOCATE(ZWORK(KZLEN)) 00469 DO JVAR = 1,KZLEN 00470 ZWORK(JVAR)=JVAR 00471 ENDDO 00472 IC = NF_PUT_VAR_DOUBLE(KNCID,ILEV_ID,ZWORK) 00473 DEALLOCATE(ZWORK) 00474 ENDIF 00475 ! 00476 WRITE(KLUOUT,*)'NCCREATE ',HFILENAME(1:LEN_TRIM(HFILENAME)),' for TRIP OK !' 00477 IF (LHOOK) CALL DR_HOOK('MODE_TRIP_NETCDF:NCCREATE',1,ZHOOK_HANDLE) 00478 ! 00479 END SUBROUTINE NCCREATE 00480 ! 00481 !------------------------------------------------------------------------------- 00482 ! 00483 ! ################################################ 00484 SUBROUTINE NCSTORE(KLUOUT,KNCID,HVNAME,PWRITE, & 00485 OVERBOSE,KTIMENUM,KTIMEVAL, & 00486 KLEVEL,OVARZDIM) 00487 ! ################################################ 00488 ! 00489 !! PURPOSE 00490 !! ------- 00491 ! 00492 ! Write in a netcdf file with illimited time if this this the case 00493 ! 00494 IMPLICIT NONE 00495 ! 00496 include 'netcdf.inc' 00497 ! 00498 !* declarations of arguments 00499 ! 00500 CHARACTER(LEN=nf_max_name), INTENT(IN) :: HVNAME 00501 ! 00502 REAL, DIMENSION(:,:), INTENT(IN) :: PWRITE 00503 ! 00504 INTEGER, INTENT(IN) :: KLUOUT, KNCID 00505 ! 00506 LOGICAL, INTENT(IN) :: OVERBOSE 00507 ! 00508 INTEGER, INTENT(IN), OPTIONAL :: KTIMENUM 00509 INTEGER, INTENT(IN), OPTIONAL :: KTIMEVAL 00510 00511 INTEGER, INTENT(IN), OPTIONAL :: KLEVEL 00512 LOGICAL, INTENT(IN), OPTIONAL :: OVARZDIM 00513 ! 00514 !* declarations of local variables 00515 ! 00516 CHARACTER(LEN=nf_max_name) :: YWORK 00517 ! 00518 INTEGER, DIMENSION(4) :: ISTART, ICOUNT 00519 ! 00520 INTEGER :: IUNLIMID, ITIMEID, ILENGHT, INDIM 00521 INTEGER :: IC, IVAR_ID 00522 REAL :: ZWORK 00523 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00524 ! 00525 !* procedure 00526 ! 00527 IF (LHOOK) CALL DR_HOOK('MODE_TRIP_NETCDF:NCSTORE',0,ZHOOK_HANDLE) 00528 IF(PRESENT(KLEVEL).AND..NOT.PRESENT(OVARZDIM))THEN 00529 WRITE(KLUOUT,*)'NCSTORE for TRIP : Error writing variable ',HVNAME(1:LEN_TRIM(HVNAME)) 00530 WRITE(KLUOUT,*)'ILEVEL present but not LVARZDIM' 00531 WRITE(KLUOUT,*)NF_STRERROR(IC) 00532 STOP 00533 ENDIF 00534 ! 00535 IF(PRESENT(KTIMENUM).AND.PRESENT(KTIMEVAL))THEN 00536 IC = NF_INQ_UNLIMDIM(KNCID,IUNLIMID) 00537 IF(IUNLIMID/=-1)THEN 00538 IC = NF_INQ_DIMLEN(KNCID,IUNLIMID,ILENGHT) 00539 IF(KTIMENUM/=ILENGHT)THEN 00540 IC = NF_INQ_VARID(KNCID,'time',ITIMEID) 00541 ZWORK = KTIMEVAL 00542 IC = NF_PUT_VAR1_DOUBLE(KNCID,ITIMEID,(/KTIMENUM/),ZWORK) 00543 IF(OVERBOSE)THEN 00544 WRITE(KLUOUT,*)'NCSTORE : re-writing of time variable number=',& 00545 KTIMENUM,' and value=',KTIMEVAL 00546 ENDIF 00547 ENDIF 00548 ENDIF 00549 ENDIF 00550 ! 00551 YWORK = HVNAME(1:LEN_TRIM(HVNAME)) 00552 ! 00553 IC = NF_INQ_VARID(KNCID,YWORK,IVAR_ID) 00554 IC = NF_INQ_VARNDIMS(KNCID,IVAR_ID,INDIM) 00555 ! 00556 ICOUNT(1) = SIZE(PWRITE,1) 00557 ICOUNT(2) = SIZE(PWRITE,2) 00558 ICOUNT(3) = 1 00559 ICOUNT(4) = 1 00560 ! 00561 ISTART(1) = 1 00562 ISTART(2) = 1 00563 ! 00564 IF(PRESENT(KLEVEL).AND.OVARZDIM)THEN 00565 ISTART(3) = KLEVEL 00566 IF(PRESENT(KTIMENUM).AND.PRESENT(KTIMEVAL))THEN 00567 ISTART(4) = KTIMENUM 00568 IC = NF_PUT_VARA_DOUBLE(KNCID,IVAR_ID,ISTART(1:4),ICOUNT(1:4),PWRITE) 00569 ELSE 00570 IC = NF_PUT_VARA_DOUBLE(KNCID,IVAR_ID,ISTART(1:3),ICOUNT(1:3),PWRITE) 00571 ENDIF 00572 ELSE 00573 IF(PRESENT(KTIMENUM).AND.PRESENT(KTIMEVAL))THEN 00574 ISTART(3) = KTIMENUM 00575 IC = NF_PUT_VARA_DOUBLE(KNCID,IVAR_ID,ISTART(1:3),ICOUNT(1:3),PWRITE) 00576 ELSE 00577 IC = NF_PUT_VARA_DOUBLE(KNCID,IVAR_ID,ISTART(1:2),ICOUNT(1:2),PWRITE) 00578 ENDIF 00579 ENDIF 00580 ! 00581 IF(IC/=NF_NOERR)THEN 00582 WRITE(KLUOUT,*)'NCSTORE for TRIP : Error writing variable ',HVNAME(1:LEN_TRIM(HVNAME)) 00583 WRITE(KLUOUT,*)NF_STRERROR(IC) 00584 STOP 00585 ELSEIF(OVERBOSE)THEN 00586 WRITE(KLUOUT,*)'NCSTORE for TRIP : Success in writing variable ',HVNAME(1:LEN_TRIM(HVNAME)) 00587 IF(PRESENT(KLEVEL))WRITE(KLUOUT,*)' level: ',KLEVEL 00588 ENDIF 00589 ! 00590 IF (LHOOK) CALL DR_HOOK('MODE_TRIP_NETCDF:NCSTORE',1,ZHOOK_HANDLE) 00591 ! 00592 END SUBROUTINE NCSTORE 00593 ! 00594 !------------------------------------------------------------------------------- 00595 ! 00596 END MODULE MODE_TRIP_NETCDF
1.8.0