SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/zoom_pgd_isba_full.F90
Go to the documentation of this file.
00001 !     ###########################################################
00002       SUBROUTINE ZOOM_PGD_ISBA_FULL(HPROGRAM,HINIFILE,HINIFILETYPE)
00003 !     ###########################################################
00004 
00005 !!
00006 !!    PURPOSE
00007 !!    -------
00008 !!   This program prepares the physiographic data fields.
00009 !!
00010 !!    METHOD
00011 !!    ------
00012 !!   
00013 !!    EXTERNAL
00014 !!    --------
00015 !!
00016 !!
00017 !!    IMPLICIT ARGUMENTS
00018 !!    ------------------
00019 !!
00020 !!
00021 !!    REFERENCE
00022 !!    ---------
00023 !!
00024 !!    AUTHOR
00025 !!    ------
00026 !!
00027 !!    V. Masson                   Meteo-France
00028 !!
00029 !!    MODIFICATION
00030 !!    ------------
00031 !!
00032 !!    Original     13/10/03
00033 !!    B. Decharme      2008  XWDRAIN
00034 !!    M.Tomasini   17/04/12 All COVER physiographic fields are now 
00035 !!                          interpolated for spawning => 
00036 !!                          ABOR1_SFX if (.NOT.OECOCLIMAP) in comment
00037 !----------------------------------------------------------------------------
00038 !
00039 !*    0.     DECLARATION
00040 !            -----------
00041 !
00042 USE MODD_ISBA_n,           ONLY : XCLAY, XSAND, XRUNOFFB, XWDRAIN, &
00043                                   NGROUND_LAYER  
00044 USE MODD_ISBA_GRID_n,      ONLY : XLAT, XLON, CGRID, XGRID_PAR, NDIM
00045 USE MODD_PREP,             ONLY : CINGRID_TYPE, CINTERP_TYPE, LINTERP
00046 !
00047 USE MODI_GET_LUOUT
00048 USE MODI_OPEN_AUX_IO_SURF
00049 USE MODI_PREP_GRID_EXTERN
00050 USE MODI_PREP_OUTPUT_GRID
00051 USE MODI_READ_SURF
00052 USE MODI_CLOSE_AUX_IO_SURF
00053 USE MODI_HOR_INTERPOL
00054 USE MODI_GET_TYPE_DIM_n
00055 USE MODI_READ_PGD_ISBA_PAR_n
00056 USE MODI_CLEAN_PREP_OUTPUT_GRID
00057 !
00058 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00059 USE PARKIND1  ,ONLY : JPRB
00060 !
00061 IMPLICIT NONE
00062 !
00063 !*    0.1    Declaration of dummy arguments
00064 !            ------------------------------
00065 !
00066  CHARACTER(LEN=6),       INTENT(IN)  :: HPROGRAM     ! program calling
00067  CHARACTER(LEN=28),      INTENT(IN)  :: HINIFILE     ! input atmospheric file name
00068  CHARACTER(LEN=6),       INTENT(IN)  :: HINIFILETYPE ! input atmospheric file type
00069 !
00070 !*    0.2    Declaration of local variables
00071 !            ------------------------------
00072 !
00073 INTEGER :: IRESP
00074 INTEGER :: ILUOUT
00075 INTEGER :: INI     ! total 1D dimension (input grid)
00076 INTEGER :: JLAYER  ! loop counter
00077 REAL, DIMENSION(:),   ALLOCATABLE :: ZFIELD    ! field read
00078 REAL, DIMENSION(:,:), POINTER     :: ZSAND   ! sand   on all surface points
00079 REAL, DIMENSION(:,:), POINTER     :: ZCLAY   ! clay   on all surface points
00080 REAL, DIMENSION(:,:), POINTER     :: ZRUNOFFB! runoff coef. on all surface points
00081 REAL, DIMENSION(:,:), POINTER     :: ZWDRAIN ! drainage coef. on all surface points
00082 REAL, DIMENSION(:,:), ALLOCATABLE :: ZOUTB   ! runoff coef. on all surface points
00083 REAL, DIMENSION(:,:), ALLOCATABLE :: ZOUTW   ! drainage coef. on all surface points
00084 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00085 !------------------------------------------------------------------------------
00086 IF (LHOOK) CALL DR_HOOK('ZOOM_PGD_ISBA_FULL',0,ZHOOK_HANDLE)
00087  CALL GET_LUOUT(HPROGRAM,ILUOUT)
00088 !
00089 !*      1.     Preparation of IO for reading in the file
00090 !              -----------------------------------------
00091 !
00092 !* Note that all points are read, even those without physical meaning.
00093 !  These points will not be used during the horizontal interpolation step.
00094 !  Their value must be defined as XUNDEF.
00095 !
00096  CALL OPEN_AUX_IO_SURF(HINIFILE,HINIFILETYPE,'FULL  ')
00097 !
00098 !------------------------------------------------------------------------------
00099 !
00100 !*      2.     Reading of grid
00101 !              ---------------
00102 !
00103  CALL PREP_GRID_EXTERN(HINIFILETYPE,ILUOUT,CINGRID_TYPE,CINTERP_TYPE,INI)
00104 !
00105  CALL PREP_OUTPUT_GRID(ILUOUT,CGRID,XGRID_PAR,XLAT,XLON)
00106 !
00107 !------------------------------------------------------------------------------
00108 !
00109 !*      3.     Reading of fields
00110 !              -----------------
00111 !
00112 !
00113 ALLOCATE(ZFIELD(INI))
00114 !
00115 ALLOCATE(ZSAND(INI,NGROUND_LAYER))
00116  CALL READ_SURF(HPROGRAM,'SAND',ZFIELD,IRESP,HDIR='A')
00117 DO JLAYER=1,NGROUND_LAYER
00118   ZSAND(:,JLAYER) = ZFIELD(:)
00119 END DO
00120 !
00121 ALLOCATE(ZCLAY(INI,NGROUND_LAYER))
00122  CALL READ_SURF(HPROGRAM,'CLAY',ZFIELD,IRESP,HDIR='A')
00123 DO JLAYER=1,NGROUND_LAYER
00124   ZCLAY(:,JLAYER) = ZFIELD(:)
00125 END DO
00126 !
00127 ALLOCATE(ZRUNOFFB(INI,1))
00128  CALL READ_SURF(HPROGRAM,'RUNOFFB',ZFIELD,IRESP,HDIR='A')
00129 ZRUNOFFB(:,1) = ZFIELD(:)
00130 !
00131 ALLOCATE(ZWDRAIN(INI,1))
00132  CALL READ_SURF(HPROGRAM,'WDRAIN',ZFIELD,IRESP,HDIR='A')
00133 ZWDRAIN(:,1) = ZFIELD(:)
00134 !
00135 DEALLOCATE(ZFIELD)
00136 !
00137 !------------------------------------------------------------------------------
00138 !
00139 !*      4.     Interpolations
00140 !              --------------
00141 !
00142 !* mask where interpolations must be done
00143 !
00144 LINTERP(:) = .TRUE.
00145 !
00146 !* interpolations
00147 !
00148  CALL HOR_INTERPOL(ILUOUT,ZSAND,XSAND)
00149  CALL HOR_INTERPOL(ILUOUT,ZCLAY,XCLAY)
00150 ALLOCATE(ZOUTB(SIZE(XRUNOFFB),1))
00151  CALL HOR_INTERPOL(ILUOUT,ZRUNOFFB,ZOUTB)
00152 XRUNOFFB(:) = ZOUTB(:,1)
00153 DEALLOCATE(ZOUTB)
00154 ALLOCATE(ZOUTW(SIZE(XWDRAIN),1))
00155  CALL HOR_INTERPOL(ILUOUT,ZWDRAIN,ZOUTW)
00156 XWDRAIN(:) = ZOUTW(:,1)
00157 DEALLOCATE(ZOUTW)
00158 !
00159  CALL GET_TYPE_DIM_n('NATURE',NDIM)
00160  CALL READ_PGD_ISBA_PAR_n(HPROGRAM,INI,.FALSE.,HDIR='A')
00161 !
00162  CALL CLOSE_AUX_IO_SURF(HINIFILE,HINIFILETYPE)
00163 !
00164  CALL CLEAN_PREP_OUTPUT_GRID
00165 IF (LHOOK) CALL DR_HOOK('ZOOM_PGD_ISBA_FULL',1,ZHOOK_HANDLE)
00166 !------------------------------------------------------------------------------
00167 !
00168 END SUBROUTINE ZOOM_PGD_ISBA_FULL