SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE AVERAGE1_CTI(KLUOUT,PLAT,PLON,PVALUE) 00003 ! ################################################ 00004 ! 00005 !!**** *AVERAGE1_CTI* computes the sum of cti, squared cti 00006 !! and subgrid cti characteristics 00007 !! 00008 !! PURPOSE 00009 !! ------- 00010 !! 00011 !! METHOD 00012 !! ------ 00013 !! 00014 !! EXTERNAL 00015 !! -------- 00016 !! 00017 !! IMPLICIT ARGUMENTS 00018 !! ------------------ 00019 !! 00020 !! 00021 !! REFERENCE 00022 !! --------- 00023 !! 00024 !! AUTHOR 00025 !! ------ 00026 !! 00027 !! B. Decharme Meteo-France 00028 !! 00029 !! MODIFICATION 00030 !! ------------ 00031 !! 00032 !! Original 06/2009 00033 !! 00034 !---------------------------------------------------------------------------- 00035 ! 00036 !* 0. DECLARATION 00037 ! ----------- 00038 ! 00039 USE MODD_PGDWORK, ONLY : XSUMVAL, XSUMVAL2, XSUMVAL3, NSIZE, & 00040 XMAX_WORK, XMIN_WORK 00041 ! 00042 USE MODI_GET_MESH_INDEX 00043 USE MODD_POINT_OVERLAY 00044 !! 00045 ! 00046 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00047 USE PARKIND1 ,ONLY : JPRB 00048 ! 00049 IMPLICIT NONE 00050 ! 00051 !* 0.1 Declaration of arguments 00052 ! ------------------------ 00053 ! 00054 INTEGER, INTENT(IN) :: KLUOUT 00055 REAL, DIMENSION(:), INTENT(IN) :: PLAT ! latitude of the point to add 00056 REAL, DIMENSION(:), INTENT(IN) :: PLON ! longitude of the point to add 00057 REAL, DIMENSION(:), INTENT(IN) :: PVALUE ! value of the point to add 00058 ! 00059 !* 0.2 Declaration of other local variables 00060 ! ------------------------------------ 00061 ! 00062 INTEGER, DIMENSION(SIZE(PLAT)) :: IINDEX ! mesh index of all input points 00063 ! 0 indicates the point is out of the domain 00064 ! 00065 INTEGER :: JLOOP ! loop index on input arrays 00066 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00067 !---------------------------------------------------------------------------- 00068 ! 00069 ! 00070 !* 1. Get position 00071 ! ------------ 00072 ! 00073 IF (LHOOK) CALL DR_HOOK('AVERAGE1_CTI',0,ZHOOK_HANDLE) 00074 IF (ALLOCATED(XNUM)) DEALLOCATE(XNUM) 00075 ALLOCATE(XNUM(SIZE(PLAT))) 00076 ! 00077 XNUM(:)=1 00078 ! 00079 DO WHILE(MAXVAL(XNUM).NE.0) 00080 ! 00081 CALL GET_MESH_INDEX(KLUOUT,PLAT,PLON,IINDEX) 00082 ! 00083 !* 2. Loop on all input data points 00084 ! ----------------------------- 00085 ! 00086 DO JLOOP = 1 , SIZE(PLAT) 00087 ! 00088 !* 3. Tests on position 00089 ! ----------------- 00090 ! 00091 IF (IINDEX(JLOOP)==0) CYCLE 00092 ! 00093 !* 4. Summation 00094 ! --------- 00095 ! 00096 NSIZE(IINDEX(JLOOP))=NSIZE(IINDEX(JLOOP))+1 00097 ! 00098 !* 5. CTI 00099 ! --- 00100 ! 00101 XSUMVAL(IINDEX(JLOOP))=XSUMVAL(IINDEX(JLOOP))+PVALUE(JLOOP) 00102 ! 00103 !* 6. Square of CTI 00104 ! ------------- 00105 ! 00106 XSUMVAL2(IINDEX(JLOOP))=XSUMVAL2(IINDEX(JLOOP))+PVALUE(JLOOP)**2 00107 ! 00108 ! 00109 !* 7. Cube of CTI 00110 ! ------------- 00111 ! 00112 XSUMVAL3(IINDEX(JLOOP))=XSUMVAL3(IINDEX(JLOOP))+PVALUE(JLOOP)**3 00113 ! 00114 ! 00115 !* 8. Maximum CTI in the mesh 00116 ! ----------------------- 00117 ! 00118 XMAX_WORK(IINDEX(JLOOP))=MAX(XMAX_WORK(IINDEX(JLOOP)),PVALUE(JLOOP)) 00119 ! 00120 ! 00121 !* 9. Minimum CTI in the mesh 00122 ! ----------------------- 00123 ! 00124 XMIN_WORK(IINDEX(JLOOP))=MIN(XMIN_WORK(IINDEX(JLOOP)),PVALUE(JLOOP)) 00125 ! 00126 ! 00127 ENDDO 00128 ! 00129 END DO 00130 IF (LHOOK) CALL DR_HOOK('AVERAGE1_CTI',1,ZHOOK_HANDLE) 00131 ! 00132 !------------------------------------------------------------------------------- 00133 ! 00134 END SUBROUTINE AVERAGE1_CTI