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