SURFEX v7.3
General documentation of Surfex
|
00001 !###################### 00002 MODULE MODD_DIAG_TRIP_n 00003 !###################### 00004 ! 00005 !!**** *MODD_DIAG_TRIP - declaration of diagnostics for TRIP scheme 00006 !! 00007 !! PURPOSE 00008 !! ------- 00009 ! 00010 !! 00011 !!** IMPLICIT ARGUMENTS 00012 !! ------------------ 00013 !! None 00014 !! 00015 !! REFERENCE 00016 !! --------- 00017 !! 00018 !! AUTHOR 00019 !! ------ 00020 !! B. Decharme *Meteo France* 00021 !! 00022 !! MODIFICATIONS 00023 !! ------------- 00024 !! Original 21/05/08 00025 ! 00026 !* 0. DECLARATIONS 00027 ! ------------ 00028 ! 00029 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00030 USE PARKIND1 ,ONLY : JPRB 00031 ! 00032 IMPLICIT NONE 00033 00034 TYPE DIAG_TRIP_t 00035 !------------------------------------------------------------------------------- 00036 ! 00037 REAL, POINTER, DIMENSION(:,:) :: XDIAG_SURF_STO ! River storage [kg m-2] 00038 REAL, POINTER, DIMENSION(:,:) :: XDIAG_GROUND_STO ! Groundwater storage [kg m-2] 00039 REAL, POINTER, DIMENSION(:,:) :: XDIAG_FLOOD_STO ! Floodplains storage [kg m-2] 00040 REAL, POINTER, DIMENSION(:,:) :: XDIAG_QDIS ! Discharge [m3 s-1] 00041 REAL, POINTER, DIMENSION(:,:) :: XDIAG_QGF ! Groundwater flow to river [m3 s-1] 00042 REAL, POINTER, DIMENSION(:,:) :: XDIAG_VEL ! Stream flow velocity [m s-1 ] 00043 REAL, POINTER, DIMENSION(:,:) :: XDIAG_HS ! Stream river depth [m ] 00044 REAL, POINTER, DIMENSION(:,:) :: XDIAG_FF ! TRIP flooded fraction [-] 00045 REAL, POINTER, DIMENSION(:,:) :: XDIAG_HF ! Flood depth [m ] 00046 ! 00047 REAL, POINTER, DIMENSION(:,:) :: XDIAG_QFR ! Flood flow to river [m3 s-1] 00048 REAL, POINTER, DIMENSION(:,:) :: XDIAG_QRF ! River flow to floodplain [m3 s-1] 00049 REAL, POINTER, DIMENSION(:,:) :: XDIAG_QIN ! Inflow to the river [m3 s-1] 00050 REAL, POINTER, DIMENSION(:,:) :: XDIAG_VFIN ! River flow to flood velocity [m s-1] 00051 REAL, POINTER, DIMENSION(:,:) :: XDIAG_VFOUT ! Flood flow to river velocity [m s-1] 00052 REAL, POINTER, DIMENSION(:,:) :: XDIAG_WF ! Flood width during dt [m] 00053 REAL, POINTER, DIMENSION(:,:) :: XDIAG_LF ! Flood lenght during dt [m] 00054 REAL, POINTER, DIMENSION(:,:) :: XDIAG_HSF ! River-Flood depth comparison [m] 00055 REAL, POINTER, DIMENSION(:,:) :: XDIAG_SOURCE ! Floodplains source (Pf-Ef-If)[kg m-2] 00056 ! 00057 !------------------------------------------------------------------------------- 00058 ! 00059 END TYPE DIAG_TRIP_t 00060 ! 00061 TYPE(DIAG_TRIP_t), ALLOCATABLE, TARGET, SAVE :: DIAG_TRIP_MODEL(:) 00062 ! 00063 REAL, POINTER, DIMENSION(:,:) :: XDIAG_SURF_STO=>NULL() 00064 !$OMP THREADPRIVATE(XDIAG_SURF_STO) 00065 REAL, POINTER, DIMENSION(:,:) :: XDIAG_GROUND_STO=>NULL() 00066 !$OMP THREADPRIVATE(XDIAG_GROUND_STO) 00067 REAL, POINTER, DIMENSION(:,:) :: XDIAG_FLOOD_STO=>NULL() 00068 !$OMP THREADPRIVATE(XDIAG_FLOOD_STO) 00069 REAL, POINTER, DIMENSION(:,:) :: XDIAG_QDIS=>NULL() 00070 !$OMP THREADPRIVATE(XDIAG_QDIS) 00071 REAL, POINTER, DIMENSION(:,:) :: XDIAG_QGF=>NULL() 00072 !$OMP THREADPRIVATE(XDIAG_QGF) 00073 REAL, POINTER, DIMENSION(:,:) :: XDIAG_VEL=>NULL() 00074 !$OMP THREADPRIVATE(XDIAG_VEL) 00075 REAL, POINTER, DIMENSION(:,:) :: XDIAG_HS=>NULL() 00076 !$OMP THREADPRIVATE(XDIAG_HS) 00077 REAL, POINTER, DIMENSION(:,:) :: XDIAG_FF=>NULL() 00078 !$OMP THREADPRIVATE(XDIAG_FF) 00079 REAL, POINTER, DIMENSION(:,:) :: XDIAG_HF=>NULL() 00080 !$OMP THREADPRIVATE(XDIAG_HF) 00081 REAL, POINTER, DIMENSION(:,:) :: XDIAG_QFR=>NULL() 00082 !$OMP THREADPRIVATE(XDIAG_QFR) 00083 REAL, POINTER, DIMENSION(:,:) :: XDIAG_QRF=>NULL() 00084 !$OMP THREADPRIVATE(XDIAG_QRF) 00085 ! 00086 REAL, POINTER, DIMENSION(:,:) :: XDIAG_QIN=>NULL() 00087 !$OMP THREADPRIVATE(XDIAG_QIN) 00088 REAL, POINTER, DIMENSION(:,:) :: XDIAG_VFIN=>NULL() 00089 !$OMP THREADPRIVATE(XDIAG_VFIN) 00090 REAL, POINTER, DIMENSION(:,:) :: XDIAG_VFOUT=>NULL() 00091 !$OMP THREADPRIVATE(XDIAG_VFOUT) 00092 REAL, POINTER, DIMENSION(:,:) :: XDIAG_WF=>NULL() 00093 !$OMP THREADPRIVATE(XDIAG_WF) 00094 REAL, POINTER, DIMENSION(:,:) :: XDIAG_LF=>NULL() 00095 !$OMP THREADPRIVATE(XDIAG_LF) 00096 REAL, POINTER, DIMENSION(:,:) :: XDIAG_HSF=>NULL() 00097 !$OMP THREADPRIVATE(XDIAG_HSF) 00098 REAL, POINTER, DIMENSION(:,:) :: XDIAG_SOURCE=>NULL() 00099 !$OMP THREADPRIVATE(XDIAG_SOURCE) 00100 ! 00101 CONTAINS 00102 ! 00103 SUBROUTINE DIAG_TRIP_GOTO_MODEL(KFROM, KTO, LKFROM) 00104 LOGICAL, INTENT(IN) :: LKFROM 00105 INTEGER, INTENT(IN) :: KFROM, KTO 00106 ! 00107 ! Save current state for allocated arrays 00108 IF (LKFROM) THEN 00109 DIAG_TRIP_MODEL(KFROM)%XDIAG_SURF_STO=>XDIAG_SURF_STO 00110 DIAG_TRIP_MODEL(KFROM)%XDIAG_GROUND_STO=>XDIAG_GROUND_STO 00111 DIAG_TRIP_MODEL(KFROM)%XDIAG_FLOOD_STO=>XDIAG_FLOOD_STO 00112 DIAG_TRIP_MODEL(KFROM)%XDIAG_QDIS=>XDIAG_QDIS 00113 DIAG_TRIP_MODEL(KFROM)%XDIAG_QGF=>XDIAG_QGF 00114 DIAG_TRIP_MODEL(KFROM)%XDIAG_VEL=>XDIAG_VEL 00115 DIAG_TRIP_MODEL(KFROM)%XDIAG_HS=>XDIAG_HS 00116 DIAG_TRIP_MODEL(KFROM)%XDIAG_FF=>XDIAG_FF 00117 DIAG_TRIP_MODEL(KFROM)%XDIAG_HF=>XDIAG_HF 00118 ! 00119 DIAG_TRIP_MODEL(KFROM)%XDIAG_QFR=>XDIAG_QFR 00120 DIAG_TRIP_MODEL(KFROM)%XDIAG_QRF=>XDIAG_QRF 00121 DIAG_TRIP_MODEL(KFROM)%XDIAG_QIN=>XDIAG_QIN 00122 DIAG_TRIP_MODEL(KFROM)%XDIAG_VFIN=>XDIAG_VFIN 00123 DIAG_TRIP_MODEL(KFROM)%XDIAG_VFOUT=>XDIAG_VFOUT 00124 DIAG_TRIP_MODEL(KFROM)%XDIAG_WF=>XDIAG_WF 00125 DIAG_TRIP_MODEL(KFROM)%XDIAG_LF=>XDIAG_LF 00126 DIAG_TRIP_MODEL(KFROM)%XDIAG_HSF=>XDIAG_HSF 00127 DIAG_TRIP_MODEL(KFROM)%XDIAG_SOURCE=>XDIAG_SOURCE 00128 ENDIF 00129 ! 00130 ! Current model is set to model KTO 00131 XDIAG_SURF_STO=>DIAG_TRIP_MODEL(KTO)%XDIAG_SURF_STO 00132 XDIAG_GROUND_STO=>DIAG_TRIP_MODEL(KTO)%XDIAG_GROUND_STO 00133 XDIAG_FLOOD_STO=>DIAG_TRIP_MODEL(KTO)%XDIAG_FLOOD_STO 00134 XDIAG_QDIS=>DIAG_TRIP_MODEL(KTO)%XDIAG_QDIS 00135 XDIAG_QGF=>DIAG_TRIP_MODEL(KTO)%XDIAG_QGF 00136 XDIAG_VEL=>DIAG_TRIP_MODEL(KTO)%XDIAG_VEL 00137 XDIAG_HS=>DIAG_TRIP_MODEL(KTO)%XDIAG_HS 00138 XDIAG_FF=>DIAG_TRIP_MODEL(KTO)%XDIAG_FF 00139 XDIAG_HF=>DIAG_TRIP_MODEL(KTO)%XDIAG_HF 00140 ! 00141 XDIAG_QFR=>DIAG_TRIP_MODEL(KTO)%XDIAG_QFR 00142 XDIAG_QRF=>DIAG_TRIP_MODEL(KTO)%XDIAG_QRF 00143 XDIAG_QIN=>DIAG_TRIP_MODEL(KTO)%XDIAG_QIN 00144 XDIAG_VFIN=>DIAG_TRIP_MODEL(KTO)%XDIAG_VFIN 00145 XDIAG_VFOUT=>DIAG_TRIP_MODEL(KTO)%XDIAG_VFOUT 00146 XDIAG_WF=>DIAG_TRIP_MODEL(KTO)%XDIAG_WF 00147 XDIAG_LF=>DIAG_TRIP_MODEL(KTO)%XDIAG_LF 00148 XDIAG_HSF=>DIAG_TRIP_MODEL(KTO)%XDIAG_HSF 00149 XDIAG_SOURCE=>DIAG_TRIP_MODEL(KTO)%XDIAG_SOURCE 00150 ! 00151 END SUBROUTINE DIAG_TRIP_GOTO_MODEL 00152 00153 SUBROUTINE DIAG_TRIP_ALLOC(KMODEL) 00154 INTEGER, INTENT(IN) :: KMODEL 00155 INTEGER :: J 00156 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00157 IF (LHOOK) CALL DR_HOOK("MODD_DIAG_TRIP_N:DIAG_TRIP_ALLOC",0,ZHOOK_HANDLE) 00158 ALLOCATE(DIAG_TRIP_MODEL(KMODEL)) 00159 DO J=1,KMODEL 00160 NULLIFY(DIAG_TRIP_MODEL(J)%XDIAG_SURF_STO) 00161 NULLIFY(DIAG_TRIP_MODEL(J)%XDIAG_GROUND_STO) 00162 NULLIFY(DIAG_TRIP_MODEL(J)%XDIAG_FLOOD_STO) 00163 NULLIFY(DIAG_TRIP_MODEL(J)%XDIAG_QDIS) 00164 NULLIFY(DIAG_TRIP_MODEL(J)%XDIAG_QGF) 00165 NULLIFY(DIAG_TRIP_MODEL(J)%XDIAG_VEL) 00166 NULLIFY(DIAG_TRIP_MODEL(J)%XDIAG_HS) 00167 NULLIFY(DIAG_TRIP_MODEL(J)%XDIAG_FF) 00168 NULLIFY(DIAG_TRIP_MODEL(J)%XDIAG_HF) 00169 NULLIFY(DIAG_TRIP_MODEL(J)%XDIAG_QFR) 00170 NULLIFY(DIAG_TRIP_MODEL(J)%XDIAG_QRF) 00171 NULLIFY(DIAG_TRIP_MODEL(J)%XDIAG_QIN) 00172 NULLIFY(DIAG_TRIP_MODEL(J)%XDIAG_VFIN) 00173 NULLIFY(DIAG_TRIP_MODEL(J)%XDIAG_VFOUT) 00174 NULLIFY(DIAG_TRIP_MODEL(J)%XDIAG_WF) 00175 NULLIFY(DIAG_TRIP_MODEL(J)%XDIAG_LF) 00176 NULLIFY(DIAG_TRIP_MODEL(J)%XDIAG_HSF) 00177 NULLIFY(DIAG_TRIP_MODEL(J)%XDIAG_SOURCE) 00178 ENDDO 00179 IF (LHOOK) CALL DR_HOOK("MODD_DIAG_TRIP_N:DIAG_TRIP_ALLOC",1,ZHOOK_HANDLE) 00180 END SUBROUTINE DIAG_TRIP_ALLOC 00181 00182 SUBROUTINE DIAG_TRIP_DEALLO 00183 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00184 IF (LHOOK) CALL DR_HOOK("MODD_DIAG_TRIP_N:DIAG_TRIP_DEALLO",0,ZHOOK_HANDLE) 00185 IF (ALLOCATED(DIAG_TRIP_MODEL)) DEALLOCATE(DIAG_TRIP_MODEL) 00186 IF (LHOOK) CALL DR_HOOK("MODD_DIAG_TRIP_N:DIAG_TRIP_DEALLO",1,ZHOOK_HANDLE) 00187 END SUBROUTINE DIAG_TRIP_DEALLO 00188 ! 00189 END MODULE MODD_DIAG_TRIP_n