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