SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/OFFLIN/def_var_netcdf.F90
Go to the documentation of this file.
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