d8dc336f44f905b06d32f604c3c260859c0da6a7
[scilab.git] / scilab / modules / scicos / macros / scicos_scicos / build_modelica_block.sci
1 //  Scicos
2 //
3 //  Copyright (C) INRIA - Serge Steer <serge.steer@inria.fr> - 2003
4 //
5 // This program is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation; either version 2 of the License, or
8 // (at your option) any later version.
9 //
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 // GNU General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software
17 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 //
19 // See the file ../license.txt
20 //
21
22 function [model,ok]=build_modelica_block(blklstm,corinvm,cmmat,NiM,NoM,scs_m,path)
23 // given the blocks definitions in blklstm and connections in cmmat this
24 // function first create  the associated modelicablock  and writes its code
25 // in the file named 'imppart_'+name+'.mo' in the directory given by path
26 // Then modelica compiler is called to produce the C code of scicos block
27 // associated to this modelica block. filbally the C code is compiled and
28 // dynamically linked with Scilab.
29 // The correspondind model data structure is returned.
30
31
32 //## get the name of the generated main modelica file
33 name=stripblanks(scs_m.props.title(1))+'_im'; 
34
35 //## generation of the txt for the main modelica file
36 //## plus return ipar/rpar for the model of THE modelica block
37 [txt,rpar,ipar]=create_modelica(blklstm,corinvm,cmmat,name,scs_m);
38
39 //## write txt in the file path+name+'.mo'
40 path=pathconvert(stripblanks(path),%t,%t)
41 mputl(txt,path+name+'.mo');
42 mprintf('%s\n',['--------------------------------------------\';
43                 msprintf(_(' Main Modelica : %s'),path+name+'.mo')
44                 ''])
45
46 //## search for 
47
48 Mblocks = [];
49 for i=1:lstsize(blklstm)
50   if type(blklstm(i).sim)==15 then
51     if blklstm(i).sim(2)==30004 then
52       o = scs_m(scs_full_path(corinvm(i)))
53       Mblocks=[Mblocks;
54                o.graphics.exprs.nameF]
55     end
56   end
57 end
58
59 //generating XML and Flat_Model
60 //## compile modelica files
61 [ok,name,nipar,nrpar,nopar,nz,nx,nx_der,nx_ns,nin,nout,nm,ng,dep_u]=compile_modelica(path+name+'.mo',Mblocks);
62
63 if ~ok then return,end
64
65 //nx is the state dimension
66 //ng is the number of surfaces
67 //name1 of the model+flat
68
69 //build model data structure of the block equivalent to the implicit part
70 model=scicos_model(sim=list(name,10004),.. 
71                    in=ones(nin,1),out=ones(nout,1),..
72                    state=zeros(nx*2,1),..
73                    dstate=zeros(nz,1),..
74                    rpar=rpar,..
75                    ipar=ipar,..
76                    dep_ut=[dep_u %t],nzcross=ng,nmode=nm)
77 endfunction