SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE PGD_SEAFLUX_PAR(HPROGRAM,OSST_DATA) 00003 ! ############################################################## 00004 ! 00005 !!**** *PGD_SEAFLUX_PAR* monitor for averaging and interpolations of sst 00006 !! 00007 !! PURPOSE 00008 !! ------- 00009 !! 00010 !! METHOD 00011 !! ------ 00012 !! 00013 ! 00014 !! EXTERNAL 00015 !! -------- 00016 !! 00017 !! IMPLICIT ARGUMENTS 00018 !! ------------------ 00019 !! 00020 !! REFERENCE 00021 !! --------- 00022 !! 00023 !! AUTHOR 00024 !! ------ 00025 !! 00026 !! P. Le Moigne Meteo-France 00027 !! 00028 !! MODIFICATION 00029 !! ------------ 00030 !! 00031 !! Original 09/2007 00032 !! 00033 !! 00034 !---------------------------------------------------------------------------- 00035 ! 00036 !* 0. DECLARATION 00037 ! ----------- 00038 ! 00039 USE MODD_SURF_PAR, ONLY : XUNDEF, NUNDEF 00040 USE MODD_SEAFLUX_GRID_n, ONLY : NDIM 00041 USE MODD_DATA_SEAFLUX_n, ONLY : XDATA_SST, TDATA_SST 00042 ! 00043 USE MODD_PGDWORK, ONLY : CATYPE 00044 ! 00045 USE MODD_TYPE_DATE_SURF 00046 ! 00047 USE MODI_GET_LUOUT 00048 USE MODI_OPEN_NAMELIST 00049 USE MODI_CLOSE_NAMELIST 00050 USE MODI_PGD_FIELD 00051 ! 00052 USE MODE_POS_SURF 00053 ! 00054 ! 00055 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00056 USE PARKIND1 ,ONLY : JPRB 00057 ! 00058 USE MODI_ABOR1_SFX 00059 ! 00060 IMPLICIT NONE 00061 ! 00062 !* 0.1 Declaration of arguments 00063 ! ------------------------ 00064 ! 00065 CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! Type of program 00066 LOGICAL , INTENT(OUT) :: OSST_DATA 00067 ! 00068 ! 00069 !* 0.2 Declaration of local variables 00070 ! ------------------------------ 00071 ! 00072 INTEGER :: ILUOUT ! output listing logical unit 00073 INTEGER :: ILUNAM ! namelist file logical unit 00074 LOGICAL :: GFOUND ! true if namelist is found 00075 ! 00076 INTEGER :: JTIME ! loop counter on time 00077 ! 00078 !* 0.3 Declaration of namelists 00079 ! ------------------------ 00080 ! 00081 INTEGER :: NTIME 00082 INTEGER, PARAMETER :: NTIME_MAX = 365 00083 ! 00084 REAL, DIMENSION(NTIME_MAX) :: XUNIF_SST ! sea surface temperature 00085 00086 INTEGER, DIMENSION(NTIME_MAX) :: NYEAR_SST 00087 INTEGER, DIMENSION(NTIME_MAX) :: NMONTH_SST 00088 INTEGER, DIMENSION(NTIME_MAX) :: NDAY_SST 00089 REAL, DIMENSION(NTIME_MAX) :: XTIME_SST 00090 LOGICAL :: LSST_DATA 00091 ! 00092 ! name of files containing data 00093 ! 00094 CHARACTER(LEN=28), DIMENSION(NTIME_MAX) :: CFNAM_SST ! sea surface temperature 00095 CHARACTER(LEN=6), DIMENSION(NTIME_MAX) :: CFTYP_SST ! sea surface temperature 00096 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00097 ! 00098 NAMELIST/NAM_DATA_SEAFLUX/NTIME, LSST_DATA, XUNIF_SST, CFNAM_SST, CFTYP_SST, & 00099 NYEAR_SST, NMONTH_SST, NDAY_SST, XTIME_SST 00100 !------------------------------------------------------------------------------- 00101 ! 00102 !* 1. Initializations 00103 ! --------------- 00104 ! 00105 IF (LHOOK) CALL DR_HOOK('PGD_SEAFLUX_PAR',0,ZHOOK_HANDLE) 00106 NTIME = 12 00107 XUNIF_SST (:) = XUNDEF ! sea surface temperature 00108 ! 00109 CFNAM_SST (:) = ' ' 00110 ! 00111 CFTYP_SST (:) = ' ' 00112 ! 00113 NYEAR_SST (:) = NUNDEF 00114 NMONTH_SST (:) = NUNDEF 00115 NDAY_SST (:) = NUNDEF 00116 XTIME_SST (:) = XUNDEF 00117 ! 00118 LSST_DATA = .FALSE. 00119 !------------------------------------------------------------------------------- 00120 ! 00121 !* 2. Input file for cover types 00122 ! -------------------------- 00123 ! 00124 CALL GET_LUOUT(HPROGRAM,ILUOUT) 00125 CALL OPEN_NAMELIST(HPROGRAM,ILUNAM) 00126 ! 00127 CALL POSNAM(ILUNAM,'NAM_DATA_SEAFLUX',GFOUND,ILUOUT) 00128 IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_DATA_SEAFLUX) 00129 ! 00130 CALL CLOSE_NAMELIST(HPROGRAM,ILUNAM) 00131 ! 00132 OSST_DATA = LSST_DATA 00133 IF (.NOT. LSST_DATA .AND. LHOOK) CALL DR_HOOK('PGD_SEAFLUX_PAR',1,ZHOOK_HANDLE) 00134 IF (.NOT. LSST_DATA) RETURN 00135 ! 00136 IF (NTIME > NTIME_MAX) THEN 00137 WRITE(ILUOUT,*)'NTIME SHOULD NOT EXCEED',NTIME_MAX 00138 CALL ABOR1_SFX('PGD_SEAFLUX_PAR: NTIME TOO BIG') 00139 ENDIF 00140 ALLOCATE(XDATA_SST (NDIM,NTIME)) 00141 ALLOCATE(TDATA_SST (NTIME)) 00142 ! 00143 !------------------------------------------------------------------------------- 00144 ! 00145 !* 3. Uniform fields are prescribed 00146 ! ----------------------------- 00147 ! 00148 CATYPE = 'ARI' 00149 ! 00150 DO JTIME=1,NTIME 00151 CALL PGD_FIELD(HPROGRAM,'SST: sea surface temperature','SEA',CFNAM_SST(JTIME), & 00152 CFTYP_SST(JTIME),XUNIF_SST(JTIME),XDATA_SST(:,JTIME)) 00153 ! 00154 TDATA_SST(JTIME)%TDATE%YEAR = NYEAR_SST(JTIME) 00155 TDATA_SST(JTIME)%TDATE%MONTH = NMONTH_SST(JTIME) 00156 TDATA_SST(JTIME)%TDATE%DAY = NDAY_SST(JTIME) 00157 TDATA_SST(JTIME)%TIME = XTIME_SST(JTIME) 00158 ! 00159 END DO 00160 IF (LHOOK) CALL DR_HOOK('PGD_SEAFLUX_PAR',1,ZHOOK_HANDLE) 00161 ! 00162 !------------------------------------------------------------------------------- 00163 ! 00164 END SUBROUTINE PGD_SEAFLUX_PAR