PDE
function [x,y,typ]=PDE(job,arg1,arg2)
// Copyright INRIA
// développé par EADS-CCR
// fonction graphic du bloc, elle permet le dessin et l'initialisation du bloc //
// Reference: "Scicos user guid", http://www.scicos.org //
//--------------------------------------------------------------------------------------------//
x=[];y=[];typ=[];
select job
case 'plot' then
if arg1.model.sim(2)==2004 then
CCC=[strsubst(arg1.model.sim(1),'_explicite','');'Explicite']
elseif arg1.model.sim(2)==12004
CCC=[strsubst(arg1.model.sim(1),'_implicite','');'implicite']
else
CCC=' PDE'
end
standard_draw(arg1)
case 'getinputs' then
[x,y,typ]=standard_inputs(arg1)
case 'getoutputs' then
[x,y,typ]=standard_outputs(arg1)
case 'getorigin' then
[x,y]=standard_origin(arg1)
case 'set' then
x=arg1;
graphics=arg1.graphics;label=graphics.exprs
model=arg1.model;
params_pde=label(1);
while %t do
[ln,fun]=where();
if (fun(3) == "clickin") then // cas standard
[ok,a_domaine,b_domaine,discr,signe,choix,type_meth,degre,Nbr_maillage,..
CI,CI1,CLa_type,CLa_exp,CLb_type,CLb_exp,oper,a1,b1,a2,b2,a3,b3,a4,b4,a5,b5,..
a6,b6,a7,b7,k,mesures,params_pde]=IHM_EDP(params_pde);
if ok then
return;
end
else
if exists('%scicos_context') then
// evaluation du context
[ok,a_domaine,b_domaine,discr,signe,choix,type_meth,degre,Nbr_maillage,..
CI,CI1,CLa_type,CLa_exp,CLb_type,CLb_exp,oper,a1,b1,a2,b2,a3,b3,a4,b4,a5,b5,..
a6,b6,a7,b7,k,mesures,params_pde]=setvalue_IHM_EDP(params_pde);
end
end
//**********************************
// Get the name of the file
//***********************************
okk=%f;rdnom='PDE';ok1=%t;
while %t do
[okk,rdnom,lab]=getvalue('PLEASE, GIVE US THE BLOCK''s NAME. ',..
'New block''s name :',list('str',1),label(3));
if okk==%f then ok1=%f;return; end
label(3)=lab;
rdnom=stripblanks(rdnom);
if rdnom==emptystr() then
ok1=%f;x_message('sorry C file name not defined');
end
if ok1 then break,end
end
// arbre de decision
if (choix == 0) then
// Choix automatique
ind4=strindex(a4,'x');
ind1=strindex(a1,'x');
ind2=strindex(a2,'x');
if (ind4~=[] | ind1~=[] | ind2~=[]) then
if (signe == 1) then,
delta=1;
elseif (signe == 2) then,
delta=-1;
elseif (signe == 0) then,
delta=0;
else
x_message(['le discriminant n''est pas constant,'; 'Vous devez choisir son signe dans l''IHM']);
return;
end
else
delta=evstr(a4)^2-4*evstr(a1)*evstr(a2);
end
if (delta==[]) then, delta=0; end
type_meth=arbre_decision(delta);
end
// a voir si c'est à rajouter pour ne pas regenerer dans le cas d'eval
//if ~ok then
[flag_type,rdnom,DF_type,tt]=translate(CI,CI1,CLa_type,CLa_exp,CLb_type,CLb_exp,oper,type_meth,degre,a_domaine,..
b_domaine,Nbr_maillage,a1,b1,a2,b2,a3,b3,a4,b4,a5,b5,a6,b6,a7,b7,rdnom,mesures);
//else
// tt=label(3);
//end
// augmentation du systeme avec les noeuds fictifs
Nbr=Nbr_maillage;
if ((CLa_type == 1) & (DF_type == 0 | DF_type == 1)) | ((CLb_type == 1) & (DF_type == 0 | DF_type == 2)) then
Nbr=Nbr+1;
end
if ( mesures ==[]) then
out=Nbr_maillage;
else
out=[Nbr_maillage;size(mesures,'*')];
end
if (flag_type == 1) then
// explicite
model.sim=list(rdnom,2004);
if (find(oper == 1) ~= []) then
model.state=zeros(2*Nbr_maillage,1);
else
model.state=zeros(Nbr_maillage,1);
end
elseif (flag_type == 2) then
model.sim=list(rdnom,12004);
if (find(oper == 1) ~= []) then
if (type_meth ==3 & (find(oper == 2) ~= [] | find(oper == 4) ~= [])) then
model.state=zeros(6*Nbr_maillage,1);
elseif (type_meth == 1) then
model.state=zeros(4*Nbr,1);
else
model.state=zeros(4*Nbr_maillage,1);
end
else
if (type_meth == 3 & (find(oper == 2) ~= [] | find(oper == 4) ~= [])) then
model.state=zeros(4*Nbr_maillage,1);
elseif (type_meth == 1) then
model.state=zeros(2*Nbr,1);
else
model.state=zeros(2*Nbr_maillage,1);
end
end
end
// Ecriture, compilation et linkage du code
if (fun(3) == "clickin") then
[ok1]=CFORTREDP(rdnom,tt);
if ~ok1 then break,end
end
if ~ok then
[model,graphics,ok]=check_io(model,graphics,ones(k,1),out(:),[],[])
end
label(1)=params_pde;
label(2)=tt;
graphics.exprs=label;
x.graphics=graphics;
x.model=model;
break
end
case 'define' then
model=scicos_model()
model.state=zeros(10,1)
model.sim=list('PDE',0)
model.in=[1;1;1;1;1]
model.out=[10;0]
model.blocktype='c'
model.dep_ut=[%f %t]
//initialisation de l'ihm
params_pde=tlist(['paramspde';'a';'b';'txt_exp';'check_op1';'a1';'b1';'check_op2';'a2';'b2';..
'check_op3';'a3';'b3';'check_op4';'a4';'b4';'check_op5';'a5';'b5';'check_op6';'a6';'b6';..
'check_op7';'a7';'b7';'discr_cst';'discr_non_cst';'signe';'rad_automatique';'rad_manuel';..
'methode';'ord1';'ord2';'ord3';'degre';'nnode';'txt_pas';'CI';'dCI';'CLa';'CLa_exp';'CLb';..
'CLb_exp';'points'],"","","",'0',"","IN_EDP1(t)",'0',"","IN_EDP2(t)",'0',"","IN_EDP3(t)",..
'0',"","IN_EDP4(t)",'0',"","IN_EDP5(t)",'0',"","IN_EDP6(t)",'0',"","IN_EDP7(t)",'0','0',..
'0','0','0','0','','','','','',"","","",'0',"IN_CL1(t)",'0',"IN_CL2(t)","");
// dans label on mis infos de getvalue, infos ihm et le code C
label=list(params_pde,[],'');
gr_i=['txt=CCC;';
'xstringb(orig(1),orig(2),txt,sz(1),sz(2),''fill'');']
x=standard_define([4 4],model,label,gr_i)
end
endfunction