SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/diag_inline_oceann.F90
Go to the documentation of this file.
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