SURFEX v7.3
General documentation of Surfex
|
00001 ! ################ 00002 MODULE MODD_SEAFLUX_SBL_n 00003 ! ################ 00004 ! 00005 !!**** *MODD_SEAFLUX_SBL_n - declaration of surface parameters for SBL scheme 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 07/2006 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 SEAFLUX_SBL_t 00037 ! 00038 INTEGER :: NLVL ! number of levels in SBL 00039 REAL, POINTER, DIMENSION(:,:) :: XZ ! height of middle of each level grid (m) 00040 REAL, POINTER, DIMENSION(:,:) :: XU ! wind at each level in SBL (m/s) 00041 REAL, POINTER, DIMENSION(:,:) :: XT ! temperature at each level in SBL (m/s) 00042 REAL, POINTER, DIMENSION(:,:) :: XQ ! humidity at each level in SBL (kg/m3) 00043 REAL, POINTER, DIMENSION(:,:) :: XTKE ! Tke at each level in SBL (m2/s2) 00044 REAL, POINTER, DIMENSION(:) :: XLMO ! Monin-Obhukov length (m) 00045 REAL, POINTER, DIMENSION(:,:) :: XP ! pressure at each level in SBL (kg/m3) 00046 ! 00047 REAL, POINTER, DIMENSION(:,:) :: XDZ ! depth of each level in SBL (m) 00048 REAL, POINTER, DIMENSION(:,:) :: XZF ! height of bottom of each level grid (m) 00049 REAL, POINTER, DIMENSION(:,:) :: XDZF ! depth between each level in SBL (m) 00050 ! 00051 END TYPE SEAFLUX_SBL_t 00052 00053 TYPE(SEAFLUX_SBL_t), ALLOCATABLE, TARGET, SAVE :: SEAFLUX_SBL_MODEL(:) 00054 00055 INTEGER, POINTER :: NLVL=>NULL() 00056 !$OMP THREADPRIVATE(NLVL) 00057 REAL, POINTER, DIMENSION(:,:) :: XZ=>NULL() 00058 !$OMP THREADPRIVATE(XZ) 00059 REAL, POINTER, DIMENSION(:,:) :: XU=>NULL() 00060 !$OMP THREADPRIVATE(XU) 00061 REAL, POINTER, DIMENSION(:,:) :: XT=>NULL() 00062 !$OMP THREADPRIVATE(XT) 00063 REAL, POINTER, DIMENSION(:,:) :: XQ=>NULL() 00064 !$OMP THREADPRIVATE(XQ) 00065 REAL, POINTER, DIMENSION(:,:) :: XTKE=>NULL() 00066 !$OMP THREADPRIVATE(XTKE) 00067 REAL, POINTER, DIMENSION(:) :: XLMO=>NULL() 00068 !$OMP THREADPRIVATE(XLMO) 00069 REAL, POINTER, DIMENSION(:,:) :: XP=>NULL() 00070 !$OMP THREADPRIVATE(XP) 00071 REAL, POINTER, DIMENSION(:,:) :: XDZ=>NULL() 00072 !$OMP THREADPRIVATE(XDZ) 00073 REAL, POINTER, DIMENSION(:,:) :: XZF=>NULL() 00074 !$OMP THREADPRIVATE(XZF) 00075 REAL, POINTER, DIMENSION(:,:) :: XDZF=>NULL() 00076 !$OMP THREADPRIVATE(XDZF) 00077 00078 CONTAINS 00079 00080 SUBROUTINE SEAFLUX_SBL_GOTO_MODEL(KFROM, KTO, LKFROM) 00081 LOGICAL, INTENT(IN) :: LKFROM 00082 INTEGER, INTENT(IN) :: KFROM, KTO 00083 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00084 ! 00085 ! Save current state for allocated arrays 00086 IF (LKFROM) THEN 00087 SEAFLUX_SBL_MODEL(KFROM)%XZ=>XZ 00088 SEAFLUX_SBL_MODEL(KFROM)%XU=>XU 00089 SEAFLUX_SBL_MODEL(KFROM)%XT=>XT 00090 SEAFLUX_SBL_MODEL(KFROM)%XQ=>XQ 00091 SEAFLUX_SBL_MODEL(KFROM)%XTKE=>XTKE 00092 SEAFLUX_SBL_MODEL(KFROM)%XLMO=>XLMO 00093 SEAFLUX_SBL_MODEL(KFROM)%XP=>XP 00094 SEAFLUX_SBL_MODEL(KFROM)%XDZ=>XDZ 00095 SEAFLUX_SBL_MODEL(KFROM)%XZF=>XZF 00096 SEAFLUX_SBL_MODEL(KFROM)%XDZF=>XDZF 00097 ENDIF 00098 ! 00099 ! Current model is set to model KTO 00100 IF (LHOOK) CALL DR_HOOK('MODD_SEAFLUX_SBL_N:SEAFLUX_SBL_GOTO_MODEL',0,ZHOOK_HANDLE) 00101 NLVL=>SEAFLUX_SBL_MODEL(KTO)%NLVL 00102 XZ=>SEAFLUX_SBL_MODEL(KTO)%XZ 00103 XU=>SEAFLUX_SBL_MODEL(KTO)%XU 00104 XT=>SEAFLUX_SBL_MODEL(KTO)%XT 00105 XQ=>SEAFLUX_SBL_MODEL(KTO)%XQ 00106 XTKE=>SEAFLUX_SBL_MODEL(KTO)%XTKE 00107 XLMO=>SEAFLUX_SBL_MODEL(KTO)%XLMO 00108 XP=>SEAFLUX_SBL_MODEL(KTO)%XP 00109 XDZ=>SEAFLUX_SBL_MODEL(KTO)%XDZ 00110 XZF=>SEAFLUX_SBL_MODEL(KTO)%XZF 00111 XDZF=>SEAFLUX_SBL_MODEL(KTO)%XDZF 00112 IF (LHOOK) CALL DR_HOOK('MODD_SEAFLUX_SBL_N:SEAFLUX_SBL_GOTO_MODEL',1,ZHOOK_HANDLE) 00113 00114 END SUBROUTINE SEAFLUX_SBL_GOTO_MODEL 00115 00116 SUBROUTINE SEAFLUX_SBL_ALLOC(KMODEL) 00117 INTEGER, INTENT(IN) :: KMODEL 00118 INTEGER :: J 00119 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00120 IF (LHOOK) CALL DR_HOOK("MODD_SEAFLUX_SBL_N:SEAFLUX_SBL_ALLOC",0,ZHOOK_HANDLE) 00121 ALLOCATE(SEAFLUX_SBL_MODEL(KMODEL)) 00122 DO J=1,KMODEL 00123 NULLIFY(SEAFLUX_SBL_MODEL(J)%XZ) 00124 NULLIFY(SEAFLUX_SBL_MODEL(J)%XU) 00125 NULLIFY(SEAFLUX_SBL_MODEL(J)%XT) 00126 NULLIFY(SEAFLUX_SBL_MODEL(J)%XQ) 00127 NULLIFY(SEAFLUX_SBL_MODEL(J)%XTKE) 00128 NULLIFY(SEAFLUX_SBL_MODEL(J)%XLMO) 00129 NULLIFY(SEAFLUX_SBL_MODEL(J)%XP) 00130 NULLIFY(SEAFLUX_SBL_MODEL(J)%XDZ) 00131 NULLIFY(SEAFLUX_SBL_MODEL(J)%XZF) 00132 NULLIFY(SEAFLUX_SBL_MODEL(J)%XDZF) 00133 ENDDO 00134 SEAFLUX_SBL_MODEL(:)%NLVL=0 00135 IF (LHOOK) CALL DR_HOOK("MODD_SEAFLUX_SBL_N:SEAFLUX_SBL_ALLOC",1,ZHOOK_HANDLE) 00136 END SUBROUTINE SEAFLUX_SBL_ALLOC 00137 00138 SUBROUTINE SEAFLUX_SBL_DEALLO 00139 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00140 IF (LHOOK) CALL DR_HOOK("MODD_SEAFLUX_SBL_N:SEAFLUX_SBL_DEALLO",0,ZHOOK_HANDLE) 00141 IF (ALLOCATED(SEAFLUX_SBL_MODEL)) DEALLOCATE(SEAFLUX_SBL_MODEL) 00142 IF (LHOOK) CALL DR_HOOK("MODD_SEAFLUX_SBL_N:SEAFLUX_SBL_DEALLO",1,ZHOOK_HANDLE) 00143 END SUBROUTINE SEAFLUX_SBL_DEALLO 00144 00145 END MODULE MODD_SEAFLUX_SBL_n