SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/average1_orography.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE AVERAGE1_OROGRAPHY(KLUOUT,PLAT,PLON,PVALUE)
00003 !     #######################################################
00004 !
00005 !!**** *AVERAGE1_OROGRAPHY* computes the sum of orography, squared orography
00006 !!                              and subgrid orography 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 !!    V. Masson         Meteo-France
00028 !!
00029 !!    MODIFICATION
00030 !!    ------------
00031 !!
00032 !!    Original    12/09/95
00033 !!
00034 !----------------------------------------------------------------------------
00035 !
00036 !*    0.     DECLARATION
00037 !            -----------
00038 !
00039 USE MODD_PGDWORK,       ONLY : XSUMVAL, XSUMVAL2, NSIZE, XSSQO, LSSQO, NSSO
00040 USE MODD_SURF_ATM_SSO_n, ONLY : XMIN_ZS, XMAX_ZS
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 INTEGER, DIMENSION(SIZE(PLAT)) :: ISSOX  ! X submesh index in their mesh of all input points
00065 INTEGER, DIMENSION(SIZE(PLAT)) :: ISSOY  ! Y submesh index in their mesh of all input points
00066 INTEGER, DIMENSION(SIZE(PLAT)) :: INUM ! numbers of index
00067 !
00068 INTEGER :: JLOOP        ! loop index on input arrays
00069 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00070 !----------------------------------------------------------------------------
00071 !
00072 !
00073 !*    1.     Get position
00074 !            ------------
00075 !     
00076 IF (LHOOK) CALL DR_HOOK('AVERAGE1_OROGRAPHY',0,ZHOOK_HANDLE)
00077 IF (ALLOCATED(XNUM)) DEALLOCATE(XNUM)
00078 ALLOCATE(XNUM(SIZE(PLAT)))
00079 !
00080 XNUM(:)=1
00081 !
00082 DO WHILE(MAXVAL(XNUM).NE.0)
00083                                          
00084   CALL GET_MESH_INDEX(KLUOUT,PLAT,PLON,IINDEX,NSSO,ISSOX,ISSOY)
00085 !
00086 !*    2.     Loop on all input data points
00087 !            -----------------------------
00088 !     
00089   DO JLOOP = 1 , SIZE(PLAT)
00090 !
00091 !*    3.     Tests on position
00092 !            -----------------
00093 !     
00094     IF (IINDEX(JLOOP)==0) CYCLE
00095 !
00096 !*    4.     Summation
00097 !            ---------
00098 !
00099     NSIZE(IINDEX(JLOOP))=NSIZE(IINDEX(JLOOP))+1
00100 !
00101 !*    5.     Orography
00102 !            ---------
00103 !
00104     XSUMVAL(IINDEX(JLOOP))=XSUMVAL(IINDEX(JLOOP))+PVALUE(JLOOP)
00105 !
00106 !*    6.     Square of Orography
00107 !            -------------------
00108 !
00109     XSUMVAL2(IINDEX(JLOOP))=XSUMVAL2(IINDEX(JLOOP))+PVALUE(JLOOP)**2
00110 !
00111 !*    7.     Maximum orography in a subgrid square
00112 !            -------------------------------------
00113 !
00114     LSSQO(ISSOX(JLOOP),ISSOY(JLOOP),IINDEX(JLOOP)) = .TRUE.
00115     XSSQO(ISSOX(JLOOP),ISSOY(JLOOP),IINDEX(JLOOP)) = &
00116          MAX (  XSSQO(ISSOX(JLOOP),ISSOY(JLOOP),IINDEX(JLOOP)) , PVALUE(JLOOP) )   
00117 !
00118 !
00119 !*    8.     Maximum orography in the mesh
00120 !            -----------------------------
00121 !
00122     XMAX_ZS(IINDEX(JLOOP))=MAX(XMAX_ZS(IINDEX(JLOOP)),PVALUE(JLOOP))
00123 !
00124 !
00125 !*    9.     Minimum orography in the mesh
00126 !            -----------------------------
00127 !
00128     XMIN_ZS(IINDEX(JLOOP))=MIN(XMIN_ZS(IINDEX(JLOOP)),PVALUE(JLOOP))
00129 !
00130 !
00131   END DO
00132 !
00133 ENDDO
00134 IF (LHOOK) CALL DR_HOOK('AVERAGE1_OROGRAPHY',1,ZHOOK_HANDLE)
00135 !
00136 !-------------------------------------------------------------------------------
00137 !
00138 END SUBROUTINE AVERAGE1_OROGRAPHY