SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/modd_ch_watfluxn.F90
Go to the documentation of this file.
00001 !     #####################
00002       MODULE MODD_CH_WATFLUX_n
00003 !     ######################
00004 !
00005 !!
00006 !!    PURPOSE
00007 !!    -------
00008 !     
00009 !   
00010 !
00011 !!
00012 !!**  IMPLICIT ARGUMENTS
00013 !!    ------------------
00014 !!      None
00015 !!
00016 !
00017 !!    AUTHOR
00018 !!    ------
00019 !!  P. Tulet   *Meteo France*
00020 !!
00021 !!    MODIFICATIONS
00022 !!    -------------
00023 !!  16/07/03 (P. Tulet)  restructured for externalization
00024 !------------------------------------------------------------------------------
00025 !
00026 !*       0.   DECLARATIONS
00027 !             ------------
00028 !
00029 !
00030 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00031 USE PARKIND1  ,ONLY : JPRB
00032 !
00033 IMPLICIT NONE
00034 
00035 TYPE CH_WATFLUX_t
00036 !
00037   CHARACTER(LEN=6)              :: CCH_DRY_DEP              ! deposition scheme
00038   REAL, DIMENSION(:,:), POINTER :: XDEP =>NULL()                    ! final dry deposition
00039                                                             ! velocity  for lakes
00040   CHARACTER(LEN=6), DIMENSION(:), POINTER :: CSV =>NULL()           ! name of the scalar var.
00041   INTEGER    :: NSV_CHSBEG, NSV_CHSEND                      ! chemical begin and ending
00042                                                             ! index of the HSV/CSV array
00043   INTEGER    :: NBEQ                                        ! number of chemical species
00044                                                             ! in the surface scheme
00045 
00046   INTEGER    :: NSV_DSTBEG, NSV_DSTEND                      ! dust begin and ending
00047   INTEGER    :: NSV_SLTBEG, NSV_SLTEND                      ! sea salt begin and ending
00048   INTEGER    :: NSV_AERBEG, NSV_AEREND                      ! aerosol begin and ending
00049   INTEGER    :: NDSTEQ                                      ! number of dust species
00050   INTEGER    :: NSLTEQ                                      ! number of sea salt species
00051   INTEGER    :: NAEREQ                                      ! number of aerosol species
00052 
00053   CHARACTER(LEN=6), DIMENSION(:), POINTER :: CCH_NAMES=>NULL()      ! NAME OF CHEMICAL SPECIES
00054                                                             ! (FOR DIAG ONLY)
00055   CHARACTER(LEN=6), DIMENSION(:), POINTER :: CDSTNAMES=>NULL()
00056   CHARACTER(LEN=6), DIMENSION(:), POINTER :: CSLTNAMES=>NULL()
00057   CHARACTER(LEN=6), DIMENSION(:), POINTER :: CAER_NAMES=>NULL()
00058 
00059 
00060 !
00061 END TYPE CH_WATFLUX_t
00062 
00063 TYPE(CH_WATFLUX_t), ALLOCATABLE, TARGET, SAVE :: CH_WATFLUX_MODEL(:)
00064 
00065  CHARACTER(LEN=6), POINTER :: CCH_DRY_DEP=>NULL()
00066 !$OMP THREADPRIVATE(CCH_DRY_DEP)
00067 REAL, DIMENSION(:,:), POINTER :: XDEP=>NULL()
00068 !$OMP THREADPRIVATE(XDEP)
00069  CHARACTER(LEN=6), DIMENSION(:), POINTER :: CSV=>NULL()
00070 !$OMP THREADPRIVATE(CSV)
00071 INTEGER, POINTER :: NSV_CHSBEG=>NULL(), NSV_CHSEND=>NULL()
00072 !$OMP THREADPRIVATE(NSV_CHSBEG, NSV_CHSEND)
00073 INTEGER, POINTER :: NSV_DSTBEG=>NULL(), NSV_DSTEND=>NULL()
00074 !$OMP THREADPRIVATE(NSV_DSTBEG, NSV_DSTEND)
00075 INTEGER, POINTER :: NSV_SLTBEG=>NULL(), NSV_SLTEND=>NULL()
00076 !$OMP THREADPRIVATE(NSV_SLTBEG, NSV_SLTEND)
00077 INTEGER, POINTER :: NSV_AERBEG=>NULL(), NSV_AEREND=>NULL()
00078 !$OMP THREADPRIVATE(NSV_AERBEG, NSV_AEREND)
00079 INTEGER, POINTER :: NBEQ=>NULL()
00080 !$OMP THREADPRIVATE(NBEQ)
00081 INTEGER, POINTER :: NDSTEQ=>NULL()
00082 !$OMP THREADPRIVATE(NDSTEQ)
00083 INTEGER, POINTER :: NSLTEQ=>NULL()
00084 !$OMP THREADPRIVATE(NSLTEQ)
00085 INTEGER, POINTER :: NAEREQ=>NULL()
00086 !$OMP THREADPRIVATE(NAEREQ)
00087 
00088 
00089  CHARACTER(LEN=6), DIMENSION(:), POINTER :: CCH_NAMES=>NULL()
00090 !$OMP THREADPRIVATE(CCH_NAMES)
00091  CHARACTER(LEN=6), DIMENSION(:), POINTER :: CDSTNAMES=>NULL()
00092 !$OMP THREADPRIVATE(CDSTNAMES)
00093  CHARACTER(LEN=6), DIMENSION(:), POINTER :: CSLTNAMES=>NULL()
00094 !$OMP THREADPRIVATE(CSLTNAMES)
00095  CHARACTER(LEN=6), DIMENSION(:), POINTER :: CAER_NAMES=>NULL()
00096 !$OMP THREADPRIVATE(CAER_NAMES)
00097 
00098 
00099 
00100 CONTAINS
00101 
00102 SUBROUTINE CH_WATFLUX_GOTO_MODEL(KFROM, KTO, LKFROM)
00103 LOGICAL, INTENT(IN) :: LKFROM
00104 INTEGER, INTENT(IN) :: KFROM, KTO
00105 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00106 !
00107 ! Save current state for allocated arrays
00108 IF (LKFROM) THEN
00109 CH_WATFLUX_MODEL(KFROM)%XDEP=>XDEP
00110 CH_WATFLUX_MODEL(KFROM)%CSV=>CSV
00111 CH_WATFLUX_MODEL(KFROM)%CCH_NAMES=>CCH_NAMES
00112 CH_WATFLUX_MODEL(KFROM)%CDSTNAMES=>CDSTNAMES
00113 CH_WATFLUX_MODEL(KFROM)%CSLTNAMES=>CSLTNAMES
00114 CH_WATFLUX_MODEL(KFROM)%CAER_NAMES=>CAER_NAMES
00115 ENDIF
00116 
00117 !
00118 ! Current model is set to model KTO
00119 IF (LHOOK) CALL DR_HOOK('MODD_CH_WATFLUX_N:CH_WATFLUX_GOTO_MODEL',0,ZHOOK_HANDLE)
00120 CCH_DRY_DEP=>CH_WATFLUX_MODEL(KTO)%CCH_DRY_DEP
00121 XDEP=>CH_WATFLUX_MODEL(KTO)%XDEP
00122 CSV=>CH_WATFLUX_MODEL(KTO)%CSV
00123 NSV_CHSBEG=>CH_WATFLUX_MODEL(KTO)%NSV_CHSBEG
00124 NSV_CHSEND=>CH_WATFLUX_MODEL(KTO)%NSV_CHSEND
00125 NBEQ=>CH_WATFLUX_MODEL(KTO)%NBEQ
00126 CCH_NAMES=>CH_WATFLUX_MODEL(KTO)%CCH_NAMES
00127 NSV_DSTBEG=>CH_WATFLUX_MODEL(KTO)%NSV_DSTBEG
00128 NSV_DSTEND=>CH_WATFLUX_MODEL(KTO)%NSV_DSTEND
00129 NDSTEQ=>CH_WATFLUX_MODEL(KTO)%NDSTEQ
00130 CDSTNAMES=>CH_WATFLUX_MODEL(KTO)%CDSTNAMES
00131 NSV_SLTBEG=>CH_WATFLUX_MODEL(KTO)%NSV_SLTBEG
00132 NSV_SLTEND=>CH_WATFLUX_MODEL(KTO)%NSV_SLTEND
00133 NSLTEQ=>CH_WATFLUX_MODEL(KTO)%NSLTEQ
00134 CSLTNAMES=>CH_WATFLUX_MODEL(KTO)%CSLTNAMES
00135 NSV_AERBEG=>CH_WATFLUX_MODEL(KTO)%NSV_AERBEG
00136 NSV_AEREND=>CH_WATFLUX_MODEL(KTO)%NSV_AEREND
00137 NAEREQ=>CH_WATFLUX_MODEL(KTO)%NAEREQ
00138 CAER_NAMES=>CH_WATFLUX_MODEL(KTO)%CAER_NAMES
00139 IF (LHOOK) CALL DR_HOOK('MODD_CH_WATFLUX_N:CH_WATFLUX_GOTO_MODEL',1,ZHOOK_HANDLE)
00140 
00141 END SUBROUTINE CH_WATFLUX_GOTO_MODEL
00142 
00143 SUBROUTINE CH_WATFLUX_ALLOC(KMODEL)
00144 INTEGER, INTENT(IN) :: KMODEL
00145 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00146 IF (LHOOK) CALL DR_HOOK("MODD_CH_WATFLUX_N:CH_WATFLUX_ALLOC",0,ZHOOK_HANDLE)
00147 ALLOCATE(CH_WATFLUX_MODEL(KMODEL))
00148 CH_WATFLUX_MODEL(:)%CCH_DRY_DEP=' '
00149 CH_WATFLUX_MODEL(:)%NSV_CHSBEG=0
00150 CH_WATFLUX_MODEL(:)%NSV_CHSEND=0
00151 CH_WATFLUX_MODEL(:)%NSV_DSTBEG=0
00152 CH_WATFLUX_MODEL(:)%NSV_DSTEND=0
00153 CH_WATFLUX_MODEL(:)%NBEQ=0
00154 CH_WATFLUX_MODEL(:)%NSV_SLTBEG=0
00155 CH_WATFLUX_MODEL(:)%NSV_SLTEND=0
00156 CH_WATFLUX_MODEL(:)%NSV_AERBEG=0
00157 CH_WATFLUX_MODEL(:)%NSV_AEREND=0
00158 CH_WATFLUX_MODEL(:)%NDSTEQ=0
00159 CH_WATFLUX_MODEL(:)%NSLTEQ=0
00160 CH_WATFLUX_MODEL(:)%NAEREQ=0
00161 IF (LHOOK) CALL DR_HOOK("MODD_CH_WATFLUX_N:CH_WATFLUX_ALLOC",1,ZHOOK_HANDLE)
00162 END SUBROUTINE CH_WATFLUX_ALLOC
00163 
00164 SUBROUTINE CH_WATFLUX_DEALLO
00165 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00166 IF (LHOOK) CALL DR_HOOK("MODD_CH_WATFLUX_N:CH_WATFLUX_DEALLO",0,ZHOOK_HANDLE)
00167 IF (ALLOCATED(CH_WATFLUX_MODEL)) DEALLOCATE(CH_WATFLUX_MODEL)
00168 IF (LHOOK) CALL DR_HOOK("MODD_CH_WATFLUX_N:CH_WATFLUX_DEALLO",1,ZHOOK_HANDLE)
00169 END SUBROUTINE CH_WATFLUX_DEALLO
00170 
00171 END MODULE MODD_CH_WATFLUX_n