SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/modd_ocean_gridn.F90
Go to the documentation of this file.
00001 !     ##################
00002       MODULE MODD_OCEAN_GRID_n
00003 !     ##################
00004 !
00005 !!****  *MODD_OCEAN_GRID_n - declaration of grid for oceanic model
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       01/2008
00025 !
00026 !*       0.   DECLARATIONS
00027 !             ------------
00028 !
00029 !
00030 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00031 USE PARKIND1  ,ONLY : JPRB
00032 !
00033 IMPLICIT NONE
00034 !
00035 INTEGER, PARAMETER                :: NOCKMIN=0  !first ocean level indice
00036 INTEGER, PARAMETER                :: NOCKMAX=40 ! last ocean level indice
00037 !
00038 !------------------------------------------------------------------------------
00039 !
00040 TYPE OCEAN_GRID_t
00041 !-------------------------------------------------------------------------------
00042 !
00043 ! Grid definition
00044 !
00045   REAL,POINTER,     DIMENSION(:)  :: XK1,XK2,XK3,XK4 !oceanic lengths between levels
00046   REAL,POINTER,     DIMENSION(:)  :: XZHOC           !oceanic levels depth
00047   REAL,POINTER,     DIMENSION(:)  :: XZ2,XDZ1,XDZ2   !oceanic levels and inter-levels
00048   REAL,POINTER,     DIMENSION(:)  :: XRAY            !solar penetration coef. 
00049 !
00050 !-------------------------------------------------------------------------------
00051 !
00052 
00053 END TYPE OCEAN_GRID_t
00054 
00055 TYPE(OCEAN_GRID_t), ALLOCATABLE, TARGET, SAVE :: OCEAN_GRID_MODEL(:)
00056 
00057 
00058 REAL, POINTER, DIMENSION(:) :: XK1=>NULL()
00059 !$OMP THREADPRIVATE(XK1)
00060 REAL, POINTER, DIMENSION(:) :: XK2=>NULL()
00061 !$OMP THREADPRIVATE(XK2)
00062 REAL, POINTER, DIMENSION(:) :: XK3=>NULL()
00063 !$OMP THREADPRIVATE(XK3)
00064 REAL, POINTER, DIMENSION(:) :: XK4=>NULL()
00065 !$OMP THREADPRIVATE(XK4)
00066 REAL, POINTER, DIMENSION(:) :: XZHOC=>NULL()
00067 !$OMP THREADPRIVATE(XZHOC)
00068 REAL, POINTER, DIMENSION(:) :: XZ2=>NULL()
00069 !$OMP THREADPRIVATE(XZ2)
00070 REAL, POINTER, DIMENSION(:) :: XDZ1=>NULL()
00071 !$OMP THREADPRIVATE(XDZ1)
00072 REAL, POINTER, DIMENSION(:) :: XDZ2=>NULL()
00073 !$OMP THREADPRIVATE(XDZ2)
00074 REAL, POINTER, DIMENSION(:) :: XRAY=>NULL()
00075 !$OMP THREADPRIVATE(XRAY)
00076 
00077 CONTAINS
00078 
00079 SUBROUTINE OCEAN_GRID_GOTO_MODEL(KFROM, KTO, LKFROM)
00080 LOGICAL, INTENT(IN) :: LKFROM
00081 INTEGER, INTENT(IN) :: KFROM, KTO
00082 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00083 !
00084 ! Save current state for allocated arrays
00085 IF (LKFROM) THEN
00086 OCEAN_GRID_MODEL(KFROM)%XK1=>XK1
00087 OCEAN_GRID_MODEL(KFROM)%XK2=>XK2
00088 OCEAN_GRID_MODEL(KFROM)%XK3=>XK3
00089 OCEAN_GRID_MODEL(KFROM)%XK4=>XK4
00090 OCEAN_GRID_MODEL(KFROM)%XZHOC=>XZHOC
00091 OCEAN_GRID_MODEL(KFROM)%XZ2=>XZ2
00092 OCEAN_GRID_MODEL(KFROM)%XDZ1=>XDZ1
00093 OCEAN_GRID_MODEL(KFROM)%XDZ2=>XDZ2
00094 OCEAN_GRID_MODEL(KFROM)%XRAY=>XRAY
00095 ENDIF
00096 !
00097 ! Current model is set to model KTO
00098 IF (LHOOK) CALL DR_HOOK('MODD_OCEAN_GRID_N:OCEAN_GRID_GOTO_MODEL',0,ZHOOK_HANDLE)
00099 XK1=>OCEAN_GRID_MODEL(KTO)%XK1
00100 XK2=>OCEAN_GRID_MODEL(KTO)%XK2
00101 XK3=>OCEAN_GRID_MODEL(KTO)%XK3
00102 XK4=>OCEAN_GRID_MODEL(KTO)%XK4
00103 XZHOC=>OCEAN_GRID_MODEL(KTO)%XZHOC
00104 XZ2=>OCEAN_GRID_MODEL(KTO)%XZ2
00105 XDZ1=>OCEAN_GRID_MODEL(KTO)%XDZ1
00106 XDZ2=>OCEAN_GRID_MODEL(KTO)%XDZ2
00107 XRAY=>OCEAN_GRID_MODEL(KTO)%XRAY
00108 IF (LHOOK) CALL DR_HOOK('MODD_OCEAN_GRID_N:OCEAN_GRID_GOTO_MODEL',1,ZHOOK_HANDLE)
00109 END SUBROUTINE OCEAN_GRID_GOTO_MODEL
00110 
00111 SUBROUTINE OCEAN_GRID_ALLOC(KMODEL)
00112 INTEGER, INTENT(IN) :: KMODEL
00113 INTEGER :: J
00114 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00115 IF (LHOOK) CALL DR_HOOK("MODD_OCEAN_GRID_N:OCEAN_GRID_ALLOC",0,ZHOOK_HANDLE)
00116 ALLOCATE(OCEAN_GRID_MODEL(KMODEL))
00117 DO J=1,KMODEL
00118   NULLIFY(OCEAN_GRID_MODEL(J)%XK1)
00119   NULLIFY(OCEAN_GRID_MODEL(J)%XK2)
00120   NULLIFY(OCEAN_GRID_MODEL(J)%XK3)
00121   NULLIFY(OCEAN_GRID_MODEL(J)%XK4)
00122   NULLIFY(OCEAN_GRID_MODEL(J)%XZHOC)
00123   NULLIFY(OCEAN_GRID_MODEL(J)%XZ2)
00124   NULLIFY(OCEAN_GRID_MODEL(J)%XDZ1)
00125   NULLIFY(OCEAN_GRID_MODEL(J)%XDZ2)
00126   NULLIFY(OCEAN_GRID_MODEL(J)%XRAY)
00127 ENDDO
00128 IF (LHOOK) CALL DR_HOOK("MODD_OCEAN_GRID_N:OCEAN_GRID_ALLOC",1,ZHOOK_HANDLE)
00129 END SUBROUTINE OCEAN_GRID_ALLOC
00130 
00131 SUBROUTINE OCEAN_GRID_DEALLO
00132 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00133 IF (LHOOK) CALL DR_HOOK("MODD_OCEAN_GRID_N:OCEAN_GRID_DEALLO",0,ZHOOK_HANDLE)
00134 IF (ALLOCATED(OCEAN_GRID_MODEL)) DEALLOCATE(OCEAN_GRID_MODEL)
00135 IF (LHOOK) CALL DR_HOOK("MODD_OCEAN_GRID_N:OCEAN_GRID_DEALLO",1,ZHOOK_HANDLE)
00136 END SUBROUTINE OCEAN_GRID_DEALLO
00137 
00138 END MODULE MODD_OCEAN_GRID_n