SURFEX v7.3
General documentation of Surfex
|
00001 !------------------------ 00002 PROGRAM PREP 00003 !------------------------ 00004 !! 00005 !! PURPOSE 00006 !! ------- 00007 !! This program prepares the initial file for offline run 00008 !! 00009 !! METHOD 00010 !! ------ 00011 !! 00012 !! 00013 !! EXTERNAL 00014 !! -------- 00015 !! 00016 !! 00017 !! IMPLICIT ARGUMENTS 00018 !! ------------------ 00019 !! 00020 !! 00021 !! REFERENCE 00022 !! --------- 00023 !! 00024 !! AUTHOR 00025 !! ------ 00026 !! 00027 !! P. LeMoigne Meteo-France 00028 !! 00029 !! MODIFICATION 00030 !! ------------ 00031 !! 00032 !! Original 22/04/04 00033 !! B. Decharme 2008 : FA type and TRIP prep coupling 00034 !! 00035 !---------------------------------------------------------------------------- 00036 ! 00037 USE MODE_POS_SURF 00038 ! 00039 USE MODN_IO_OFFLINE, ONLY : LLAND_USE 00040 USE MODD_IO_SURF_ASC 00041 USE MODD_IO_SURF_FA 00042 USE MODD_IO_SURF_LFI 00043 USE MODD_SURF_PAR 00044 USE MODD_SURF_CONF, ONLY : CSOFTWARE 00045 ! 00046 USE MODD_SURF_ATM, ONLY : LCPL_ESM 00047 ! 00048 USE MODD_SURF_ATM_n, ONLY : TTIME 00049 ! 00050 USE MODI_OPEN_NAMELIST 00051 USE MODI_CLOSE_NAMELIST 00052 USE MODI_READ_ALL_NAMELISTS 00053 USE MODI_ALLOC_SURFEX 00054 USE MODI_DEALLOC_SURFEX 00055 USE MODI_GET_LUOUT 00056 ! 00057 USE MODI_GOTO_SURFEX 00058 USE MODI_GOTO_TRIP 00059 USE MODI_INIT_PGD_SURF_ATM 00060 USE MODI_IO_BUFF_CLEAN_n 00061 USE MODI_PREP_SURF_ATM 00062 USE MODI_PREP_SURF_TRIP 00063 USE MODI_WRITE_DIAG_SURF_ATM_n 00064 USE MODI_WRITE_HEADER_MNH 00065 USE MODI_WRITE_SURF_ATM_n 00066 ! 00067 USE MODI_GET_LONLAT_n 00068 USE MODI_FLAG_UPDATE 00069 ! 00070 USE MODN_IO_OFFLINE 00071 !------------------------------------------------------------------------------ 00072 ! 00073 ! 00074 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00075 USE PARKIND1 ,ONLY : JPRB 00076 ! 00077 IMPLICIT NONE 00078 ! 00079 !* 0. Declaration of local variables 00080 ! ------------------------------ 00081 ! 00082 INTEGER :: ILUOUT 00083 INTEGER :: ILUNAM 00084 INTEGER :: IYEAR, IMONTH, IDAY 00085 REAL :: ZTIME 00086 LOGICAL :: GFOUND 00087 00088 REAL, DIMENSION(0) :: ZZS 00089 CHARACTER(LEN=28) :: YATMFILE =' ' ! name of the Atmospheric file 00090 CHARACTER(LEN=6) :: YATMFILETYPE =' ' ! type of the Atmospheric file 00091 CHARACTER(LEN=28) :: YPGDFILE =' ' ! name of the pgd file 00092 CHARACTER(LEN=6) :: YPGDFILETYPE =' ' ! type of the pgd file 00093 CHARACTER(LEN=28) :: YLUOUT ='LISTING_PREP ' ! name of listing 00094 ! 00095 INTEGER, DIMENSION(11) :: IDATEF 00096 ! 00097 INTEGER :: IRET, INB 00098 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00099 ! 00100 !------------------------------------------------------------------------------ 00101 ! 00102 ! 00103 !* 1. Set default names and parallelized I/O 00104 ! -------------------------------------- 00105 ! 00106 IF (LHOOK) CALL DR_HOOK('PREP',0,ZHOOK_HANDLE) 00107 CALL ALLOC_SURFEX(1) 00108 CSOFTWARE='PREP' 00109 ! 00110 ! 1.1 initializations 00111 ! --------------- 00112 ! 00113 IYEAR = NUNDEF 00114 IMONTH = NUNDEF 00115 IDAY = NUNDEF 00116 ZTIME = XUNDEF 00117 ! 00118 LCPL_ESM = .FALSE. 00119 ! 00120 ! 1.2 output listing 00121 ! -------------- 00122 CLUOUT_LFI = ADJUSTL(ADJUSTR(YLUOUT)//'.txt') 00123 CALL GET_LUOUT('ASCII ',ILUOUT) 00124 OPEN (UNIT=ILUOUT,FILE=ADJUSTL(ADJUSTR(YLUOUT)//'.txt'),FORM='FORMATTED',ACTION='WRITE') 00125 ! 00126 ! 1.3 output file name read in namelist 00127 ! --------------------------------- 00128 CALL OPEN_NAMELIST('ASCII ',ILUNAM,CNAMELIST) 00129 ! 00130 CALL POSNAM(ILUNAM,'NAM_IO_OFFLINE',GFOUND) 00131 IF (GFOUND) READ (UNIT=ILUNAM,NML=NAM_IO_OFFLINE) 00132 ! 00133 CFILEPGD = ADJUSTL(ADJUSTR(CPGDFILE)//'.txt') 00134 CFILEPGD_FA = ADJUSTL(ADJUSTR(CPGDFILE)//'.fa') 00135 CFILEPGD_LFI = CPGDFILE 00136 ! 00137 CFILEIN = ADJUSTL(ADJUSTR(CPGDFILE)//'.txt') ! output of PGD program 00138 CFILEIN_FA = ADJUSTL(ADJUSTR(CPGDFILE)//'.fa') 00139 CFILEIN_LFI = CPGDFILE 00140 ! 00141 CFILEIN_SAVE = CFILEIN 00142 CFILEIN_LFI_SAVE = CFILEIN_LFI 00143 CFILEIN_FA_SAVE = CFILEIN_FA 00144 ! 00145 CFILEOUT = ADJUSTL(ADJUSTR(CPREPFILE)//'.txt') 00146 CFILEOUT_FA = ADJUSTL(ADJUSTR(CPREPFILE)//'.fa') 00147 CFILEOUT_LFI= CPREPFILE 00148 ! 00149 CALL CLOSE_NAMELIST('ASCII ',ILUNAM) 00150 ! 00151 CALL READ_ALL_NAMELISTS(CSURF_FILETYPE,'PRE',.FALSE.) 00152 ! 00153 CALL GOTO_SURFEX(1,.TRUE.) 00154 CALL GOTO_TRIP(1,.TRUE.) 00155 ! 00156 !* 2. Preparation of surface physiographic fields 00157 ! ------------------------------------------- 00158 ! 00159 CALL IO_BUFF_CLEAN_n 00160 CALL INIT_PGD_SURF_ATM(CSURF_FILETYPE,'PRE',YATMFILE,YATMFILETYPE, & 00161 IYEAR, IMONTH, IDAY, ZTIME ) 00162 ! 00163 CALL IO_BUFF_CLEAN_n 00164 CALL PREP_SURF_ATM(CSURF_FILETYPE,YATMFILE,YATMFILETYPE,YPGDFILE,YPGDFILETYPE) 00165 ! 00166 CALL PREP_SURF_TRIP(CSURF_FILETYPE) 00167 ! 00168 CALL FLAG_UPDATE(.FALSE.,.TRUE.,.FALSE.,.FALSE.) 00169 ! 00170 IF (LWRITE_COORD) CALL GET_LONLAT_n(CSURF_FILETYPE) 00171 ! 00172 !* opens the file 00173 IF (CSURF_FILETYPE=='FA ') THEN 00174 LFANOCOMPACT = .TRUE. 00175 IDATEF(1)=TTIME%TDATE%YEAR 00176 IDATEF(2)=TTIME%TDATE%MONTH 00177 IDATEF(3)=TTIME%TDATE%DAY 00178 IDATEF(4)=NINT(TTIME%TIME/3600.) 00179 IDATEF(5)=NINT(TTIME%TIME/60.) - IDATEF(4) * 60 00180 IDATEF(6)=1 00181 IDATEF(7:11)=0 00182 CALL FAITOU(IRET,NUNIT_FA,.TRUE.,CFILEOUT_FA,'NEW',.TRUE.,.FALSE.,IVERBFA,0,INB,CDNOMC) 00183 CALL FANDAR(IRET,NUNIT_FA,IDATEF) 00184 END IF 00185 ! 00186 !* writes into the file 00187 CALL IO_BUFF_CLEAN_n 00188 CALL WRITE_SURF_ATM_n(CSURF_FILETYPE,'PRE',LLAND_USE) !no pgd field 00189 CALL WRITE_DIAG_SURF_ATM_n(CSURF_FILETYPE,'ALL') 00190 ! 00191 !* closes the file 00192 IF (CSURF_FILETYPE=='FA ') THEN 00193 CALL FAIRME(IRET,NUNIT_FA,'UNKNOWN') 00194 END IF 00195 ! 00196 !* add informations in the file 00197 IF (CSURF_FILETYPE=='LFI ' .AND. LMNH_COMPATIBLE) CALL WRITE_HEADER_MNH 00198 ! 00199 ! 00200 !* 3. Close parallelized I/O 00201 ! ---------------------- 00202 ! 00203 WRITE(ILUOUT,*) ' ' 00204 WRITE(ILUOUT,*) ' -----------------------' 00205 WRITE(ILUOUT,*) ' | PREP ENDS CORRECTLY |' 00206 WRITE(ILUOUT,*) ' -----------------------' 00207 ! 00208 WRITE(*,*) ' ' 00209 WRITE(*,*) ' -----------------------' 00210 WRITE(*,*) ' | PREP ENDS CORRECTLY |' 00211 WRITE(*,*) ' -----------------------' 00212 ! 00213 CLOSE(ILUOUT) 00214 ! 00215 CALL DEALLOC_SURFEX 00216 IF (LHOOK) CALL DR_HOOK('PREP',1,ZHOOK_HANDLE) 00217 ! 00218 !------------------------------------------------------------------------------- 00219 ! 00220 END PROGRAM PREP