SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/modd_diag_misc_flaken.F90
Go to the documentation of this file.
00001 !     ############################
00002       MODULE MODD_DIAG_MISC_FLAKE_n
00003 !     ############################
00004 !
00005 !!****  *MODD_DIAG_MISC_FLAKE - declaration of diagnostic variables for FLAKE scheme
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !
00010 !!
00011 !!**  IMPLICIT ARGUMENTS
00012 !!    ------------------
00013 !!      None 
00014 !!
00015 !!    REFERENCE
00016 !!    ---------
00017 !!
00018 !!    AUTHOR
00019 !!    ------
00020 !!      P. Le Moigne   *Meteo France*
00021 !!
00022 !!    MODIFICATIONS
00023 !!    -------------
00024 !!      Original       07/10/04
00025 !
00026 !
00027 !*       0.   DECLARATIONS
00028 !             ------------
00029 !
00030 !
00031 !
00032 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00033 USE PARKIND1  ,ONLY : JPRB
00034 !
00035 IMPLICIT NONE
00036 
00037 TYPE DIAG_MISC_FLAKE_t
00038 !------------------------------------------------------------------------------
00039 !
00040   LOGICAL :: LWATER_PROFILE   ! flag for miscellaneous terms of FLake scheme
00041 !
00042 !* miscellaneous variables
00043 !
00044   REAL, POINTER, DIMENSION(:) :: XZWAT_PROFILE ! depth of output levels (m) in namelist
00045   REAL, POINTER, DIMENSION(:)   :: XZW_PROFILE ! depth of output levels (m)
00046   REAL, POINTER, DIMENSION(:,:) :: XTW_PROFILE ! Water temperature in output levels (K)
00047 !
00048 !
00049 !------------------------------------------------------------------------------
00050 !
00051 
00052 END TYPE DIAG_MISC_FLAKE_t
00053 
00054 TYPE(DIAG_MISC_FLAKE_t), ALLOCATABLE, TARGET, SAVE :: DIAG_MISC_FLAKE_MODEL(:)
00055 
00056 LOGICAL, POINTER :: LWATER_PROFILE=>NULL()
00057 !$OMP THREADPRIVATE(LWATER_PROFILE)
00058 REAL, POINTER, DIMENSION(:)   :: XZWAT_PROFILE=>NULL()
00059 !$OMP THREADPRIVATE(XZWAT_PROFILE)
00060 REAL, POINTER, DIMENSION(:)   :: XZW_PROFILE=>NULL()
00061 !$OMP THREADPRIVATE(XZW_PROFILE)
00062 REAL, POINTER, DIMENSION(:,:)   :: XTW_PROFILE=>NULL()
00063 !$OMP THREADPRIVATE(XTW_PROFILE)
00064 
00065 CONTAINS
00066 
00067 SUBROUTINE DIAG_MISC_FLAKE_GOTO_MODEL(KFROM, KTO, LKFROM)
00068 LOGICAL, INTENT(IN) :: LKFROM
00069 INTEGER, INTENT(IN) :: KFROM, KTO
00070 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00071 !
00072 ! Save current state for allocated arrays
00073 IF (LKFROM) THEN
00074 DIAG_MISC_FLAKE_MODEL(KFROM)%XZWAT_PROFILE=>XZWAT_PROFILE
00075 DIAG_MISC_FLAKE_MODEL(KFROM)%XZW_PROFILE=>XZW_PROFILE
00076 DIAG_MISC_FLAKE_MODEL(KFROM)%XTW_PROFILE=>XTW_PROFILE
00077 ENDIF
00078 !
00079 ! Current model is set to model KTO
00080 IF (LHOOK) CALL DR_HOOK('MODD_DIAG_MISC_FLAKE_N:DIAG_MISC_FLAKE_GOTO_MODEL',0,ZHOOK_HANDLE)
00081 LWATER_PROFILE=>DIAG_MISC_FLAKE_MODEL(KTO)%LWATER_PROFILE
00082 XZWAT_PROFILE=>DIAG_MISC_FLAKE_MODEL(KTO)%XZWAT_PROFILE
00083 XZW_PROFILE=>DIAG_MISC_FLAKE_MODEL(KTO)%XZW_PROFILE
00084 XTW_PROFILE=>DIAG_MISC_FLAKE_MODEL(KTO)%XTW_PROFILE
00085 IF (LHOOK) CALL DR_HOOK('MODD_DIAG_MISC_FLAKE_N:DIAG_MISC_FLAKE_GOTO_MODEL',1,ZHOOK_HANDLE)
00086 
00087 END SUBROUTINE DIAG_MISC_FLAKE_GOTO_MODEL
00088 
00089 SUBROUTINE DIAG_MISC_FLAKE_ALLOC(KMODEL)
00090 INTEGER, INTENT(IN) :: KMODEL
00091 INTEGER :: J
00092 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00093 IF (LHOOK) CALL DR_HOOK("MODD_DIAG_MISC_FLAKE_N:DIAG_MISC_FLAKE_ALLOC",0,ZHOOK_HANDLE)
00094 ALLOCATE(DIAG_MISC_FLAKE_MODEL(KMODEL))
00095 DO J=1,KMODEL
00096   NULLIFY(DIAG_MISC_FLAKE_MODEL(J)%XZWAT_PROFILE)
00097   NULLIFY(DIAG_MISC_FLAKE_MODEL(J)%XZW_PROFILE)
00098   NULLIFY(DIAG_MISC_FLAKE_MODEL(J)%XTW_PROFILE)
00099 ENDDO
00100 DIAG_MISC_FLAKE_MODEL(:)%LWATER_PROFILE=.FALSE.
00101 IF (LHOOK) CALL DR_HOOK("MODD_DIAG_MISC_FLAKE_N:DIAG_MISC_FLAKE_ALLOC",1,ZHOOK_HANDLE)
00102 END SUBROUTINE DIAG_MISC_FLAKE_ALLOC
00103 
00104 SUBROUTINE DIAG_MISC_FLAKE_DEALLO
00105 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00106 IF (LHOOK) CALL DR_HOOK("MODD_DIAG_MISC_FLAKE_N:DIAG_MISC_FLAKE_DEALLO",0,ZHOOK_HANDLE)
00107 IF (ALLOCATED(DIAG_MISC_FLAKE_MODEL)) DEALLOCATE(DIAG_MISC_FLAKE_MODEL)
00108 IF (LHOOK) CALL DR_HOOK("MODD_DIAG_MISC_FLAKE_N:DIAG_MISC_FLAKE_DEALLO",1,ZHOOK_HANDLE)
00109 END SUBROUTINE DIAG_MISC_FLAKE_DEALLO
00110 
00111 END MODULE MODD_DIAG_MISC_FLAKE_n