SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/modd_watfluxn.F90
Go to the documentation of this file.
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