File: fremf2.f

package info (click to toggle)
scilab 4.0-12
  • links: PTS
  • area: non-free
  • in suites: etch, etch-m68k
  • size: 100,640 kB
  • ctags: 57,333
  • sloc: ansic: 377,889; fortran: 242,862; xml: 179,819; tcl: 42,062; sh: 10,593; ml: 9,441; makefile: 4,377; cpp: 1,354; java: 621; csh: 260; yacc: 247; perl: 130; lex: 126; asm: 72; lisp: 30
file content (79 lines) | stat: -rw-r--r-- 2,009 bytes parent folder | download | duplicates (4)
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
77
78
79
      subroutine fremf2 (prosca,iflag,n,ntot,nta,mm1,p,alfa,e,a,r,
     1 izs,rzs,dzs)
c     Copyright INRIA
      implicit double precision (a-h,o-z)
      external prosca
      dimension p(*),alfa(ntot),izs(*),dzs(*),e(mm1),a(mm1),r(*)
      real rzs(*)


c
c          cette subroutine remplit les donnees pour fprf2
c          (produits scalaires et 2 contraintes lineaires)
c
c             de 1 a ntot +1  si iflag=0
c             de nta+1 +1 a ntot +1 sinon
c
c             (le +1 est du a l'ecart, place en premier)
c
c          p contient les opposes des gradients a la queue leu leu
c          -g(1), -g(2),..., -g(ntot) soit ntot*n coordonnees
c
      nt1=ntot+1
      nta1=nta+1
      if(iflag.gt.0) go to 50
c
c                remplissage des anciennes donnees
c          (produits scalaires, ecart et contrainte d'egalite)
c
      do 10 j=1,ntot
      jj=(j-1)*mm1+1
   10 r(jj)=0.d0
      a(1)=1.d0
      e(1)=0.d0
      if (nta1.eq.1) go to 50
      do 30 j=2,nta1
      e(j)=1.d0
      nj=(j-2)*n
      mej=(j-1)*mm1
      do 30 i=2,j
      ni=(i-2)*n
c
c             produit scalaire de g(i-1) avec g(j-1)
c             pour j-1=1,nta et i-1=1,j-1
c
      call prosca (n,p(ni+1),p(nj+1),ps,izs,rzs,dzs)
      nij=mej+i
c               le produit scalaire ci-dessus va dans r((j-1)*mm1+i)
      r(nij)=ps
   30 continue
c
c
   50 nta2=nta+2
c
c          remplissage des nouvelles donnees
c
      if (nta2.gt.nt1) go to 100
      do 70 kk=nta2,nt1
      mekk=(kk-1)*mm1
      e(kk)=1.d0
      r(mekk+1)=0.d0
      nj=(kk-2)*n
      do 70 i=2,kk
      ni=(i-2)*n
c
c             produit scalaire de g(kk-1) avec g(i-1)
c             pour kk-1=nta+1,ntot et i-1=1,kk-1
c
      call prosca (n,p(ni+1),p(nj+1),ps,izs,rzs,dzs)
      nij=mekk+i
c               le produit scalaire ci-dessus va dans r((kk-1)*mm1+i)
   70 r(nij)=ps
c
c          remplissage de la contrainte d'inegalite
c               (tout entiere sauf l'ecart)
c
      do 80 i=2,nt1
   80 a(i)=dble(alfa(i-1))
  100 return
      end