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