File: bva.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 (192 lines) | stat: -rw-r--r-- 5,949 bytes parent folder | download | duplicates (2)
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
      subroutine bva(fname)
c
C      implicit undefined (a-z)
c     Copyright ENPC (Jean-Philippe Chancelier )
c     -----------------------------------------------------
      include '../stack.h'
      character*(*) fname
      character*(nlgh+1)   efsub,edfsub,egsub,edgsub,eguess
      integer    kfsub,kdfsub,kgsub,kdgsub,kguess,topk
      external   fsub,dfsub,gsub,dgsub,dguess
      external setfcolgu,setfcoldg,setfcolg,setfcoldf
      external setfcolf
      integer    mstar,ncomp,io
      double precision aleft,aright
      integer iadr,lr,iflag,mf,nf,lfixpnt,mtol,ntol,ltol,l
      integer mltol,nltol,lltol,iero,mipar,nipar,lipar,mzeta,nzeta,lzeta
      integer mm,mn,lrm,i,lispace,lspace,lc,ki,kz,kx,lr1,lc1
      integer mres,nres,lres
      integer itfsub,itdfsub,itgsub,itdgsub,itguess,gettype
      logical type,getexternal,getrmat,cremat,getscalar
      common/iercol/iero
C     External names 
      common / colname / efsub,edfsub,egsub,edgsub,eguess
C     External Position in stack and arguments model position in stack
      common / coladr / kfsub,kdfsub,kgsub,kdgsub,kguess,kx,ki,kz
C     Type of externals 
      common / coltyp / itfsub,itdfsub,itgsub,itdgsub,itguess
      common / icolnew/  ncomp,mstar
c
      iadr(l)=l+l-1

c
      if (ddt .eq. 4) then
         write(buf(1:4),'(i4)') fin
         call basout(io,wte,' bva '//buf(1:4))
      endif
c
c     fin  1
c         bvode
c
c     z=bvode(res,ncomp,m,aleft,aright,zeta,ipar,ltol,tol,fixpnt,...
c	fsub1,dfsub1,gsub1,dgsub1,guess1)
c
c     Interface for the colnew program for boundary values problem.
      type=.false.
      topk=top
      kguess=top
c     guess1 external
      itguess= gettype(top)
      if (.not.getexternal(fname,topk,top,eguess,type,
     $     setfcolgu)) return
      top=top-1
c     dgsub1 external
      itdgsub=gettype(top)
      kdgsub=top
      if (.not.getexternal(fname,topk,top,edgsub,type,
     $     setfcoldg)) return
      top=top-1
c     gsub1 external
      itgsub=gettype(top)
      kgsub=top
      if (.not.getexternal(fname,topk,top,egsub,type,
     $     setfcolg)) return
      top=top-1
c     dfsub1 external
      itdfsub=gettype(top)
      kdfsub=top
      if (.not.getexternal(fname,topk,top,edfsub,type,
     $     setfcoldf)) return
      top=top-1
c     fsub1 external
      itfsub=gettype(top)
      kfsub=top
      if (.not.getexternal(fname,topk,top,efsub,type,
     $     setfcolf)) return
c      write(06,*) 'args',itfsub,itdfsub,itgsub,itdgsub,itguess
      top=top-1
c     fixpnt
      if (.not.getrmat(fname,topk,top,mf,nf,lfixpnt))  return
      top=top-1
c     tol
      if (.not.getrmat(fname,topk,top,mtol,ntol,ltol))  return
      top=top-1
c     ltol
      if (.not.getrmat(fname,topk,top,mltol,nltol,lltol))  return
      call entier(mltol*nltol,stk(lltol),istk(iadr(lltol)))
      top=top-1
c     ipar  
      if (.not.getrmat(fname,topk,top,mipar,nipar,lipar))  return
      if(mipar*nipar.lt.11) then 
c     .  bvode: ipar dimensioned at least 11
         call error(251) 
      endif
      ilipar=iadr(lipar)
      call entier(mipar*nipar,stk(lipar),istk(ilipar))
c
      if(istk(ilipar+3).ne.mltol*nltol) then 
C     .  bvode: ltol must be of size ipar(4)
         call error(252) 
      endif
      if(istk(ilipar+10).ne.mf*nf.and.istk(ilipar+10).ne.0) then 
c     .  bvode: fixpnt must be of size ipar(11)
         call error(253) 
      endif
      top=top-1
c     zeta 
      if (.not.getrmat(fname,topk,top,mzeta,nzeta,lzeta))  return
      top=top-1
c     aright  
      if (.not.getscalar(fname,topk,top,lr))  return
      aright=stk(lr)
      top=top-1
c     aleft
      if (.not.getscalar(fname,topk,top,lr))  return
      aleft=stk(lr)
      top=top-1
c     m
      if (.not. getrmat(fname,topk,top,mm,mn,lrm)) return 
      call entier(mm*mn,stk(lrm),istk(iadr(lrm)))
      mstar=0
      do 10 i=1,mm*mn
         mstar=mstar+ istk(iadr(lrm)+i-1)
 10   continue
      top=top-1
c     ncomp
      if (.not.getscalar(fname,topk,top,lr))  return
      ncomp=int(stk(lr))
      if(ncomp.gt.20) then 
c     .  bvode: ncomp < 20 requested 
         call error(254) 
      endif
      if(mm*mn.ne.ncomp) then 
c     .  bvode: m must be of size ncomp
         call error(255) 
      endif
      if(mstar.gt.40) then 
c     .  bvode: sum(m must be less than 40
         call error(256) 
      endif

      top=top-1
c     res
      if (.not.getrmat(fname,topk,top,mres,nres,lres))  return
c
c     create working arrays
      top=topk+1
      if (.not.cremat(fname,top,0,1,istk(iadr(lipar)+6-1),lispace,lc)) 
     $     return
      top=top+1
      if (.not.cremat(fname,top,0,1,istk(iadr(lipar)+5-1),lspace,lc)) 
     $     return
C     Modele des arguments des external x scalaire z vecteur 
      top=top+1
      ki=top
      kx=top
      if (.not.cremat(fname,top,0,1,1,lr,lc)) return
      top=top+1
      kz=top
      if (.not.cremat(fname,top,0,mstar,1,lr,lc)) return
      iero=0
      call colnew (ncomp,istk(iadr(lrm)),aleft,aright,stk(lzeta),
     $     istk(iadr(lipar)),istk(iadr(lltol)), stk(ltol),stk(lfixpnt),
     $     istk(iadr(lispace)), stk(lspace), iflag, fsub, 
     $             dfsub, gsub, dgsub, dguess) 
      if(err.gt.0) return
      if(iero.gt.0) then
         call error(24)
         Return
      endif
      if ( iflag.ne.1) then 
         goto (101,102,103,104) iflag+4
 101     call error(258)
         return 
 102     call error(24)
         return
 103     call error(259)
         return
 104     call error(260)
         return
      endif
      top=top+1
      if (.not.cremat(fname,top,0,mstar,mres*nres,lr,lc)) return
         do 20 i=1,mres*nres
            call appsln(stk(lres+i-1),stk(lr+(i-1)*mstar),stk(lspace),
     $           istk(iadr(lispace)))
 20      continue
      top=topk-rhs+1
      if (.not.cremat(fname,top,0,mstar,mres*nres,lr1,lc1)) return
      call unsfdcopy(mstar*mres*nres,stk(lr),1,stk(lr1),1)
      return
      end