SURFEX v7.3
General documentation of Surfex
|
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