SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE OCEAN_MERCATORVERGRID 00003 ! ###################################################################### 00004 ! 00005 !!**** *OCEAN_MERCATORVERGRID* 00006 !! 00007 !! PURPOSE 00008 !! ------- 00009 ! 00010 ! Define the vertical ocean grid 00011 ! 00012 ! 00013 !!** METHOD 00014 !! ------ 00015 ! 00016 ! 00017 ! 00018 ! 00019 !! EXTERNAL 00020 !! -------- 00021 !! 00022 !! 00023 !! IMPLICIT ARGUMENTS 00024 !! ------------------ 00025 !! 00026 !! MODD_OCEAN_CST 00027 !! 00028 !! 00029 !! REFERENCE 00030 !! --------- 00031 !! 00032 !! 00033 !! AUTHOR 00034 !! ------ 00035 !! 00036 !! C. Lebeaupin Brossier * Meteo-France * 00037 !! 00038 !! MODIFICATIONS 00039 !! ------------- 00040 !! Original 01/2008 00041 !------------------------------------------------------------------------------- 00042 ! 00043 !* 0. DECLARATIONS 00044 ! ------------ 00045 ! 00046 USE MODD_CSTS,ONLY : XPI 00047 USE MODD_SURF_PAR, ONLY : XUNDEF 00048 USE MODD_OCEAN_GRID_n 00049 ! 00050 ! 00051 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00052 USE PARKIND1 ,ONLY : JPRB 00053 ! 00054 IMPLICIT NONE 00055 ! 00056 !* 0.1 declarations of arguments 00057 !* 0.2 declarations of local variables 00058 ! 00059 ! 00060 REAL :: RUP,RDOWN 00061 INTEGER :: IK1,IK2,IKK1,IMIN,IMAX 00062 INTEGER :: JLOOP 00063 REAL :: DELTAZ 00064 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00065 !------------------------------------------------------------------------------- 00066 ! 1. Allocations 00067 ! ----------- 00068 IF (LHOOK) CALL DR_HOOK('OCEAN_MERCATORVERGRID',0,ZHOOK_HANDLE) 00069 ALLOCATE(XK1 (NOCKMIN:NOCKMAX)) 00070 ALLOCATE(XK2 (NOCKMIN:NOCKMAX)) 00071 ALLOCATE(XK3 (NOCKMIN:NOCKMAX)) 00072 ALLOCATE(XK4 (NOCKMIN:NOCKMAX)) 00073 ! 00074 ALLOCATE(XZHOC (NOCKMIN:NOCKMAX)) 00075 ALLOCATE(XZ2 (NOCKMIN:NOCKMAX)) 00076 ALLOCATE(XDZ1 (NOCKMIN:NOCKMAX)) 00077 ALLOCATE(XDZ2 (NOCKMIN:NOCKMAX)) 00078 ! 00079 ALLOCATE(XRAY (NOCKMIN:NOCKMAX)) 00080 !------------------------------------------------------------------------------- 00081 ! 2. Ocean Grid Levels 00082 ! ----------------- 00083 ! 00084 DELTAZ=5. 00085 IK1=NOCKMIN+1 00086 IK2=NOCKMIN+2 00087 IKK1=NOCKMAX-1 00088 !NOCKMAX=40 00089 !print*,SIZE(Z1) 00090 ! 00091 XZHOC(0)=0. 00092 XZ2(0)=0. 00093 !print*,SIZE(ZDZ1) 00094 XDZ1(0)=XUNDEF 00095 XDZ2(0)=0. 00096 ! 00097 XZHOC(IK1) = -1. 00098 XZHOC(2) = -5. 00099 XZHOC(3) = -10. 00100 XZHOC(4) = -15. 00101 XZHOC(5) = -20. 00102 XZHOC(6) = -25. 00103 XZHOC(7) = -30. 00104 XZHOC(8) = -40. 00105 XZHOC(9) = -50. 00106 XZHOC(10) = -60. 00107 XZHOC(11) = -75. 00108 XZHOC(12) = -100. 00109 XZHOC(13) = -125. 00110 XZHOC(14) = -150. 00111 XZHOC(15) = -175. 00112 XZHOC(16) = -200. 00113 XZHOC(17) = -225. 00114 XZHOC(18) = -250. 00115 XZHOC(19) = -300. 00116 XZHOC(20) = -400. 00117 XZHOC(21) = -500. 00118 XZHOC(22) = -600. 00119 XZHOC(23) = -700. 00120 XZHOC(24) = -800. 00121 XZHOC(25) = -900. 00122 XZHOC(26) = -1000. 00123 XZHOC(27) = -1100. 00124 XZHOC(28) = -1200. 00125 XZHOC(29) = -1300. 00126 XZHOC(30) = -1400. 00127 XZHOC(31) = -1500. 00128 XZHOC(32) = -1750. 00129 XZHOC(33) = -2000. 00130 XZHOC(34) = -2250. 00131 XZHOC(35) = -2500. 00132 XZHOC(36) = -2750. 00133 XZHOC(37) = -3000. 00134 XZHOC(38) = -3250. 00135 XZHOC(IKK1) = -3500. 00136 XZHOC(NOCKMAX) = -4000. 00137 00138 DO JLOOP=IK1,IKK1 00139 XZ2(JLOOP) = ((XZHOC(JLOOP+1)-XZHOC(JLOOP))/2.)+XZHOC(JLOOP) 00140 ENDDO 00141 XZ2(NOCKMAX) = -4250. 00142 00143 DO JLOOP=IK1,IKK1 00144 XDZ1(JLOOP) = -XZHOC(JLOOP+1)+XZHOC(JLOOP) 00145 XDZ2(JLOOP) = -XZ2(JLOOP)+XZ2(JLOOP-1) 00146 ENDDO 00147 00148 XDZ2(NOCKMAX) = -XZ2(NOCKMAX)+XZ2(IKK1) 00149 XDZ1(NOCKMAX) = XDZ1(IKK1) 00150 ! 00151 !! 00152 !! 00153 !! 3. Grid Parameters 00154 !! --------------- 00155 RUP=1. 00156 DO JLOOP=IK1,NOCKMAX 00157 XK1(JLOOP)=-1. / (XDZ2(JLOOP)*XDZ1(JLOOP-1)) 00158 XK4(JLOOP)= 1. / (XDZ1(JLOOP)*XDZ1(JLOOP)) 00159 RDOWN= RAYO(XZ2(JLOOP)) 00160 XRAY(JLOOP)= RUP-RDOWN 00161 RUP=RDOWN 00162 ENDDO 00163 DO JLOOP=IK1,IKK1 00164 XK2(JLOOP)=-1. / (XDZ2(JLOOP)*XDZ1(JLOOP)) 00165 XK3(JLOOP)=-1. / (XDZ1(JLOOP)*XDZ2(JLOOP+1)) 00166 ENDDO 00167 XK2(NOCKMAX)=XK2(IKK1) 00168 XK3(NOCKMAX)=0. 00169 ! 00170 !------------------------------------------------------------------------------- 00171 IF (LHOOK) CALL DR_HOOK('OCEAN_MERCATORVERGRID',1,ZHOOK_HANDLE) 00172 CONTAINS 00173 !rayo 00174 !------------------------------------------------------------------------------- 00175 ! 00176 !------------------------------------------------------------------------------- 00177 !! ######################################### 00178 FUNCTION RAYO(Z) RESULT(RR) 00179 ! ######################################### 00180 ! 00181 ! 00182 !!**** *RAYOFCTX* 00183 !! 00184 !! PURPOSE 00185 !! ------- 00186 !compute solar penetration coefficient 00187 ! 00188 !!** METHOD 00189 !! ------ 00190 ! 00191 !! EXTERNAL 00192 !! -------- 00193 !! 00194 !! IMPLICIT ARGUMENTS 00195 !! ------------------ 00196 !! 00197 !! REFERENCE 00198 !! --------- 00199 !! Paulson and Simpson 1977 00200 !! 00201 !! AUTHOR 00202 !! ------ 00203 !! C. Lebeaupin *Meteo-France* (adapted from S. Belamari's code) 00204 !! 00205 !! MODIFICATIONS 00206 !! ------------- 00207 !! Original 27/02/2006 00208 !! 00209 !------------------------------------------------------------------------------- 00210 ! 00211 !* 0. DECLARATIONS 00212 ! 00213 USE MODD_OCEAN_CSTS,ONLY : XR,XD1,XD2 00214 ! 00215 !* 0.1 declarations of arguments 00216 ! 00217 REAL :: RR,Z 00218 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00219 00220 ! 00221 !------------------------------------------------------------------------------- 00222 ! 00223 !* 1. COMPUTE RAYO 00224 ! ------------ 00225 ! 00226 IF (LHOOK) CALL DR_HOOK('RAYO',0,ZHOOK_HANDLE) 00227 RR = XR*EXP(Z/XD1) + (1-XR)*EXP(Z/XD2) 00228 IF (LHOOK) CALL DR_HOOK('RAYO',1,ZHOOK_HANDLE) 00229 ! 00230 END FUNCTION RAYO 00231 ! 00232 !------------------------------------------------------------------------------- 00233 END SUBROUTINE OCEAN_MERCATORVERGRID