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