SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/modd_diag_oceann.F90
Go to the documentation of this file.
00001 !     ######################
00002       MODULE MODD_DIAG_OCEAN_n
00003 !     ######################
00004 !
00005 !!****  *MODD_DIAG_OCEAN - declaration of diagnostics for ocean
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !
00010 !!
00011 !!**  IMPLICIT ARGUMENTS
00012 !!    ------------------
00013 !!      None 
00014 !!
00015 !!    REFERENCE
00016 !!    ---------
00017 !!
00018 !!    AUTHOR
00019 !!    ------
00020 !!      C. Lebeaupin Brossier   *Meteo France*
00021 !!
00022 !!    MODIFICATIONS
00023 !!    -------------
00024 !!      Original       02/2008
00025 !
00026 !*       0.   DECLARATIONS
00027 !             ------------
00028 !
00029 !
00030 !
00031 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00032 USE PARKIND1  ,ONLY : JPRB
00033 !
00034 IMPLICIT NONE
00035 
00036 TYPE DIAG_OCEAN_t
00037 !------------------------------------------------------------------------------
00038 !
00039   LOGICAL :: LDIAG_OCEAN                    ! flag for ocean variables
00040 !
00041 !* averaged variables
00042 !
00043   REAL, POINTER, DIMENSION(:)   :: XTOCMOY  ! mean temperature in CMO (°C)
00044   REAL, POINTER, DIMENSION(:)   :: XSOCMOY  ! mean salinity in CMO (psu)
00045   REAL, POINTER, DIMENSION(:)   :: XUOCMOY  ! mean zonal current in CMO (m/s)
00046   REAL, POINTER, DIMENSION(:)   :: XVOCMOY  ! mean meridian current in CMO (m/s)
00047   REAL, POINTER, DIMENSION(:)   :: XDOCMOY  ! mean density in CMO (kg/m3)
00048 !------------------------------------------------------------------------------
00049 !
00050 
00051 END TYPE DIAG_OCEAN_t
00052 
00053 TYPE(DIAG_OCEAN_t), ALLOCATABLE, TARGET, SAVE :: DIAG_OCEAN_MODEL(:)
00054 
00055 LOGICAL, POINTER :: LDIAG_OCEAN=>NULL()
00056 !$OMP THREADPRIVATE(LDIAG_OCEAN)
00057 REAL, POINTER, DIMENSION(:)   :: XTOCMOY=>NULL()
00058 !$OMP THREADPRIVATE(XTOCMOY)
00059 REAL, POINTER, DIMENSION(:)   :: XSOCMOY=>NULL()
00060 !$OMP THREADPRIVATE(XSOCMOY)
00061 REAL, POINTER, DIMENSION(:)   :: XUOCMOY=>NULL()
00062 !$OMP THREADPRIVATE(XUOCMOY)
00063 REAL, POINTER, DIMENSION(:)   :: XVOCMOY=>NULL()
00064 !$OMP THREADPRIVATE(XVOCMOY)
00065 REAL, POINTER, DIMENSION(:)   :: XDOCMOY=>NULL()
00066 !$OMP THREADPRIVATE(XDOCMOY)
00067 
00068 
00069 CONTAINS
00070 
00071 SUBROUTINE DIAG_OCEAN_GOTO_MODEL(KFROM, KTO, LKFROM)
00072 LOGICAL, INTENT(IN) :: LKFROM
00073 INTEGER, INTENT(IN) :: KFROM, KTO
00074 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00075 !
00076 ! Save current state for allocated arrays
00077 IF (LKFROM) THEN
00078 DIAG_OCEAN_MODEL(KFROM)%XTOCMOY=>XTOCMOY
00079 DIAG_OCEAN_MODEL(KFROM)%XSOCMOY=>XSOCMOY
00080 DIAG_OCEAN_MODEL(KFROM)%XUOCMOY=>XUOCMOY
00081 DIAG_OCEAN_MODEL(KFROM)%XVOCMOY=>XVOCMOY
00082 DIAG_OCEAN_MODEL(KFROM)%XDOCMOY=>XDOCMOY
00083 ENDIF
00084 
00085 !
00086 ! Current model is set to model KTO
00087 IF (LHOOK) CALL DR_HOOK('MODD_DIAG_OCEAN_N:DIAG_OCEAN_GOTO_MODEL',0,ZHOOK_HANDLE)
00088 LDIAG_OCEAN=>DIAG_OCEAN_MODEL(KTO)%LDIAG_OCEAN
00089 XTOCMOY=>DIAG_OCEAN_MODEL(KTO)%XTOCMOY
00090 XSOCMOY=>DIAG_OCEAN_MODEL(KTO)%XSOCMOY
00091 XUOCMOY=>DIAG_OCEAN_MODEL(KTO)%XUOCMOY
00092 XVOCMOY=>DIAG_OCEAN_MODEL(KTO)%XVOCMOY
00093 XDOCMOY=>DIAG_OCEAN_MODEL(KTO)%XDOCMOY
00094 IF (LHOOK) CALL DR_HOOK('MODD_DIAG_OCEAN_N:DIAG_OCEAN_GOTO_MODEL',1,ZHOOK_HANDLE)
00095 
00096 END SUBROUTINE DIAG_OCEAN_GOTO_MODEL
00097 
00098 SUBROUTINE DIAG_OCEAN_ALLOC(KMODEL)
00099 INTEGER, INTENT(IN) :: KMODEL
00100 INTEGER :: J
00101 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00102 IF (LHOOK) CALL DR_HOOK("MODD_DIAG_OCEAN_N:DIAG_OCEAN_ALLOC",0,ZHOOK_HANDLE)
00103 ALLOCATE(DIAG_OCEAN_MODEL(KMODEL))
00104 DO J=1,KMODEL
00105   NULLIFY(DIAG_OCEAN_MODEL(J)%XTOCMOY)
00106   NULLIFY(DIAG_OCEAN_MODEL(J)%XSOCMOY)
00107   NULLIFY(DIAG_OCEAN_MODEL(J)%XUOCMOY)
00108   NULLIFY(DIAG_OCEAN_MODEL(J)%XVOCMOY)
00109   NULLIFY(DIAG_OCEAN_MODEL(J)%XDOCMOY)
00110 ENDDO
00111 DIAG_OCEAN_MODEL(:)%LDIAG_OCEAN=.FALSE.
00112 IF (LHOOK) CALL DR_HOOK("MODD_DIAG_OCEAN_N:DIAG_OCEAN_ALLOC",1,ZHOOK_HANDLE)
00113 END SUBROUTINE DIAG_OCEAN_ALLOC
00114 
00115 SUBROUTINE DIAG_OCEAN_DEALLO
00116 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00117 IF (LHOOK) CALL DR_HOOK("MODD_DIAG_OCEAN_N:DIAG_OCEAN_DEALLO",0,ZHOOK_HANDLE)
00118 IF (ALLOCATED(DIAG_OCEAN_MODEL)) DEALLOCATE(DIAG_OCEAN_MODEL)
00119 IF (LHOOK) CALL DR_HOOK("MODD_DIAG_OCEAN_N:DIAG_OCEAN_DEALLO",1,ZHOOK_HANDLE)
00120 END SUBROUTINE DIAG_OCEAN_DEALLO
00121 
00122 END MODULE MODD_DIAG_OCEAN_n