SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE TREAT_BATHYFIELD(HPROGRAM,HSCHEME,HFILETYPE, & 00003 HSUBROUTINE,HFILENAME,HNCVARNAME, & 00004 HFIELD, PPGDARRAY,HSFTYPE ) 00005 ! ############################################################## 00006 ! 00007 !!**** *TREAT_BATHYFIELD* chooses which treatment subroutine to use to read 00008 !! the bathymetry 00009 !! 00010 !! PURPOSE 00011 !! ------- 00012 !! 00013 !! METHOD 00014 !! ------ 00015 !! 00016 !! EXTERNAL 00017 !! -------- 00018 !! 00019 !! IMPLICIT ARGUMENTS 00020 !! ------------------ 00021 !! 00022 !! REFERENCE 00023 !! --------- 00024 !! 00025 !! AUTHOR 00026 !! ------ 00027 !! 00028 !! C. Lebeaupin Brossier Meteo-France 00029 !! 00030 !! MODIFICATION 00031 !! ------------ 00032 !! 00033 !! Original 01/2008 00034 !! 00035 !---------------------------------------------------------------------------- 00036 ! 00037 !* 0. DECLARATION 00038 ! ----------- 00039 ! 00040 USE MODI_GET_LUOUT 00041 USE MODI_READ_DIRECT 00042 USE MODI_READ_BINLLV 00043 USE MODI_READ_BINLLVFAST 00044 USE MODI_READ_ASCLLV 00045 USE MODI_READ_NETCDF 00046 USE MODI_AVERAGE2_MESH 00047 ! 00048 USE MODD_SURF_ATM_GRID_n, ONLY : CGRID 00049 ! 00050 ! 00051 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00052 USE PARKIND1 ,ONLY : JPRB 00053 ! 00054 USE MODI_ABOR1_SFX 00055 ! 00056 USE MODI_AVERAGE2_COVER 00057 ! 00058 USE MODI_AVERAGE2_OROGRAPHY 00059 ! 00060 USE MODI_READ_DIRECT_GAUSS 00061 IMPLICIT NONE 00062 ! 00063 !* 0.1 Declaration of arguments 00064 ! ------------------------ 00065 ! 00066 CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! Type of program 00067 CHARACTER(LEN=6), INTENT(IN) :: HSCHEME ! Scheme treated 00068 CHARACTER(LEN=6), INTENT(IN) :: HFILETYPE ! Type of the data file 00069 CHARACTER(LEN=6), INTENT(IN) :: HSUBROUTINE ! Name of the subroutine to call 00070 CHARACTER(LEN=28), INTENT(IN) :: HFILENAME ! Name of the field file. 00071 CHARACTER(LEN=28), INTENT(IN) :: HNCVARNAME ! Name of the variable in netcdf file 00072 CHARACTER(LEN=20), INTENT(IN) :: HFIELD ! Name of the field. 00073 REAL, DIMENSION(:), INTENT(INOUT), OPTIONAL :: PPGDARRAY ! field on MESONH grid 00074 CHARACTER(LEN=3), INTENT(IN), OPTIONAL :: HSFTYPE 00075 ! 00076 !* 0.2 Declaration of local variables 00077 ! ------------------------------ 00078 ! 00079 INTEGER :: ILUOUT 00080 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00081 !------------------------------------------------------------------------------- 00082 ! 00083 IF (LHOOK) CALL DR_HOOK('TREAT_BATHYFIELD',0,ZHOOK_HANDLE) 00084 CALL GET_LUOUT(HPROGRAM,ILUOUT) 00085 ! 00086 !* 1. Selection of type of reading (and point by point treatment) 00087 ! ----------------------------------------------------------- 00088 ! 00089 SELECT CASE (HFILETYPE) 00090 00091 CASE ('DIRECT') 00092 IF(CGRID=="GAUSS ")THEN 00093 CALL READ_DIRECT_GAUSS(HPROGRAM,HSCHEME,HSUBROUTINE,HFILENAME,HFIELD) 00094 ELSE 00095 CALL READ_DIRECT(HPROGRAM,HSCHEME,HSUBROUTINE,HFILENAME,HFIELD) 00096 ENDIF 00097 CASE ('BINLLV') 00098 CALL READ_BINLLV(HPROGRAM,HSUBROUTINE,HFILENAME) 00099 00100 CASE ('BINLLF') 00101 CALL READ_BINLLVFAST(HPROGRAM,HSUBROUTINE,HFILENAME) 00102 00103 CASE ('ASCLLV') 00104 CALL READ_ASCLLV(HPROGRAM,HSUBROUTINE,HFILENAME) 00105 00106 CASE ('NETCDF') 00107 CALL READ_NETCDF(HPROGRAM,HSUBROUTINE,HFILENAME,HNCVARNAME) 00108 00109 END SELECT 00110 ! 00111 !------------------------------------------------------------------------------- 00112 ! 00113 !* 2. Call to the adequate subroutine (global treatment) 00114 ! -------------------------------------------------- 00115 ! 00116 SELECT CASE (HSUBROUTINE) 00117 00118 CASE ('A_COVR') 00119 CALL AVERAGE2_COVER 00120 00121 CASE ('A_OROG') 00122 CALL AVERAGE2_OROGRAPHY 00123 00124 CASE ('A_MESH') 00125 IF (.NOT. PRESENT(PPGDARRAY)) THEN 00126 WRITE(ILUOUT,*) 'You asked to average a PGD field with A_MESH option,' 00127 WRITE(ILUOUT,*) 'but you did not give the array to store this field' 00128 CALL ABOR1_SFX('TREAT_BATHYFIELD: PGD ARRAY IS MISSING') 00129 END IF 00130 CALL AVERAGE2_MESH(PPGDARRAY) 00131 00132 END SELECT 00133 IF (LHOOK) CALL DR_HOOK('TREAT_BATHYFIELD',1,ZHOOK_HANDLE) 00134 !------------------------------------------------------------------------------- 00135 ! 00136 END SUBROUTINE TREAT_BATHYFIELD