960
961
962
963
964 USE intbufdef_mod
967
968
969
970#include "implicit_f.inc"
971
972
973
974#include "com01_c.inc"
975#include "sms_c.inc"
976#include "task_c.inc"
977#include "comlock.inc"
978
979
980
981 INTEGER NIN, NI25, NSN, NSNR, ITYP, IFQ, INACTI, IGAP, INTTH, ILEV,
982 . RSIZ, ISIZ, INTFRIC, IVIS2, SIZBUFS(NSPMD)
983 INTEGER ITAB(*), INDEX(*), FR_SLIDE(4,*),
984 . KINET(*), NODNX_SMS(*)
985 INTEGER IAD_FRNOR(NINTER25,NSPMD+1),FR_NOR(*), LENS,
986 . NADD(*), KADD(*), MAIN_PROC(NUMNOD)
987 INTEGER, INTENT(IN) :: ICODT(*),ISKEW(*)
989 . x(3,*), v(3,*), ms(*), temp(*)
990 TYPE(INTBUF_STRUCT_) :: INTBUF_TAB
991 TYPE(real_pointer), DIMENSION(NSPMD,NINTER25) :: RBUF
992 TYPE(int_pointer) , DIMENSION(NSPMD,NINTER25) :: IBUF
993 INTEGER , INTENT(IN) :: ISTIF_MSDT, IFSUB_CAREA
994 my_real ,
INTENT(IN) :: intarean(numnod)
995
996
997
998#include "com04_c.inc"
999
1000
1001
1002 INTEGER I, J, K, N, NOR, NOD,
1003 . LOC_PROC, P, IADLEN, NS, II, IDEB
1004 INTEGER NSEND, LR, LI, RSHIFT,
1005
1006
1007
1008 loc_proc = ispmd+1
1009
1010 ideb = 0
1011 DO p=1,nspmd
1012 IF(p/=loc_proc)THEN
1013 IFTHEN
1014
1015 nsend = sizbufs(p)
1016
1017
1018 lr = 0
1019 li = 0
1020
1021 DO j=1,nsend
1022 i = index(ideb+j)
1023 IF(i <= nsn)THEN
1024 nod = intbuf_tab%NSV(i)
1025 rbuf(p,ni25)%p(lr+1) = x(1,nod)
1026 rbuf(p,ni25)%p(lr+2) = x(2,nod)
1027 rbuf(p,ni25)%p(lr+3) = x(3,nod)
1028 rbuf(p,ni25)%p(lr+4) = v(1,nod)
1029 rbuf(p,ni25)%p(lr+5) = v(2,nod)
1030 rbuf(p,ni25)%p(lr+6) = v(3,nod)
1031 rbuf(p,ni25)%p(lr+7) = ms(nod)
1032 rbuf(p,ni25)%p(lr+8) = intbuf_tab%STFNS(i)
1033 ibuf(p,ni25)%p(li+1) = intbuf_tab%NSV_ON_PMAIN(i)
1034
1035
1036
1037
1038
1039
1040 ibuf(p,ni25)%p(li+2) = itab(nod)
1041
1042 ibuf(p,ni25)%p(li+3) = main_proc(nod)
1043 ibuf(p,ni25)%p(li+4) = kinet(nod)
1044 ELSE
1045 ii = i-nsn
1046 rbuf(p,ni25)%p(lr+1) =
xfi(nin)%P(1,ii)
1047 rbuf(p,ni25)%p(lr+2) =
xfi(nin)%P(2,ii)
1048 rbuf(p,ni25)%p(lr+3) =
xfi(nin)%P(3,ii)
1049 rbuf(p,ni25)%p(lr+4) =
vfi(nin)%P(1,ii)
1050 rbuf(p,ni25)%p(lr+5) =
vfi(nin)%P(2,ii)
1051 rbuf(p,ni25)%p(lr+6) =
vfi(nin)%P(3,ii)
1052 rbuf(p,ni25)%p(lr+7) =
msfi(nin)%P(ii)
1053 rbuf(p,ni25)%p(lr+8) =
stifi(nin)%P(ii)
1054
1055 ibuf(p,ni25)%p(li+1) =
nsvfi(nin)%P(ii)
1056 ibuf(p,ni25)%p(li+2) =
itafi(nin)%P(ii)
1057
1058 ibuf(p,ni25)%p(li+3) =
pmainfi(nin)%P(ii)
1059 ibuf(p,ni25)%p(li+4) =
kinfi(nin)%P(ii)
1060 END IF
1061 lr = lr + rsiz
1062 li = li + isiz
1063 END DO
1064
1065
1066 rshift = 9
1067
1068
1069 ishift = 8
1070
1071
1072
1073
1074 IF(.true.) THEN
1075 li = 0
1076#include "vectorize.inc"
1077 DO j = 1, nsend
1078 i = index(ideb+j)
1079 IF(i <= nsn) THEN
1080 nod = intbuf_tab%NSV(i)
1081 ibuf(p,ni25)%p(li+ishift) = icodt(nod)
1082 ibuf(p,ni25)%p(li+ishift+1)= iskew(nod)
1083 ELSE
1084 ii = i-nsn
1085 ibuf(p,ni25)%p(li+ishift) =
icodt_fi(nin)%P(ii)
1086 ibuf(p,ni25)%p(li+ishift+1)=
iskew_fi(nin)%P(ii)
1087 END IF
1088 li = li + isiz
1089 END DO
1090 ishift = ishift + 2
1091 ENDIF
1092
1093 IF(igap==1 .OR. igap==2)THEN
1094 lr = 0
1095 DO j=1,nsend
1096 i = index(ideb+j)
1097 IF(i <= nsn)THEN
1098 nod = intbuf_tab%NSV(i)
1099 rbuf(p,ni25)%p(lr+rshift)= intbuf_tab%GAP_S(i)
1100 ELSE
1101 ii = i-nsn
1102 rbuf(p,ni25)%p(lr+rshift)=
gapfi(nin)%P(ii)
1103 END IF
1104 lr = lr + rsiz
1105 END DO
1106 rshift = rshift + 1
1107 ELSEIF(igap==3)THEN
1108 lr = 0
1109#include "vectorize.inc"
1110 DO j = 1, nsend
1111 i = index(ideb+j)
1112 IF(i <= nsn)THEN
1113 rbuf(p,ni25)%p(lr+rshift) = intbuf_tab%GAP_S(i)
1114 rbuf(p,ni25)%p(lr+rshift+1)= intbuf_tab%GAP_SL(i)
1115 ELSE
1116 ii = i-nsn
1117 rbuf(p,ni25)%p(lr+rshift) =
gapfi(nin)%P(ii)
1118 rbuf(p,ni25)%p(lr+rshift+1)=
gap_lfi(nin)%P(ii)
1119 END IF
1120 lr = lr + rsiz
1121 END DO
1122 rshift = rshift + 2
1123 ENDIF
1124
1125
1126 IF(intth>0)THEN
1127 lr = 0
1128 li = 0
1129#include "vectorize.inc"
1130 DO j = 1, nsend
1131 i = index(ideb+j)
1132 IF(i <= nsn)THEN
1133 nod = intbuf_tab%NSV(i)
1134 rbuf(p,ni25)%p(lr+rshift) = temp(nod)
1135 rbuf(p,ni25)%p(lr+rshift+1)= intbuf_tab%AREAS(i)
1136 ibuf(p,ni25)%p(li+ishift) = intbuf_tab%IELES(i)
1137 ELSE
1138 ii = i-nsn
1139 rbuf(p,ni25)%p(lr+rshift) =
tempfi(nin)%P(ii)
1140 rbuf(p,ni25)%p(lr+rshift+1)=
areasfi(nin)%P(ii)
1141 ibuf(p,ni25)%p(li+ishift) =
matsfi(nin)%P(ii)
1142 END IF
1143 lr = lr + rsiz
1144 li = li + isiz
1145 END DO
1146 rshift = rshift + 2
1147 ishift = ishift + 1
1148 ENDIF
1149
1150 IF(ivis2==-1)THEN
1151 lr = 0
1152 li = 0
1153#include "vectorize.inc"
1154 DO j = 1, nsend
1155 i = index(ideb+j)
1156 IF(i <= nsn)THEN
1157 nod = intbuf_tab%NSV(i)
1158 IF(intth==0) rbuf(p
1159 ibuf(p,ni25)%p(li+ishift)=intbuf_tab%IF_ADH(i)
1160 ELSE
1161 ii = i-nsn
1162 IF(intth==0) rbuf(p,ni25)%p(lr+rshift)=
areasfi(nin)%P(ii)
1163 ibuf(p,ni25)%p(li+ishift)=
if_adhfi(nin)%P(ii)
1164 END IF
1165 IF(intth==0) lr = lr + rsiz
1166 li = li + isiz
1167 END DO
1168 IF(intth==0) rshift = rshift + 1
1169 ishift = ishift + 1
1170 ENDIF
1171
1172
1173 IF(intfric>0)THEN
1174 li = 0
1175#include "vectorize.inc"
1176 DO j = 1, nsend
1177 i = index(ideb+j)
1178 IF(i <= nsn)THEN
1179 ibuf(p,ni25)%p(li+ishift) = intbuf_tab%IPARTFRICS(i)
1180 ELSE
1181 ii = i-nsn
1183 END IF
1184 li = li + isiz
1185 END DO
1186 ishift = ishift + 1
1187 ENDIF
1188
1189 IF(istif_msdt > 0) THEN
1190 lr = 0
1191#include "vectorize.inc"
1192 DO j = 1, nsend
1193 i = index(ideb+j)
1194 IF(i <= nsn)THEN
1195 rbuf(p,ni25)%p(lr+rshift)= intbuf_tab%STIFMSDT_S(i)
1196 ELSE
1197 ii = i-nsn
1199 END IF
1200 lr = lr + rsiz
1201 END DO
1202 rshift = rshift + 1
1203 ENDIF
1204
1205 IF(ifsub_carea > 0) THEN
1206 lr = 0
1207#include "vectorize.inc"
1208 DO j = 1, nsend
1209 i = index(ideb+j)
1210 IF(i <= nsn)THEN
1211 nod = intbuf_tab%NSV(i)
1212 rbuf(p,ni25)%p(lr+rshift)= intarean(nod)
1213 ELSE
1214 ii = i-nsn
1215 rbuf(p,ni25)%p(lr+rshift)=
intareanfi(nin)%P(ii)
1216 END IF
1217 lr = lr + rsiz
1218 END DO
1219 rshift = rshift + 1
1220 ENDIF
1221
1222
1223
1224 IF(idtmins==2)THEN
1225 li = 0
1226#include "vectorize.inc"
1227 DO j = 1, nsend
1228 i = index(ideb+j)
1229 IF(i <= nsn)THEN
1230 nod = intbuf_tab%NSV(i)
1231 ibuf(p,ni25)%p(li+ishift) = nodnx_sms(nod)
1232 IF(p/=main_proc(nod)) THEN
1233 ibuf(p,ni25)%p(li+ishift+1)= ibuf(p,ni25)%p(li+1)
1234 ELSE
1235 ibuf(p,ni25)%p(li+ishift+1)= nod
1236 ENDIF
1237 ELSE
1238 ii = i-nsn
1239 ibuf(p,ni25)%p(li+ishift) =
nodnxfi(nin)%P(ii)
1240 ibuf(p,ni25)%p(li+ishift+1)=
nodamsfi(nin)%P(ii)
1241 END IF
1242 li = li + isiz
1243 END DO
1244 ishift = ishift + 2
1245
1246
1247 ELSEIF(idtmins_int/=0)THEN
1248 li = 0
1249#include "vectorize.inc"
1250 DO j = 1, nsend
1251 i = index(ideb+j)
1252 IF(i <= nsn)THEN
1253 nod = intbuf_tab%NSV(i)
1254 IF(p/=main_proc(nod)) THEN
1255 ibuf(p,ni25)%p(li+ishift)= ibuf(p,ni25)%p(li+1)
1256 ELSE
1257 ibuf(p,ni25)%p(li+ishift)= nod
1258 ENDIF
1259 ELSE
1260 ii = i-nsn
1261 ibuf(p,ni25)%p(li+ishift) =
nodnxfi(nin)%P(ii)
1262 END IF
1263 li = li + isiz
1264 END DO
1265 ishift = ishift + 1
1266 ENDIF
1267
1268 IF(ityp==25)THEN
1269 lr = 0
1270#include "vectorize.inc"
1271 DO j = 1, nsend
1272 i = index(ideb+j)
1273 IF(i <= nsn)THEN
1274 rbuf(p,ni25)%p(lr+rshift) =intbuf_tab%TIME_S(2*(i-1)+1)
1275 rbuf(p,ni25)%p(lr+rshift+1) =intbuf_tab%TIME_S
1276
1277 rbuf(p,ni25)%p(lr+rshift+3) =intbuf_tab%SECND_FR(6*(i-1)+5)
1278 rbuf(p,ni25)%p(lr+rshift+4) =intbuf_tab%SECND_FR(6*(i-1)+6)
1279 rbuf(p,ni25)%p(lr+rshift+5) =intbuf_tab%PENE_OLD(5*(i-1)+2)
1280 rbuf(p,ni25)%p(lr+rshift+6) =intbuf_tab%STIF_OLD(2*(i-1)+2)
1281 rbuf(p,ni25)%p(lr+rshift+7) =intbuf_tab%PENE_OLD(5*(i-1)+3)
1282 rbuf(p,ni25)%p(lr+rshift+8) =intbuf_tab%PENE_OLD(5*(i-1)+4)
1283 rbuf(p,ni25)%p(lr+rshift+9) =intbuf_tab%PENE_OLD(5*(i-1)+5)
1284 ELSE
1285 ii = i-nsn
1286 rbuf(p,ni25)%p(lr+rshift) =
time_sfi(nin)%P(2*(ii-1)+1)
1287 rbuf(p,ni25)%p(lr+rshift+1) =
time_sfi(nin)%P(2*(ii
1288 rbuf(p,ni25)%p(lr+rshift+2) =
secnd_frfi(nin)%P(4,ii)
1289 rbuf(p,ni25)%p(lr+rshift+3) =
secnd_frfi(nin)%P(5,ii)
1290 rbuf(p,ni25)%p(lr+rshift+4) =
secnd_frfi(nin)%P(6,ii)
1291 rbuf(p,ni25)%p(lr+rshift+5) =
pene_oldfi(nin)%P(2,ii)
1292 rbuf(p,ni25)%p(lr+rshift+6) =
stif_oldfi(nin)%P(2,ii)
1293 rbuf(p,ni25)%p(lr+rshift+7) =
pene_oldfi(nin)%P(3,ii)
1294 rbuf(p,ni25)%p(lr+rshift+8) =
pene_oldfi(nin)%P(4,ii)
1295 rbuf(p,ni25)%p(lr+rshift+9) =
pene_oldfi(nin)%P(5,ii)
1296 END IF
1297 lr = lr + rsiz
1298 END DO
1299 rshift = rshift + 10
1300
1301 li = 0
1302#include "vectorize.inc"
1303 DO j = 1, nsend
1304 i = index(ideb+j)
1305 IF(i <= nsn)THEN
1306 nod = intbuf_tab%NSV(i)
1307 ibuf(p,ni25)%p(li+ishift) =intbuf_tab%IRTLM(4*(i-1)+1)
1308 ibuf(p,ni25)%p(li+ishift+1)=intbuf_tab%IRTLM(4*(i-1)+2)
1309 ibuf(p,ni25)%p(li+ishift+2)=intbuf_tab%IRTLM(4*(i-1)+3)
1310 ibuf(p,ni25)%p(li+ishift+3)=intbuf_tab%IRTLM(4*(i-1)+4)
1311 ibuf(p,ni25)%p(li+ishift+4)=intbuf_tab%ICONT_I(i)
1312 ELSE
1313 ii = i-nsn
1314 ibuf(p,ni25)%p(li+ishift) =
irtlm_fi(nin)%P(1,ii)
1315
1316 ibuf(p,ni25)%p(li+ishift+2)=
irtlm_fi(nin)%P(3,ii)
1317 ibuf(p,ni25)%p(li+ishift+3)=
irtlm_fi(nin)%P(4,ii)
1318 ibuf(p,ni25)%p(li+ishift+4)=
icont_i_fi(nin)%P(ii)
1319 END IF
1320 li = li + isiz
1321 END DO
1322 ishift = ishift + 5
1323
1324 IF (ilev==2) THEN
1325
1326 li = 0
1327
1328 DO j = 1, nsend
1329 i = index(ideb+j)
1330 IF(i <= nsn)THEN
1331
1332 ELSE
1333 ibuf(p,ni25)%p(li+ishift) = 0
1334 END IF
1335 li = li + isiz
1336 END DO
1337 ishift = ishift + 1
1338 END IF
1339
1340 li = 0
1341
1342 DO j = 1, nsend
1343 i = index(ideb+j)
1344
1345
1346
1347
1348
1349
1350 ibuf(p,ni25)%p(li+ishift) =fr_slide(1,ideb+j)
1351 ibuf(p,ni25)%p(li+ishift+1)=fr_slide(2,ideb+j)
1352 ibuf(p,ni25)%p(li+ishift+2)=fr_slide(3,ideb+j)
1353 ibuf(p,ni25)%p(li+ishift+3)=fr_slide(4,ideb+j)
1354 li = li + isiz
1355 END DO
1356 ishift = ishift + 4
1357
1358 ENDIF
1359
1360 ideb = ideb+nsend
1361
1362 END IF
1363 END IF
1364 END DO
1365
1366 RETURN
type(real_pointer2), dimension(:), allocatable stif_oldfi
type(real_pointer2), dimension(:), allocatable secnd_frfi
type(real_pointer), dimension(:), allocatable stif_msdt_fi
type(int_pointer), dimension(:), allocatable iskew_fi
type(real_pointer2), dimension(:), allocatable vfi
type(int_pointer), dimension(:), allocatable matsfi
type(real_pointer), dimension(:), allocatable tempfi
type(real_pointer), dimension(:), allocatable stifi
type(real_pointer), dimension(:), allocatable gap_lfi
type(int_pointer), dimension(:), allocatable nodamsfi
type(int_pointer), dimension(:), allocatable pmainfi
type(real_pointer), dimension(:), allocatable gapfi
type(int_pointer), dimension(:), allocatable nodnxfi
type(int_pointer), dimension(:), allocatable nsvfi
type(real_pointer), dimension(:), allocatable intareanfi
type(real_pointer), dimension(:), allocatable areasfi
type(int_pointer), dimension(:), allocatable icodt_fi
type(real_pointer), dimension(:), allocatable msfi
type(int_pointer), dimension(:), allocatable ipartfricsfi
type(real_pointer2), dimension(:), allocatable xfi
type(int_pointer), dimension(:), allocatable kinfi
type(real_pointer2), dimension(:), allocatable pene_oldfi
type(int_pointer), dimension(:), allocatable icont_i_fi
type(int_pointer), dimension(:), allocatable if_adhfi