SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/pgd_bathyfield.F90
Go to the documentation of this file.
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