/[MITgcm]/MITgcm/pkg/exch2/exch2_recv_rx2.template
ViewVC logotype

Contents of /MITgcm/pkg/exch2/exch2_recv_rx2.template

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.12 - (show annotations) (download)
Tue Sep 4 00:45:25 2012 UTC (11 years, 9 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64y, checkpoint64x, checkpoint64z, checkpoint64q, checkpoint64p, checkpoint64s, checkpoint64r, checkpoint64u, checkpoint64t, checkpoint64w, checkpoint64v, checkpoint64i, checkpoint64h, checkpoint64k, checkpoint64j, checkpoint64m, checkpoint64l, checkpoint64o, checkpoint64n, checkpoint64a, checkpoint64c, checkpoint64b, checkpoint64e, checkpoint64d, checkpoint64g, checkpoint64f, checkpoint63s, checkpoint64, checkpoint65, checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint65j, checkpoint65k, checkpoint65h, checkpoint65i, checkpoint65n, checkpoint65o, checkpoint65l, checkpoint65m, checkpoint65b, checkpoint65c, checkpoint65a, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e, HEAD
Changes since 1.11: +3 -3 lines
rename "exch2_tProc" to "W2_tileProc"

1 C $Header: /u/gcmpack/MITgcm/pkg/exch2/exch2_recv_rx2.template,v 1.11 2010/04/23 20:21:07 jmc Exp $
2 C $Name: $
3
4 #include "CPP_EEOPTIONS.h"
5 #include "W2_OPTIONS.h"
6
7 CBOP 0
8 C !ROUTINE: EXCH2_RECV_RX2
9
10 C !INTERFACE:
11 SUBROUTINE EXCH2_RECV_RX2(
12 I thisTile, nN,
13 I e2BufrRecSize,
14 I iBufr1, iBufr2,
15 I e2Bufr1_RX, e2Bufr2_RX,
16 I commSetting, myThid )
17
18 C !DESCRIPTION:
19 C Two components vector field Exchange:
20 C Receive into buffer exchanged data from the source Process.
21 C buffer data will be used to fill in the tile-edge overlap region.
22
23 C !USES:
24 IMPLICIT NONE
25
26 #include "SIZE.h"
27 #include "EEPARAMS.h"
28 #include "EESUPPORT.h"
29 #include "W2_EXCH2_SIZE.h"
30 #include "W2_EXCH2_TOPOLOGY.h"
31
32 C !INPUT/OUTPUT PARAMETERS:
33 C === Routine arguments ===
34 C thisTile :: receiving tile Id. number
35 C nN :: Neighbour entry that we are processing
36 C e2BufrRecSize :: Number of elements in each entry of e2Bufr1_RX
37 C iBufr1 :: number of buffer-1 elements to transfer
38 C iBufr2 :: number of buffer-2 elements to transfer
39 C e2Bufr1_RX :: Data transport buffer array. This array is used in one of
40 C e2Bufr2_RX :: two ways. For PUT communication the entry in the buffer
41 C :: associated with the source for this receive (determined
42 C :: from the opposing_send index) is read.
43 C :: For MSG communication the entry in the buffer associated
44 C :: with this neighbor of this tile is used as a receive
45 C :: location for loading a linear stream of bytes.
46 C commSetting :: Mode of communication used to exchange with this neighbor
47 C myThid :: my Thread Id. number
48
49 INTEGER thisTile, nN
50 INTEGER e2BufrRecSize
51 INTEGER iBufr1, iBufr2
52 _RX e2Bufr1_RX( e2BufrRecSize )
53 _RX e2Bufr2_RX( e2BufrRecSize )
54 CHARACTER commSetting
55 INTEGER myThid
56 CEOP
57
58 #ifdef ALLOW_USE_MPI
59 C !LOCAL VARIABLES:
60 C == Local variables ==
61 C soT :: Source tile Id. number
62 C oNb :: Opposing send record number
63 INTEGER soT
64 INTEGER oNb
65
66 C MPI setup
67 INTEGER theTag1, theTag2, theType
68 INTEGER sProc, tProc
69 INTEGER mpiStatus(MPI_STATUS_SIZE), mpiRc
70 #ifdef W2_E2_DEBUG_ON
71 CHARACTER*(MAX_LEN_MBUF) msgBuf
72 #endif
73
74 soT = exch2_neighbourId(nN, thisTile )
75 oNb = exch2_opposingSend(nN, thisTile )
76
77 C Handle receive end data transport according to communication mechanism
78 C between source and target tile
79 IF ( commSetting .EQ. 'M' ) THEN
80 C Setup MPI stuff here
81 theTag1 = (soT-1)*W2_maxNeighbours*2 + oNb-1
82 theTag2 = (soT-1)*W2_maxNeighbours*2 + W2_maxNeighbours + oNb-1
83 tProc = W2_tileProc(thisTile)-1
84 sProc = W2_tileProc(soT)-1
85 theType = _MPI_TYPE_RX
86 CALL MPI_Recv( e2Bufr1_RX, iBufr1, theType, sProc,
87 & theTag1, MPI_COMM_MODEL, mpiStatus, mpiRc )
88 CALL MPI_Recv( e2Bufr2_RX, iBufr2, theType, sProc,
89 & theTag2, MPI_COMM_MODEL, mpiStatus, mpiRc )
90 #ifdef W2_E2_DEBUG_ON
91 WRITE(msgBuf,'(A,I4,A,I4,A)')
92 & ' RECV FROM TILE=', soT, ' (proc = ',sProc,')'
93 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
94 I SQUEEZE_RIGHT, myThid )
95 WRITE(msgBuf,'(A,I4,A,I4,A)')
96 & ' INTO TILE=', thisTile, ' (proc = ',tProc,')'
97 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
98 I SQUEEZE_RIGHT, myThid )
99 WRITE(msgBuf,'(A,I10)') ' TAG1=', theTag1
100 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
101 I SQUEEZE_RIGHT, myThid )
102 WRITE(msgBuf,'(A,I4)') ' NEL1=', iBufr1
103 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
104 I SQUEEZE_RIGHT, myThid )
105 WRITE(msgBuf,'(A,I10)') ' TAG2=', theTag2
106 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
107 I SQUEEZE_RIGHT, myThid )
108 WRITE(msgBuf,'(A,I4)') ' NEL2=', iBufr2
109 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
110 I SQUEEZE_RIGHT, myThid )
111 #endif /* W2_E2_DEBUG_ON */
112 ENDIF
113 #endif /* ALLOW_USE_MPI */
114
115 RETURN
116 END
117
118 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
119
120 CEH3 ;;; Local Variables: ***
121 CEH3 ;;; mode:fortran ***
122 CEH3 ;;; End: ***

  ViewVC Help
Powered by ViewVC 1.1.22