SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/OFFLIN/assim_read_sst_from_file.F90
Go to the documentation of this file.
00001 !     ###############################################################################
00002 SUBROUTINE ASSIM_READ_SST_FROM_FILE(YPROGRAM,KI,PSST,PITM,HTEST)
00003 
00004 !     ###############################################################################
00005 !
00006 !!****  *ASSIM_READ_SST_FROM_FILE * - Reads SST from file
00007 !!
00008 !!    PURPOSE
00009 !!    -------
00010 !!
00011 !!**  METHOD
00012 !!    ------
00013 !!
00014 !!    REFERENCE
00015 !!    ---------
00016 !!      
00017 !!
00018 !!    AUTHOR
00019 !!    ------
00020 !!     T. Aspelien
00021 !!
00022 !!    MODIFICATIONS
00023 !!    -------------
00024 !!      Original    04/2012
00025 !!--------------------------------------------------------------------
00026 !
00027 USE MODD_ASSIM,         ONLY : LECSST
00028 USE MODD_SURF_PAR,      ONLY : XUNDEF
00029 !
00030 #ifdef FA
00031 USE MODD_IO_SURF_FA,    ONLY : CFILEIN_FA,CDNOMC
00032 #endif
00033 !
00034 USE YOMHOOK,            ONLY : LHOOK,DR_HOOK
00035 USE PARKIND1,           ONLY : JPRB
00036 !
00037 USE MODI_ABOR1_SFX
00038 USE MODI_INIT_IO_SURF_n
00039 USE MODI_READ_SURF
00040 USE MODI_END_IO_SURF_n
00041 USE MODI_IO_BUFF_CLEAN_n
00042 !
00043 IMPLICIT NONE
00044 !
00045 !*      0.1    declarations of arguments
00046 !
00047  CHARACTER(LEN=6),   INTENT(IN)    :: YPROGRAM  ! program calling surf. schemes
00048 INTEGER,            INTENT(IN)    :: KI
00049 REAL,DIMENSION(KI),  INTENT(OUT)   :: PSST
00050 REAL,DIMENSION(KI),  INTENT(IN)    :: PITM
00051  CHARACTER(LEN=2),   INTENT(IN)    :: HTEST ! must be equal to 'OK'
00052 !
00053 !*      0.2    declarations of local variables
00054 !
00055 !-------------------------------------------------------------------------------------
00056 !
00057  CHARACTER(LEN=6)     :: YPROGRAM2 = 'FA    '
00058 INTEGER              :: IRESP
00059 REAL                 :: ZFMAX,ZFMIN,ZFMEAN
00060 REAL, DIMENSION (KI) :: PTS
00061 REAL(KIND=JPRB)      :: ZHOOK_HANDLE
00062 
00063 IF (LHOOK) CALL DR_HOOK('ASSIM_SEA_N',0,ZHOOK_HANDLE)
00064 
00065 IF (HTEST/='OK') THEN
00066   CALL ABOR1_SFX('ASSIM_SEA_n: FATAL ERROR DURING ARGUMENT TRANSFER')
00067 END IF
00068 
00069 !  Read SST from boundaries when SST analysis NOT is performed in CANARI
00070 !
00071 !  Define FA file name for SST analysis interpolated from boundary file 
00072 !
00073 #ifdef FA
00074 CFILEIN_FA = 'SST_SIC'        ! input SST and SIC analysis  
00075 CDNOMC     = 'CADRE SST'      ! new frame name 
00076 WRITE(*,*) 'READING SST FROM ',TRIM(CFILEIN_FA)
00077 #endif
00078 !
00079 !
00080 !  Open FA file
00081 !
00082  CALL INIT_IO_SURF_n(YPROGRAM2,'EXTZON','SURF  ','READ ')
00083 !
00084 !  Read SST_SIC 
00085 !
00086 IF ( LECSST ) THEN
00087   ! SST field interpolated from ECMWF SST ANALYSIS to model domain
00088   CALL READ_SURF(YPROGRAM2,'SURFSEA.TEMPERA',PSST,IRESP)
00089 ELSE
00090   ! Surface temperature from boundary in SST_SIC
00091   CALL READ_SURF(YPROGRAM2,'SURFTEMPERATURE',PSST,IRESP)
00092 ENDIF
00093 !
00094 !  Close SST_SIC file
00095 !
00096  CALL END_IO_SURF_n(YPROGRAM2)
00097  CALL IO_BUFF_CLEAN_n
00098 WRITE(*,*) 'READ SST_SIC OK'
00099 
00100 ZFMIN = MINVAL(PSST)
00101 ZFMAX = MAXVAL(PSST)
00102 ZFMEAN = SUM(PSST)/FLOAT(KI)
00103 
00104 IF ( LECSST ) THEN
00105   WRITE(*,*) '  ECMWF_SST_SIC'
00106   WRITE(*,'("  SURFSEA.TEMPERA - min, mean, max: ",3E13.4)') ZFMIN, ZFMEAN, ZFMAX
00107   ! Replace -9999. with UNDEF
00108   WHERE ( PSST(:)< 0. )
00109     PSST(:) = XUNDEF
00110   END WHERE
00111 ELSE
00112   WRITE(*,*) '  Boundary file'
00113   WRITE(*,'("  SURFTEMPERATURE - min, mean, max: ",3E13.4)') ZFMIN, ZFMEAN, ZFMAX
00114   ! To avoid surface temperatures influenced by land, NATURE points are replaced with UNDEF
00115   WHERE ( PTS(:)/=XUNDEF .OR. PITM(:)>0.5 )
00116     PSST(:) = XUNDEF
00117   END WHERE
00118 ENDIF
00119 
00120 ZFMIN = MINVAL(PSST)
00121 ZFMAX = MAXVAL(PSST)
00122 ZFMEAN = SUM(PSST)/FLOAT(KI)
00123 WRITE(*,*) '  Replaced land by UNDEF '
00124 WRITE(*,'("  SST            - min, mean, max: ",3E13.4)') ZFMIN, ZFMEAN, ZFMAX
00125 
00126 IF (LHOOK) CALL DR_HOOK('ASSIM_READ_SST_FROM_FILE',1,ZHOOK_HANDLE)
00127 !
00128 !-------------------------------------------------------------------------------------
00129 !
00130 END SUBROUTINE ASSIM_READ_SST_FROM_FILE