From: "Nasser M. Abbasi" <nma@12000.org>
Subject: Re: basic question on adding 2 arrays
Date: Sat, 12 Jul 2014 23:09:13 -0500
Date: 2014-07-12T23:09:13-05:00 [thread overview]
Message-ID: <lpt0pj$jc0$1@speranza.aioe.org> (raw)
In-Reply-To: lpsup7$fpu$1@speranza.aioe.org
On 7/12/2014 10:34 PM, Nasser M. Abbasi wrote:
> ------------------------------------------------
> with Ada.Text_IO; use Ada.Text_IO;
>
> procedure foo is
> nPoints : constant Integer := 100;
> type grid_type is array (1 .. nPoints) of Float;
> now : grid_type := (others => 0.0);
> next: grid_type := now;
> begin
> next(2..now'length-1) := 1/2*
> (now(1..now'length-1)+now(3..now'length));
> end foo;
> --------------------------------------------------
>
> I am basically trying to update an array (this is a finite difference
> scheme). The error is that "+" is not defined for the grid_type,
> which I understand ofcourse. But wanted to ask if there is a way
> to do this in-line without having to define a method for this.
>
> For example, in Matlab or Fortran something like this works:
>
> next(2:end-1) = 1/2*(now(1:end-2)+now(3:end));
>
This is what I tried. But after making special
"+" to add the 2 slices of grid_type, by making
new grid_type2 which is 2 elements smaller than
grid_type, how does not tell Ada to move this
grid_type2 into grid_type since they are of
different type? Do I need another loop for this?
----------------------------
with Ada.Text_IO; use Ada.Text_IO;
procedure foo is
nPoints : constant Integer := 100;
type grid_type is array (1 .. nPoints) of Float;
type grid_type2 is array (1 .. nPoints - 2) of Float;
now : grid_type := (others => 0.0);
tmp: grid_type2; -- just to do the slices
next : grid_type := (others => 0.0);
function "+" (left, right : in grid_type2) return grid_type2 is
res : grid_type2;
begin
for i in grid_type2'Range loop
res (i) := left (i) + right (i);
end loop;
return res;
end "+";
begin
tmp :=
grid_type2 (now (2 .. now'Length - 1)) +
grid_type2 (now (3 .. now'Length));
next(2..now'length-1) := tmp; -- stuck on this one ;)
end foo;
-----------------------------
I am sure there must be a better way to do all this, I can't
be making new type for each different slice I want to
work with?
--Nasser
next prev parent reply other threads:[~2014-07-13 4:09 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-13 3:34 basic question on adding 2 arrays Nasser M. Abbasi
2014-07-13 4:09 ` Nasser M. Abbasi [this message]
2014-07-13 4:35 ` Nasser M. Abbasi
2014-07-13 6:33 ` Jeffrey Carter
2014-07-13 10:10 ` AdaMagica
2014-07-13 16:25 ` Jacob Sparre Andersen
2014-07-13 21:53 ` Jeffrey Carter
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox