SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/modd_ocean_reln.F90
Go to the documentation of this file.
00001 !     ##################
00002       MODULE MODD_OCEAN_REL_n
00003 !     ##################
00004 !
00005 !     Author : P. Peyrille
00006 !!    Date: 01/2012
00007 !! 
00008 !!  declaration of relaxation field, flag for ocean model
00009 !
00010 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00011 USE PARKIND1  ,ONLY : JPRB
00012 !
00013 IMPLICIT NONE
00014 !
00015 TYPE OCEAN_REL_t
00016 !
00017  REAL                :: XTAU_REL   ! Time of relaxation  (s)
00018 !
00019  REAL                :: XQCORR     ! correction coefficient  for surface fluxes  (BArnier et al. 1998) typcial val: 100.
00020 !
00021  LOGICAL                            :: LREL_CUR   ! flag for  relxation on current
00022  LOGICAL                            :: LREL_TS    ! flag for relaxation on ocean temperature
00023  LOGICAL                            :: LFLUX_NULL ! Flag for testing zero  incoming flux at the surface 
00024 !
00025  LOGICAL                            :: LFLX_CORR  ! Flag for  flux  correction 
00026  LOGICAL                            :: LDIAPYCNAL ! Flag for diapycnal mixing activation
00027 !
00028  REAL, POINTER, DIMENSION(:,:) :: XSEAU_REL  ! ref. U current  profile (C)
00029  REAL, POINTER, DIMENSION(:,:) :: XSEAV_REL  ! ref. V current  profile (C)
00030  REAL, POINTER, DIMENSION(:,:) :: XSEAT_REL  ! ref. temperature  profile (C)
00031  REAL, POINTER, DIMENSION(:,:) :: XSEAS_REL  ! ---- salinity   ---------- (%)
00032 !
00033 END TYPE OCEAN_REL_t
00034 !
00035 TYPE(OCEAN_REL_t), ALLOCATABLE, TARGET, SAVE :: OCEAN_REL_MODEL(:)
00036 !
00037 REAL, POINTER :: XTAU_REL 
00038 !$OMP THREADPRIVATE(XTAU_REL)
00039 REAL, POINTER :: XQCORR
00040 !$OMP THREADPRIVATE(XQCORR)
00041 !
00042 LOGICAL, POINTER :: LREL_CUR
00043 !$OMP THREADPRIVATE(LREL_CUR)
00044 LOGICAL, POINTER :: LREL_TS
00045 !$OMP THREADPRIVATE(LREL_TS)
00046 LOGICAL, POINTER :: LFLUX_NULL
00047 !$OMP THREADPRIVATE(LFLUX_NULL)
00048 !
00049 LOGICAL, POINTER :: LFLX_CORR
00050 !$OMP THREADPRIVATE(LFLX_CORR)
00051 LOGICAL, POINTER :: LDIAPYCNAL
00052 !$OMP THREADPRIVATE(LDIAPYCNAL)
00053 !
00054 REAL, POINTER, DIMENSION(:,:) :: XSEAU_REL
00055 !$OMP THREADPRIVATE(XSEAU_REL)
00056 REAL, POINTER, DIMENSION(:,:) :: XSEAV_REL
00057 !$OMP THREADPRIVATE(XSEAV_REL)
00058 REAL, POINTER, DIMENSION(:,:) :: XSEAT_REL
00059 !$OMP THREADPRIVATE(XSEAT_REL)
00060 REAL, POINTER, DIMENSION(:,:) :: XSEAS_REL
00061 !$OMP THREADPRIVATE(XSEAS_REL)
00062 !
00063 CONTAINS
00064 !
00065 SUBROUTINE OCEAN_REL_GOTO_MODEL(KFROM, KTO, LKFROM)
00066 LOGICAL, INTENT(IN) :: LKFROM
00067 INTEGER, INTENT(IN) :: KFROM, KTO
00068 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00069 !
00070 IF (LHOOK) CALL DR_HOOK('MODD_OCEAN_REL_N:OCEAN_REL_GOTO_MODEL',0,ZHOOK_HANDLE)
00071 !
00072 IF (LKFROM) THEN
00073 OCEAN_REL_MODEL(KFROM)%XSEAT_REL=>XSEAT_REL
00074 OCEAN_REL_MODEL(KFROM)%XSEAS_REL=>XSEAS_REL
00075 OCEAN_REL_MODEL(KFROM)%XSEAU_REL=>XSEAU_REL
00076 OCEAN_REL_MODEL(KFROM)%XSEAV_REL=>XSEAV_REL
00077 ENDIF
00078 !
00079 XTAU_REL=>OCEAN_REL_MODEL(KTO)%XTAU_REL
00080 XQCORR=>OCEAN_REL_MODEL(KTO)%XQCORR
00081 LREL_CUR=>OCEAN_REL_MODEL(KTO)%LREL_CUR
00082 LREL_TS=>OCEAN_REL_MODEL(KTO)%LREL_TS
00083 LFLUX_NULL=>OCEAN_REL_MODEL(KTO)%LFLUX_NULL
00084 LFLX_CORR=>OCEAN_REL_MODEL(KTO)%LFLX_CORR
00085 LDIAPYCNAL=>OCEAN_REL_MODEL(KTO)%LDIAPYCNAL
00086 XSEAT_REL=>OCEAN_REL_MODEL(KTO)%XSEAT_REL
00087 XSEAS_REL=>OCEAN_REL_MODEL(KTO)%XSEAS_REL
00088 XSEAU_REL=>OCEAN_REL_MODEL(KTO)%XSEAU_REL
00089 XSEAV_REL=>OCEAN_REL_MODEL(KTO)%XSEAV_REL
00090 !
00091 IF (LHOOK) CALL DR_HOOK('MODD_OCEAN_REL_N:OCEAN_REL_GOTO_MODEL',1,ZHOOK_HANDLE)
00092 !
00093 END SUBROUTINE OCEAN_REL_GOTO_MODEL
00094 !
00095 SUBROUTINE OCEAN_REL_ALLOC(KMODEL)
00096 INTEGER, INTENT(IN) :: KMODEL
00097 INTEGER :: J
00098 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00099 IF (LHOOK) CALL DR_HOOK("MODD_OCEAN_REL_N:OCEAN_REL_ALLOC",0,ZHOOK_HANDLE)
00100 ALLOCATE(OCEAN_REL_MODEL(KMODEL))
00101 DO J=1,KMODEL
00102   NULLIFY(OCEAN_REL_MODEL(J)%XSEAT_REL)
00103   NULLIFY(OCEAN_REL_MODEL(J)%XSEAS_REL)
00104   NULLIFY(OCEAN_REL_MODEL(J)%XSEAU_REL)
00105   NULLIFY(OCEAN_REL_MODEL(J)%XSEAV_REL)
00106 ENDDO
00107 OCEAN_REL_MODEL(:)%XTAU_REL=0.
00108 OCEAN_REL_MODEL(:)%XQCORR=0.
00109 OCEAN_REL_MODEL(:)%LREL_CUR=.FALSE.
00110 OCEAN_REL_MODEL(:)%LREL_TS=.FALSE.
00111 OCEAN_REL_MODEL(:)%LFLUX_NULL=.FALSE.
00112 OCEAN_REL_MODEL(:)%LFLX_CORR=.FALSE.
00113 OCEAN_REL_MODEL(:)%LDIAPYCNAL=.FALSE.
00114 !
00115 IF (LHOOK) CALL DR_HOOK("MODD_OCEAN_REL_N:OCEAN_REL_ALLOC",1,ZHOOK_HANDLE)
00116 END SUBROUTINE OCEAN_REL_ALLOC
00117 !
00118 SUBROUTINE OCEAN_REL_DEALLO
00119 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00120 IF (LHOOK) CALL DR_HOOK("MODD_OCEAN_REL_N:OCEAN_DEALLO_REL",0,ZHOOK_HANDLE)
00121 IF (ALLOCATED(OCEAN_REL_MODEL)) DEALLOCATE(OCEAN_REL_MODEL)
00122 IF (LHOOK) CALL DR_HOOK("MODD_OCEAN_REL_N:OCEAN_REL_DEALLO",1,ZHOOK_HANDLE)
00123 END SUBROUTINE OCEAN_REL_DEALLO
00124 !
00125 END MODULE MODD_OCEAN_REL_n