1 | MODULE SUMP_TRANS_PRELEG_MOD |
---|
2 | CONTAINS |
---|
3 | SUBROUTINE SUMP_TRANS_PRELEG |
---|
4 | |
---|
5 | ! Set up distributed environment for the transform package (part 1) |
---|
6 | |
---|
7 | USE PARKIND1 ,ONLY : JPIM ,JPRB |
---|
8 | |
---|
9 | USE TPM_GEN |
---|
10 | USE TPM_DIM |
---|
11 | USE TPM_DISTR |
---|
12 | |
---|
13 | USE SUWAVEDI_MOD |
---|
14 | USE ABORT_TRANS_MOD |
---|
15 | |
---|
16 | IMPLICIT NONE |
---|
17 | |
---|
18 | INTEGER(KIND=JPIM) :: JA,JJ,JM,JMLOC,ILATPP,IRESTL,IMLOC,IDT,INM |
---|
19 | |
---|
20 | INTEGER(KIND=JPIM) :: IMYMS(R%NSMAX+1),INUMTPP(NPRTRW) |
---|
21 | INTEGER(KIND=JPIM) :: IDUMI1,IDUMI2,IDUMI3 |
---|
22 | INTEGER(KIND=JPIM) :: IDUM2(0:R%NSMAX), IDUM3(NPRTRW+1), IDUM4(R%NSMAX+1) |
---|
23 | |
---|
24 | LOGICAL :: LLP1,LLP2 |
---|
25 | |
---|
26 | ! ------------------------------------------------------------------ |
---|
27 | |
---|
28 | LLP1 = NPRINTLEV>0 |
---|
29 | LLP2 = NPRINTLEV>1 |
---|
30 | IF(LLP1) WRITE(NOUT,*) '=== ENTER ROUTINE SUMP_TRANS_PRELEG ===' |
---|
31 | |
---|
32 | !* 1. Initialize partitioning of wave numbers to PEs ! |
---|
33 | ! ---------------------------------------------- |
---|
34 | |
---|
35 | ALLOCATE(D%NASM0(0:R%NSMAX)) |
---|
36 | IF(LLP2)WRITE(NOUT,9) 'D%NASM0 ',SIZE(D%NASM0 ),SHAPE(D%NASM0 ) |
---|
37 | ALLOCATE(D%NATM0(0:R%NTMAX)) |
---|
38 | IF(LLP2)WRITE(NOUT,9) 'D%NATM0 ',SIZE(D%NATM0 ),SHAPE(D%NATM0 ) |
---|
39 | ALLOCATE(D%NUMPP(NPRTRW)) |
---|
40 | IF(LLP2)WRITE(NOUT,9) 'D%NUMPP ',SIZE(D%NUMPP ),SHAPE(D%NUMPP ) |
---|
41 | ALLOCATE(D%NPOSSP(NPRTRW+1)) |
---|
42 | IF(LLP2)WRITE(NOUT,9) 'D%NPOSSP',SIZE(D%NPOSSP ),SHAPE(D%NPOSSP ) |
---|
43 | ALLOCATE(D%NPROCM(0:R%NSMAX)) |
---|
44 | IF(LLP2)WRITE(NOUT,9) 'D%NPROCM',SIZE(D%NPROCM ),SHAPE(D%NPROCM ) |
---|
45 | ALLOCATE(D%NPTRMS(NPRTRW)) |
---|
46 | IF(LLP2)WRITE(NOUT,9) 'D%NPTRMS ',SIZE(D%NPTRMS ),SHAPE(D%NPTRMS ) |
---|
47 | ALLOCATE(D%NALLMS(R%NSMAX+1)) |
---|
48 | IF(LLP2)WRITE(NOUT,9) 'D%NALLMS ',SIZE(D%NALLMS ),SHAPE(D%NALLMS ) |
---|
49 | ALLOCATE(D%NDIM0G(0:R%NSMAX)) |
---|
50 | IF(LLP2)WRITE(NOUT,9) 'D%NDIM0G ',SIZE(D%NDIM0G ),SHAPE(D%NDIM0G ) |
---|
51 | |
---|
52 | CALL SUWAVEDI(R%NSMAX,R%NTMAX,NPRTRW,MYSETW,& |
---|
53 | &D%NASM0,D%NSPOLEGL,D%NPROCM,D%NUMPP,& |
---|
54 | &D%NSPEC,D%NSPEC2,D%NSPEC2MX,D%NPOSSP,IMYMS,& |
---|
55 | &D%NPTRMS,D%NALLMS,D%NDIM0G) |
---|
56 | CALL SUWAVEDI(R%NTMAX,R%NTMAX,NPRTRW,MYSETW,& |
---|
57 | &KASM0=D%NATM0,KUMPP=INUMTPP,KSPEC2=D%NTPEC2) |
---|
58 | |
---|
59 | D%NUMP = D%NUMPP (MYSETW) |
---|
60 | ALLOCATE(D%MYMS(D%NUMP)) |
---|
61 | IF(LLP2)WRITE(NOUT,9) 'D%MYMS ',SIZE(D%MYMS ),SHAPE(D%MYMS ) |
---|
62 | D%MYMS(:) = IMYMS(1:D%NUMP) |
---|
63 | D%NUMTP = INUMTPP(MYSETW) |
---|
64 | |
---|
65 | IF (D%NUMP == 0) THEN |
---|
66 | WRITE(NERR,'("SUMP: NPRTRW TOO LARGE FOR SPECTRAL RESOLUTION",/,& |
---|
67 | &"NOTE MAX VALUE FOR Tnnn CASE IS nnn+1",/,& |
---|
68 | &"MORE PROCESSORS CAN BE USED BY INCREASING NPRTRV")') |
---|
69 | CALL ABORT_TRANS('NPRTRW TOO LARGE FOR SPECTRAL RESOLUTION') |
---|
70 | ENDIF |
---|
71 | |
---|
72 | ALLOCATE(D%NLATLS(NPRTRW)) |
---|
73 | IF(LLP2)WRITE(NOUT,9) 'D%NLATLS',SIZE(D%NLATLS ),SHAPE(D%NLATLS ) |
---|
74 | ALLOCATE(D%NLATLE(NPRTRW)) |
---|
75 | IF(LLP2)WRITE(NOUT,9) 'D%NLATLE',SIZE(D%NLATLE ),SHAPE(D%NLATLE ) |
---|
76 | |
---|
77 | D%NLATLS(:) = 9999 |
---|
78 | D%NLATLE(:) = -1 |
---|
79 | |
---|
80 | ILATPP = R%NDGNH/NPRTRW |
---|
81 | IRESTL = R%NDGNH-NPRTRW*ILATPP |
---|
82 | DO JA=1,NPRTRW |
---|
83 | IF (JA > IRESTL) THEN |
---|
84 | D%NLATLS(JA) = IRESTL*(ILATPP+1)+(JA-IRESTL-1)*ILATPP+1 |
---|
85 | D%NLATLE(JA) = D%NLATLS(JA)+ILATPP-1 |
---|
86 | ELSE |
---|
87 | D%NLATLS(JA) = (JA-1)*(ILATPP+1)+1 |
---|
88 | D%NLATLE(JA) = D%NLATLS(JA)+ILATPP |
---|
89 | ENDIF |
---|
90 | ENDDO |
---|
91 | |
---|
92 | IF (LLP1) THEN |
---|
93 | WRITE(NOUT,'('' D%NLATLS '')') |
---|
94 | WRITE(NOUT,'(20(1X,I4))')(D%NLATLS(JJ),JJ=1,NPRTRW) |
---|
95 | WRITE(NOUT,'('' D%NLATLE '')') |
---|
96 | WRITE(NOUT,'(20(1X,I4))')(D%NLATLE(JJ),JJ=1,NPRTRW) |
---|
97 | ENDIF |
---|
98 | |
---|
99 | ALLOCATE(D%NPMT(0:R%NSMAX)) |
---|
100 | IF(LLP2)WRITE(NOUT,9) 'D%NPMT ',SIZE(D%NPMT ),SHAPE(D%NPMT ) |
---|
101 | ALLOCATE(D%NPMS(0:R%NSMAX)) |
---|
102 | IF(LLP2)WRITE(NOUT,9) 'D%NPMS ',SIZE(D%NPMS ),SHAPE(D%NPMS ) |
---|
103 | ALLOCATE(D%NPMG(0:R%NSMAX)) |
---|
104 | IF(LLP2)WRITE(NOUT,9) 'D%NPMG ',SIZE(D%NPMG ),SHAPE(D%NPMG ) |
---|
105 | IDT = R%NTMAX-R%NSMAX |
---|
106 | INM = 0 |
---|
107 | DO JMLOC=1,D%NUMP |
---|
108 | IMLOC = D%MYMS(JMLOC) |
---|
109 | D%NPMT(IMLOC) = INM |
---|
110 | D%NPMS(IMLOC) = INM+IDT |
---|
111 | INM = INM+R%NTMAX+2-IMLOC |
---|
112 | ENDDO |
---|
113 | INM = 0 |
---|
114 | DO JM=0,R%NSMAX |
---|
115 | D%NPMG(JM) = INM |
---|
116 | INM = INM+R%NTMAX+2-JM |
---|
117 | ENDDO |
---|
118 | |
---|
119 | D%NLEI3D = (R%NLEI3-1)/NPRTRW+1 |
---|
120 | |
---|
121 | ! ------------------------------------------------------------------ |
---|
122 | 9 FORMAT(1X,'ARRAY ',A10,' ALLOCATED ',8I8) |
---|
123 | |
---|
124 | END SUBROUTINE SUMP_TRANS_PRELEG |
---|
125 | END MODULE SUMP_TRANS_PRELEG_MOD |
---|