SURFEX v7.3
General documentation of Surfex
|
00001 SUBROUTINE OL_WRITE_COORD(HFILE, KFILE_ID, KDDIM, HATT_TITLE, HNAME_DIM, & 00002 HUNIT1, HUNIT2, KDIM1, HDATE, PX, PY) 00003 ! 00004 USE MODD_OL_FILEID, ONLY : XID, XOUT 00005 USE MODN_IO_OFFLINE, ONLY : LWRITE_COORD 00006 ! 00007 USE MODI_DEF_VAR_NETCDF 00008 ! 00009 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00010 USE PARKIND1 ,ONLY : JPRB 00011 ! 00012 IMPLICIT NONE 00013 include 'netcdf.inc' 00014 ! 00015 CHARACTER(LEN=50), INTENT(IN) :: HFILE 00016 INTEGER, INTENT(IN) :: KFILE_ID 00017 INTEGER, DIMENSION(:), INTENT(IN) :: KDDIM 00018 CHARACTER(LEN=100), DIMENSION(:), INTENT(IN) :: HATT_TITLE 00019 CHARACTER(LEN=100), DIMENSION(:), INTENT(IN) :: HNAME_DIM 00020 CHARACTER(LEN=13) , DIMENSION(:), INTENT(IN) :: HUNIT1, HUNIT2 00021 INTEGER, INTENT(IN) :: KDIM1 00022 CHARACTER(LEN=40),DIMENSION(:), INTENT(IN) :: HDATE 00023 REAL,DIMENSION(:), INTENT(IN) :: PX, PY 00024 ! 00025 INTEGER, DIMENSION(:), ALLOCATABLE :: ITEMP 00026 INTEGER :: IVAR_ID, JRET 00027 INTEGER :: INDIMS 00028 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00029 ! 00030 IF (LHOOK) CALL DR_HOOK('OL_WRITE_COORD',0,ZHOOK_HANDLE) 00031 ! 00032 IF ( LWRITE_COORD ) THEN 00033 CALL DEF_VAR_NETCDF(KFILE_ID,'xx','abscissas',KDDIM(1:1),HATT_TITLE,(/''/)) 00034 CALL DEF_VAR_NETCDF(KFILE_ID,'yy','ordinates',KDDIM(1:1),HATT_TITLE,(/''/)) 00035 ELSEIF (KDIM1.NE.0) THEN 00036 CALL DEF_VAR_NETCDF(KFILE_ID,TRIM(HNAME_DIM(1)),'',KDDIM(1:1),HATT_TITLE,HUNIT1) 00037 CALL DEF_VAR_NETCDF(KFILE_ID,TRIM(HNAME_DIM(2)),'',KDDIM(2:2),HATT_TITLE,HUNIT2) 00038 ENDIF 00039 INDIMS = SIZE(KDDIM) 00040 CALL DEF_VAR_NETCDF(KFILE_ID,'time','',KDDIM(INDIMS:INDIMS),HATT_TITLE,HDATE) 00041 ! 00042 JRET=NF_OPEN(HFILE, NF_WRITE,KFILE_ID) 00043 IF (KDIM1.NE.0) THEN 00044 JRET = NF_INQ_VARID (KFILE_ID, HNAME_DIM(1), IVAR_ID) 00045 JRET = NF_PUT_VAR_DOUBLE (KFILE_ID, IVAR_ID, PX) 00046 JRET = NF_INQ_VARID (KFILE_ID, HNAME_DIM(2), IVAR_ID) 00047 JRET = NF_PUT_VAR_DOUBLE (KFILE_ID, IVAR_ID, PY) 00048 ELSEIF (LWRITE_COORD) THEN 00049 JRET = NF_INQ_VARID (KFILE_ID, 'xx', IVAR_ID) 00050 JRET = NF_PUT_VAR_DOUBLE (KFILE_ID, IVAR_ID, PX) 00051 JRET = NF_INQ_VARID (KFILE_ID, 'yy', IVAR_ID) 00052 JRET = NF_PUT_VAR_DOUBLE (KFILE_ID, IVAR_ID, PY) 00053 ENDIF 00054 ! 00055 ALLOCATE(ITEMP(XOUT)) 00056 ITEMP(SIZE(XID)+1:XOUT) = KFILE_ID 00057 IF (SIZE(XID).GT.0) ITEMP(1:SIZE(XID))=XID 00058 DEALLOCATE(XID) 00059 ALLOCATE(XID(XOUT)) 00060 XID=ITEMP 00061 DEALLOCATE(ITEMP) 00062 ! 00063 IF (LHOOK) CALL DR_HOOK('OL_WRITE_COORD',1,ZHOOK_HANDLE) 00064 ! 00065 END SUBROUTINE OL_WRITE_COORD