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