~ubuntu-branches/ubuntu/karmic/scilab/karmic

« back to all changes in this revision

Viewing changes to routines/default/icsest.f

  • Committer: Bazaar Package Importer
  • Author(s): Torsten Werner
  • Date: 2002-03-21 16:57:43 UTC
  • Revision ID: james.westby@ubuntu.com-20020321165743-e9mv12c1tb1plztg
Tags: upstream-2.6
ImportĀ upstreamĀ versionĀ 2.6

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
      subroutine icsest(ind,nu,u,co,g,itv,rtv,dtv)
 
2
c     Copyright INRIA
 
3
      external stsec,icsec2,icsei
 
4
c
 
5
c     identification de parametres d'un systeme lineaire
 
6
c     serotonine G.Launay
 
7
c
 
8
      call icse(ind,nu,u,co,g,itv,rtv,dtv,stsec,icsec2,icsei)
 
9
      end
 
10
 
 
11
      subroutine stsec(indf,t,y,uc,uv,f,fy,fu,b,itu,dtu,
 
12
     & t0,tf,dti,dtf,ermx,iu,nuc,nuv,ilin,nti,ntf,ny,nea,
 
13
     & itmx,nex,nob,ntob,ntobi,nitu,ndtu)
 
14
c
 
15
c      Second membre de l'equation d'etat :
 
16
c       Parametres d'entree :
 
17
c        indf     : vaut 1,2,3 suivant qu'on veut calculer f,fy,fu
 
18
c        t        : instant courant
 
19
c        y(ny)    : etat a un instant donne
 
20
c        uc(nuc)  : controle independant du temps
 
21
c        uv(nuv)  : controle dependant du temps, a l'instant t
 
22
c        b(ny)    : terme constant dans le cas lineaire quadratique
 
23
c       Parametres de sortie :
 
24
c         indf    : >0 si  le calcul s'est  correctement effectue,<=0
 
25
c                   sinon
 
26
c        f(ny)    : second membre
 
27
c        fy(ny,ny): jacobien de f par rapport a y
 
28
c        fu(ny,nuc+nuv) : derivee de f par rapport au controle
 
29
c       Tableaux de travail reserves a l'utilisateur :
 
30
c        itu(nitu): tableau entier
 
31
c        dtu(ndtu): tableau double precision
 
32
c       (nitu et ndtu sont initialises par le common icsez).
 
33
c!
 
34
      implicit double precision (a-h,o-z)
 
35
      dimension y(ny),uc(*),uv(*),f(ny),fy(ny,ny),fu(ny,*),
 
36
     &     b(ny),itu(*),dtu(*),iu(5)
 
37
c
 
38
      call seros(indf,t,y,uc,uv,f,fy,fu,itu,dtu,
 
39
     &  ny,nuc,nuv,nitu,ndtu)
 
40
      end
 
41
 
 
42
      subroutine seros(indf,t,y,uc,uv,f,fy,fu,itu,dtu,
 
43
     &  ny,nuc,nuv,nitu,ndtu)
 
44
c     sous programme appele par icse.fortran qui donne :
 
45
c     pour indf=1,les seconds membres du systeme:f(ny)
 
46
c     pour indf=2,la matrice derivee des seconds membres par
 
47
c                 rapport a l'etat:fy(ny,ny)
 
48
c     pour indf=3,la matrice derivee des seconds membres par
 
49
c                 rapport aux parametres:fu(ny,nu)
 
50
c     on prend ici un modele lineaire ,en supposant que toute la 5HT
 
51
c     excretee est degradee avant d'arriver dans le milieu exterieur
 
52
      implicit double precision (a-h,o-z)
 
53
      dimension y(ny),uc(*),uv(*),f(ny),fy(ny,ny),fu(ny,*),
 
54
     &itu(*),dtu(*)
 
55
c     seconds membres:
 
56
      if (indf.eq.1) then
 
57
        f(1)=-(uc(1)+uc(2))*y(1)
 
58
        f(2)=uc(1)*y(1)-(uc(5)+uc(3))*y(2)
 
59
        f(3)=uc(2)*y(1)+uc(3)*y(2)-(uc(4)+uc(6))*y(3)
 
60
        f(4)=uc(4)*y(3)-uc(7)*y(4)
 
61
        return
 
62
      endif
 
63
c     derivee des seconds membres par rapport a l'etat:
 
64
c     pour 1<=i<=ny et 1<=j<=ny,fy(i,j)=d(f(i))/dyj
 
65
      if (indf.eq.2) then
 
66
        do 10 i=1,ny
 
67
        do 10 j=1,ny
 
68
10      fy(i,j)=0.0d+0
 
69
        fy(1,1)=-uc(1)-uc(2)
 
70
        fy(2,1)=uc(1)
 
71
        fy(3,1)=uc(2)
 
72
        fy(2,2)=-uc(3)-uc(5)
 
73
        fy(3,2)=uc(3)
 
74
        fy(3,3)=-uc(4)-uc(6)
 
75
        fy(4,3)=uc(4)
 
76
        fy(4,4)=-uc(7)
 
77
        return
 
78
      endif
 
79
c     derivee des seconds membres par rapport aux parametres:
 
80
c     pour 1<=i<=ny et 1<=j<=nu,fu(i,j)=d(f(i))/duj
 
81
      if (indf.eq.3) then
 
82
        do 20 i=1,ny
 
83
        do 20 j=1,nuc+nuv
 
84
20      fu(i,j)=0.0d+0
 
85
        fu(1,1)=-y(1)
 
86
        fu(2,1)=y(1)
 
87
        fu(1,2)=-y(1)
 
88
        fu(3,2)=y(1)
 
89
        fu(2,3)=-y(2)
 
90
        fu(3,3)=y(2)
 
91
        fu(3,4)=-y(3)
 
92
        fu(4,4)=y(3)
 
93
        fu(2,5)=-y(2)
 
94
        fu(3,6)=-y(3)
 
95
        fu(4,7)=-y(4)
 
96
        return
 
97
      endif
 
98
      end
 
99