SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/interpol_field.F90
Go to the documentation of this file.
00001 !     ###############################################
00002       SUBROUTINE INTERPOL_FIELD(HPROGRAM,KLUOUT,KCODE,PFIELD,HFIELD,PDEF,KNPTS)
00003 !     ################################################
00004 !
00005 !
00006 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00007 USE PARKIND1  ,ONLY : JPRB
00008 !
00009 USE MODD_SURF_PAR, ONLY : XUNDEF
00010 !
00011 USE MODI_ABOR1_SFX
00012 USE MODI_INTERPOL_FIELD2D
00013 !
00014 IMPLICIT NONE
00015 !
00016 !*    0.1    Declaration of arguments
00017 !            ------------------------
00018 !
00019  CHARACTER(LEN=6),        INTENT(IN)   :: HPROGRAM ! host program
00020 INTEGER,                 INTENT(IN)   :: KLUOUT   ! output listing logical unit
00021 INTEGER,DIMENSION(:),    INTENT(INOUT):: KCODE    ! code for each point
00022                                                   ! >0 point used for interpolation
00023                                                   !  0 point to interpolate
00024                                                   ! -1 point not used
00025                                                   ! -2 point not used
00026 !                                                 ! -3 if spline is no computed
00027 !                                                 ! for this point
00028 REAL,   DIMENSION(:),    INTENT(INOUT):: PFIELD   ! pgd field on grid mesh
00029  CHARACTER(LEN=*),        INTENT(IN)   :: HFIELD   ! name of the field for prints
00030 REAL,           OPTIONAL,INTENT(IN)   :: PDEF     ! default value if not enough data
00031 INTEGER, OPTIONAL,       INTENT(IN)   :: KNPTS    ! number of points to interpolate with
00032 !
00033 !*    0.2    Declaration of local variables
00034 !            ------------------------------
00035 !
00036 REAL, DIMENSION(SIZE(PFIELD),1) :: ZFIELD
00037 REAL, DIMENSION(1)              :: ZDEF
00038 INTEGER                         :: INPTS          ! number of points to interpolate with
00039 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00040 !
00041 !----------------------------------------------------------------------------
00042 IF (LHOOK) CALL DR_HOOK('INTERPOL_FIELD',0,ZHOOK_HANDLE)
00043 !
00044 INPTS = 3
00045 IF (PRESENT(KNPTS)) INPTS = KNPTS
00046 !
00047 ZFIELD(:,1) = PFIELD(:)
00048 !
00049 IF (PRESENT(PDEF)) THEN
00050   ZDEF = PDEF
00051   CALL INTERPOL_FIELD2D(HPROGRAM,KLUOUT,KCODE,ZFIELD,HFIELD,ZDEF,KNPTS=INPTS)
00052 ELSE
00053   CALL INTERPOL_FIELD2D(HPROGRAM,KLUOUT,KCODE,ZFIELD,HFIELD,KNPTS=INPTS)
00054 END IF
00055 !
00056 PFIELD(:)   = ZFIELD(:,1)
00057 IF (LHOOK) CALL DR_HOOK('INTERPOL_FIELD',1,ZHOOK_HANDLE)
00058 !----------------------------------------------------------------------------
00059 END SUBROUTINE INTERPOL_FIELD
00060