{***	ELM-MODEL	***}

  procedure ELM;

   var

    KPs: integer;									
    Liste: integer;									
    KPNr: integer;								
    VAIntens: real;
    count: integer;
    PeriReizKomm: real;
    EinstKomm: real;
    ArguQualiKomm: real;
    derBeeinflusser: CIndividuum;
    lokWerBeeinflusst: integer;

   function FctVerarbMot: real;	{* Box 1 *}
   begin
    FctVerarbMot := Betroff * (1 + (0.5 - ((abs(Betroff - 5) / 10))));
   end;

   function FctVerarbFkt: real;	{* Box 2 *}
   begin
    FctVerarbFkt := ArguQuali * (1 - (Ablenkung / 10));
   end;

   function FctVAIntens: real;		{* Box 3 *}
    var
     intrVAI, Hilfsvar: real;
   begin
    intrVAI := sqrt(VerarbMot * VerarbFkt);

    Hilfsvar := intrVAI + (((PeriReizKomm - 5) / 2) * (1 - (abs(intrVAI - 5) / 5)));

    PoolVAIntensELM := Hilfsvar + PoolVAIntensELM;
    FctVAIntens := Hilfsvar;
   end;

   function FctEinst: real;		{* Box 7 *}
    var
     EinstFaktor: real;

    function Fctperi: real;		{* Box 5 *}
    begin
     Fctperi := ((PeriReizKomm - 5) / 1.65);
    end;

    function Fctzent: real;		{* Box 6 *}
    begin
     if ((Voreingenom > 5) and (EinstKomm < 5)) or ((Voreingenom < 5) and (EinstKomm > 5)) then
      Fctzent := ((ArguQualiKomm - 5) / 2.5) + ((((5 - ArguQualiKomm) / 5) - 2) * (sqr((abs(Voreingenom - 5)) / 5)))
     else
      Fctzent := ((ArguQualiKomm - 5) / 2.5) + ((((5 - ArguQualiKomm) / 5) + 2) * (sqr((abs(Voreingenom - 5)) / 5)));
    end;

   begin
    EinstFaktor := (Fctzent * (VAIntens / 10)) + (Fctperi * (1 - (VAIntens / 10)));

    FctEinst := VarCheck(Einst + (EinstFaktor * ((EinstKomm - Einst) / 3)));
   end;

   function FctArguQualiNeuELM: real;	{* Box 8 *}
    var
     AQzent, AQperi, AQEinfluss: real;
   begin

    if (ArguQualiKomm > ArguQuali) then
     AQzent := ((ArguQualiKomm - ArguQuali) / 10)
    else
     AQzent := 0;

    AQperi := ((ArguQualiKomm - ArguQuali) / 10);

    AQEinfluss := (AQzent * (VAIntens / 10)) + (AQperi * (1 - (VAIntens / 10)));

    FctArguQualiNeuELM := VarCheck(ArguQuali + AQEinfluss);
   end;

  begin							{** BEGIN ELM-Mainproc **}
   if ID <> 1 then
    begin
     PoolVAIntensELM := 0;
     count := 0;

     Voreingenom := (WertH + Einst) / 2;

     for Liste := Freunde to Nachbarn do			
      begin
       KPs := (GetAnzKPs(Liste));
       if not ListIsEmpty(Liste) then
       for KPNr := 1 to KPs do					
       begin

       count := count + 1;
       theKP := GetKP(Liste, KPNr);			
       PeriReizKomm := theKP.GiveOutValue(6);
       EinstKomm := theKP.GiveOutValue(1);
       ArguQualiKomm := theKP.GiveOutValue(2);

       VerarbFkt := FctVerarbFkt;
       VerarbMot := FctVerarbMot;
       VAIntens := FctVAIntens;
       Einst := FctEinst;
       ArguQuali := FctArguQualiNeuELM;

       end;	 {* for KPNr ... *}
      end;	{* for Liste ... *}
     theKP := nil;

     if count <> 0 then
      PoolVAIntensELM := PoolVAIntensELM / count;

    end;	{* if ID ... *)
  end;
{END	ELM-Mainproc}