SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/modd_surf_atm_sson.F90
Go to the documentation of this file.
00001 !     ####################
00002       MODULE MODD_SURF_ATM_SSO_n
00003 !     ######################
00004 !
00005 !!****  *MODD_SURF_ATM_SSO - declaration of surface parameters related to orography
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !     Declaration of surface parameters
00010 !
00011 !!
00012 !!**  IMPLICIT ARGUMENTS
00013 !!    ------------------
00014 !!      None 
00015 !!
00016 !!    REFERENCE
00017 !!    ---------
00018 !!
00019 !!    AUTHOR
00020 !!    ------
00021 !!      V. Masson    *Meteo France*
00022 !!
00023 !!    MODIFICATIONS
00024 !!    -------------
00025 !!      Original       01/2004
00026 !
00027 !*       0.   DECLARATIONS
00028 !             ------------
00029 !
00030 !
00031 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00032 USE PARKIND1  ,ONLY : JPRB
00033 !
00034 IMPLICIT NONE
00035 
00036 TYPE SURF_ATM_SSO_t
00037 !
00038 !-----------------------------------------------------------------------------------------------------
00039 !
00040 ! Type of roughness
00041 !
00042  CHARACTER(LEN=4) :: CROUGH     ! type of orographic roughness
00043 !                              ! 'NONE'
00044                                ! 'Z01D'
00045                                ! 'Z04D'
00046                                ! 'BE04'
00047 
00048 !-----------------------------------------------------------------------------------------------------
00049 !
00050 ! Subgrid orography parameters
00051 !
00052   REAL, DIMENSION(:), POINTER :: XAOSIP,XAOSIM,XAOSJP,XAOSJM
00053 ! directional A/S quantities in 4 coordinate directions
00054 ! (IP: i index up;  IM: i index down;  JP: j index up;  JM: j index down)
00055 ! They are used in soil routines to compute effective roughness length
00056 !
00057   REAL, DIMENSION(:), POINTER :: XHO2IP,XHO2IM,XHO2JP,XHO2JM
00058 ! directional h/2 quantities in 4 coordinate directions
00059 ! (IP: i index up;  IM: i index down;  JP: j index up;  JM: j index down)
00060 ! They are used in soil routines to compute effective roughness length
00061 !
00062   REAL, DIMENSION(:), POINTER :: XZ0EFFIP,XZ0EFFIM,XZ0EFFJP,XZ0EFFJM
00063 ! directional total roughness lenghts in 4 coordinate directions
00064 ! (IP: i index up;  IM: i index down;  JP: j index up;  JM: j index down)
00065 !
00066   REAL, DIMENSION(:), POINTER   :: XZ0EFFJPDIR    ! heading of J direction (deg from N clockwise)
00067 
00068   REAL, DIMENSION(:), POINTER   :: XZ0REL         ! relief roughness length                 (m)
00069 !
00070   REAL, DIMENSION(:), POINTER   :: XSSO_SLOPE         ! slope of S.S.O.
00071   REAL, DIMENSION(:), POINTER   :: XSSO_ANIS          ! anisotropy of S.S.O.
00072   REAL, DIMENSION(:), POINTER   :: XSSO_DIR           ! direction of S.S.O. (deg from N clockwise) 
00073   REAL, DIMENSION(:), POINTER   :: XSSO_STDEV         ! S.S.O. standard deviation           (m)
00074 !
00075 !
00076   REAL, DIMENSION(:), POINTER   :: XAVG_ZS        ! averaged orography                      (m)
00077   REAL, DIMENSION(:), POINTER   :: XSIL_ZS        ! silhouette orography                    (m)
00078   REAL, DIMENSION(:), POINTER   :: XMAX_ZS        ! maximum subgrid orography               (m)
00079   REAL, DIMENSION(:), POINTER   :: XMIN_ZS        ! minimum subgrid orography               (m)
00080 ! Zo threshold
00081   REAL   :: XFRACZ0                                ! Z0=Min(Z0, Href/XFRACZ0)
00082   REAL   :: XCOEFBE                                ! Beljaars coefficient         
00083 !-----------------------------------------------------------------------------------------------------
00084 !
00085 !
00086 
00087 
00088 END TYPE SURF_ATM_SSO_t
00089 
00090 TYPE(SURF_ATM_SSO_t), ALLOCATABLE, TARGET, SAVE :: SURF_ATM_SSO_MODEL(:)
00091 
00092  CHARACTER(LEN=4),   POINTER :: CROUGH=>NULL()
00093 !$OMP THREADPRIVATE(CROUGH)
00094 REAL, DIMENSION(:), POINTER :: XAOSIP=>NULL(),XAOSIM=>NULL(),XAOSJP=>NULL(),XAOSJM=>NULL()
00095 !$OMP THREADPRIVATE(XAOSIP,XAOSIM,XAOSJP,XAOSJM)
00096 REAL, DIMENSION(:), POINTER :: XHO2IP=>NULL(),XHO2IM=>NULL(),XHO2JP=>NULL(),XHO2JM=>NULL()
00097 !$OMP THREADPRIVATE(XHO2IP,XHO2IM,XHO2JP,XHO2JM)
00098 REAL, DIMENSION(:), POINTER :: XZ0EFFIP=>NULL(),XZ0EFFIM=>NULL(),XZ0EFFJP=>NULL(),XZ0EFFJM=>NULL()
00099 !$OMP THREADPRIVATE(XZ0EFFIP,XZ0EFFIM,XZ0EFFJP,XZ0EFFJM)
00100 REAL, DIMENSION(:), POINTER   :: XZ0EFFJPDIR=>NULL()
00101 !$OMP THREADPRIVATE(XZ0EFFJPDIR)
00102 REAL, DIMENSION(:), POINTER   :: XZ0REL=>NULL()
00103 !$OMP THREADPRIVATE(XZ0REL)
00104 REAL, DIMENSION(:), POINTER   :: XSSO_SLOPE=>NULL()
00105 !$OMP THREADPRIVATE(XSSO_SLOPE)
00106 REAL, DIMENSION(:), POINTER   :: XSSO_ANIS=>NULL()
00107 !$OMP THREADPRIVATE(XSSO_ANIS)
00108 REAL, DIMENSION(:), POINTER   :: XSSO_DIR=>NULL()
00109 !$OMP THREADPRIVATE(XSSO_DIR)
00110 REAL, DIMENSION(:), POINTER   :: XSSO_STDEV=>NULL()
00111 !$OMP THREADPRIVATE(XSSO_STDEV)
00112 REAL, DIMENSION(:), POINTER   :: XAVG_ZS=>NULL()
00113 !$OMP THREADPRIVATE(XAVG_ZS)
00114 REAL, DIMENSION(:), POINTER   :: XSIL_ZS=>NULL()
00115 !$OMP THREADPRIVATE(XSIL_ZS)
00116 REAL, DIMENSION(:), POINTER   :: XMAX_ZS=>NULL()
00117 !$OMP THREADPRIVATE(XMAX_ZS)
00118 REAL, DIMENSION(:), POINTER   :: XMIN_ZS=>NULL()
00119 !$OMP THREADPRIVATE(XMIN_ZS)
00120 REAL, POINTER   :: XFRACZ0=>NULL()
00121 !$OMP THREADPRIVATE(XFRACZ0)
00122 REAL, POINTER   :: XCOEFBE=>NULL()
00123 !$OMP THREADPRIVATE(XCOEFBE)
00124 
00125 CONTAINS
00126 
00127 SUBROUTINE SURF_ATM_SSO_GOTO_MODEL(KFROM, KTO, LKFROM)
00128 LOGICAL, INTENT(IN) :: LKFROM
00129 INTEGER, INTENT(IN) :: KFROM, KTO
00130 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00131 !
00132 ! Save current state for allocated arrays
00133 IF (LKFROM) THEN
00134 SURF_ATM_SSO_MODEL(KFROM)%XAOSIP=>XAOSIP
00135 SURF_ATM_SSO_MODEL(KFROM)%XAOSIM=>XAOSIM
00136 SURF_ATM_SSO_MODEL(KFROM)%XAOSJP=>XAOSJP
00137 SURF_ATM_SSO_MODEL(KFROM)%XAOSJM=>XAOSJM
00138 SURF_ATM_SSO_MODEL(KFROM)%XHO2IP=>XHO2IP
00139 SURF_ATM_SSO_MODEL(KFROM)%XHO2IM=>XHO2IM
00140 SURF_ATM_SSO_MODEL(KFROM)%XHO2JP=>XHO2JP
00141 SURF_ATM_SSO_MODEL(KFROM)%XHO2JM=>XHO2JM
00142 SURF_ATM_SSO_MODEL(KFROM)%XZ0EFFIP=>XZ0EFFIP
00143 SURF_ATM_SSO_MODEL(KFROM)%XZ0EFFIM=>XZ0EFFIM
00144 SURF_ATM_SSO_MODEL(KFROM)%XZ0EFFJP=>XZ0EFFJP
00145 SURF_ATM_SSO_MODEL(KFROM)%XZ0EFFJM=>XZ0EFFJM
00146 SURF_ATM_SSO_MODEL(KFROM)%XZ0EFFJPDIR=>XZ0EFFJPDIR
00147 SURF_ATM_SSO_MODEL(KFROM)%XZ0REL=>XZ0REL
00148 SURF_ATM_SSO_MODEL(KFROM)%XSSO_SLOPE=>XSSO_SLOPE
00149 SURF_ATM_SSO_MODEL(KFROM)%XSSO_ANIS=>XSSO_ANIS
00150 SURF_ATM_SSO_MODEL(KFROM)%XSSO_DIR=>XSSO_DIR
00151 SURF_ATM_SSO_MODEL(KFROM)%XSSO_STDEV=>XSSO_STDEV
00152 SURF_ATM_SSO_MODEL(KFROM)%XAVG_ZS=>XAVG_ZS
00153 SURF_ATM_SSO_MODEL(KFROM)%XSIL_ZS=>XSIL_ZS
00154 SURF_ATM_SSO_MODEL(KFROM)%XMAX_ZS=>XMAX_ZS
00155 SURF_ATM_SSO_MODEL(KFROM)%XMIN_ZS=>XMIN_ZS
00156 ENDIF
00157 !
00158 ! Current model is set to model KTO
00159 IF (LHOOK) CALL DR_HOOK('MODD_SURF_ATM_SSO_N:SURF_ATM_SSO_GOTO_MODEL',0,ZHOOK_HANDLE)
00160 CROUGH=>SURF_ATM_SSO_MODEL(KTO)%CROUGH
00161 XFRACZ0=>SURF_ATM_SSO_MODEL(KTO)%XFRACZ0
00162 XCOEFBE=>SURF_ATM_SSO_MODEL(KTO)%XCOEFBE
00163 XAOSIP=>SURF_ATM_SSO_MODEL(KTO)%XAOSIP
00164 XAOSIM=>SURF_ATM_SSO_MODEL(KTO)%XAOSIM
00165 XAOSJP=>SURF_ATM_SSO_MODEL(KTO)%XAOSJP
00166 XAOSJM=>SURF_ATM_SSO_MODEL(KTO)%XAOSJM
00167 XHO2IP=>SURF_ATM_SSO_MODEL(KTO)%XHO2IP
00168 XHO2IM=>SURF_ATM_SSO_MODEL(KTO)%XHO2IM
00169 XHO2JP=>SURF_ATM_SSO_MODEL(KTO)%XHO2JP
00170 XHO2JM=>SURF_ATM_SSO_MODEL(KTO)%XHO2JM
00171 XZ0EFFIP=>SURF_ATM_SSO_MODEL(KTO)%XZ0EFFIP
00172 XZ0EFFIM=>SURF_ATM_SSO_MODEL(KTO)%XZ0EFFIM
00173 XZ0EFFJP=>SURF_ATM_SSO_MODEL(KTO)%XZ0EFFJP
00174 XZ0EFFJM=>SURF_ATM_SSO_MODEL(KTO)%XZ0EFFJM
00175 XZ0EFFJPDIR=>SURF_ATM_SSO_MODEL(KTO)%XZ0EFFJPDIR
00176 XZ0REL=>SURF_ATM_SSO_MODEL(KTO)%XZ0REL
00177 XSSO_SLOPE=>SURF_ATM_SSO_MODEL(KTO)%XSSO_SLOPE
00178 XSSO_ANIS=>SURF_ATM_SSO_MODEL(KTO)%XSSO_ANIS
00179 XSSO_DIR=>SURF_ATM_SSO_MODEL(KTO)%XSSO_DIR
00180 XSSO_STDEV=>SURF_ATM_SSO_MODEL(KTO)%XSSO_STDEV
00181 XAVG_ZS=>SURF_ATM_SSO_MODEL(KTO)%XAVG_ZS
00182 XSIL_ZS=>SURF_ATM_SSO_MODEL(KTO)%XSIL_ZS
00183 XMAX_ZS=>SURF_ATM_SSO_MODEL(KTO)%XMAX_ZS
00184 XMIN_ZS=>SURF_ATM_SSO_MODEL(KTO)%XMIN_ZS
00185 IF (LHOOK) CALL DR_HOOK('MODD_SURF_ATM_SSO_N:SURF_ATM_SSO_GOTO_MODEL',1,ZHOOK_HANDLE)
00186 
00187 END SUBROUTINE SURF_ATM_SSO_GOTO_MODEL
00188 
00189 SUBROUTINE SURF_ATM_SSO_ALLOC(KMODEL)
00190 INTEGER, INTENT(IN) :: KMODEL
00191 INTEGER :: J
00192 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00193 IF (LHOOK) CALL DR_HOOK("MODD_SURF_ATM_SSO_N:SURF_ATM_SSO_ALLOC",0,ZHOOK_HANDLE)
00194 ALLOCATE(SURF_ATM_SSO_MODEL(KMODEL))
00195 DO J=1,KMODEL
00196   NULLIFY(SURF_ATM_SSO_MODEL(J)%XAOSIP)
00197   NULLIFY(SURF_ATM_SSO_MODEL(J)%XAOSIM)
00198   NULLIFY(SURF_ATM_SSO_MODEL(J)%XAOSJP)
00199   NULLIFY(SURF_ATM_SSO_MODEL(J)%XAOSJM)
00200   NULLIFY(SURF_ATM_SSO_MODEL(J)%XHO2IP)
00201   NULLIFY(SURF_ATM_SSO_MODEL(J)%XHO2IM)
00202   NULLIFY(SURF_ATM_SSO_MODEL(J)%XHO2JP)
00203   NULLIFY(SURF_ATM_SSO_MODEL(J)%XHO2JM)
00204   NULLIFY(SURF_ATM_SSO_MODEL(J)%XZ0EFFIP)
00205   NULLIFY(SURF_ATM_SSO_MODEL(J)%XZ0EFFIM)
00206   NULLIFY(SURF_ATM_SSO_MODEL(J)%XZ0EFFJP)
00207   NULLIFY(SURF_ATM_SSO_MODEL(J)%XZ0EFFJM)
00208   NULLIFY(SURF_ATM_SSO_MODEL(J)%XZ0EFFJPDIR)  
00209   NULLIFY(SURF_ATM_SSO_MODEL(J)%XZ0REL)
00210   NULLIFY(SURF_ATM_SSO_MODEL(J)%XSSO_SLOPE)
00211   NULLIFY(SURF_ATM_SSO_MODEL(J)%XSSO_ANIS)
00212   NULLIFY(SURF_ATM_SSO_MODEL(J)%XSSO_DIR)
00213   NULLIFY(SURF_ATM_SSO_MODEL(J)%XSSO_STDEV)
00214   NULLIFY(SURF_ATM_SSO_MODEL(J)%XAVG_ZS)
00215   NULLIFY(SURF_ATM_SSO_MODEL(J)%XSIL_ZS)
00216   NULLIFY(SURF_ATM_SSO_MODEL(J)%XMAX_ZS)
00217   NULLIFY(SURF_ATM_SSO_MODEL(J)%XMIN_ZS)
00218 ENDDO
00219 SURF_ATM_SSO_MODEL(:)%CROUGH=' '
00220 SURF_ATM_SSO_MODEL(:)%XFRACZ0=2.
00221 SURF_ATM_SSO_MODEL(:)%XCOEFBE=2.
00222 IF (LHOOK) CALL DR_HOOK("MODD_SURF_ATM_SSO_N:SURF_ATM_SSO_ALLOC",1,ZHOOK_HANDLE)
00223 END SUBROUTINE SURF_ATM_SSO_ALLOC
00224 
00225 SUBROUTINE SURF_ATM_SSO_DEALLO
00226 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00227 IF (LHOOK) CALL DR_HOOK("MODD_SURF_ATM_SSO_N:SURF_ATM_SSO_DEALLO",0,ZHOOK_HANDLE)
00228 IF (ALLOCATED(SURF_ATM_SSO_MODEL)) DEALLOCATE(SURF_ATM_SSO_MODEL)
00229 IF (LHOOK) CALL DR_HOOK("MODD_SURF_ATM_SSO_N:SURF_ATM_SSO_DEALLO",1,ZHOOK_HANDLE)
00230 END SUBROUTINE SURF_ATM_SSO_DEALLO
00231 
00232 END MODULE MODD_SURF_ATM_SSO_n