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