35
36
37
38 USE my_alloc_mod
39
40
41
42#include "implicit_f.inc"
43
44
45
46#include "units_c.inc"
47#include "task_c.inc"
48#include "scr14_c.inc"
49#include "spmd_c.inc"
50#include "com01_c.inc"
51
52
53
54 INTEGER ICODE(*),ITAB(*), NUMNOD,ITABG(*),LENG,
55 . NODGLOB(*),ISKEW(*),NODTAG(*)
56
57
58
59 INTEGER I,N, IC, IC1, IC2, IROT, ITRA, ISK
60 INTEGER,DIMENSION(:),ALLOCATABLE::ICODEG
61 INTEGER,DIMENSION(:),ALLOCATABLE::ISKEWG
62 INTEGER,DIMENSION(:),ALLOCATABLE::NODTAGLOB
63 CHARACTER TRA*3,ROT*3
64 CHARACTER*100 LINE
65
66 CALL my_alloc(icodeg,leng)
67 CALL my_alloc(iskewg,leng)
68 CALL my_alloc(nodtaglob,leng)
69
70 IF (nspmd > 1) THEN
74 IF (ispmd/=0) RETURN
75 ENDIF
76
77
78 IF (izipstrs == 0) THEN
79 WRITE(iugeo,'(A)')'/NBCS/1 '
80 WRITE(iugeo,'(A)')' INITIAL BOUNDARY CONDITIONS'
81 WRITE(iugeo,'(2A)')'# TRAROT SKEW NODE'
82 ELSE
83 WRITE(line,'(A)')'/NBCS/1'
85 WRITE(line,'(A)')' INITIAL BOUNDARY CONDITIONS'
87 WRITE(line,'(A)')
88 . '# TRAROT SKEW NODE'
90 ENDIF
91
92
93 IF (nspmd == 1) THEN
94 DO n=1,numnod
95 IF(nodtag(n) /= 0) THEN
96 ic=icode(n)
97 ic1=ic/512
98 itra = 1
99 irot = 1
100 tra = '000'
101 rot = '000'
102 IF(ic1 == 7) THEN
103 tra = '111'
104 ELSEIF(ic1 == 6) THEN
105 '110'
106 ELSEIF(ic1 == 5) THEN
107 tra = '101'
108 ELSEIF(ic1 == 4) THEN
109 tra = '100'
110 ELSEIF(ic1 == 3) THEN
111 tra = '011'
112 ELSEIF(ic1 == 2) THEN
113 tra = '010'
114 ELSEIF(ic1 == 1) THEN
115 tra = '001'
116 ELSE
117 itra = 0
118 ENDIF
119 IF(iroddl>0)THEN
120 ic2=(ic-512*ic1)/64
121 IF(ic2 == 7) THEN
122 rot = '111'
123 ELSEIF(ic2 == 6) THEN
124 rot = '110'
125 ELSEIF(ic2 == 5) THEN
126 rot = '101'
127 ELSEIF(ic2 == 4) THEN
128 rot = '100'
129 ELSEIF(ic2 == 3) THEN
130 rot = '011'
131 ELSEIF(ic2 == 2) THEN
132 rot = '010'
133 ELSEIF(IC2 == 1) THEN
134 ROT = '001'
135 ELSE
136 IROT = 0
137 ENDIF
138 ELSE
139 IROT = 0
140 ENDIF
141
142.AND. IF(ITRA/=0IROT/=0)THEN
143 ISK = ISKEW(N) -1
144 IF (IZIPSTRS == 0) THEN
145 WRITE(IUGEO,'(3x,a3,1x,a3,i10,i10)')
146 . TRA,ROT,ISK,ITAB(N)
147 ELSE
148 WRITE(LINE,'(3x,a3,1x,a3,i10,i10)')
149 . TRA,ROT,ISK,ITAB(N)
150 CALL STRS_TXT50(LINE,100)
151 ENDIF
152 ENDIF
153 ENDIF
154 END DO
155 ELSE
156 DO N=1,NUMNODG
157 IF(NODTAGLOB(N) /= 0) THEN
158 IC=ICODEG(N)
159 IC1=IC/512
160 ITRA = 1
161 IROT = 1
162 TRA = '000'
163 ROT = '000'
164 IF(IC1 == 7) THEN
165 TRA = '111'
166 ELSEIF(IC1 == 6) THEN
167 TRA = '110'
168 ELSEIF(IC1 == 5) THEN
169 TRA = '101'
170 ELSEIF(IC1 == 4) THEN
171 TRA = '100'
172 ELSEIF(IC1 == 3) THEN
173 TRA = '011'
174 ELSEIF(IC1 == 2) THEN
175 TRA = '010'
176 ELSEIF(IC1 == 1) THEN
177 TRA = '001'
178 ELSE
179 ITRA = 0
180 ENDIF
181 IF(IRODDL>0)THEN
182 IC2=(IC-512*IC1)/64
183 IF(IC2 == 7) THEN
184 ROT = '111'
185 ELSEIF(IC2 == 6) THEN
186 ROT = '110'
187 ELSEIF(IC2 == 5) THEN
188 ROT = '101'
189 ELSEIF(IC2 == 4) THEN
190 ROT = '100'
191 ELSEIF(IC2 == 3) THEN
192 ROT = '011'
193 ELSEIF(IC2 == 2) THEN
194 ROT = '010'
195 ELSEIF(IC2 == 1) THEN
196 ROT = '001'
197 ELSE
198 IROT = 0
199 ENDIF
200 ELSE
201 IROT = 0
202 ENDIF
203
204.AND. IF(ITRA/=0IROT/=0)THEN
205 ISK = ISKEWG(N) -1
206 IF (IZIPSTRS == 0) THEN
207 WRITE(IUGEO,'(3x,a3,1x,a3,i10,i10)')
208 . TRA,ROT,ISK,ITABG(N)
209 ELSE
210 WRITE(LINE,'(3x,a3,1x,a3,i10,i10)')
211 . TRA,ROT,ISK,ITABG(N)
212 CALL STRS_TXT50(LINE,100)
213 END IF
214 END IF
215 ENDIF
216 END DO
217 ENDIF
218
219
220 DEALLOCATE(ICODEG)
221 DEALLOCATE(ISKEWG)
222 DEALLOCATE(NODTAGLOB)
223
224 RETURN
subroutine spmd_istat_gath(vi, nodglob, vigath)
subroutine strs_txt50(text, length)