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