SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE PGD_BATHYFIELD(HPROGRAM,HFIELD,HAREA,HFILE,HFILETYPE,& 00003 HNCVARNAME,PUNIF,PFIELD) 00004 ! ############################################################## 00005 ! 00006 !!**** *PGD_FIELD* monitor for averaging and interpolations of ISBA physiographic fields 00007 !! 00008 !! PURPOSE 00009 !! ------- 00010 !! 00011 !! METHOD 00012 !! ------ 00013 !! 00014 ! 00015 !! EXTERNAL 00016 !! -------- 00017 !! 00018 !! IMPLICIT ARGUMENTS 00019 !! ------------------ 00020 !! 00021 !! REFERENCE 00022 !! --------- 00023 !! 00024 !! AUTHOR 00025 !! ------ 00026 !! 00027 !! C. Lebeaupin Brossier Meteo-France 00028 !! 00029 !! MODIFICATION 00030 !! ------------ 00031 !! 00032 !! Original 01/2008 00033 !! 00034 !---------------------------------------------------------------------------- 00035 ! 00036 !* 0. DECLARATION 00037 ! ----------- 00038 ! 00039 USE MODD_SURF_PAR, ONLY : XUNDEF 00040 USE MODD_PGD_GRID, ONLY : NL 00041 USE MODD_PGDWORK, ONLY : XSUMVAL, NSIZE 00042 USE MODD_SURF_ATM_n, ONLY : XNATURE, XSEA, XTOWN, XWATER 00043 ! 00044 USE MODI_GET_LUOUT 00045 USE MODI_TREAT_BATHYFIELD 00046 USE MODI_INTERPOL_FIELD 00047 ! 00048 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00049 USE PARKIND1 ,ONLY : JPRB 00050 ! 00051 USE MODI_ABOR1_SFX 00052 ! 00053 IMPLICIT NONE 00054 ! 00055 !* 0.1 Declaration of arguments 00056 ! ------------------------ 00057 ! 00058 CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! Type of program 00059 CHARACTER(LEN=*), INTENT(IN) :: HFIELD ! field name for prints 00060 CHARACTER(LEN=3), INTENT(IN) :: HAREA ! area where field is defined 00061 ! ! 'ALL' : everywhere 00062 ! ! 'NAT' : on nature 00063 ! ! 'TWN' : on town 00064 ! ! 'SEA' : on sea 00065 ! ! 'WAT' : on inland waters 00066 ! ! 'LAN' : on nature + on town 00067 CHARACTER(LEN=28), INTENT(IN) :: HFILE ! data file name 00068 CHARACTER(LEN=6), INTENT(IN) :: HFILETYPE ! data file type 00069 CHARACTER(LEN=28), INTENT(IN) :: HNCVARNAME! variable name to read 00070 REAL, INTENT(IN) :: PUNIF ! prescribed uniform value for field 00071 REAL, DIMENSION(:),INTENT(OUT):: PFIELD ! physiographic field 00072 ! 00073 ! 00074 !* 0.2 Declaration of local variables 00075 ! ------------------------------ 00076 ! 00077 INTEGER :: ILUOUT ! output listing logical unit 00078 ! 00079 CHARACTER(LEN=20) :: YFIELD 00080 INTEGER :: JLOOP 00081 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00082 !------------------------------------------------------------------------------- 00083 ! 00084 !* 1. Initializations 00085 ! --------------- 00086 ! 00087 IF (LHOOK) CALL DR_HOOK('PGD_BATHYFIELD',0,ZHOOK_HANDLE) 00088 PFIELD(:) = XUNDEF 00089 !------------------------------------------------------------------------------- 00090 ! 00091 !* 2. Output listing logical unit 00092 ! --------------------------- 00093 ! 00094 CALL GET_LUOUT(HPROGRAM,ILUOUT) 00095 ! 00096 !------------------------------------------------------------------------------- 00097 ! 00098 !* 3.2 No data 00099 ! ------- 00100 ! 00101 IF (LEN_TRIM(HFILE)/=0) THEN 00102 ! 00103 !------------------------------------------------------------------------------- 00104 ! 00105 !* 3. Averages the field 00106 ! ------------------ 00107 ! 00108 ALLOCATE(NSIZE (NL)) 00109 ALLOCATE(XSUMVAL (NL)) 00110 ! 00111 NSIZE (:) = 0. 00112 XSUMVAL (:) = 0. 00113 ! 00114 YFIELD = ' ' 00115 YFIELD = HFIELD(1:MIN(LEN(HFIELD),20)) 00116 ! 00117 CALL TREAT_BATHYFIELD(HPROGRAM,'SURF ',HFILETYPE,'A_MESH',HFILE, HNCVARNAME,& 00118 YFIELD,PFIELD,HAREA ) 00119 ! 00120 !------------------------------------------------------------------------------- 00121 ! 00122 !* 4. Mask for the interpolations 00123 ! --------------------------- 00124 ! 00125 SELECT CASE (HAREA) 00126 CASE ('LAN') 00127 WHERE (XTOWN(:)+XNATURE(:)==0. .AND. NSIZE(:)==0 ) NSIZE(:) = -1 00128 CASE ('TWN') 00129 WHERE (XTOWN (:)==0. .AND. NSIZE(:)==0 ) NSIZE(:) = -1 00130 CASE ('NAT') 00131 WHERE (XNATURE(:)==0. .AND. NSIZE(:)==0 ) NSIZE(:) = -1 00132 CASE ('SEA') 00133 WHERE (XSEA (:)==0. .AND. NSIZE(:)==0 ) NSIZE(:) = -1 00134 CASE ('WAT') 00135 WHERE (XWATER (:)==0. .AND. NSIZE(:)==0 ) NSIZE(:) = -1 00136 00137 END SELECT 00138 ! 00139 !------------------------------------------------------------------------------- 00140 ! 00141 !* 5. Interpolation if some points are not initialized (no data for these points) 00142 ! ------------------------------------------------ 00143 ! 00144 CALL INTERPOL_FIELD(HPROGRAM,ILUOUT,NSIZE,PFIELD(:),HFIELD) 00145 ! 00146 DO JLOOP=1,SIZE(PFIELD) 00147 PFIELD(JLOOP)=MIN(PFIELD(JLOOP),-1.) 00148 ENDDO 00149 DEALLOCATE(NSIZE ) 00150 DEALLOCATE(XSUMVAL ) 00151 ! 00152 !------------------------------------------------------------------------------- 00153 ! 00154 ! 00155 !* 3. Uniform field is prescribed 00156 ! --------------------------- 00157 ! 00158 ! 00159 ELSEIF (PUNIF/=XUNDEF) THEN 00160 ! 00161 !* 3.1 Use of the presribed field 00162 ! -------------------------- 00163 ! 00164 PFIELD(:) = PUNIF 00165 ! 00166 ELSE 00167 ! 00168 WRITE(ILUOUT,*) ' ' 00169 WRITE(ILUOUT,*) '***********************************************************' 00170 WRITE(ILUOUT,*) '* Error in PGD field preparation of field : ', HFIELD 00171 WRITE(ILUOUT,*) '* There is no prescribed value and no input file *' 00172 WRITE(ILUOUT,*) '***********************************************************' 00173 WRITE(ILUOUT,*) ' ' 00174 CALL ABOR1_SFX('PGD_BATHYFIELD: NO PRESCRIBED VALUE NOR INPUT FILE FOR '//HFIELD) 00175 ! 00176 END IF 00177 !------------------------------------------------------------------------------- 00178 ! 00179 !* 6. Mask for the field 00180 ! ------------------ 00181 ! 00182 SELECT CASE (HAREA) 00183 CASE ('LAN') 00184 WHERE (XTOWN(:)+XNATURE(:)==0.) PFIELD(:) = XUNDEF 00185 CASE ('TWN') 00186 WHERE (XTOWN (:)==0.) PFIELD(:) = XUNDEF 00187 CASE ('NAT') 00188 WHERE (XNATURE(:)==0.) PFIELD(:) = XUNDEF 00189 CASE ('SEA') 00190 WHERE (XSEA (:)==0.) PFIELD(:) = XUNDEF 00191 CASE ('WAT') 00192 WHERE (XWATER (:)==0.) PFIELD(:) = XUNDEF 00193 00194 END SELECT 00195 IF (LHOOK) CALL DR_HOOK('PGD_BATHYFIELD',1,ZHOOK_HANDLE) 00196 ! 00197 !------------------------------------------------------------------------------- 00198 ! 00199 END SUBROUTINE PGD_BATHYFIELD