SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/treat_field.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE TREAT_FIELD(HPROGRAM,HSCHEME,HFILETYPE,    &
00003                               HSUBROUTINE,HFILENAME,HFIELD,   &
00004                               PPGDARRAY,HSFTYPE               )  
00005 !     ##############################################################
00006 !
00007 !!**** *TREAT_FIELD* chooses which treatment subroutine to use
00008 !!
00009 !!    PURPOSE
00010 !!    -------
00011 !!
00012 !!    METHOD
00013 !!    ------
00014 !!   
00015 !!    EXTERNAL
00016 !!    --------
00017 !!
00018 !!    IMPLICIT ARGUMENTS
00019 !!    ------------------
00020 !!
00021 !!    REFERENCE
00022 !!    ---------
00023 !!
00024 !!    AUTHOR
00025 !!    ------
00026 !!
00027 !!    V. Masson        Meteo-France
00028 !!
00029 !!    MODIFICATION
00030 !!    ------------
00031 !!
00032 !!    Original    11/09/95
00033 !!
00034 !!    Modification
00035 !!    25/05/96    (V. Masson) remove useless case for HSUBROUTINE   
00036 !!    29/11/2002  (D. Gazen)  add HSFTYPE argument + call to read_binllvfast routine
00037 !!    03/2004     (V. MAsson) externalization
00038 !!    04/2009     (B. Decharme) Special treatement for gaussian grid
00039 !!    06/2009     (B. Decharme)  call Topographic index statistics calculation
00040 !!    09/2010     (E. Kourzeneva) call reading of the lake database
00041 !----------------------------------------------------------------------------
00042 !
00043 !*    0.     DECLARATION
00044 !            -----------
00045 !
00046 USE MODI_GET_LUOUT
00047 USE MODI_READ_DIRECT
00048 USE MODI_READ_DIRECT_GAUSS
00049 USE MODI_READ_LATLON
00050 USE MODI_READ_BINLLV
00051 USE MODI_READ_BINLLVFAST
00052 USE MODI_READ_ASCLLV
00053 USE MODI_AVERAGE2_MESH
00054 !
00055 USE MODD_SURF_ATM_GRID_n, ONLY : CGRID
00056 !
00057 !
00058 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00059 USE PARKIND1  ,ONLY : JPRB
00060 !
00061 USE MODI_ABOR1_SFX
00062 !
00063 USE MODI_AVERAGE2_COVER
00064 !
00065 USE MODI_AVERAGE2_CTI
00066 USE MODI_AVERAGE2_LDB
00067 !
00068 USE MODI_AVERAGE2_OROGRAPHY
00069 !
00070 IMPLICIT NONE
00071 !
00072 !*    0.1    Declaration of arguments
00073 !            ------------------------
00074 !
00075  CHARACTER(LEN=6),  INTENT(IN) :: HPROGRAM      ! Type of program
00076  CHARACTER(LEN=6),  INTENT(IN) :: HSCHEME       ! Scheme treated
00077  CHARACTER(LEN=6),  INTENT(IN) :: HFILETYPE     ! Type of the data file
00078  CHARACTER(LEN=6),  INTENT(IN) :: HSUBROUTINE   ! Name of the subroutine to call
00079  CHARACTER(LEN=28), INTENT(IN) :: HFILENAME     ! Name of the field file.
00080  CHARACTER(LEN=20), INTENT(IN) :: HFIELD        ! Name of the field.
00081 REAL, DIMENSION(:), INTENT(INOUT), OPTIONAL :: PPGDARRAY ! field on MESONH grid
00082  CHARACTER(LEN=3),   INTENT(IN),    OPTIONAL :: HSFTYPE
00083 !
00084 !*    0.2    Declaration of local variables
00085 !            ------------------------------
00086 !
00087 INTEGER :: ILUOUT
00088 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00089 !-------------------------------------------------------------------------------
00090 !
00091 IF (LHOOK) CALL DR_HOOK('TREAT_FIELD',0,ZHOOK_HANDLE)
00092  CALL GET_LUOUT(HPROGRAM,ILUOUT)
00093 !
00094 !*    1.     Selection of type of reading (and point by point treatment)
00095 !            -----------------------------------------------------------
00096 !
00097 SELECT CASE (HFILETYPE)
00098 
00099    CASE ('DIRECT')
00100          IF(CGRID=="GAUSS     ")THEN
00101            CALL READ_DIRECT_GAUSS(HPROGRAM,HSCHEME,HSUBROUTINE,HFILENAME,HFIELD)
00102          ELSE
00103            CALL READ_DIRECT(HPROGRAM,HSCHEME,HSUBROUTINE,HFILENAME,HFIELD)
00104          ENDIF
00105 
00106    CASE ('BINLLV')
00107        CALL READ_BINLLV(HPROGRAM,HSUBROUTINE,HFILENAME)
00108 
00109    CASE ('BINLLF')
00110        CALL READ_BINLLVFAST(HPROGRAM,HSUBROUTINE,HFILENAME)
00111 
00112    CASE ('ASCLLV')
00113        CALL READ_ASCLLV(HPROGRAM,HSUBROUTINE,HFILENAME)
00114 
00115    CASE ('LATLON')
00116        CALL READ_LATLON(HPROGRAM,HSCHEME,HSUBROUTINE,HFILENAME)
00117 
00118    CASE DEFAULT
00119      CALL ABOR1_SFX('TREAT_FIELD: FILE TYPE NOT SUPPORTED: '//HFILETYPE)
00120 
00121 END SELECT
00122 !
00123 !-------------------------------------------------------------------------------
00124 !
00125 !*    2.     Call to the adequate subroutine (global treatment)
00126 !            --------------------------------------------------
00127 !
00128 SELECT CASE (HSUBROUTINE)
00129 
00130   CASE ('A_COVR')
00131     CALL AVERAGE2_COVER
00132 
00133   CASE ('A_OROG')
00134     CALL AVERAGE2_OROGRAPHY
00135 
00136   CASE ('A_CTI ')
00137     CALL AVERAGE2_CTI
00138 
00139   CASE ('A_LDBD')
00140     CALL AVERAGE2_LDB(PPGDARRAY,'D',1)
00141 
00142   CASE ('A_LDBS')
00143     CALL AVERAGE2_LDB(PPGDARRAY,'S',1)
00144     
00145   CASE ('A_MESH')
00146     IF (.NOT. PRESENT(PPGDARRAY)) THEN
00147       WRITE(ILUOUT,*) 'You asked to average a PGD field with A_MESH option,'
00148       WRITE(ILUOUT,*) 'but you did not give the array to store this field'
00149       CALL ABOR1_SFX('TREAT_FIELD: ARRAY IS MISSING')
00150     END IF
00151     CALL AVERAGE2_MESH(PPGDARRAY)
00152 
00153 END SELECT
00154 !
00155 IF (LHOOK) CALL DR_HOOK('TREAT_FIELD',1,ZHOOK_HANDLE)
00156 !-------------------------------------------------------------------------------
00157 !
00158 END SUBROUTINE TREAT_FIELD