SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE READ_SEAFLUX_SBL_n(HPROGRAM) 00003 ! ######################################### 00004 ! 00005 !!**** *READ_SEAFLUX_SBL_n* - reads SEAFLUX fields 00006 !! 00007 !! 00008 !! PURPOSE 00009 !! ------- 00010 !! 00011 !!** METHOD 00012 !! ------ 00013 !! 00014 !! EXTERNAL 00015 !! -------- 00016 !! 00017 !! 00018 !! IMPLICIT ARGUMENTS 00019 !! ------------------ 00020 !! 00021 !! REFERENCE 00022 !! --------- 00023 !! 00024 !! 00025 !! AUTHOR 00026 !! ------ 00027 !! V. Masson *Meteo France* 00028 !! 00029 !! MODIFICATIONS 00030 !! ------------- 00031 !! Original 01/2003 00032 !! E. Martin 01/2012 Add LSBL_COLD_START 00033 !------------------------------------------------------------------------------- 00034 ! 00035 !* 0. DECLARATIONS 00036 ! ------------ 00037 ! 00038 USE MODD_SURF_PAR, ONLY : XUNDEF 00039 USE MODD_SEAFLUX_n, ONLY : LSBL 00040 USE MODD_SEAFLUX_SBL_n, ONLY : NLVL, XZ, XU, XT, XQ, XTKE, XLMO, XDZ, XZF, XDZF, XP 00041 ! 00042 USE MODI_READ_SURF 00043 USE MODI_CANOPY_GRID 00044 USE MODI_GET_TYPE_DIM_n 00045 ! 00046 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00047 USE PARKIND1 ,ONLY : JPRB 00048 ! 00049 IMPLICIT NONE 00050 ! 00051 !* 0.1 Declarations of arguments 00052 ! ------------------------- 00053 ! 00054 CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program 00055 ! 00056 ! 00057 !* 0.2 Declarations of local variables 00058 ! ------------------------------- 00059 ! 00060 ! 00061 CHARACTER(LEN=12) :: YRECFM ! Name of the article to be read 00062 CHARACTER(LEN=3) :: YREAD 00063 INTEGER :: ILU ! 1D physical dimension 00064 INTEGER :: IRESP ! Error code after redding 00065 INTEGER :: JLAYER ! loop counter on layers 00066 INTEGER :: IVERSION, IBUGFIX 00067 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00068 ! 00069 !------------------------------------------------------------------------------- 00070 ! 00071 !* 1D physical dimension 00072 ! 00073 IF (LHOOK) CALL DR_HOOK('READ_SEAFLUX_SBL_N',0,ZHOOK_HANDLE) 00074 CALL GET_TYPE_DIM_n('SEA ',ILU) 00075 ! 00076 YRECFM='VERSION' 00077 CALL READ_SURF(HPROGRAM,YRECFM,IVERSION,IRESP) 00078 ! 00079 YRECFM='BUG' 00080 CALL READ_SURF(HPROGRAM,YRECFM,IBUGFIX,IRESP) 00081 ! 00082 !* flag to use or not SBL levels 00083 ! 00084 YRECFM='SEA_SBL' 00085 CALL READ_SURF(HPROGRAM,YRECFM,LSBL,IRESP) 00086 ! 00087 IF (.NOT.LSBL) THEN 00088 ALLOCATE(XZ (0,0)) 00089 ALLOCATE(XU (0,0)) 00090 ALLOCATE(XT (0,0)) 00091 ALLOCATE(XQ (0,0)) 00092 ALLOCATE(XTKE(0,0)) 00093 ALLOCATE(XLMO(0) ) 00094 ALLOCATE(XP (0,0)) 00095 ALLOCATE(XDZ (0,0)) 00096 ALLOCATE(XZF (0,0)) 00097 ALLOCATE(XDZF(0,0)) 00098 IF (LHOOK) CALL DR_HOOK('READ_SEAFLUX_SBL_N',1,ZHOOK_HANDLE) 00099 RETURN 00100 ENDIF 00101 ! 00102 !* number of vertical levels 00103 ! 00104 YRECFM='SEA_SBL_LVL' 00105 CALL READ_SURF(HPROGRAM,YRECFM,NLVL,IRESP) 00106 ! 00107 !* 2. Prognostic fields: 00108 ! ----------------- 00109 ! 00110 !* altitudes 00111 ! 00112 ALLOCATE(XZ(ILU,NLVL)) 00113 ! 00114 DO JLAYER=1,NLVL 00115 WRITE(YRECFM,'(A9,I2.2,A1)') 'SEA_SBL_Z',JLAYER,' ' 00116 CALL READ_SURF(HPROGRAM,YRECFM,XZ(:,JLAYER),IRESP) 00117 END DO 00118 ! 00119 ALLOCATE(XU (ILU,NLVL)) 00120 ALLOCATE(XT (ILU,NLVL)) 00121 ALLOCATE(XQ (ILU,NLVL)) 00122 ALLOCATE(XTKE(ILU,NLVL)) 00123 ALLOCATE(XLMO(ILU) ) 00124 ALLOCATE(XP (ILU,NLVL)) 00125 ! 00126 IF (IVERSION>7 .OR. IVERSION==7 .AND.IBUGFIX>=2) THEN 00127 YRECFM='STORAGETYPE' 00128 CALL READ_SURF(HPROGRAM,YRECFM,YREAD,IRESP) 00129 ELSE 00130 YREAD = 'ALL' 00131 ENDIF 00132 ! 00133 IF(YREAD=='ALL') THEN 00134 ! 00135 !* wind in SBL 00136 DO JLAYER=1,NLVL 00137 WRITE(YRECFM,'(A9,I2.2,A1)') 'SEA_SBL_U',JLAYER,' ' 00138 CALL READ_SURF(HPROGRAM,YRECFM,XU(:,JLAYER),IRESP) 00139 END DO 00140 ! 00141 !* theta in SBL 00142 DO JLAYER=1,NLVL 00143 WRITE(YRECFM,'(A9,I2.2,A1)') 'SEA_SBL_T',JLAYER,' ' 00144 CALL READ_SURF(HPROGRAM,YRECFM,XT(:,JLAYER),IRESP) 00145 END DO 00146 ! 00147 !* humidity in SBL 00148 DO JLAYER=1,NLVL 00149 WRITE(YRECFM,'(A9,I2.2,A1)') 'SEA_SBL_Q',JLAYER,' ' 00150 CALL READ_SURF(HPROGRAM,YRECFM,XQ(:,JLAYER),IRESP) 00151 END DO 00152 ! 00153 !* Tke in SBL 00154 DO JLAYER=1,NLVL 00155 WRITE(YRECFM,'(A9,I2.2,A1)') 'SEA_SBL_E',JLAYER,' ' 00156 CALL READ_SURF(HPROGRAM,YRECFM,XTKE(:,JLAYER),IRESP) 00157 END DO 00158 ! 00159 !* Monin-Obhukov length 00160 YRECFM='SEA_SBL_LMO ' 00161 CALL READ_SURF(HPROGRAM,YRECFM,XLMO(:),IRESP) 00162 ! 00163 !* Pressure 00164 DO JLAYER=1,NLVL 00165 WRITE(YRECFM,'(A9,I2.2,A1)') 'SEA_SBL_P',JLAYER,' ' 00166 CALL READ_SURF(HPROGRAM,YRECFM,XP(:,JLAYER),IRESP) 00167 END DO 00168 ! 00169 ELSE 00170 XU (:,:) = XUNDEF 00171 XT (:,:) = XUNDEF 00172 XQ (:,:) = XUNDEF 00173 XTKE(:,:) = XUNDEF 00174 XLMO(:) = XUNDEF 00175 XP (:,:) = XUNDEF 00176 ENDIF 00177 ! 00178 ! 00179 !* Grid characteristics 00180 ! 00181 ! 00182 ! --------------------------------- XZ(k+1) XDZ(k+1) 00183 ! ^ 00184 ! | 00185 ! | 00186 ! - - - - - - - - - - - - - - - - - XZf(k+1) | XDZf(k+1) 00187 ! ^ | 00188 ! | | 00189 ! --------------------------------- XZ(k), XU, XT, XQ, XTKE | XDZ(k) V 00190 ! | ^ 00191 ! - - - - - - - - - - - - - - - - - XZf(k) V | XDZf(k) 00192 ! --------------------------------- XZ(k-1) XDZ(k-1) V 00193 ! - - - - - - - - - - - - - - - - - XZf(k-1) 00194 ! 00195 ALLOCATE(XDZ (ILU,NLVL)) 00196 ALLOCATE(XZF (ILU,NLVL)) 00197 ALLOCATE(XDZF(ILU,NLVL)) 00198 CALL CANOPY_GRID(ILU,NLVL,XZ,XZF,XDZ,XDZF) 00199 ! 00200 IF (LHOOK) CALL DR_HOOK('READ_SEAFLUX_SBL_N',1,ZHOOK_HANDLE) 00201 ! 00202 !------------------------------------------------------------------------------- 00203 ! 00204 END SUBROUTINE READ_SEAFLUX_SBL_n