summaryrefslogtreecommitdiff
path: root/Dragon/src/COMTRE.f
blob: a6351b610227f5569011d265a60f9394233e10cd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
*DECK COMTRE
      LOGICAL FUNCTION COMTRE(NPAR,NVP,ARB,DEB,MUPLET,IPARM,I0,II,JJ,
     1 LAST)
*
*-----------------------------------------------------------------------
*
*Purpose:
* Find the index of the corresponding elementary calculation in the
* global parameter tree for a value of the tuple MUPLET. If the
* elementary calculation exists, set COMTRE=.true. otherwise, set the
* indices in the tree where the new calculation must be introduced.
*
*Copyright:
* Copyright (C) 2002 Ecole Polytechnique de Montreal
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version
*
*Author(s): A. Hebert
*
*Parameters: input
* NPAR    number of global parameters.
* NVP     number of nodes in the global parameter tree.
* ARB     array arbval of the global parameters tree.
* DEB     array debarb of the global parameters tree.
* MUPLET  tuple of indices associated to each global parameter of the
*         elementary calculation.
*
*Parameters: output
* IPARM   index of the parameter not corresponding to a node.
* I0      index in DEB of the first element corresponding to
*         parameter iparm.
* II      index of the elementary calculation corresponding to the
*         tuple muplet (if exists). Otherwise, index in DEB of the
*         element that will contain the new elementary calculation.
* JJ      if the node has not been found, index in DEB of the
*         element corresponding to the next node.
* LAST    completion flag (=.true. if the node has not been found).
*         If LAST=.true., a node will be added at the end of the tree.
* COMTRE  If COMTRE=.true., node already exists.
*
*-----------------------------------------------------------------------
*
*----
*  SUBROUTINE ARGUMENTS
*----
      INTEGER NPAR,NVP,ARB(NVP),DEB(NVP+1),MUPLET(NPAR),IPARM,I0,II,JJ
      LOGICAL LAST
*
      IPARM=NPAR
      II=1
      I0=1
      DO 30 IPAR=1,NPAR
         I0=DEB(I0)
         DO 10 I=DEB(II),DEB(II+1)-1
            IF(MUPLET(IPAR).EQ.ARB(I))THEN
               II=I
               GO TO 30
            ELSEIF(MUPLET(IPAR).LT.ARB(I))THEN
               JJ=I
               LAST=.FALSE.
               GO TO 20
            ENDIF
   10    CONTINUE
         JJ=DEB(II+1)
         LAST=JJ.EQ.DEB(I0)
   20    IPARM=IPAR
         COMTRE=.FALSE.
         RETURN
   30 CONTINUE
      II=DEB(II+1)
      COMTRE=.TRUE.
*
      RETURN
      END