SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE DEF_VAR_NETCDF(KFILE_ID,HNAME,HLONG_NAME,KDIM_ID,HATT_TITLE,HATT_TEXT) 00003 ! 00004 USE MODD_OL_FILEID, ONLY : XVAR_TO_FILEOUT, XOUT 00005 USE MODD_DIAG_SURF_ATM_n,ONLY : LSELECT, CSELECT 00006 USE MODD_SURF_PAR, ONLY : XUNDEF 00007 ! 00008 ! 00009 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00010 USE PARKIND1 ,ONLY : JPRB 00011 ! 00012 IMPLICIT NONE 00013 INCLUDE "netcdf.inc" 00014 00015 INTEGER, INTENT(IN) :: KFILE_ID 00016 CHARACTER(LEN=*), INTENT(IN) :: HNAME 00017 CHARACTER(LEN=*), INTENT(IN) :: HLONG_NAME 00018 INTEGER, DIMENSION(:), INTENT(IN) :: KDIM_ID 00019 CHARACTER(LEN=*),DIMENSION(:),OPTIONAL, INTENT(IN) :: HATT_TITLE,HATT_TEXT 00020 ! 00021 ! ** local variables 00022 ! 00023 CHARACTER(LEN=50) :: YPAS 00024 CHARACTER(LEN=20), DIMENSION(:), ALLOCATABLE :: XTEMP 00025 INTEGER :: JRET,IVAR_ID,IATT,JATT,ILEN,INDIM 00026 INTEGER, DIMENSION(4) :: IRET 00027 REAL :: ZAVG 00028 INTEGER :: IFIELD,JFIELD 00029 LOGICAL :: NOWRITE 00030 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00031 !-------------------------------------- 00032 ! 00033 IF (LHOOK) CALL DR_HOOK('DEF_VAR_NETCDF',0,ZHOOK_HANDLE) 00034 XOUT=XOUT+1 00035 ALLOCATE(XTEMP(XOUT)) 00036 XTEMP(XOUT)=HNAME 00037 IF (XOUT.GT.1) XTEMP(1:XOUT-1)=XVAR_TO_FILEOUT 00038 ! 00039 DEALLOCATE(XVAR_TO_FILEOUT) 00040 ALLOCATE(XVAR_TO_FILEOUT(XOUT)) 00041 XVAR_TO_FILEOUT=XTEMP 00042 ! 00043 DEALLOCATE(XTEMP) 00044 ! 00045 ! if output fields selection is active, test if this field is to be written 00046 IF ( HNAME/='xx' .AND. HNAME/='yy' .AND. HNAME/='lon' .AND. & 00047 HNAME/='lat' .AND. LSELECT ) THEN 00048 IFIELD=COUNT(CSELECT /= ' ') 00049 NOWRITE=.TRUE. 00050 DO JFIELD=1,IFIELD 00051 IF ( TRIM(CSELECT(JFIELD))==TRIM(HNAME) ) THEN 00052 NOWRITE=.FALSE. 00053 ENDIF 00054 ENDDO 00055 IF ( NOWRITE .AND. LHOOK) CALL DR_HOOK('DEF_VAR_NETCDF',1,ZHOOK_HANDLE) 00056 IF ( NOWRITE ) RETURN 00057 ENDIF 00058 ! 00059 ! define mode 00060 JRET=NF_REDEF(KFILE_ID) 00061 00062 !define variables in the netcdf file 00063 INDIM=SIZE(KDIM_ID) 00064 ! 00065 IRET(1) = NF_DEF_VAR (KFILE_ID,HNAME,NF_DOUBLE,INDIM,KDIM_ID,IVAR_ID) 00066 IRET(2) = NF_PUT_ATT_DOUBLE (KFILE_ID,IVAR_ID,'_FillValue',NF_DOUBLE,1,XUNDEF) 00067 IF (HLONG_NAME.NE.'') IRET(2) = NF_PUT_ATT_TEXT (KFILE_ID,IVAR_ID,'long_name',LEN_TRIM(HLONG_NAME),HLONG_NAME) 00068 ! 00069 !Write optional attribute 00070 IF (PRESENT(HATT_TITLE).AND.PRESENT(HATT_TEXT)) THEN 00071 IATT=SIZE(HATT_TITLE) 00072 IF (IATT .EQ. SIZE(HATT_TEXT)) THEN 00073 DO JATT=1,IATT 00074 ILEN=LEN_TRIM(HATT_TEXT(JATT)) 00075 YPAS=HATT_TEXT(JATT) 00076 JRET = NF_PUT_ATT_TEXT (KFILE_ID,IVAR_ID,HATT_TITLE(JATT),ILEN,HATT_TEXT(JATT)) 00077 ENDDO 00078 ENDIF 00079 ENDIF 00080 ! 00081 ! end define mode 00082 IRET(3)=NF_ENDDEF(KFILE_ID) 00083 ! 00084 IF (LHOOK) CALL DR_HOOK('DEF_VAR_NETCDF',1,ZHOOK_HANDLE) 00085 ! 00086 END SUBROUTINE DEF_VAR_NETCDF