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