// Scicos // // Copyright (C) INRIA - Author : EADS-CCR // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // // See the file ../license.txt // function [x,y,typ]=PDE(job,arg1,arg2) // développé par EADS-CCR // fonction graphique 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 "set" then x=arg1; graphics=arg1.graphics; label=graphics.exprs model=arg1.model; params_pde=label(1); while %t do [ln,fun]=where(); if ~or(fun == "do_eval") 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]=scicos_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 // always ulink and link [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 scicos_getvalue, infos ihm et le code C label=list(params_pde,[],""); gr_i=[] x=standard_define([3 3],model,label,gr_i) end endfunction