SURFEX v7.3
General documentation of Surfex
|
00001 ! #################### 00002 MODULE MODD_WATFLUX_n 00003 ! #################### 00004 ! 00005 !!**** *MODD_WATFLUX_n - declaration of surface parameters for an inland water surface 00006 !! 00007 !! PURPOSE 00008 !! ------- 00009 ! Declaration of surface parameters 00010 ! 00011 !! 00012 !!** IMPLICIT ARGUMENTS 00013 !! ------------------ 00014 !! None 00015 !! 00016 !! REFERENCE 00017 !! --------- 00018 !! 00019 !! AUTHOR 00020 !! ------ 00021 !! V. Masson *Meteo France* 00022 !! 00023 !! MODIFICATIONS 00024 !! ------------- 00025 !! Original 01/2004 00026 ! 00027 !* 0. DECLARATIONS 00028 ! ------------ 00029 ! 00030 USE MODD_TYPE_DATE_SURF 00031 ! 00032 ! 00033 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00034 USE PARKIND1 ,ONLY : JPRB 00035 ! 00036 IMPLICIT NONE 00037 00038 TYPE WATFLUX_t 00039 ! 00040 ! General surface: 00041 ! 00042 REAL, POINTER, DIMENSION(:) :: XZS ! orography (m) 00043 REAL, POINTER, DIMENSION(:,:) :: XCOVER ! fraction of each ecosystem (-) 00044 LOGICAL, POINTER, DIMENSION(:):: LCOVER ! GCOVER(i)=T --> ith cover field is not 0. 00045 LOGICAL :: LSBL ! T: SBL scheme within the Surface Boundary Layer 00046 ! ! F: no atmospheric layers below forcing level 00047 CHARACTER(LEN=4) :: CWAT_ALB ! type of albedo 00048 ! 00049 LOGICAL :: LINTERPOL_TS ! Quadratic interpotalation of monthly TS 00050 CHARACTER(LEN=6) :: CINTERPOL_TS ! Quadratic interpotalation of monthly TS 00051 ! 00052 ! Inland water: 00053 ! 00054 REAL, POINTER, DIMENSION(:) :: XTS ! water surface temperature (K) 00055 REAL, POINTER, DIMENSION(:) :: XTICE ! water ice temperature 00056 REAL, POINTER, DIMENSION(:) :: XZ0 ! water surface roughness length (-) 00057 REAL, POINTER, DIMENSION(:) :: XEMIS ! water surface emissivity (-) 00058 REAL, POINTER, DIMENSION(:) :: XDIR_ALB ! water surface direct albedo (-) 00059 REAL, POINTER, DIMENSION(:) :: XSCA_ALB ! water surface diffuse albedo (-) 00060 REAL, POINTER, DIMENSION(:) :: XICE_ALB ! water ice albedo (for ESM coupling) (-) 00061 ! 00062 REAL, POINTER, DIMENSION(:,:) :: XTS_MTH ! Monthly water surface temperature (K) 00063 ! 00064 REAL, POINTER, DIMENSION(:) :: XCPL_WATER_WIND ! 10m wind speed for ESM coupling 00065 REAL, POINTER, DIMENSION(:) :: XCPL_WATER_FWSU ! zonal wind stress for ESM coupling 00066 REAL, POINTER, DIMENSION(:) :: XCPL_WATER_FWSV ! meridian wind stress for ESM coupling 00067 REAL, POINTER, DIMENSION(:) :: XCPL_WATER_SNET ! Solar net heat flux 00068 REAL, POINTER, DIMENSION(:) :: XCPL_WATER_HEAT ! Non solar net heat flux 00069 REAL, POINTER, DIMENSION(:) :: XCPL_WATER_EVAP ! Evaporation for ESM coupling 00070 REAL, POINTER, DIMENSION(:) :: XCPL_WATER_RAIN ! Rainfall for ESM coupling 00071 REAL, POINTER, DIMENSION(:) :: XCPL_WATER_SNOW ! Snowfall for ESM coupling 00072 REAL, POINTER, DIMENSION(:) :: XCPL_WATER_FWSM ! wind stress module for ESM coupling 00073 ! 00074 REAL, POINTER, DIMENSION(:) :: XCPL_WATERICE_SNET ! solar net heat flux 00075 REAL, POINTER, DIMENSION(:) :: XCPL_WATERICE_HEAT ! Non solar net heat flux 00076 REAL, POINTER, DIMENSION(:) :: XCPL_WATERICE_EVAP ! Sublimation for ESM coupling 00077 ! 00078 ! Date: 00079 ! 00080 TYPE (DATE_TIME) :: TTIME ! current date and time 00081 ! 00082 ! Time-step: 00083 ! 00084 REAL :: XTSTEP ! time step 00085 ! 00086 REAL :: XOUT_TSTEP ! output writing time step 00087 ! 00088 ! 00089 END TYPE WATFLUX_t 00090 00091 TYPE(WATFLUX_t), ALLOCATABLE, TARGET, SAVE :: WATFLUX_MODEL(:) 00092 00093 REAL, POINTER, DIMENSION(:) :: XZS=>NULL() 00094 !$OMP THREADPRIVATE(XZS) 00095 REAL, POINTER, DIMENSION(:,:) :: XCOVER=>NULL() 00096 !$OMP THREADPRIVATE(XCOVER) 00097 LOGICAL, POINTER, DIMENSION(:):: LCOVER=>NULL() 00098 !$OMP THREADPRIVATE(LCOVER) 00099 LOGICAL, POINTER :: LSBL=>NULL() 00100 !$OMP THREADPRIVATE(LSBL) 00101 CHARACTER(LEN=4), POINTER :: CWAT_ALB=>NULL() 00102 !$OMP THREADPRIVATE(CWAT_ALB) 00103 LOGICAL, POINTER :: LINTERPOL_TS=>NULL() 00104 !$OMP THREADPRIVATE(LINTERPOL_TS) 00105 CHARACTER(LEN=6), POINTER :: CINTERPOL_TS=>NULL() 00106 !$OMP THREADPRIVATE(CINTERPOL_TS) 00107 REAL, POINTER, DIMENSION(:) :: XTS=>NULL() 00108 !$OMP THREADPRIVATE(XTS) 00109 REAL, POINTER, DIMENSION(:) :: XTICE=>NULL() 00110 !$OMP THREADPRIVATE(XTICE) 00111 REAL, POINTER, DIMENSION(:,:) :: XTS_MTH=>NULL() 00112 !$OMP THREADPRIVATE(XTS_MTH) 00113 REAL, POINTER, DIMENSION(:) :: XZ0=>NULL() 00114 !$OMP THREADPRIVATE(XZ0) 00115 REAL, POINTER, DIMENSION(:) :: XEMIS=>NULL() 00116 !$OMP THREADPRIVATE(XEMIS) 00117 REAL, POINTER, DIMENSION(:) :: XDIR_ALB=>NULL() 00118 !$OMP THREADPRIVATE(XDIR_ALB) 00119 REAL, POINTER, DIMENSION(:) :: XSCA_ALB=>NULL() 00120 !$OMP THREADPRIVATE(XSCA_ALB) 00121 REAL, POINTER, DIMENSION(:) :: XICE_ALB=>NULL() 00122 !$OMP THREADPRIVATE(XICE_ALB) 00123 REAL, POINTER, DIMENSION(:) :: XCPL_WATER_WIND=>NULL() 00124 !$OMP THREADPRIVATE(XCPL_WATER_WIND) 00125 REAL, POINTER, DIMENSION(:) :: XCPL_WATER_FWSU=>NULL() 00126 !$OMP THREADPRIVATE(XCPL_WATER_FWSU) 00127 REAL, POINTER, DIMENSION(:) :: XCPL_WATER_FWSV=>NULL() 00128 !$OMP THREADPRIVATE(XCPL_WATER_FWSV) 00129 REAL, POINTER, DIMENSION(:) :: XCPL_WATER_SNET=>NULL() 00130 !$OMP THREADPRIVATE(XCPL_WATER_SNET) 00131 REAL, POINTER, DIMENSION(:) :: XCPL_WATER_HEAT=>NULL() 00132 !$OMP THREADPRIVATE(XCPL_WATER_HEAT) 00133 REAL, POINTER, DIMENSION(:) :: XCPL_WATER_EVAP=>NULL() 00134 !$OMP THREADPRIVATE(XCPL_WATER_EVAP) 00135 REAL, POINTER, DIMENSION(:) :: XCPL_WATER_RAIN=>NULL() 00136 !$OMP THREADPRIVATE(XCPL_WATER_RAIN) 00137 REAL, POINTER, DIMENSION(:) :: XCPL_WATER_SNOW=>NULL() 00138 !$OMP THREADPRIVATE(XCPL_WATER_SNOW) 00139 REAL, POINTER, DIMENSION(:) :: XCPL_WATER_FWSM=>NULL() 00140 !$OMP THREADPRIVATE(XCPL_WATER_FWSM) 00141 REAL, POINTER, DIMENSION(:) :: XCPL_WATERICE_SNET=>NULL() 00142 !$OMP THREADPRIVATE(XCPL_WATERICE_SNET) 00143 REAL, POINTER, DIMENSION(:) :: XCPL_WATERICE_HEAT=>NULL() 00144 !$OMP THREADPRIVATE(XCPL_WATERICE_HEAT) 00145 REAL, POINTER, DIMENSION(:) :: XCPL_WATERICE_EVAP=>NULL() 00146 !$OMP THREADPRIVATE(XCPL_WATERICE_EVAP) 00147 TYPE (DATE_TIME), POINTER :: TTIME=>NULL() 00148 !$OMP THREADPRIVATE(TTIME) 00149 REAL, POINTER :: XTSTEP=>NULL() 00150 !$OMP THREADPRIVATE(XTSTEP) 00151 REAL, POINTER :: XOUT_TSTEP=>NULL() 00152 !$OMP THREADPRIVATE(XOUT_TSTEP) 00153 00154 CONTAINS 00155 00156 SUBROUTINE WATFLUX_GOTO_MODEL(KFROM, KTO, LKFROM) 00157 LOGICAL, INTENT(IN) :: LKFROM 00158 INTEGER, INTENT(IN) :: KFROM, KTO 00159 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00160 ! 00161 ! Save current state for allocated arrays 00162 IF (LKFROM) THEN 00163 WATFLUX_MODEL(KFROM)%XZS=>XZS 00164 WATFLUX_MODEL(KFROM)%XCOVER=>XCOVER 00165 WATFLUX_MODEL(KFROM)%LCOVER=>LCOVER 00166 WATFLUX_MODEL(KFROM)%XTS=>XTS 00167 WATFLUX_MODEL(KFROM)%XTICE=>XTICE 00168 WATFLUX_MODEL(KFROM)%XTS_MTH=>XTS_MTH 00169 WATFLUX_MODEL(KFROM)%XZ0=>XZ0 00170 WATFLUX_MODEL(KFROM)%XEMIS=>XEMIS 00171 WATFLUX_MODEL(KFROM)%XDIR_ALB=>XDIR_ALB 00172 WATFLUX_MODEL(KFROM)%XSCA_ALB=>XSCA_ALB 00173 WATFLUX_MODEL(KFROM)%XICE_ALB=>XICE_ALB 00174 WATFLUX_MODEL(KFROM)%XCPL_WATER_WIND=>XCPL_WATER_WIND 00175 WATFLUX_MODEL(KFROM)%XCPL_WATER_FWSU=>XCPL_WATER_FWSU 00176 WATFLUX_MODEL(KFROM)%XCPL_WATER_FWSV=>XCPL_WATER_FWSV 00177 WATFLUX_MODEL(KFROM)%XCPL_WATER_SNET=>XCPL_WATER_SNET 00178 WATFLUX_MODEL(KFROM)%XCPL_WATER_HEAT=>XCPL_WATER_HEAT 00179 WATFLUX_MODEL(KFROM)%XCPL_WATER_EVAP=>XCPL_WATER_EVAP 00180 WATFLUX_MODEL(KFROM)%XCPL_WATER_RAIN=>XCPL_WATER_RAIN 00181 WATFLUX_MODEL(KFROM)%XCPL_WATER_SNOW=>XCPL_WATER_SNOW 00182 WATFLUX_MODEL(KFROM)%XCPL_WATER_FWSM=>XCPL_WATER_FWSM 00183 WATFLUX_MODEL(KFROM)%XCPL_WATERICE_SNET=>XCPL_WATERICE_SNET 00184 WATFLUX_MODEL(KFROM)%XCPL_WATERICE_HEAT=>XCPL_WATERICE_HEAT 00185 WATFLUX_MODEL(KFROM)%XCPL_WATERICE_EVAP=>XCPL_WATERICE_EVAP 00186 ENDIF 00187 ! 00188 ! Current model is set to model KTO 00189 IF (LHOOK) CALL DR_HOOK('MODD_WATFLUX_N:WATFLUX_GOTO_MODEL',0,ZHOOK_HANDLE) 00190 XZS=>WATFLUX_MODEL(KTO)%XZS 00191 XCOVER=>WATFLUX_MODEL(KTO)%XCOVER 00192 LCOVER=>WATFLUX_MODEL(KTO)%LCOVER 00193 LSBL=>WATFLUX_MODEL(KTO)%LSBL 00194 CWAT_ALB=>WATFLUX_MODEL(KTO)%CWAT_ALB 00195 LINTERPOL_TS=>WATFLUX_MODEL(KTO)%LINTERPOL_TS 00196 CINTERPOL_TS=>WATFLUX_MODEL(KTO)%CINTERPOL_TS 00197 XTS=>WATFLUX_MODEL(KTO)%XTS 00198 XTICE=>WATFLUX_MODEL(KTO)%XTICE 00199 XTS_MTH=>WATFLUX_MODEL(KTO)%XTS_MTH 00200 XZ0=>WATFLUX_MODEL(KTO)%XZ0 00201 XEMIS=>WATFLUX_MODEL(KTO)%XEMIS 00202 XDIR_ALB=>WATFLUX_MODEL(KTO)%XDIR_ALB 00203 XSCA_ALB=>WATFLUX_MODEL(KTO)%XSCA_ALB 00204 XICE_ALB=>WATFLUX_MODEL(KTO)%XICE_ALB 00205 XCPL_WATER_WIND=>WATFLUX_MODEL(KTO)%XCPL_WATER_WIND 00206 XCPL_WATER_FWSU=>WATFLUX_MODEL(KTO)%XCPL_WATER_FWSU 00207 XCPL_WATER_FWSV=>WATFLUX_MODEL(KTO)%XCPL_WATER_FWSV 00208 XCPL_WATER_SNET=>WATFLUX_MODEL(KTO)%XCPL_WATER_SNET 00209 XCPL_WATER_HEAT=>WATFLUX_MODEL(KTO)%XCPL_WATER_HEAT 00210 XCPL_WATER_EVAP=>WATFLUX_MODEL(KTO)%XCPL_WATER_EVAP 00211 XCPL_WATER_RAIN=>WATFLUX_MODEL(KTO)%XCPL_WATER_RAIN 00212 XCPL_WATER_SNOW=>WATFLUX_MODEL(KTO)%XCPL_WATER_SNOW 00213 XCPL_WATER_FWSM=>WATFLUX_MODEL(KTO)%XCPL_WATER_FWSM 00214 XCPL_WATERICE_SNET=>WATFLUX_MODEL(KTO)%XCPL_WATERICE_SNET 00215 XCPL_WATERICE_HEAT=>WATFLUX_MODEL(KTO)%XCPL_WATERICE_HEAT 00216 XCPL_WATERICE_EVAP=>WATFLUX_MODEL(KTO)%XCPL_WATERICE_EVAP 00217 TTIME=>WATFLUX_MODEL(KTO)%TTIME 00218 XTSTEP=>WATFLUX_MODEL(KTO)%XTSTEP 00219 XOUT_TSTEP=>WATFLUX_MODEL(KTO)%XOUT_TSTEP 00220 IF (LHOOK) CALL DR_HOOK('MODD_WATFLUX_N:WATFLUX_GOTO_MODEL',1,ZHOOK_HANDLE) 00221 00222 END SUBROUTINE WATFLUX_GOTO_MODEL 00223 00224 SUBROUTINE WATFLUX_ALLOC(KMODEL) 00225 INTEGER, INTENT(IN) :: KMODEL 00226 INTEGER :: J 00227 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00228 IF (LHOOK) CALL DR_HOOK("MODD_WATFLUX_N:WATFLUX_ALLOC",0,ZHOOK_HANDLE) 00229 ALLOCATE(WATFLUX_MODEL(KMODEL)) 00230 DO J=1,KMODEL 00231 NULLIFY(WATFLUX_MODEL(J)%XZS) 00232 NULLIFY(WATFLUX_MODEL(J)%XCOVER) 00233 NULLIFY(WATFLUX_MODEL(J)%LCOVER) 00234 NULLIFY(WATFLUX_MODEL(J)%XTS) 00235 NULLIFY(WATFLUX_MODEL(J)%XTICE) 00236 NULLIFY(WATFLUX_MODEL(J)%XZ0) 00237 NULLIFY(WATFLUX_MODEL(J)%XEMIS) 00238 NULLIFY(WATFLUX_MODEL(J)%XDIR_ALB) 00239 NULLIFY(WATFLUX_MODEL(J)%XSCA_ALB) 00240 NULLIFY(WATFLUX_MODEL(J)%XICE_ALB) 00241 NULLIFY(WATFLUX_MODEL(J)%XTS_MTH) 00242 NULLIFY(WATFLUX_MODEL(J)%XCPL_WATER_WIND) 00243 NULLIFY(WATFLUX_MODEL(J)%XCPL_WATER_FWSU) 00244 NULLIFY(WATFLUX_MODEL(J)%XCPL_WATER_FWSV) 00245 NULLIFY(WATFLUX_MODEL(J)%XCPL_WATER_SNET) 00246 NULLIFY(WATFLUX_MODEL(J)%XCPL_WATER_HEAT) 00247 NULLIFY(WATFLUX_MODEL(J)%XCPL_WATER_EVAP) 00248 NULLIFY(WATFLUX_MODEL(J)%XCPL_WATER_RAIN) 00249 NULLIFY(WATFLUX_MODEL(J)%XCPL_WATER_SNOW) 00250 NULLIFY(WATFLUX_MODEL(J)%XCPL_WATER_FWSM) 00251 NULLIFY(WATFLUX_MODEL(J)%XCPL_WATERICE_SNET) 00252 NULLIFY(WATFLUX_MODEL(J)%XCPL_WATERICE_HEAT) 00253 NULLIFY(WATFLUX_MODEL(J)%XCPL_WATERICE_EVAP) 00254 ENDDO 00255 WATFLUX_MODEL(:)%LSBL=.FALSE. 00256 WATFLUX_MODEL(:)%CWAT_ALB=' ' 00257 WATFLUX_MODEL(:)%LINTERPOL_TS=.FALSE. 00258 WATFLUX_MODEL(:)%CINTERPOL_TS=' ' 00259 WATFLUX_MODEL(:)%XTSTEP=0. 00260 WATFLUX_MODEL(:)%XOUT_TSTEP=0. 00261 IF (LHOOK) CALL DR_HOOK("MODD_WATFLUX_N:WATFLUX_ALLOC",1,ZHOOK_HANDLE) 00262 END SUBROUTINE WATFLUX_ALLOC 00263 00264 SUBROUTINE WATFLUX_DEALLO 00265 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00266 IF (LHOOK) CALL DR_HOOK("MODD_WATFLUX_N:WATFLUX_DEALLO",0,ZHOOK_HANDLE) 00267 IF (ALLOCATED(WATFLUX_MODEL)) DEALLOCATE(WATFLUX_MODEL) 00268 IF (LHOOK) CALL DR_HOOK("MODD_WATFLUX_N:WATFLUX_DEALLO",1,ZHOOK_HANDLE) 00269 END SUBROUTINE WATFLUX_DEALLO 00270 00271 END MODULE MODD_WATFLUX_n