!
! Copyright 2003-2013 Intel Corporation.  All Rights Reserved.
!
! The source code contained or described herein and all documents
! related to the source code ("Material") are owned by Intel Corporation
! or its suppliers or licensors.  Title to the Material remains with
! Intel Corporation or its suppliers and licensors.  The Material is
! protected by worldwide copyright and trade secret laws and treaty
! provisions.  No part of the Material may be used, copied, reproduced,
! modified, published, uploaded, posted, transmitted, distributed, or
! disclosed in any way without Intel's prior express written permission.
!
! No license under any patent, copyright, trade secret or other
! intellectual property right is granted to or conferred upon you by
! disclosure or delivery of the Materials, either expressly, by
! implication, inducement, estoppel or otherwise.  Any license under
! such intellectual property rights must be express and approved by
! Intel in writing.
!
        program main
        use mpi
        implicit none

        integer i, size, rank, namelen, ierr
        character (len=MPI_MAX_PROCESSOR_NAME) :: name
        integer stat(MPI_STATUS_SIZE)

!#######################################################################################
!The lines below and the subroutine plot has been added to the Intel test routine
!in order to test if QuickWin can be used together with MPI
        !Do some sequential calculations
!#######################################################################################        
        call MPI_INIT (ierr)
        
        call MPI_COMM_SIZE (MPI_COMM_WORLD, size, ierr)
        call MPI_COMM_RANK (MPI_COMM_WORLD, rank, ierr)
        call MPI_GET_PROCESSOR_NAME (name, namelen, ierr)

        if (rank .eq. 0) then
          call plot(1) !plots a green rectangle
        end if

        if (rank .eq. 0) then
          call plot(2) !plots a red rectangle
          read(5,100)i
          100 format(i4)
        end if
       
        call MPI_FINALIZE (ierr)
        end
!#######################################################################################        
SUBROUTINE plot(iparm)
!======================================================================================
USE DFLIB
IMPLICIT NONE
INTEGER iparm
!--------------------------------------------------------------------------------------
INTEGER*2 result,x1,x2,y1,y2
INTEGER*4 colbk,coldgr,limx,limy,lx,ly
LOGICAL*4 status
DOUBLE PRECISION rlx,rly,rxulc,ryulc
!---------------------------------------------------------------------------------------
TYPE (WINDOWCONFIG) wc
!---------------------------------------------------------------------------------------
status=GETWINDOWCONFIG(wc); limx=wc.numxpixels-1; limy=wc.numypixels-1
rxulc=0.2
ryulc=0.2
IF(iparm.EQ.1)rxulc=0.1
IF(iparm.EQ.2)rxulc=0.21
rlx=0.1
rly=0.1
colbk=0
IF(iparm.EQ.1)coldgr=10
IF(iparm.EQ.2)coldgr=12
x1=rxulc*limx; y1=ryulc*limy; x2=(rxulc+rlx)*limx; y2=(ryulc+rly)*limy
CALL SETVIEWPORT(INT2(x1),INT2(y1),INT2(x2),INT2(y2))
!From now on all positions are given relative to the viewport upper left corner
result=SETBKCOLOR(colbk) !Set background color
CALL CLEARSCREEN($GVIEWPORT); 
result=SETCOLOR(INT2(coldgr))
CALL SETLINESTYLE(#FFFF)
!---------------------------------------------------------------------------------------
lx=rlx*limx; ly=rly*limy
!---------------------------------------------------------------------------------------
!Plot frame
result=RECTANGLE($GBORDER,0,0,INT2(lx),INT2(ly))
!---------------------------------------------------------------------------------------
RETURN; END
!#######################################################################################        

