SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/prep_isba_extern.F90
Go to the documentation of this file.
00001 !     #########
00002 SUBROUTINE PREP_ISBA_EXTERN(HPROGRAM,HSURF,HFILE,HFILETYPE,HFILEPGD,HFILEPGDTYPE,KLUOUT,PFIELD)
00003 !     #################################################################################
00004 !
00005 !!****  *PREP_ISBA_EXTERN* - initializes ISBA fields from operational GRIB
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !
00010 !!**  METHOD
00011 !!    ------
00012 !!
00013 !!    REFERENCE
00014 !!    ---------
00015 !!      
00016 !!
00017 !!    AUTHOR
00018 !!    ------
00019 !!     V. Masson 
00020 !!
00021 !!    MODIFICATIONS
00022 !!    -------------
00023 !!      Original    01/2004
00024 !!------------------------------------------------------------------
00025 !
00026 
00027 !
00028 USE MODE_READ_EXTERN
00029 !
00030 USE MODD_TYPE_DATE_SURF
00031 !
00032 USE MODI_PREP_GRID_EXTERN
00033 USE MODI_READ_SURF
00034 USE MODI_INTERP_GRID
00035 USE MODI_OPEN_AUX_IO_SURF
00036 USE MODI_CLOSE_AUX_IO_SURF
00037 !
00038 USE MODD_PREP,           ONLY : CINGRID_TYPE, CINTERP_TYPE
00039 USE MODD_PREP_ISBA,      ONLY : XGRID_SOIL, XWR_DEF
00040 USE MODD_DATA_COVER_PAR, ONLY : NVEGTYPE
00041 USE MODD_SURF_PAR,       ONLY : XUNDEF
00042 !
00043 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00044 USE PARKIND1  ,ONLY : JPRB
00045 !
00046 USE MODI_PUT_ON_ALL_VEGTYPES
00047 !
00048 IMPLICIT NONE
00049 !
00050 !*      0.1    declarations of arguments
00051 !
00052  CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM  ! program calling surf. schemes
00053  CHARACTER(LEN=7),   INTENT(IN)  :: HSURF     ! type of field
00054  CHARACTER(LEN=28),  INTENT(IN)  :: HFILE     ! name of file
00055  CHARACTER(LEN=6),   INTENT(IN)  :: HFILETYPE ! type of input file
00056  CHARACTER(LEN=28),  INTENT(IN)  :: HFILEPGD     ! name of file
00057  CHARACTER(LEN=6),   INTENT(IN)  :: HFILEPGDTYPE ! type of input file
00058 INTEGER,            INTENT(IN)  :: KLUOUT    ! logical unit of output listing
00059 REAL,DIMENSION(:,:,:), POINTER  :: PFIELD    ! field to interpolate horizontally (on final soil grid)
00060 !
00061 !*      0.2    declarations of local variables
00062 !
00063  CHARACTER(LEN=12) :: YRECFM         ! Name of the article to be read
00064 INTEGER           :: IRESP          ! reading return code
00065 INTEGER           :: INI            ! total 1D dimension
00066 INTEGER           :: IPATCH         ! number of patch
00067 !
00068 REAL, DIMENSION(:,:,:), POINTER     :: ZFIELD         ! field read on initial MNH vertical soil grid, all patches
00069 REAL, DIMENSION(:,:),   POINTER     :: ZFIELD1        ! field read on initial MNH vertical soil grid, one patch
00070 REAL, DIMENSION(:,:,:), POINTER     :: ZD             ! depth of field in the soil
00071 REAL, DIMENSION(:,:), POINTER     :: ZD1            ! depth of field in the soil, one patch
00072 REAL, DIMENSION(:,:), ALLOCATABLE   :: ZOUT         !
00073 INTEGER                             :: JPATCH, JVEGTYPE        ! loop counter for patch
00074 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00075 !
00076 !------------------------------------------------------------------------------
00077 !
00078 !*      1.     Preparation of IO for reading in the file
00079 !              -----------------------------------------
00080 !
00081 !* Note that all points are read, even those without physical meaning.
00082 !  These points will not be used during the horizontal interpolation step.
00083 !  Their value must be defined as XUNDEF.
00084 !
00085 IF (LHOOK) CALL DR_HOOK('PREP_ISBA_EXTERN',0,ZHOOK_HANDLE)
00086 !
00087 !------------------------------------------------------------------------------
00088 !
00089 !*      2.     Reading of grid
00090 !              ---------------
00091 !
00092  CALL OPEN_AUX_IO_SURF(HFILEPGD,HFILEPGDTYPE,'NATURE')
00093 !
00094  CALL PREP_GRID_EXTERN(HFILEPGDTYPE,KLUOUT,CINGRID_TYPE,CINTERP_TYPE,INI)
00095 !
00096 !---------------------------------------------------------------------------------------
00097 !
00098 !*      3.     Transformation into physical quantity to be interpolated
00099 !              --------------------------------------------------------
00100 !
00101 SELECT CASE(HSURF)
00102 !
00103 !*     3.      Orography
00104 !              ---------
00105 !
00106   CASE('ZS     ')
00107     ALLOCATE(PFIELD(INI,1,1))
00108     YRECFM='ZS'
00109     CALL READ_SURF(HFILEPGDTYPE,YRECFM,PFIELD(:,1,1),IRESP,HDIR='A')
00110     CALL CLOSE_AUX_IO_SURF(HFILEPGD,HFILEPGDTYPE)
00111 !
00112 !--------------------------------------------------------------------------
00113 !
00114 !
00115 !*      3.1    Profile of temperature, water or ice in the soil
00116 !
00117   CASE('TG    ','WG    ','WGI   ')
00118      CALL CLOSE_AUX_IO_SURF(HFILEPGD,HFILEPGDTYPE)
00119 !* reading of the profile and its depth definition
00120      CALL READ_EXTERN_ISBA(HFILE,HFILETYPE,HFILEPGD,HFILEPGDTYPE,&
00121                            KLUOUT,INI,HSURF,HSURF,ZFIELD,ZD)
00122 ! 
00123      ALLOCATE(ZFIELD1(SIZE(ZFIELD,1),SIZE(ZFIELD,2)))
00124      ALLOCATE(ZD1(SIZE(ZFIELD,1),SIZE(ZFIELD,2)))
00125      ALLOCATE(ZOUT(SIZE(ZFIELD,1),SIZE(XGRID_SOIL)))
00126      ALLOCATE(PFIELD(SIZE(ZFIELD,1),SIZE(XGRID_SOIL),SIZE(ZFIELD,3)))
00127 !
00128      DO JVEGTYPE=1,SIZE(ZFIELD,3)
00129         ZFIELD1(:,:)=ZFIELD(:,:,JVEGTYPE)
00130         ZD1(:,:)=ZD(:,:,JVEGTYPE)
00131         CALL INTERP_GRID(ZD1,ZFIELD1,XGRID_SOIL,ZOUT)
00132         PFIELD(:,:,JVEGTYPE)=ZOUT(:,:)
00133      END DO
00134    
00135 !
00136      DEALLOCATE(ZFIELD)
00137      DEALLOCATE(ZOUT)
00138      DEALLOCATE(ZFIELD1)
00139      DEALLOCATE(ZD)
00140 !
00141 !--------------------------------------------------------------------------
00142 !
00143 !*      3.4    Water content intercepted on leaves, LAI
00144 !
00145   CASE('WR     ')
00146      ALLOCATE(PFIELD(INI,1,NVEGTYPE))
00147      !* number of tiles
00148      YRECFM='PATCH_NUMBER'
00149      CALL READ_SURF(HFILEPGDTYPE,YRECFM,IPATCH,IRESP)
00150      CALL CLOSE_AUX_IO_SURF(HFILEPGD,HFILEPGDTYPE)
00151      ALLOCATE(ZFIELD(INI,1,IPATCH))
00152      YRECFM = 'WR'
00153      CALL OPEN_AUX_IO_SURF(HFILE,HFILETYPE,'NATURE')
00154      CALL READ_SURF(HFILETYPE,YRECFM,ZFIELD(:,1,:),IRESP,HDIR='A')
00155      CALL CLOSE_AUX_IO_SURF(HFILE,HFILETYPE)
00156      CALL PUT_ON_ALL_VEGTYPES(INI,1,IPATCH,NVEGTYPE,ZFIELD,PFIELD)
00157      DEALLOCATE(ZFIELD)
00158 !
00159   CASE('LAI    ')
00160      CALL CLOSE_AUX_IO_SURF(HFILEPGD,HFILEPGDTYPE)
00161      ALLOCATE(PFIELD(INI,1,NVEGTYPE))
00162      PFIELD(:,:,:) = XUNDEF
00163 !
00164 END SELECT
00165 !
00166 !
00167 !---------------------------------------------------------------------------
00168 !
00169 !*      6.     End of IO
00170 !              ---------
00171 !
00172 IF (LHOOK) CALL DR_HOOK('PREP_ISBA_EXTERN',1,ZHOOK_HANDLE)
00173 !
00174 !---------------------------------------------------------------------------
00175 !---------------------------------------------------------------------------
00176 END SUBROUTINE PREP_ISBA_EXTERN