SURFEX v7.3
General documentation of Surfex
|
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