File: interp_demo.sci

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 (73 lines) | stat: -rw-r--r-- 2,120 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
// some functions for the interpolation demo

function [xf,yf,zf,qf] = nf3dq(x,y,z,q,orient)
   // 
   // same than nf3d but with a supplementary val field
   //
   //   j+1 +----+     orient=1 corresponds to :
   //       |    |       (i,j) -> (i,j+1) -> (i+1,j+1) -> (i+1,j) 
   //    j  +----+
   //       i   i+1    orient=2 corresponds to :
   //                    (i,j) -> (i+1,j) -> (i+1,j+1) -> (i,j+1) 
   //
   if ~exists("orient","local") then, orient=2, end
   [n1,n2]=size(x)
   nx = (n1-1)*(n2-1);
   v = 1:(n1*n2-n1-1); v(n1*(1:(n2-2)))=[];
   if orient == 1 then
      ind = [v; v+n1; v+(n1+1); v+1];
   else
      ind = [v; v+1; v+(n1+1); v+n1];
   end
   xf=matrix(x(ind),4,nx)
   yf=matrix(y(ind),4,nx)
   zf=matrix(z(ind),4,nx)
   qf=matrix(q(ind),4,nx)
endfunction


function [Xm,Xp,Ym,Yp,Zm,Zp] = slice_parallelepiped(dir, val, ebox, nx, ny, nz)
   //
   //   ebox = [xmin xmax ymin ymax zmin zmax]
   //   dir : string "x=", val
   //   n1 et n2 les discretisations
   //
   coef = 5.e-3;
   select dir
     case "x=" then
       if val < ebox(1)  |  ebox(2) < val then
	  error("bad slice choosen")
       end
       dx = coef*(ebox(2)-ebox(1))
       y = linspace(ebox(3),ebox(4),ny)
       z = linspace(ebox(5),ebox(6),nz)
       [Zm,Ym] = ndgrid(z,y)
       Xm = (val-dx)*ones(Ym);
       [Yp,Zp] = ndgrid(y,z)
       Xp = (val+dx)*ones(Yp);
     case "y=" then
       if val < ebox(3)  |  ebox(4) < val then
	  error("bad slice choosen")
       end
       dy = coef*(ebox(4)-ebox(3))
       x = linspace(ebox(1),ebox(2),nx)
       z = linspace(ebox(5),ebox(6),nz)
       [Xm,Zm] = ndgrid(x,z)
       Ym = (val-dy)*ones(Xm);
       [Zp,Xp] = ndgrid(z,x)
       Yp = (val+dy)*ones(Xp);
     case "z=" then
       if val < ebox(5)  |  ebox(6) < val then
	  error("bad slice choosen")
       end
       dz = coef*(ebox(6)-ebox(5))
       x = linspace(ebox(1),ebox(2),nx)
       y = linspace(ebox(3),ebox(4),ny)
       [Ym,Xm] = ndgrid(y,x)
       Zm = (val-dz)*ones(Xm);
       [Xp,Yp] = ndgrid(x,y)
       Zp = (val+dz)*ones(Xp);
   else
      error("bad arg dir")
   end // select
endfunction