# Another application of dcopy subroutine

## Another application of dcopy subroutine

Hello all,

I am trying to apply dcopy to my parallel codes.In that, I want to chop one big array into several small arrays which sizes are defined by the number of threads applied.
For example,

* big_array(1~100)can beseparated into4 smallarrays such as small_array1(1~25),small_array2(26~50), small_array3(51~75), small_array4(76~100).

In this case, the small_array1,2,3, and 4 will copy values in the big_array so i need to assign the range which the small_arrays will copy from the big_array.

Rough idea for this function is

dcopy1(start,end,big_array,indx,small_array1,indx)

Cheers,

5 posts / 0 new
For more complete information about compiler optimizations, see our Optimization Notice.

That would be the Fortran-77 approach. In Fortran 2003, you can do:

```subroutine sub(A,N,...)
real(wp), dimension(N) :: A
real(wp),allocatable, dimension(:) :: A1,A2,A3
...
nby3=N/3       ! N should be an exact multiple of 3
A1=A(1:nby3); A2=A(nby3+1:2*nby3); A3=A(2*nby3+1:N)

```

How to go about this depends on what fate you have in store for the pieces so extracted.

moreover it would be faster then using dcopy for such cases.

Thank you for your response. It seems a good idea.
By the way, the output variables (A1,A2,A3)will bedepend on the number of threadassigned.
So,I am wondering ifIuse two dimensional arrays such as

real(wp), dimension(N) :: A

real(wp),allocatable, dimension(:,:) :: A1

...

A1(start(1):end(1),1) = A(start(1):end(1));
A1(start(2):end(2),2) = A(start(2):end(2));
....