.. Copyright 1988-2021 Free Software Foundation, Inc. This is part of the GCC manual. For copying conditions, see the GPL license file .. _co_reduce: CO_REDUCE --- Reduction of values on the current set of images ************************************************************** .. index:: CO_REDUCE .. index:: Collectives, generic reduction .. function:: CO_REDUCE ``CO_REDUCE`` determines element-wise the reduction of the value of :samp:`{A}` on all images of the current team. The pure function passed as :samp:`{OPERATOR}` is used to pairwise reduce the values of :samp:`{A}` by passing either the value of :samp:`{A}` of different images or the result values of such a reduction as argument. If :samp:`{A}` is an array, the deduction is done element wise. If :samp:`{RESULT_IMAGE}` is present, the result values are returned in :samp:`{A}` on the specified image only and the value of :samp:`{A}` on the other images become undefined. If :samp:`{RESULT_IMAGE}` is not present, the value is returned on all images. If the execution was successful and :samp:`{STAT}` is present, it is assigned the value zero. If the execution failed, :samp:`{STAT}` gets assigned a nonzero value and, if present, :samp:`{ERRMSG}` gets assigned a value describing the occurred error. :param A: is an ``INTENT(INOUT)`` argument and shall be nonpolymorphic. If it is allocatable, it shall be allocated; if it is a pointer, it shall be associated. :samp:`{A}` shall have the same type and type parameters on all images of the team; if it is an array, it shall have the same shape on all images. :param OPERATOR: pure function with two scalar nonallocatable arguments, which shall be nonpolymorphic and have the same type and type parameters as :samp:`{A}`. The function shall return a nonallocatable scalar of the same type and type parameters as :samp:`{A}`. The function shall be the same on all images and with regards to the arguments mathematically commutative and associative. Note that :samp:`{OPERATOR}` may not be an elemental function, unless it is an intrisic function. :param RESULT_IMAGE: (optional) a scalar integer expression; if present, it shall have the same value on all images and refer to an image of the current team. :param STAT: (optional) a scalar integer variable :param ERRMSG: (optional) a scalar character variable :samp:`{Standard}:` Technical Specification (TS) 18508 or later :samp:`{Class}:` Collective subroutine :samp:`{Syntax}:` .. code-block:: fortran CALL CO_REDUCE(A, OPERATOR, [, RESULT_IMAGE, STAT, ERRMSG]) :samp:`{Example}:` .. code-block:: fortran program test integer :: val val = this_image () call co_reduce (val, result_image=1, operator=myprod) if (this_image() == 1) then write(*,*) "Product value", val ! prints num_images() factorial end if contains pure function myprod(a, b) integer, value :: a, b integer :: myprod myprod = a * b end function myprod end program test :samp:`{Note}:` While the rules permit in principle an intrinsic function, none of the intrinsics in the standard fulfill the criteria of having a specific function, which takes two arguments of the same type and returning that type as result. :samp:`{See also}:` CO_MIN, CO_MAX, CO_SUM, CO_BROADCAST