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