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

