SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE DIAG_INLINE_OCEAN_n 00003 ! ############################################################################### 00004 ! 00005 !!**** *DIAG_INLINE_SEAFLUX_n * - computes diagnostics during SEAFLUX time-step 00006 !! 00007 !! PURPOSE 00008 !! ------- 00009 ! 00010 !!** METHOD 00011 !! ------ 00012 !! 00013 !! REFERENCE 00014 !! --------- 00015 !! 00016 !! 00017 !! AUTHOR 00018 !! ------ 00019 !! V. Masson 00020 !! 00021 !! MODIFICATIONS 00022 !! ------------- 00023 !! Original 02/2008 00024 !! Modified 07/2012, P. Le Moigne : CMO1D phasing 00025 !!------------------------------------------------------------------ 00026 ! 00027 USE MODD_OCEAN_CSTS 00028 ! 00029 USE MODD_SEAFLUX_n, ONLY : XSEABATHY 00030 USE MODD_OCEAN_n 00031 USE MODD_OCEAN_GRID_n 00032 USE MODD_DIAG_OCEAN_n, ONLY : LDIAG_OCEAN, XTOCMOY, XSOCMOY, XUOCMOY, XVOCMOY, XDOCMOY 00033 ! 00034 USE MODD_SURF_PAR, ONLY : XUNDEF 00035 ! 00036 ! 00037 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00038 USE PARKIND1 ,ONLY : JPRB 00039 ! 00040 IMPLICIT NONE 00041 ! 00042 !* 0.1 declarations of arguments 00043 ! 00044 ! 00045 !* 0.2 declarations of local variables 00046 ! 00047 REAL, DIMENSION(SIZE(XSEAT(:,1)),NOCKMIN:NOCKMAX) :: ZSEADENS 00048 REAL, DIMENSION(SIZE(XSEAT(:,1))) :: ZRHO0,ZRHOCMO,ZDRHOX,ZTCMO 00049 REAL, DIMENSION(SIZE(XSEAT(:,1))) :: ZTMOY,ZSMOY,ZUMOY,ZVMOY,ZDMOY 00050 INTEGER, DIMENSION(SIZE(XSEAT(:,1))) :: IHMOLEVEL 00051 INTEGER :: INBPTS, IK1, IK2 00052 INTEGER :: J,JPT 00053 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00054 ! 00055 !------------------------------------------------------------------------------------- 00056 ! 00057 IF (LHOOK) CALL DR_HOOK('DIAG_INLINE_OCEAN_N',0,ZHOOK_HANDLE) 00058 IF (LDIAG_OCEAN) THEN 00059 ! 00060 IK1=NOCKMIN+1 00061 IK2=NOCKMIN+2 00062 ! 00063 INBPTS=SIZE(XSEAT(:,1)) 00064 ! 00065 ZSEADENS(:,:)=XRHOSWREF + & 00066 (XSEAT(:,:)-13.5)*(-0.19494-0.49038E-2*(XSEAT(:,:)-13.5))& 00067 +0.77475*(XSEAS(:,:)-32.6) 00068 ! 00069 DO JPT=1,INBPTS 00070 ! 00071 ! 3. Oceanic mixed layer depth calculation 00072 ! 00073 ! ------------------------------------- 00074 XSEAHMO(JPT)=-XZHOC(NOCKMIN+2) 00075 ZTCMO(JPT)=XSEAT(JPT,IK1)-0.5 00076 ZRHOCMO(JPT)=XRHOSWREF+DRHOCOMPUTE(ZTCMO(JPT),XSEAS(JPT,IK1)) 00077 DO J=IK2,NOCKMAX-1 00078 ZRHO0(JPT)=XRHOSWREF+DRHOCOMPUTE(XSEAT(JPT,J),XSEAS(JPT,J)) 00079 ZDRHOX(JPT)=ZRHO0(JPT)-ZRHOCMO(JPT) 00080 IF ((ZDRHOX(JPT)<0.).AND.(XSEABATH(JPT,J)/=0.)) THEN 00081 XSEAHMO(JPT)=XSEAHMO(JPT)+XDZ1(J) 00082 ELSE 00083 EXIT 00084 ENDIF 00085 ENDDO 00086 XSEAHMO(JPT)=MIN(XSEAHMO(JPT),-XSEABATHY(JPT)) 00087 ! 00088 IHMOLEVEL(JPT)=NOCKMAX 00089 ! 00090 DO J=IK1,NOCKMAX 00091 IF (-XZHOC(J)>XSEAHMO(JPT)) THEN 00092 IHMOLEVEL(JPT)=J-1 00093 EXIT 00094 ENDIF 00095 ENDDO 00096 ! 00097 ! 4. Thermal and haline contents verification 00098 ! ---------------------------------------- 00099 IF (IHMOLEVEL(JPT)<=1) THEN 00100 XTOCMOY(JPT)=XSEAT(JPT,IK1) 00101 XSOCMOY(JPT)=XSEAS(JPT,IK1) 00102 XUOCMOY(JPT)=XSEAU(JPT,IK1) 00103 XVOCMOY(JPT)=XSEAV(JPT,IK1) 00104 XDOCMOY(JPT)=ZSEADENS(JPT,IK1) 00105 ELSE !IHMOLEVEL>=2 00106 ZTMOY(JPT)=XSEAT(JPT,IK1) 00107 ZSMOY(JPT)=XSEAS(JPT,IK1) 00108 ZUMOY(JPT)=XSEAU(JPT,IK1) 00109 ZVMOY(JPT)=XSEAV(JPT,IK1) 00110 ZDMOY(JPT)=ZSEADENS(JPT,IK1) 00111 DO J=IK2,IHMOLEVEL(JPT) 00112 ZTMOY(JPT)=ZTMOY(JPT)+XSEAT(JPT,J)*(-XZHOC(J)+XZHOC(J-1)) 00113 ZSMOY(JPT)=ZSMOY(JPT)+XSEAS(JPT,J)*(-XZHOC(J)+XZHOC(J-1)) 00114 ZUMOY(JPT)=ZUMOY(JPT)+XSEAU(JPT,J)*(-XZHOC(J)+XZHOC(J-1)) 00115 ZVMOY(JPT)=ZVMOY(JPT)+XSEAV(JPT,J)*(-XZHOC(J)+XZHOC(J-1)) 00116 ZDMOY(JPT)=ZDMOY(JPT)+ZSEADENS(JPT,J)*(-XZHOC(J)+XZHOC(J-1)) 00117 ENDDO 00118 XTOCMOY(JPT)=ZTMOY(JPT)/(-XZHOC(IHMOLEVEL(JPT))) 00119 XSOCMOY(JPT)=ZSMOY(JPT)/(-XZHOC(IHMOLEVEL(JPT))) 00120 XUOCMOY(JPT)=ZUMOY(JPT)/(-XZHOC(IHMOLEVEL(JPT))) 00121 XVOCMOY(JPT)=ZVMOY(JPT)/(-XZHOC(IHMOLEVEL(JPT))) 00122 XDOCMOY(JPT)=ZDMOY(JPT)/(-XZHOC(IHMOLEVEL(JPT))) 00123 ENDIF 00124 ! 00125 ENDDO 00126 ! 00127 ENDIF 00128 !------------------------------------------------------------------------------------- 00129 ! 00130 IF (LHOOK) CALL DR_HOOK('DIAG_INLINE_OCEAN_N',1,ZHOOK_HANDLE) 00131 CONTAINS 00132 ! 00133 ! 00134 !! ######################################### 00135 FUNCTION DRHOCOMPUTE(T,S) RESULT(R) 00136 ! ########################################## 00137 ! 00138 !!**** *DRHOCOMPUTE* 00139 !! 00140 !! PURPOSE 00141 !! ------- 00142 !! 00143 !!** METHOD 00144 !! ------ 00145 ! 00146 !! EXTERNAL 00147 !! -------- 00148 !! 00149 !! IMPLICIT ARGUMENTS 00150 !! ------------------ 00151 !! 00152 !! REFERENCE 00153 !! --------- 00154 !! 00155 !! 00156 !! AUTHOR 00157 !! ------ 00158 !! C. Lebeaupin *Meteo-France* 00159 !! 00160 !! MODIFICATIONS 00161 !! ------------- 00162 !! Original 27/02/2005 00163 !! 00164 !------------------------------------------------------------------------------- 00165 !* 0. DECLARATIONS 00166 ! ------------ 00167 !* 0.1 declaration of arguments and results 00168 ! 00169 REAL :: T,S ! oceanic temperature and salinity 00170 REAL :: R ! density 00171 ! 00172 !* 0.2 local variables 00173 ! 00174 REAL :: DET,DES 00175 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00176 !------------------------------------------------------------------------------- 00177 !* 1. COMPUTE R 00178 ! --------- 00179 ! 00180 IF (LHOOK) CALL DR_HOOK('DRHOCOMPUTE',0,ZHOOK_HANDLE) 00181 DET = T-13.5 00182 DES = S-32.6 00183 R = DET*(-0.19494-0.49038E-2*DET)+0.77475*DES 00184 IF (LHOOK) CALL DR_HOOK('DRHOCOMPUTE',1,ZHOOK_HANDLE) 00185 ! 00186 END FUNCTION DRHOCOMPUTE 00187 ! 00188 END SUBROUTINE DIAG_INLINE_OCEAN_n