SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/average2_mesh.F90
Go to the documentation of this file.
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