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