SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/OFFLIN/pgd.F90
Go to the documentation of this file.
00001 !     ###########
00002       PROGRAM PGD
00003 !     ###########
00004 !!
00005 !!    PURPOSE
00006 !!    -------
00007 !!   This program prepares the physiographic data fields.
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 !!    F. Mereyde                  Meteo-France
00028 !!
00029 !!    MODIFICATION
00030 !!    ------------
00031 !!
00032 !!    Original     21/07/95
00033 !!    Modification 26/07/95       Treatment of orography and subgrid-scale
00034 !!                                orography roughness length (V. Masson)
00035 !!    Modification 22/05/96       Variable CSTORAGE_TYPE (V. Masson)
00036 !!    Modification 25/05/96       Modification of splines, correction on z0rel
00037 !!                                and set limits for some surface varaibles
00038 !!    Modification 12/06/96       Treatment of a rare case for ZPGDZ0EFF (Masson)
00039 !!    Modification 22/11/96       removes the filtering. It will have to be 
00040 !!                                performed in ADVANCED_PREP_PGD (Masson)
00041 !!    Modification 15/03/99       **** MAJOR MODIFICATION **** (Masson)
00042 !!                                PGD fields are now defined from the cover
00043 !!                                type fractions in the grid meshes
00044 !!                                User can still include its own data, and
00045 !!                                even additional (dummy) fields
00046 !!    Modificatio 06/00           patch approach, for vegetation related variable (Solmon/Masson)
00047 !                                  averaging is performed on subclass(=patch) of nature
00048 !!                08/03/01        add chemical emission treatment (D.Gazen)
00049 !!    Modification 15/10/01       allow namelists in different orders (I.Mallet)
00050 !!    Modification    07/11       new routine write_pgd_surf_atmn.F90 for writing PGD field (B.Decharme)
00051 !!                                flag_update now in write_pgd_surf_atmn.F90 (B.Decharme)
00052 !!
00053 !!
00054 !!                   ################################
00055 !!    13/10/03       EXTERNALIZED VERSION (V. Masson)
00056 !!                   ################################
00057 !!
00058 !----------------------------------------------------------------------------
00059 !
00060 !*    0.     DECLARATION
00061 !            -----------
00062 !
00063 USE MODD_IO_SURF_ASC
00064 USE MODD_IO_SURF_FA
00065 USE MODD_IO_SURF_LFI
00066 USE MODD_SURF_CONF
00067 USE MODI_OPEN_NAMELIST
00068 USE MODI_CLOSE_NAMELIST
00069 !      
00070 USE MODI_GET_LONLAT_n
00071 !
00072 USE MODI_GOTO_SURFEX
00073 USE MODI_IO_BUFF_CLEAN_n
00074 USE MODI_PGD_OROG_FILTER
00075 USE MODI_PGD_SURF_ATM
00076 USE MODI_PGD_GRID_SURF_ATM
00077 USE MODI_SPLIT_GRID
00078 USE MODI_WRITE_HEADER_FA
00079 USE MODI_WRITE_HEADER_MNH
00080 USE MODI_WRITE_PGD_SURF_ATM_n
00081 !
00082 USE MODE_POS_SURF
00083 !
00084 USE MODN_IO_OFFLINE
00085 USE MODN_WRITE_SURF_ATM
00086 !
00087 USE MODD_IO_SURF_FA, ONLY : LFANOCOMPACT
00088 !
00089 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00090 USE PARKIND1  ,ONLY : JPRB
00091 !
00092 USE MODI_ALLOC_SURFEX
00093 USE MODI_DEALLOC_SURFEX
00094 USE MODI_GET_LUOUT
00095 !
00096 IMPLICIT NONE
00097 !
00098 !*    0.2    Declaration of local variables
00099 !            ------------------------------
00100 !
00101 INTEGER            :: ILUOUT
00102 INTEGER            :: ILUNAM
00103 LOGICAL            :: GFOUND
00104 !
00105  CHARACTER(LEN=28)  :: YLUOUT    ='LISTING_PGD'   ! name of the listing
00106 !
00107 INTEGER            :: IRET      
00108 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00109 !
00110 !------------------------------------------------------------------------------
00111 !
00112 IF (LHOOK) CALL DR_HOOK('PGD',0,ZHOOK_HANDLE)
00113 !
00114  CALL ALLOC_SURFEX(1)
00115 CSOFTWARE='PGD    '
00116  CALL GOTO_SURFEX(1,.TRUE.)
00117 !
00118 !*    1.      Set default names and parallelized I/O
00119 !             --------------------------------------
00120 !
00121  CALL GET_LUOUT('ASCII ',ILUOUT)
00122 CLUOUT_LFI =  ADJUSTL(ADJUSTR(YLUOUT)//'.txt')
00123 OPEN(UNIT=ILUOUT,FILE=ADJUSTL(ADJUSTR(YLUOUT)//'.txt'),FORM='FORMATTED',ACTION='WRITE')
00124 !
00125 !     1.3     output file name read in namelist
00126 !             ---------------------------------
00127  CALL OPEN_NAMELIST('ASCII ',ILUNAM,CNAMELIST)
00128  CALL POSNAM(ILUNAM,'NAM_IO_OFFLINE',GFOUND)
00129 IF (GFOUND) READ (UNIT=ILUNAM,NML=NAM_IO_OFFLINE)
00130  CALL POSNAM(ILUNAM,'NAM_WRITE_SURF_ATM',GFOUND)
00131 IF (GFOUND) READ (UNIT=ILUNAM,NML=NAM_WRITE_SURF_ATM)
00132  CALL CLOSE_NAMELIST('ASCII ',ILUNAM)
00133 !
00134 CFILEOUT     = ADJUSTL(ADJUSTR(CPGDFILE)//'.txt')      ! output of PGD program
00135 CFILEOUT_FA  = ADJUSTL(ADJUSTR(CPGDFILE)//'.fa')
00136 CFILEOUT_LFI = CPGDFILE
00137 !
00138 !*    2.      Preparation of surface physiographic fields
00139 !             -------------------------------------------
00140 !
00141  CALL PGD_GRID_SURF_ATM(CSURF_FILETYPE,'                            ','      ',.FALSE.)
00142 !
00143  CALL SPLIT_GRID('OFFLIN')
00144 !
00145  CALL PGD_SURF_ATM(CSURF_FILETYPE,'                            ','      ',.FALSE.)
00146 !
00147  CALL PGD_OROG_FILTER(CSURF_FILETYPE)
00148 !
00149 IF (LWRITE_COORD) CALL GET_LONLAT_n(CSURF_FILETYPE)
00150 !
00151 !*    3.      writing of surface physiographic fields
00152 !             ---------------------------------------
00153 !
00154 !* building of the header for the opening of the file in case of Arpege file
00155 IF (CSURF_FILETYPE=='FA    ') THEN
00156   LFANOCOMPACT = .TRUE.
00157   CALL WRITE_HEADER_FA(CSURF_FILETYPE,'PGD') 
00158 END IF
00159 !
00160 !* writing of the fields
00161  CALL IO_BUFF_CLEAN_n
00162 ! FLAG_UPDATE now in WRITE_PGD_SURF_ATM_n
00163  CALL WRITE_PGD_SURF_ATM_n(CSURF_FILETYPE)
00164 !
00165 !* closes the file
00166 IF (CSURF_FILETYPE=='FA    ') THEN
00167   CALL FAIRME(IRET,NUNIT_FA,'UNKNOWN')
00168 END IF
00169 !
00170 !* add informations in the file
00171 IF (CSURF_FILETYPE=='LFI   ' .AND. LMNH_COMPATIBLE) CALL WRITE_HEADER_MNH
00172 !
00173 !*    3.     Close parallelized I/O
00174 !            ----------------------
00175 !
00176 WRITE(ILUOUT,*) ' '
00177 WRITE(ILUOUT,*) '    ----------------------'
00178 WRITE(ILUOUT,*) '    | PGD ENDS CORRECTLY |'
00179 WRITE(ILUOUT,*) '    ----------------------'
00180 !
00181 WRITE(*,*) ' '
00182 WRITE(*,*) '    ----------------------'
00183 WRITE(*,*) '    | PGD ENDS CORRECTLY |'
00184 WRITE(*,*) '    ----------------------'
00185       !
00186 CLOSE(ILUOUT)
00187  CALL DEALLOC_SURFEX
00188 !
00189 IF (LHOOK) CALL DR_HOOK('PGD',1,ZHOOK_HANDLE)
00190 !
00191 !-------------------------------------------------------------------------------
00192 !
00193 END PROGRAM PGD