Oasis3 4.0.2
rmaxim.f
Go to the documentation of this file.
00001       FUNCTION rmaxim (pa, kmsk, kna, kind, kflag)
00002 C****
00003 C               ******************************
00004 C               * OASIS FUNCTION  -  LEVEL T *
00005 C               * --------------     ------- *
00006 C               ******************************
00007 C
00008 C**** *rmaxim*  - Search function
00009 C
00010 C     Purpose:
00011 C     -------
00012 C     Search the maximum of the elements of a real array subject
00013 C     or not to a mask condition
00014 C
00015 C**   Interface:
00016 C     ---------
00017 C       *zz =*  *rmaxim (pa, kmsk, kna, kind, kflag)*
00018 C
00019 C     Input:
00020 C     -----
00021 C                pa     : array to be searched (real 1D)
00022 C                kmsk   : mask array (integer 1D)
00023 C                kna    : array dimension (integer)
00024 C                kflag  : type of search (integer)
00025 C                         0 --> Global  1 --> Land  2 --> Sea
00026 C
00027 C     Output:
00028 C     ------
00029 C                kind   : point index of maximum
00030 C
00031 C     Workspace:
00032 C     ---------
00033 C     None
00034 C
00035 C     Externals:
00036 C     ---------
00037 C     None
00038 C
00039 C     Reference:
00040 C     ---------
00041 C     See OASIS manual (1995)
00042 C
00043 C     History:
00044 C     -------
00045 C       Version   Programmer     Date      Description
00046 C       -------   ----------     ----      -----------  
00047 C       2.1       L. Terray      96/09/25  created
00048 C       2.2       L. Terray      97/02/12  modified: printing bug on 
00049 C                                          variable kind corrected
00050 C
00051 C %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
00052 C
00053 C* ---------------------------- Include files ---------------------------
00054 C
00055       USE mod_unit
00056 C
00057 C* ---------------------------- Argument declarations -------------------
00058 C
00059       REAL (kind=ip_realwp_p) rmaxim, pa(kna)
00060       INTEGER (kind=ip_intwp_p) kmsk(kna)
00061 C
00062 C* ---------------------------- Poema verses ----------------------------
00063 C
00064 C %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
00065 C
00066 C*    1. Find the maximum 
00067 C        ----------------
00068 C
00069       itemp = 0
00070       ztemp = 0.0
00071       IF (kna .LT. 1) GO TO 110
00072  130  itemp = itemp + 1
00073       IF (itemp .GT. kna) THEN
00074           WRITE(nulou,*)'itemp =', itemp
00075           WRITE(nulou,*)'kna =', kna
00076           CALL prtout
00077      $        (
00078 'WARNING!!! initial search exceeds array size      $        kna  = ', kna, 2)
00079           GO TO 140
00080       ENDIF 
00081       IF (kflag .EQ. 0) THEN
00082           ztemp = pa(itemp)
00083           GO TO 140
00084         ELSE IF (kflag .EQ. 1) THEN
00085           IF (kmsk(itemp) .EQ. 1) THEN 
00086               ztemp = pa(itemp)
00087               GO TO 140
00088           ENDIF 
00089         ELSE IF (kflag .EQ. 2) THEN
00090           IF (kmsk(itemp) .EQ. 0) THEN 
00091               ztemp = pa(itemp)
00092               GO TO 140
00093           ENDIF
00094       ENDIF 
00095       GO TO 130
00096  140  CONTINUE 
00097 C* Assign index to initial point
00098       kind = itemp
00099 C* Start looping on all other points
00100       IF (kna .LT. 2) GO TO 110
00101         IF (kflag .EQ. 1) THEN 
00102       DO 120 ja = itemp+1, kna
00103             IF (pa(ja) .GT. ztemp .AND. kmsk(ja) .EQ. 1) THEN
00104                 ztemp = pa(ja)
00105                 kind = ja
00106             ENDIF
00107  120      CONTINUE
00108         ELSE IF (kflag .EQ. 2) THEN 
00109       DO 125 ja = itemp+1, kna
00110             IF (pa(ja) .GT. ztemp .AND. kmsk(ja) .EQ. 0) THEN
00111                 ztemp = pa(ja)
00112                 kind = ja
00113             ENDIF
00114  125      CONTINUE
00115         ELSE IF (kflag .EQ. 0) THEN 
00116       DO 127 ja = itemp+1, kna
00117             IF (pa(ja) .GT. ztemp) THEN
00118                 ztemp = pa(ja)
00119                 kind = ja
00120             ENDIF
00121  127      CONTINUE
00122         ENDIF 
00123  110  CONTINUE
00124       rmaxim = ztemp
00125 C
00126 C
00127 C*    2. End of routine
00128 C        --------------
00129 C
00130       RETURN
00131       END
 All Data Structures Namespaces Files Functions Variables Defines