48 . MGRBY,SMGRBY,NPBY,LPBY,SLRBODY,
49 . RBY ,NOM_OPT ,PTR_NOPT_RBMERGE,IGRNOD,
50 . ITAB,ITABM1,IBGR,IGRV, LSUBMODEL)
56 USE rbmerge_mod ,
ONLY : rbmerge_
64#include "implicit_f.inc"
75 INTEGER MGRBY(NMGRBY,*),NPBY(NNPBY,*),LPBY(*),SLRBODY,SMGRBY,ITABM1(*),ITAB(*)
77 INTEGER NOM_OPT(LNOPT1,*),PTR_NOPT_RBMERGE
78 INTEGER IGRV(NIGRV,*),IBGR(*)
81 TYPE (GROUP_) ,
DIMENSION(NGRNOD) :: IGRNOD
85 INTEGER I,J,K,L,ID,IRBM,IRBS,NBMERGE,IGS,
86 . N,NOPT,UID, II, NOBJ
87 INTEGER IMAIN,,FLAGG_OPT, FLAG_BOUCLE, FLAG_ERROR,
88 . flag_doublon, flag_doublemain, m_type, s_type
89 . idnode, nn, prt_opt, idboucle, level
90 INTEGER,
DIMENSION(:) ,
ALLOCATABLE :: INDEX
91 INTEGER,
DIMENSION(:,:) ,
ALLOCATABLE :: INUM
92 INTEGER,
DIMENSION(:) ,
ALLOCATABLE :: NB_MAIN
93 INTEGER,
DIMENSION(:) ,
ALLOCATABLE :: NSECONDARY
94 INTEGER,
DIMENSION(:) ,
ALLOCATABLE :: TAG1
95 INTEGER,
DIMENSION(:) ,
ALLOCATABLE :: TAG2
96 INTEGER,
DIMENSION(:) ,
ALLOCATABLE :: TABBOUCLE
97 INTEGER,
DIMENSION(:,:) ,
ALLOCATABLE :: TABRB
99 CHARACTER MYSTRING*100,MYLOOP*200
100 CHARACTER MESS*40,MESS2*40
101 CHARACTER(LEN=nchartitle) :: TITR
102 CHARACTER(LEN=ncharkey) :: KEY2
103 TYPE(rbmerge_),
DIMENSION(:),
ALLOCATABLE :: RBMERGE
104 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ITAG, WORK
110 INTEGER USR2SYS,NODGRNR5
112 DATA MESS/
'RIGID BODY MERGE DEFINITION '/
114 ALLOCATE(itag(numnod),work(numnod))
115 CALL my_alloc(tabrb,nrbykin,2)
116 CALL my_alloc(nb_main,nrbykin)
117 CALL my_alloc(nsecondary,nrbykin)
118 CALL my_alloc(tag1,nrbykin)
119 CALL my_alloc(tag2,nrbykin)
120 CALL my_alloc(tabboucle,nrbykin+1)
128 is_available = .false.
135 CALL hm_option_read_key(lsubmodel, option_id = id, unit_id = uid, option_titr = titr, keyword2 = key2)
140 nom_opt(1,ptr_nopt_rbmerge+nopt)=id
141 CALL fretitl(titr,nom_opt(lnopt1-ltitr+1,ptr_nopt_rbmerge+nopt),ltitr)
145 CALL hm_get_intv(
'NB_SUBOBJVE',nobj,is_available,lsubmodel)
155 IF(m_type == 0) m_type=1
156 IF(s_type == 0) s_type=1
157 IF(flagg_opt == 0) flagg_opt=2
160 mgrby(3,n)=isecondary
170 ALLOCATE (rbmerge(nrbykin))
172 ALLOCATE (rbmerge(i)%IDSECONDARY(nrbykin))
173 rbmerge(i)%NBSECONDARY=0
174 ALLOCATE (rbmerge(i)%NODE(nxtra_node))
175 ALLOCATE (rbmerge(i)%FLAG_NODE(nxtra_node))
178 rbmerge(i)%FLAG_MAIN = 0
197 isecondary = mgrby(3,i)
199 flagg_opt = mgrby(5,i)
203 CALL fretitl2(titr,nom_opt(lnopt1-ltitr+1,ptr_nopt_rbmerge+mgrby(7,i)),ltitr)
205 IF(prt_opt /= mgrby(6,i))
THEN
206 WRITE(iout,1100) mgrby(6,i),trim(titr)
214 IF (imain == npby(6,k))
THEN
230 IF (isecondary == npby(6,k))
THEN
246 IF((irbm /= 0).AND.(irbs /= 0))
THEN
248 WRITE(iout,1200) imain, isecondary, flagg_opt
249 mess2 =
'SECONDARY RIGID BODY '
253 IF(nb_main(irbs) >= 1)
THEN
255 IF(tabrb(l,2) == irbs)
THEN
256 IF(tabrb(l,1) /= irbm)
THEN
259 . anmode=aninfo_blind_1,
267 . msgtype=msgwarning,
268 . anmode=aninfo_blind_1,
280 IF((flag_doublon + flag_doublemain) == 0)
THEN
281 nbmerge = nbmerge + 1
282 nb_main(irbs) = nb_main(irbs) + 1
283 nsecondary(irbm) = nsecondary(irbm) + 1
284 tabrb(nbmerge,1) = irbm
285 tabrb(nbmerge,2) = irbs
287 rbmerge(irbs)%ID = isecondary
288 rbmerge(irbs)%IMAIN = irbm
289 rbmerge(irbs)%FLAG_MAIN = flagg_opt
291 rbmerge(irbm)%ID = imain
292 rbmerge(irbm)%NBSECONDARY = rbmerge(irbm)%NBSECONDARY+1
293 rbmerge(irbm)%IDSECONDARY(rbmerge(irbm)%NBSECONDARY) = irbs
294 ELSEIF(flag_doublon == 1)
THEN
295 rbmerge(irbs)%FLAG_MAIN = flagg_opt
304 isecondary = mgrby(3,i)
306 flagg_opt = mgrby(5,i)
308 IF((s_type == 2).OR.(s_type == 3))
THEN
310 CALL fretitl2(titr,nom_opt(lnopt1-ltitr+1,ptr_nopt_rbmerge+mgrby(7,i)),ltitr)
312 IF(prt_opt /= mgrby(6,i))
THEN
313 WRITE(iout,1100) mgrby(6,i),trim(titr)
321 IF (imain == npby(6,k))
THEN
338 idnode = usr2sys(mgrby(3,i),itabm1,mess,id)
339 ELSEIF(s_type == 3)
THEN
340 nn = nodgrnr5(mgrby(3,i),igs,work,igrnod,itabm1,mess)
344 IF((irbm /= 0).AND.(idnode /= 0))
THEN
346 WRITE(iout,1300) imain, isecondary, flagg_opt
347 mess2 =
'SECONDARY NODE '
349 IF(itag(idnode) == 0)
THEN
351 ELSEIF(itag(idnode) == irbm)
THEN
354 . msgtype=msgwarning,
355 . anmode=aninfo_blind_1,
364 IF(flag_doublon == 0)
THEN
365 rbmerge(irbm)%ID = imain
366 rbmerge(irbm)%NNODE = rbmerge(irbm)%NNODE+1
367 rbmerge(irbm)%NODE(rbmerge(irbm)%NNODE) = idnode
368 rbmerge(irbm)%FLAG_NODE(rbmerge(irbm)%NNODE) = flagg_opt
370 DO ii=1,rbmerge(irbm)%NNODE
371 IF(rbmerge(irbm)%NODE(ii) == idnode)
THEN
372 rbmerge(irbm)%FLAG_NODE(ii) = flagg_opt
378 IF((irbm /= 0).AND.(nn /= 0))
THEN
380 WRITE(iout,1400) imain, isecondary, flagg_opt
381 WRITE(iout,1410) (itab(work(j)),j=1,nn)
382 mess2 =
'SECONDARY NODE '
384 rbmerge(irbm)%ID = imain
388 IF(itag(work(j)) == 0)
THEN
390 ELSEIF(itag(work(j)) == irbm)
THEN
393 . msgtype=msgwarning,
394 . anmode=aninfo_blind_1,
403 IF(flag_doublon == 0)
THEN
404 rbmerge(irbm)%ID = imain
405 rbmerge(irbm)%NNODE = rbmerge(irbm)%NNODE+1
406 rbmerge(irbm)%NODE(rbmerge(irbm)%NNODE) = work(j)
407 rbmerge(irbm)%FLAG_NODE(rbmerge(irbm)%NNODE) = flagg_opt
409 DO ii=1,rbmerge(irbm)%NNODE
410 IF(rbmerge(irbm)%NODE(ii) == work(j))
THEN
411 rbmerge(irbm)%FLAG_NODE(ii) = flagg_opt
425 IF(rbmerge(i)%NNODE > 0)
THEN
426 ALLOCATE(index(2*rbmerge(i)%NNODE))
427 index(1:2*rbmerge(i)%NNODE) = 0
428 ALLOCATE(inum(rbmerge(i)%NNODE,2))
429 DO j=1,rbmerge(i)%NNODE
431 inum(j,1) = rbmerge(i)%FLAG_NODE(j)
432 inum(j,2) = rbmerge(i)%NODE(j)
434 CALL my_orders(0,iwork,rbmerge(i)%FLAG_NODE,index,rbmerge(i)%NNODE,1)
435 DO j=1,rbmerge(i)%NNODE
436 rbmerge(i)%FLAG_NODE(j) = inum(index(j),1)
437 rbmerge(i)%NODE(j) = inum(index(j),2)
451 IF(nb_main(i) == 0)
THEN
457 IF((tag1(i) == 0).AND.(tag2(i) == 0).AND.(rbmerge(i)%NBSECONDARY>0))
THEN
461 CALL rbtag2down(i,tag2,rbmerge,flag_boucle,tabboucle,idboucle)
462 IF (flag_boucle == 1)
THEN
463 WRITE(myloop,*) tabboucle(1)
464 myloop = adjustl(myloop)
466 IF(tabboucle(j) == 0)
EXIT
467 WRITE(mystring,*) tabboucle(j)
468 mystring = adjustl(mystring)
469 myloop = myloop(1:len(trim(myloop))) //
' -> '// mystring
473 . anmode=aninfo_blind_1,
480 IF(flag_error == 1)
THEN
483 . anmode=aninfo_blind_1,
489 IF(flag_error == 0)
THEN
491 IF(nb_main(i) == 0)
THEN
500 . rby ,nom_opt, itab,ibgr,igrv)
503 DEALLOCATE(rbmerge,work,itag)
506 DEALLOCATE(nsecondary)
509 DEALLOCATE(tabboucle)
514 .
' RIGID BODY MERGE DEFINITIONS '/
515 .
' ---------------------- '/)
5161100
FORMAT( /5x,
'RIGID BODY MERGE ID ',i10,1x,a)
5171200
FORMAT(/10x,
'MAIN RIGID BODY ID ',i10
518 . /10x,
'SECONDARY RIGID BODY ID ',i10
5201300
FORMAT(/10x,
'MAIN RIGID BODY ID ',i10
521 . /10x,
'SECONDARY NODE ID ',i10
5231400
FORMAT(/10x,
'MAIN RIGID BODY ID ',i10
524 . /10x,
'SECONDARY SET OF NODE ID ',i10
526 . /10x,
'SET OF NODES ')
5271410
FORMAT( 10x,10i10)
529 .
' RIGID BODY MERGE CONSTRUCTION '/
530 .
' ---------------------- '/)
702 . RBY ,NOM_OPT,ITAB ,IBGR ,IGRV )
713#include "implicit_f.inc"
717#include "scr17_c.inc"
718#include "com04_c.inc"
719#include "units_c.inc"
720#include "param_c.inc"
724 INTEGER NPBY(NNPBY,*),LPBY(*),SLRBODY,ITAB(*)
725 TYPE (RBMERGE_) ,
DIMENSION(NRBYKIN) :: RBMERGE
727 INTEGER NOM_OPT(LNOPT1,*)
728 INTEGER IGRV(NIGRV,*),IBGR(*)
732 INTEGER I,J,K,KK,M,N,ID,OFFSET,OFFSETID,FLAG_RB
733 INTEGER IDPILE,INODE, IKREM,ISPHER,
735 INTEGER,
DIMENSION(:),
ALLOCATABLE :: PILE
736 INTEGER,
DIMENSION(:),
ALLOCATABLE :: INDEX
737 INTEGER,
DIMENSION(:),
ALLOCATABLE :: LPBY_TMP
738 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: NPBY_TMP
739 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: NOM_OPT_TMP
740 my_real,
DIMENSION(:,:),
ALLOCATABLE :: rby_tmp
742 my_real bid, dx, dy, dz, dmstr, delt, dtmp
743 INTEGER NBSECONDARY, IDIR, NSL, NSL_XTRA
744 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ITAG
745 INTEGER,
DIMENSION(NXTRA_NODE) :: LIST_XTRA
747 CHARACTER(LEN=nchartitle) :: TITR
757 CALL my_alloc(pile,nrbykin)
758 CALL my_alloc(npby_tmp,nnpby,nrbykin)
759 CALL my_alloc(index,nrbykin)
760 CALL my_alloc(lpby_tmp,slrbody)
761 CALL my_alloc(nom_opt_tmp,lnopt1,nrbykin)
762 CALL my_alloc(rby_tmp,nrby,nrbykin)
764 ALLOCATE(itag(numnod))
769 lpby_tmp(1:slrbody)=0
771 IF(rbmerge(n)%LEVEL == 0)
THEN
772 IF(rbmerge(n)%NBSECONDARY > 0)
THEN
777 index(offsetid+k)=pile(idpile+1-k)
779 offsetid = offsetid+idpile
781 index(nrbykin-offset)=n
785 nom_opt_tmp(1:lnopt1,n)=nom_opt(1:lnopt1,n)
787 npby_tmp(j,n)=npby(j,n)
790 rby_tmp(j,n)=rby(j,n)
794 lpby_tmp(k+j)=lpby(k+j)
800 nom_opt(1:lnopt1,n)=nom_opt_tmp(1:lnopt1,index(n))
802 npby(j,n)=npby_tmp(j,index(n))
806 rby(j,n)=rby_tmp(j,index(n))
808 DO j=1,npby_tmp(2,index(n))
809 lpby(k+j)=lpby_tmp(npby_tmp(11,index(n))+j)
811 k=k+npby_tmp(2,index(n))
820 lpby_tmp(1:slrbody)=0
825 IF(itag(lpby(k+j)) == 0)
THEN
828 lpby_tmp(inode)=lpby(k+j)
830 npby(2,n)=npby(2,n)-1
834 DO j=1,rbmerge(index(n))%NNODE
835 IF(itag(rbmerge(index(n))%NODE(j
THEN
836 nsl_xtra = nsl_xtra+1
838 lpby_tmp(inode)=rbmerge(index(n))%NODE(j)
839 IF(rbmerge(index(n))%FLAG_NODE(j) == 1) npby(14,n)=npby(14,n)+1
840 IF(rbmerge(index(n))%FLAG_NODE(j) == 2) npby(15,n)=npby
841 IF(rbmerge(index(n))%FLAG_NODE(j) == 3) npby(16,n)=npby(16,n)+1
842 IF(itag(rbmerge(index(n))%NODE(j)) == -1)
THEN
844 . msgtype=msgwarning,
845 . anmode=aninfo_blind_1,
846 . i1=itab(rbmerge(index(n))%NODE(j)),
849 itag(rbmerge(index(n))%NODE(j)) = 1
853 npby(2,n)=npby(2,n)+nsl_xtra
854 IF(npby(12,n) == 0)
THEN
855 nsl_xtra=npby(14,n)+npby(15,n)+npby(16,n)
857 DO j=1,npby(2,n)-nsl_xtra
858 itag(lpby_tmp(k+j)) = 0
860 DO j=npby(2,n)-nsl_xtra+1,npby(2,n)
861 itag(lpby_tmp(k+j)) = -1
864 IF((npby(12,i)) < 0)
THEN
866 nsl_xtra=npby(14,i)+npby(15,i)+npby(16,i)
867 DO j=1,npby(2,i)-nsl_xtra
868 itag(lpby_tmp(k+j)) = 0
870 DO j=npby(2,i)-nsl_xtra+1,npby(2,i)
871 itag(lpby_tmp(k+j)) = -1
880 . msgtype=msgwarning,
881 . anmode=aninfo_blind_1,
888 lpby(k+j)=lpby_tmp(k+j)
893 nsl_xtra = npby(14,n)+npby(15,n)+npby(16,n)
894 k = npby(11,n)+npby(2,n)-nsl_xtra
898 CALL spmdset(n,npby,nnpby,lpby,nsl_xtra,k)
909 nsl_xtra = npby(14,n)+npby(15,n)+npby(16,n)
910 k = npby(11,n)+npby(2,n)-nsl_xtra
923 IF(itag(n) == 1)ibgr(i+iad-1) = -n
936 IF(npby(12,n) == 0)
THEN
937 nsl_xtra=npby(14,n)+npby(15,n)+npby(16,n)
938 k = npby(11,n) + npby(2,n) - nsl_xtra
940 list_xtra(kk+j) = lpby(k+j)
945 IF(npby(12,i) == 0)
EXIT
946 npby(4,i) = npby(4,n)
949 nsl_xtra=npby(14,i)+npby(15,i)+npby(16,i)
950 k = npby(11,i) + npby(2,i) - nsl_xtra
952 list_xtra(kk+j) = lpby(k+j)
959 IF((nbsecondary + kk) > 0)
THEN
960 WRITE(iout,1000) npby
961 IF(nbsecondary > 0)
THEN
962 WRITE(iout,1100) (npby(6,n-i),i=1,nbsecondary)
965 WRITE(iout,1200) (itab(list_xtra(j)),j=1,nsl_xtra)
976 DEALLOCATE(nom_opt_tmp)
9801000
FORMAT(/5x,
'MAIN RIGID BODY ID ',i10)
9811100
FORMAT(5x,
'SECONDARY RIGID BODIES ID',10i10)
9821200
FORMAT(5x,
'SECONDARY EXTRA NODES ID ',10i10)
1056#include "implicit_f.inc"
1060#include "scr17_c.inc"
1061#include "com04_c.inc"
1062#include "param_c.inc"
1063#include "lagmult.inc"
1067 INTEGER NPBY(NNPBY,*),LPBY(*)
1069 INTEGER NOM_OPT(LNOPT1,*)
1073 INTEGER I,J,K,OFFSET,OFFSETEND,NRBYKINM,
1074 . new_size,cpt_rby,cpt_rby_secondary
1075 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: NPBY_TMP
1076 INTEGER,
DIMENSION(:),
ALLOCATABLE :: INDEX
1077 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: NOM_OPT_TMP
1078 my_real,
DIMENSION(:,:),
ALLOCATABLE :: rby_tmp
1080 CALL my_alloc(npby_tmp,nnpby,nrbykin+nrbylag)
1081 CALL my_alloc(nom_opt_tmp,lnopt1,nrbykin+nrbylag)
1082 CALL my_alloc(index,nrbykin+nrbylag)
1083 CALL my_alloc(rby_tmp,nrby,nrbykin+nrbylag)
1086 DO i=1,nrbykin+nrbylag
1087 nom_opt_tmp(1:lnopt1,i)=nom_opt(1:lnopt1,i)
1089 npby_tmp(j,i)=npby(j,i)
1092 rby_tmp(j,i)=rby(j,i)
1094 IF (npby(12,i)==0) new_size = new_size+1
1098 cpt_rby_secondary = nrbykin+nrbylag
1099 DO i=nrbykin+nrbylag,1,-1
1100 IF (npby_tmp(12,i)==0)
THEN
1101 nom_opt(1:lnopt1,cpt_rby)=nom_opt_tmp(1:lnopt1,i)
1102 npby(1:nnpby,cpt_rby)=npby_tmp(1:nnpby,i)
1103 rby(1:nrby,cpt_rby)=rby_tmp(1:nrby,i)
1107 nom_opt(1:lnopt1,cpt_rby_secondary)=nom_opt_tmp(1:lnopt1,i)
1108 npby(1:nnpby,cpt_rby_secondary)=0
1109 rby(1:nrby,cpt_rby_secondary)=0
1110 npby(6,cpt_rby_secondary) = npby_tmp(6,i)
1111 npby(12,cpt_rby_secondary) = npby_tmp(12,i)
1112 npby(13,cpt_rby_secondary) = cpt_rby+1
1113 cpt_rby_secondary = cpt_rby_secondary-1
1117 nrbykin=new_size-nrbylag
1118 DEALLOCATE(npby_tmp)
1119 DEALLOCATE(nom_opt_tmp)
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)