SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/OFFLIN/init_surf_landusen.F90
Go to the documentation of this file.
00001 !#############################################################
00002 SUBROUTINE INIT_SURF_LANDUSE_n(HPROGRAM,HINIT,OLAND_USE,                  &
00003                                KI,KSV,KSW,                                &
00004                                HSV,PCO2,PRHOA,                            &
00005                                PZENITH,PAZIM,PSW_BANDS,PDIR_ALB,PSCA_ALB, &
00006                                PEMIS,PTSRAD,                              &
00007                                KYEAR, KMONTH,KDAY, PTIME,                 &
00008                                HATMFILE,HATMFILETYPE,                     &
00009                                HTEST                                      )  
00010 !#############################################################
00011 !
00012 !!****  *INIT_SURF_LANDUSE_n* - routine to initialize LAND USE 
00013 !!
00014 !!    PURPOSE
00015 !!    -------
00016 !!
00017 !!**  METHOD
00018 !!    ------
00019 !!
00020 !!    EXTERNAL
00021 !!    --------
00022 !!
00023 !!
00024 !!    IMPLICIT ARGUMENTS
00025 !!    ------------------
00026 !!
00027 !!    REFERENCE
00028 !!    ---------
00029 !!
00030 !!
00031 !!    AUTHOR
00032 !!    ------
00033 !!    S. Faroux    *Meteo France*       
00034 !!
00035 !!    MODIFICATIONS
00036 !!    -------------
00037 !!
00038 !-------------------------------------------------------------------------------
00039 !
00040 !*       0.    DECLARATIONS
00041 !              ------------
00042 !
00043 USE MODD_ISBA_n,  ONLY : XPATCH_OLD,XDG_OLD,CISBA
00044 USE YOMHOOK   ,   ONLY : LHOOK,   DR_HOOK
00045 USE PARKIND1  ,ONLY : JPRB
00046 USE MODD_ISBA_n,  ONLY : NGROUND_LAYER, NPATCH
00047 !
00048 USE MODI_INIT_IO_SURF_n
00049 USE MODI_END_IO_SURF_n
00050 !
00051 USE MODI_GET_TYPE_DIM_n
00052 USE MODI_READ_SURF
00053 !
00054 USE MODI_SET_VEGTYPES_FRACTIONS
00055 USE MODI_COMPUTE_ISBA_PARAMETERS
00056 USE MODI_ABOR1_SFX
00057 !
00058 IMPLICIT NONE
00059 !
00060 !*       0.1   Declarations of arguments
00061 !              -------------------------
00062 !
00063  CHARACTER(LEN=6),                 INTENT(IN)  :: HPROGRAM  ! program calling surf. schemes
00064  CHARACTER(LEN=3),                 INTENT(IN)  :: HINIT     ! choice of fields to initialize
00065 LOGICAL,                          INTENT(IN)  :: OLAND_USE ! choice of doing land use or not 
00066 INTEGER,                          INTENT(IN)  :: KI        ! number of points
00067 INTEGER,                          INTENT(IN)  :: KSV       ! number of scalars
00068 INTEGER,                          INTENT(IN)  :: KSW       ! number of short-wave spectral bands
00069  CHARACTER(LEN=6), DIMENSION(KSV), INTENT(IN)  :: HSV       ! name of all scalar variables
00070 REAL,             DIMENSION(KI),  INTENT(IN)  :: PCO2      ! CO2 concentration (kg/m3)
00071 REAL,             DIMENSION(KI),  INTENT(IN)  :: PRHOA     ! air density
00072 REAL,             DIMENSION(KI),  INTENT(IN)  :: PZENITH   ! solar zenithal angle
00073 REAL,             DIMENSION(KI),  INTENT(IN)  :: PAZIM     ! solar azimuthal angle (rad from N, clock)
00074 REAL,             DIMENSION(KSW), INTENT(IN)  :: PSW_BANDS ! middle wavelength of each band
00075 REAL,             DIMENSION(KI,KSW),INTENT(OUT) :: PDIR_ALB  ! direct albedo for each band
00076 REAL,             DIMENSION(KI,KSW),INTENT(OUT) :: PSCA_ALB  ! diffuse albedo for each band
00077 REAL,             DIMENSION(KI),  INTENT(OUT) :: PEMIS     ! emissivity
00078 REAL,             DIMENSION(KI),  INTENT(OUT) :: PTSRAD    ! radiative temperature
00079 INTEGER,                          INTENT(IN)  :: KYEAR     ! current year (UTC)
00080 INTEGER,                          INTENT(IN)  :: KMONTH    ! current month (UTC)
00081 INTEGER,                          INTENT(IN)  :: KDAY      ! current day (UTC)
00082 REAL,                             INTENT(IN)  :: PTIME     ! current time since
00083                                                            !  midnight (UTC, s)
00084 !
00085  CHARACTER(LEN=28),                INTENT(IN)  :: HATMFILE    ! atmospheric file name
00086  CHARACTER(LEN=6),                 INTENT(IN)  :: HATMFILETYPE! atmospheric file type
00087  CHARACTER(LEN=2),                 INTENT(IN)  :: HTEST       ! must be equal to 'OK'
00088 !
00089 !
00090 !*       0.2   Declarations of local variables
00091 !              -------------------------------
00092 REAL, DIMENSION(:,:),ALLOCATABLE  :: ZWORK      ! 2D array to write data in file
00093 INTEGER           :: JLAYER
00094 INTEGER           :: ILU          ! 1D physical dimension
00095 INTEGER           :: IRESP          ! Error code after redding
00096  CHARACTER(LEN=12) :: YRECFM         ! Name of the article to be read
00097  CHARACTER(LEN=4)  :: YLVL
00098 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00099 !
00100 !-------------------------------------------------------------------------------
00101 !
00102 IF (LHOOK) CALL DR_HOOK('INIT_SURF_LANDUSE_N',0,ZHOOK_HANDLE)
00103 !
00104 IF (HTEST/='OK') THEN
00105    CALL ABOR1_SFX('INIT_SURF_LANDUSEN: FATAL ERROR DURING ARGUMENT TRANSFER')
00106 END IF
00107 !
00108 IF (.NOT. OLAND_USE)THEN
00109    IF (LHOOK) CALL DR_HOOK('INIT_SURF_LANDUSE_N',1,ZHOOK_HANDLE)
00110    RETURN
00111 ENDIF
00112 !
00113 IF (CISBA=='DIF') THEN
00114    CALL ABOR1_SFX('INIT_SURF_LANDUSEN: LAND USE NOT IMPLEMENTED WITH DIF')
00115 ENDIF
00116 !
00117 !-------------------------------------------------------------------------------
00118 !
00119 !* initialization for I/O
00120 !
00121  CALL INIT_IO_SURF_n(HPROGRAM,'NATURE','ISBA  ','READ ')
00122 !
00123 !* 1D physical dimension
00124 !
00125  CALL GET_TYPE_DIM_n('NATURE',ILU)
00126 ALLOCATE(ZWORK(ILU,NPATCH))
00127 !
00128 !* read old patch fraction
00129 !       
00130 ALLOCATE(XPATCH_OLD(ILU,NPATCH))       
00131 YRECFM = 'OLD_PATCH'
00132  CALL READ_SURF(HPROGRAM,YRECFM,XPATCH_OLD(:,:),IRESP)
00133 !
00134 !* read old soil layer thicknesses (m)
00135 !
00136 ALLOCATE(XDG_OLD(ILU,NGROUND_LAYER,NPATCH))
00137 !
00138 DO JLAYER=1,NGROUND_LAYER
00139   WRITE(YLVL,'(I4)') JLAYER
00140   YRECFM='OLD_DG'//ADJUSTL(YLVL(:LEN_TRIM(YLVL)))
00141   CALL READ_SURF(HPROGRAM,YRECFM,ZWORK(:,:),IRESP)
00142   XDG_OLD(:,JLAYER,:)=ZWORK
00143 END DO
00144 DEALLOCATE(ZWORK)
00145 !
00146 !* End of IO
00147 !
00148  CALL END_IO_SURF_n(HPROGRAM)
00149 !
00150 !-------------------------------------------------------------------------------
00151 !
00152 !* read new fraction of each vege type
00153 ! and then extrapolate parameters defined by cover
00154 !       
00155  CALL SET_VEGTYPES_FRACTIONS(HPROGRAM)
00156 !
00157 !* re-initialize ISBA with new parameters
00158 !       
00159  CALL COMPUTE_ISBA_PARAMETERS(HPROGRAM,HINIT,OLAND_USE,                  &
00160                              KI,KSV,KSW,                                &
00161                              HSV,PCO2,PRHOA,                            &
00162                              PZENITH,PSW_BANDS,PDIR_ALB,PSCA_ALB,       &
00163                              PEMIS,PTSRAD,                              &
00164                              HTEST                                      )
00165 !-------------------------------------------------------------------------------
00166 !                       
00167 IF (LHOOK) CALL DR_HOOK('INIT_SURF_LANDUSE_N',1,ZHOOK_HANDLE)
00168 !
00169 END SUBROUTINE INIT_SURF_LANDUSE_n