SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE AVERAGE2_MESH(PPGDARRAY) 00003 ! ######################################### 00004 ! 00005 !!**** *AVERAGE2_MESH* computes a PGD field 00006 !! 00007 !! PURPOSE 00008 !! ------- 00009 !! 00010 !! 00011 !! AUTHOR 00012 !! ------ 00013 !! 00014 !! V. Masson Meteo-France 00015 !! 00016 !! MODIFICATION 00017 !! ------------ 00018 !! 00019 !! Original 12/09/95 00020 !! V. Masson 03/2004 externalization 00021 !! 00022 !---------------------------------------------------------------------------- 00023 ! 00024 !* 0. DECLARATION 00025 ! ----------- 00026 ! 00027 USE MODD_PGDWORK, ONLY : NSIZE, XSUMVAL, CATYPE, & 00028 NVALNBR, NVALCOUNT, XVALLIST 00029 USE MODD_DATA_COVER_PAR, ONLY : XCDREF 00030 ! 00031 ! 00032 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00033 USE PARKIND1 ,ONLY : JPRB 00034 ! 00035 IMPLICIT NONE 00036 ! 00037 !* 0.1 Declaration of arguments 00038 ! ------------------------ 00039 ! 00040 REAL, DIMENSION(:), INTENT(INOUT) :: PPGDARRAY ! Mesonh field 00041 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00042 ! 00043 !* 0.2 Declaration of other local variables 00044 ! ------------------------------------ 00045 ! 00046 INTEGER :: JLOOP ! loop counter on grid points 00047 INTEGER :: JVAL ! loop counter on values encountered in grid mesh 00048 INTEGER :: IMAX ! Maximum of times a value has been encountered in the grid mesh 00049 INTEGER :: IVAL ! Index of this value 00050 !------------------------------------------------------------------------------- 00051 ! 00052 IF (LHOOK) CALL DR_HOOK('AVERAGE2_MESH',0,ZHOOK_HANDLE) 00053 SELECT CASE (CATYPE) 00054 00055 CASE ('ARI') 00056 WHERE (NSIZE(:)/=0) 00057 PPGDARRAY(:)=XSUMVAL(:)/NSIZE(:) 00058 ENDWHERE 00059 00060 CASE ('INV') 00061 WHERE (NSIZE(:)/=0) 00062 PPGDARRAY(:)=NSIZE(:)/XSUMVAL(:) 00063 ENDWHERE 00064 00065 CASE ('CDN') 00066 WHERE (NSIZE(:)/=0) 00067 PPGDARRAY(:)=XCDREF/EXP(SQRT(NSIZE(:)/XSUMVAL(:))) 00068 ENDWHERE 00069 00070 CASE ('MAJ') 00071 DO JLOOP=1,SIZE(NSIZE) 00072 IF(NSIZE(JLOOP)==0) CYCLE 00073 !* determines the index of the value which has been the most encountered 00074 ! in the grid mesh 00075 IMAX=0 00076 DO JVAL=1,NVALNBR(JLOOP) 00077 IF (NVALCOUNT(JLOOP,JVAL)>IMAX) THEN 00078 IMAX=NVALCOUNT(JLOOP,JVAL) 00079 IVAL = JVAL 00080 END IF 00081 END DO 00082 !* sets this value to the PGD field 00083 PPGDARRAY(JLOOP)=XVALLIST(JLOOP,IVAL) 00084 END DO 00085 00086 END SELECT 00087 IF (LHOOK) CALL DR_HOOK('AVERAGE2_MESH',1,ZHOOK_HANDLE) 00088 00089 !------------------------------------------------------------------------------- 00090 ! 00091 END SUBROUTINE AVERAGE2_MESH