SURFEX v7.3
General documentation of Surfex
|
00001 ! ##################### 00002 MODULE MODD_CH_SEAFLUX_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_SEAFLUX_t 00036 ! 00037 CHARACTER(LEN=6) :: CCH_DRY_DEP ! deposition scheme 00038 REAL, DIMENSION(:,:), POINTER :: XDEP =>NULL() ! final dry deposition 00039 ! velocity for sea 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 :: NSV_DSTBEG, NSV_DSTEND ! dust begin and ending 00044 INTEGER :: NSV_SLTBEG, NSV_SLTEND ! sea salt begin and ending 00045 INTEGER :: NSV_AERBEG, NSV_AEREND ! aerosol begin and ending 00046 INTEGER :: NBEQ ! number of chemical species 00047 INTEGER :: NDSTEQ ! number of dust species 00048 INTEGER :: NSLTEQ ! number of sea salt species 00049 INTEGER :: NAEREQ ! number of aerosol species 00050 ! in the surface scheme 00051 CHARACTER(LEN=6), DIMENSION(:), POINTER :: CCH_NAMES=>NULL() ! NAME OF CHEMICAL SPECIES 00052 ! (FOR DIAG ONLY) 00053 CHARACTER(LEN=6), DIMENSION(:), POINTER :: CDSTNAMES=>NULL() 00054 CHARACTER(LEN=6), DIMENSION(:), POINTER :: CSLTNAMES=>NULL() 00055 CHARACTER(LEN=6), DIMENSION(:), POINTER :: CAER_NAMES=>NULL() 00056 ! 00057 END TYPE CH_SEAFLUX_t 00058 00059 TYPE(CH_SEAFLUX_t), ALLOCATABLE, TARGET, SAVE :: CH_SEAFLUX_MODEL(:) 00060 00061 CHARACTER(LEN=6), POINTER :: CCH_DRY_DEP=>NULL() 00062 !$OMP THREADPRIVATE(CCH_DRY_DEP) 00063 REAL, DIMENSION(:,:), POINTER :: XDEP=>NULL() 00064 !$OMP THREADPRIVATE(XDEP) 00065 CHARACTER(LEN=6), DIMENSION(:), POINTER :: CSV=>NULL() 00066 !$OMP THREADPRIVATE(CSV) 00067 INTEGER, POINTER :: NSV_CHSBEG=>NULL(), NSV_CHSEND=>NULL() 00068 !$OMP THREADPRIVATE(NSV_CHSBEG,NSV_CHSEND) 00069 INTEGER, POINTER :: NSV_DSTBEG=>NULL(), NSV_DSTEND=>NULL() 00070 !$OMP THREADPRIVATE(NSV_DSTBEG,NSV_DSTEND) 00071 INTEGER, POINTER :: NSV_SLTBEG=>NULL(), NSV_SLTEND=>NULL() 00072 !$OMP THREADPRIVATE(NSV_SLTBEG,NSV_SLTEND) 00073 INTEGER, POINTER :: NSV_AERBEG=>NULL(), NSV_AEREND=>NULL() 00074 !$OMP THREADPRIVATE(NSV_AERBEG,NSV_AEREND) 00075 INTEGER, POINTER :: NBEQ=>NULL() 00076 !$OMP THREADPRIVATE(NBEQ) 00077 INTEGER, POINTER :: NDSTEQ=>NULL() 00078 !$OMP THREADPRIVATE(NDSTEQ) 00079 INTEGER, POINTER :: NSLTEQ=>NULL() 00080 !$OMP THREADPRIVATE(NSLTEQ) 00081 INTEGER, POINTER :: NAEREQ=>NULL() 00082 !$OMP THREADPRIVATE(NAEREQ) 00083 CHARACTER(LEN=6), DIMENSION(:), POINTER :: CCH_NAMES=>NULL() 00084 !$OMP THREADPRIVATE(CCH_NAMES) 00085 CHARACTER(LEN=6), DIMENSION(:), POINTER :: CDSTNAMES=>NULL() 00086 !$OMP THREADPRIVATE(CDSTNAMES) 00087 CHARACTER(LEN=6), DIMENSION(:), POINTER :: CSLTNAMES=>NULL() 00088 !$OMP THREADPRIVATE(CSLTNAMES) 00089 CHARACTER(LEN=6), DIMENSION(:), POINTER :: CAER_NAMES=>NULL() 00090 !$OMP THREADPRIVATE(CAER_NAMES) 00091 00092 CONTAINS 00093 00094 SUBROUTINE CH_SEAFLUX_GOTO_MODEL(KFROM, KTO, LKFROM) 00095 LOGICAL, INTENT(IN) :: LKFROM 00096 INTEGER, INTENT(IN) :: KFROM, KTO 00097 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00098 ! 00099 ! Save current state for allocated arrays 00100 IF (LKFROM) THEN 00101 CH_SEAFLUX_MODEL(KFROM)%XDEP=>XDEP 00102 CH_SEAFLUX_MODEL(KFROM)%CSV=>CSV 00103 CH_SEAFLUX_MODEL(KFROM)%CCH_NAMES=>CCH_NAMES 00104 CH_SEAFLUX_MODEL(KFROM)%CDSTNAMES=>CDSTNAMES 00105 CH_SEAFLUX_MODEL(KFROM)%CSLTNAMES=>CSLTNAMES 00106 CH_SEAFLUX_MODEL(KFROM)%CAER_NAMES=>CAER_NAMES 00107 ENDIF 00108 ! 00109 ! Current model is set to model KTO 00110 IF (LHOOK) CALL DR_HOOK('MODD_CH_SEAFLUX_N:CH_SEAFLUX_GOTO_MODEL',0,ZHOOK_HANDLE) 00111 CCH_DRY_DEP=>CH_SEAFLUX_MODEL(KTO)%CCH_DRY_DEP 00112 XDEP=>CH_SEAFLUX_MODEL(KTO)%XDEP 00113 CSV=>CH_SEAFLUX_MODEL(KTO)%CSV 00114 NSV_CHSBEG=>CH_SEAFLUX_MODEL(KTO)%NSV_CHSBEG 00115 NSV_CHSEND=>CH_SEAFLUX_MODEL(KTO)%NSV_CHSEND 00116 NSV_DSTBEG=>CH_SEAFLUX_MODEL(KTO)%NSV_DSTBEG 00117 NSV_DSTEND=>CH_SEAFLUX_MODEL(KTO)%NSV_DSTEND 00118 NSV_SLTBEG=>CH_SEAFLUX_MODEL(KTO)%NSV_SLTBEG 00119 NSV_SLTEND=>CH_SEAFLUX_MODEL(KTO)%NSV_SLTEND 00120 NSV_AERBEG=>CH_SEAFLUX_MODEL(KTO)%NSV_AERBEG 00121 NSV_AEREND=>CH_SEAFLUX_MODEL(KTO)%NSV_AEREND 00122 NBEQ=>CH_SEAFLUX_MODEL(KTO)%NBEQ 00123 NDSTEQ=>CH_SEAFLUX_MODEL(KTO)%NDSTEQ 00124 NSLTEQ=>CH_SEAFLUX_MODEL(KTO)%NSLTEQ 00125 NAEREQ=>CH_SEAFLUX_MODEL(KTO)%NAEREQ 00126 CCH_NAMES=>CH_SEAFLUX_MODEL(KTO)%CCH_NAMES 00127 CDSTNAMES=>CH_SEAFLUX_MODEL(KTO)%CDSTNAMES 00128 CSLTNAMES=>CH_SEAFLUX_MODEL(KTO)%CSLTNAMES 00129 CAER_NAMES=>CH_SEAFLUX_MODEL(KTO)%CAER_NAMES 00130 IF (LHOOK) CALL DR_HOOK('MODD_CH_SEAFLUX_N:CH_SEAFLUX_GOTO_MODEL',1,ZHOOK_HANDLE) 00131 00132 END SUBROUTINE CH_SEAFLUX_GOTO_MODEL 00133 00134 SUBROUTINE CH_SEAFLUX_ALLOC(KMODEL) 00135 INTEGER, INTENT(IN) :: KMODEL 00136 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00137 IF (LHOOK) CALL DR_HOOK("MODD_CH_SEAFLUX_N:CH_SEAFLUX_ALLOC",0,ZHOOK_HANDLE) 00138 ALLOCATE(CH_SEAFLUX_MODEL(KMODEL)) 00139 CH_SEAFLUX_MODEL(:)%CCH_DRY_DEP=' ' 00140 CH_SEAFLUX_MODEL(:)%NBEQ=0 00141 CH_SEAFLUX_MODEL(:)%NDSTEQ=0 00142 CH_SEAFLUX_MODEL(:)%NSLTEQ=0 00143 CH_SEAFLUX_MODEL(:)%NAEREQ=0 00144 CH_SEAFLUX_MODEL(:)%NSV_CHSBEG=0 00145 CH_SEAFLUX_MODEL(:)%NSV_CHSEND=0 00146 CH_SEAFLUX_MODEL(:)%NSV_DSTBEG=0 00147 CH_SEAFLUX_MODEL(:)%NSV_DSTEND=0 00148 CH_SEAFLUX_MODEL(:)%NSV_SLTBEG=0 00149 CH_SEAFLUX_MODEL(:)%NSV_SLTEND=0 00150 CH_SEAFLUX_MODEL(:)%NSV_AERBEG=0 00151 CH_SEAFLUX_MODEL(:)%NSV_AEREND=0 00152 IF (LHOOK) CALL DR_HOOK("MODD_CH_SEAFLUX_N:CH_SEAFLUX_ALLOC",1,ZHOOK_HANDLE) 00153 END SUBROUTINE CH_SEAFLUX_ALLOC 00154 00155 SUBROUTINE CH_SEAFLUX_DEALLO 00156 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00157 IF (LHOOK) CALL DR_HOOK("MODD_CH_SEAFLUX_N:CH_SEAFLUX_DEALLO",0,ZHOOK_HANDLE) 00158 IF (ALLOCATED(CH_SEAFLUX_MODEL)) DEALLOCATE(CH_SEAFLUX_MODEL) 00159 IF (LHOOK) CALL DR_HOOK("MODD_CH_SEAFLUX_N:CH_SEAFLUX_DEALLO",1,ZHOOK_HANDLE) 00160 END SUBROUTINE CH_SEAFLUX_DEALLO 00161 00162 END MODULE MODD_CH_SEAFLUX_n