35 . IGRSH3N ,IGRSH4N ,IXC ,IXTG ,
36 . IGEO ,GEO ,THK ,STACK ,
37 . IGEO_STACK ,GEO_STACK , STACK_INFO ,
38 . NUMGEO_STACK,NPROP_STACK , PLY_INFO)
51#include "implicit_f.inc"
62#include "remesh_c.inc"
68 INTEGER IXC(NIXC,NUMELC),
69 . IXTG(NIXTG,NUMELTG),IGEO(NPROPGI,NUMGEO),IWORKSH(3,+NUMELTG),
70 . IGEO_STACK(NPROPGI,NUMSTACK + NUMPLY),NUMGEO_STACK(NUMGEO+NUMSTACK),
72 INTEGER ,
INTENT(INOUT) :: PLY_INFO(2,NUMPLY)
74 . GEO(NPROPG,NUMGEO),THK(NUMELC+NUMELTG),GEO_STACK(NPROPG,NUMSTACK + NUMPLY)
76 TYPE (GROUP_) ,
DIMENSION(NGRSH3N) :: IGRSH3N
77 TYPE (GROUP_) ,
DIMENSION(NGRSHEL) :: IGRSH4N
78 TYPE (DRAPE_) ,
DIMENSION(NUMELC + NUMELTG) ,
TARGET :: DRAPE
79 TYPE (DRAPEG_) ,
TARGET :: DRAPEG
80 TYPE(
drape_work_) ,
DIMENSION(NUMELC + NUMELTG) ,
TARGET :: IWORK_T
84 INTEGER I,J,II,IGTYP,ID,JD,IDPLY,NEL,
85 . IAD,ITY,IDSHEL,PID,IS,IDS,NSH,MODE,JJ,NGEO_STACK,
86 . IGRTYP,N1,IPMAT,IPANG,IPTHK,IIGEO,NSS,IPPOS,NPT,IIS,NP,
87 . JJPID,JSTACK,JPID,ITG,IPMAT_IPLY,ISH3N,J4N,J3N,IPOS,
88 . mat_ly,nlay,nptt,ipidl,it,ilay,ipthk_nptt,ippos_nptt,
89 . iint,ipid_ly,ipdir ,ns_stack0 ,npt_stack0,is0,js,pids,ip,
90 . ii1,ii2,jj1,jj2,nslice,ie_drp,npt_lay,ipnpt_lay,
91 . ibit, nkey, ikey,irest,n_ply,nbit,nply,ns_total,ns_first,
92 . ns_sub, nstack,i1,i2,ies
93 INTEGER ,
DIMENSION(:),
ALLOCATABLE :: WORK,INDX_SH,,
95 . NFIRST1,NLAST1,NFIRST2,NLAST2,
97 INTEGER :: NBFI,IPPID,NGL,IPID_1,NUMS,IPWEIGHT,IPTHKLY,NSHQ4,NSHT3
99 . THICKT,ZSHIFT,TMIN,TMAX,DT,THK_LY,POS_LY,THK_IT(100),
100 . POS_IT(100),POS_NPTT,THK_NPTT,POS_0,THINNING,POS
102 INTEGER,
DIMENSION(:,:) ,
ALLOCATABLE :: ITRI,ACTIV_PLY
103 INTEGER,
DIMENSION(:) ,
ALLOCATABLE ::INDX,IDSTACK,INDX_SUB
104 TYPE (STACK_PLY) :: STACK, IWORKS
105 TYPE (STACK_INFO_ ) ,
DIMENSION (1:NPROP_STACK) :: STACK_INFO
106 TYPE (DRAPE_PLY_),
POINTER :: DRAPE_PLY
107 CHARACTER(LEN=NCHARTITLE) :: TITR,TITR1
110 . a_gauss(9,9),w_gauss(9,9)
116 2 -.577350269189626,0.577350269189626,0. ,
119 3 -.774596669241483,0. ,0.774596669241483,
122 4 -.861136311594053,-.339981043584856,0.339981043584856,
123 4 0.861136311594053,0. ,0. ,
125 5 -.906179845938664,-.538469310105683,0. ,
126 5 0.538469310105683,0.9
129 6 0.238619186083197,0.661209386466265,0.932469514203152,
131 7 -.949107912342759,-.741531185599394,-.405845151377397,
132 7 0. ,0.405845151377397,0.741531185599394,
133 7 0.949107912342759,0. ,0. ,
134 8 -.960289856497536,-.796666477413627,-.525532409916329,
135 8 -.183434642495650,0.183434642495650,0.525532409916329,
136 8 0.796666477413627,0.960289856497536,0. ,
137 9 -.968160239507626,-.836031107326636,-.613371432700590,
138 9 -.324253423403809,0. ,0.324253423403809,
139 9 0.613371432700590,0.836031107326636,0.968160239507626/
147 3 0.555555555555556,0.888888888888889,0.555555555555556,
150 4 0.347854845137454,0.652145154862546,0.652145154862546,
151 4 0.347854845137454,0. ,0. ,
153 5 0.236926885056189,0.478628670499366,0.568888888888889,
154 5 0.478628670499366,0.236926885056189,0. ,
156 6 0.171324492379170,0.360761573048139,0.467913934572691,
157 6 0.467913934572691,0.360761573048139,0.171324492379170,
159 7 0.129484966168870,0.279705391489277,0.381830050505119,
160 7 0.417959183673469,0.381830050505119,0.279705391489277,
161 7 0.129484966168870,0. ,0. ,
162 8 0.101228536290376,0.222381034453374,0.313706645877887,
163 8 0.362683783378362,0.362683783378362,0.313706645877887,
164 8 0.222381034453374,0.101228536290376,0. ,
165 9 0.081274388361574,0.180648160694857,0.260610696402935,
166 9 0.312347077040003,0.330239355001260,0.312347077040003,
167 9 0.260610696402935,0.180648160694857,0.081274388361574/
178 ALLOCATE (indx_sh(numelc+numeltg),pid_sh(numelc+numeltg),
179 . isubstack(numgeo+numstack),
180 . iptply(numgeo+numply), work(70000) )
190 IF(ipart_stack > 0)
THEN
196 IF (igtyp == 19 .AND. nstack > 0) nply = nply+1
203 IF(igtyp == 17 .OR. igtyp == 51)
THEN
213 IF(igtyp == 17 .OR. igtyp == 51)
THEN
215 indx_sh(nsh) = i + numelc
220 nbit = bit_size(nply)
221 irest = mod(nply,nbit)
223 IF(irest > 0) nkey = nkey + 1
224 ALLOCATE( activ_ply(numelc+numeltg,nkey))
225 IF(numelc + numeltg > 0)activ_ply = 0
232 ie_drp = drapeg%INDX(ii)
235 ALLOCATE(iwork_t(ii)%NPT_PLY(npt))
236 iwork_t(ii)%NPT_PLY = 0
238 n_ply = iwork_t(ii)%PLYNUM(j)
240 IF(mod(n_ply,nbit) > 0 ) ikey = ikey + 1
241 ikey =
min(ikey, nkey)
242 ibit = n_ply - (ikey - 1)*nbit
243 idply = iwork_t(ii)%PLYID(j)
244 iwork_t(ii)%NPT_PLY(j) = 1
245 activ_ply(ii,ikey) = ibset(activ_ply(ii,ikey),ibit)
248 ELSEIF(igtyp == 51)
THEN
249 ALLOCATE(iwork_t(ii)%NPT_PLY(npt))
250 iwork_t(ii)%NPT_PLY = 0
251 IF(ie_drp > 0 .AND. npt > 0)
THEN
253 ip = drape(ie_drp)%INDX_PLY(j)
254 n_ply = iwork_t(ii)%PLYNUM(j)
256 IF(mod(n_ply,nbit) > 0 ) ikey = ikey + 1
257 ikey =
min(ikey, nkey)
258 ibit = n_ply - (ikey - 1)*nbit
259 activ_ply(ii,ikey) = ibset(activ_ply(ii,ikey),ibit)
261 drape_ply => drape(ie_drp)%DRAPE_PLY(ip)
262 nslice = drape_ply%NSLICE
263 idply = iwork_t(ii)%PLYID(j)
264 iwork_t(ii)%NPT_PLY(j) = nslice
265 igeo(44,idply) =
max(igeo(4,idply),nslice)
267 idply = iwork_t(ii)%PLYID(j)
268 npt_lay = igeo(4,idply)
269 iwork_t(ii)%NPT_PLY(j) = npt_lay
275 idply = iwork_t(ii)%PLYID(j)
276 npt_lay = igeo(4,idply)
277 iwork_t(ii)%NPT_PLY(j) = npt_lay
278 n_ply = iwork_t(ii)%PLYNUM(j)
280 IF(mod(n_ply,nbit) > 0 ) ikey = ikey + 1
281 ikey =
min(ikey, nkey)
282 ibit = n_ply - (ikey - 1)*nbit
283 activ_ply(ii,ikey) = ibset(activ_ply(ii,ikey),ibit)
290 ALLOCATE(indx(2*nsh),itri(2 + nkey,nsh),indx_total(nsh))
291 ALLOCATE (nfirst(nsh) ,nlast(nsh),
292 . nfirst1(nsh) ,nlast1(nsh))
305 itri(1,i) = pid_sh(i)
306 itri(2,i) = iworksh(1,ii)
308 itri(2+j,i) = activ_ply(ii,j)
315 CALL my_orders(mode, work, itri, indx, nsh , nkey)
321 ii = itri(ikey,indx(i))
322 jj = itri(ikey,indx(i-1))
324 ns_first = ns_first + 1
325 nfirst1(ns_first) = i
326 nlast1(ns_first) = nfirst1(ns_first)
328 ELSEIF(ikey == nkey)
THEN
329 nlast1(ns_first) = nlast1(ns_first) + 1
346 nsh = nlast1(is) - nfirst1(is) + 1
347 ALLOCATE(indx1(2*nsh),itri(nkey,nsh),indx_sub(nsh))
351 DO i= nfirst1(is), nlast1(is)
358 itri(j,i1) = iwork_t(ii)%NPT_PLY
362 CALL my_orders(mode, work, itri, indx1, nsh , nkey)
363 ALLOCATE (nfirst2(nsh) ,nlast2(nsh))
369 ii = itri(ikey,indx1(i))
370 jj = itri(ikey,indx1(i-1))
374 nlast2(ns_sub) = nfirst2(ns_sub)
376 ELSEIF(ikey == nkey)
THEN
377 nlast2(ns_sub) = nlast2(ns_sub) + 1
383 ns_total = ns_total + 1
384 nfirst(ns_total) = nfirst1(is) + nfirst2(iis) - 1
385 nlast(ns_total ) = nfirst1(is) + nlast2(iis) - 1
386 DO i = nfirst2(iis),nlast2(iis)
387 i2 = nfirst1(is) + i - 1
388 indx_total(i2) = indx_sub(indx1(i))
391 DEALLOCATE(indx1,nfirst2,nlast2, itri,indx_sub)
393 ns_total = ns_total + 1
394 nfirst(ns_total) = nfirst1(is)
395 nlast(ns_total ) = nlast1(is)
396 DO i= nfirst1(is), nlast1(is)
397 indx_total(i) = indx(i)
401 DEALLOCATE(nfirst1,nlast1)
412 npt_stack =
max(npt_stack,npt)
415 ALLOCATE(iworks%IGEO(4*npt_stack+2,ns_stack))
416 ALLOCATE(iworks%GEO(6*npt_stack+1,ns_stack))
422 ngeo_stack = numgeo + is
434 DO i= nfirst(is) , nlast(is)
437 iworksh(2,ii) = ngeo_stack
450 nums = numgeo_stack(pid)
453 jpid = stack_info(nums)%PID(j)
456 jjpid = iwork_t(ies)%PLYID(jj)
457 IF(jjpid == jpid)
THEN
466 iworks%IGEO(1,is) = npt
467 iworks%IGEO(2,is) = pid
470 ipmat_iply = ipmat + npt
471 ipnpt_lay = ipmat_iply + npt
476 ipthkly = ipdir + npt
477 ipweight = ipthkly + npt
478 nums= numgeo_stack(pid)
481 iworks%IGEO(ippid + j,is) = stack_info(nums)%PID(jstack)
482 iworks%IGEO(ipmat + j,is) = stack_info(nums)%MID(jstack)
483 iworks%IGEO(ipmat_iply + j
484 iworks%IGEO(ipnpt_lay + j,is) = iwork_t(ies)%NPT_PLY(j)
485 iworks%GEO(ipang + j,is) = stack_info(nums)%ANG(jstack)
486 iworks%GEO(ipthk + j,is) = stack_info(nums)%THK(jstack)
487 iworks%GEO(ippos + j,is) = stack_info(nums)%POS(jstack)
488 iworks%GEO(ipdir + j,is) = stack_info(nums)%DIR(jstack)
489 iworks%GEO(ipthkly + j,is) = stack_info(nums)%THKLY(jstack)
490 iworks%GEO(ipweight + j,is) = stack_info(nums)%WEIGHT(jstack)
496 zshift = geo(199,pid)
501 dt = half*iworks%GEO(ipthk + j ,is)
502 tmin =
min(tmin,iworks%GEO(ippos + j ,is)-dt)
503 tmax =
max(tmax,iworks%GEO(ippos + j ,is)+dt)
507 iworks%GEO(ipthk+j,is)=iworks%GEO(ipthk+j,is)/
max(thickt,em20)
508 iworks%GEO(ippos+j,is)=iworks%GEO(ippos+j,is)/
max(thickt,em20)
514 thickt = thickt + iworks%GEO(ipthk+j,is)
517 iworks%GEO(ipthk+j,is) =
518 . iworks%GEO(ipthk+j,is)/
max(thickt,em20)
521 IF(ipos == 2 ) zshift = zshift /
max(thickt,em20)
523 iworks%GEO(ippos+1,is) = zshift + half*iworks%GEO(ipthk+1,is)
525 iworks%GEO(ippos+j,is) = iworks%GEO(ippos+j-1,is)
526 . + half*(iworks%GEO(ipthk+j,is)+iworks%GEO(ipthk+j-1,is))
531 iworks%GEO(1,is) = thickt
536 DEALLOCATE(indx,nfirst,nlast,indx_total,activ_ply)
543 npt_stack0 = npt_stack
545 IF(ipart_pcompp > 0)
THEN
550 ids = igeo_stack(42,numstack + i)
551 IF (ids > 0) nply = nply+1
570 indx_sh(nsh) = i + numelc
575 nbit = bit_size(nply)
576 irest = mod(nply,nbit)
578 IF(irest > 0) nkey = nkey + 1
579 ALLOCATE( activ_ply(numelc+numeltg,nkey))
580 IF(numelc + numeltg > 0)activ_ply = 0
584 ie_drp = drapeg%INDX(ii)
585 ALLOCATE(iwork_t(ii)%NPT_PLY(npt))
586 iwork_t(ii)%NPT_PLY = 0
587 IF(ie_drp > 0 .AND. npt > 0)
THEN
589 ip = drape(ie_drp)%INDX_PLY(j)
590 n_ply = iwork_t(ii)%PLYNUM(j)
592 IF(mod(n_ply,nbit) > 0 ) ikey = ikey + 1
593 ikey =
min(ikey, nkey)
594 ibit = n_ply - (ikey - 1)*nbit
595 activ_ply(ii,ikey) = ibset(activ_ply
597 drape_ply => drape(ie_drp)%DRAPE_PLY(ip)
598 nslice = drape_ply%NSLICE
599 idply = iwork_t(ii)%PLYID(j)
600 iwork_t(ii)%NPT_PLY(j) = nslice
601 ply_info(2,idply - numstack) =
max(ply_info(2,idply - numstack),nslice)
603 idply = iwork_t(ii)%PLYID(j)
604 npt_lay = igeo_stack(4,idply)
605 iwork_t(ii)%NPT_PLY(j) = npt_lay
611 n_ply = iwork_t(ii)%PLYNUM(j)
613 IF(mod(n_ply,nbit) > 0 ) ikey = ikey + 1
614 ikey =
min(ikey, nkey)
615 ibit = n_ply - (ikey - 1)*nbit
616 activ_ply(ii,ikey) = ibset(activ_ply(ii,ikey),ibit)
617 idply = iwork_t(ii)%PLYID(j)
618 npt_lay = igeo_stack(4,idply)
619 iwork_t(ii)%NPT_PLY(j) = npt_lay
625 ALLOCATE(indx(2*nsh),itri(2 + nkey,nsh),indx_total(nsh))
626 ALLOCATE (nfirst(nsh) ,nlast(nsh),
627 . nfirst1(nsh) ,nlast1(nsh))
641 itri(1,i) = pid_sh(i)
642 itri(2,i) = iworksh(1,ii)
644 itri(2+j,i) = activ_ply(ii,j)
652 CALL my_orders(mode, work, itri, indx, nsh , nkey)
658 ii = itri(ikey,indx(i))
659 jj = itri(ikey,indx(i-1))
661 ns_first = ns_first + 1
662 nfirst1(ns_first) = i
663 nlast1(ns_first) = nfirst1(ns_first)
665 ELSEIF(ikey == nkey)
THEN
666 nlast1(ns_first) = nlast1(ns_first) + 1
682 nsh = nlast1(is) - nfirst1(is) + 1
683 ALLOCATE(indx1(2*nsh),itri(nkey,nsh),indx_sub(nsh))
687 DO i= nfirst1(is), nlast1(is)
694 itri(j,i1) = iwork_t(ii)%NPT_PLY(j)
698 CALL my_orders(mode, work, itri, indx1, nsh , nkey)
699 ALLOCATE (nfirst2(nsh) ,nlast2(nsh))
705 ii = itri(ikey,indx1(i))
706 jj = itri(ikey,indx1(i-1))
710 nlast2(ns_sub) = nfirst2(ns_sub)
712 ELSEIF(ikey == nkey)
THEN
713 nlast2(ns_sub) = nlast2(ns_sub) + 1
719 ns_total = ns_total + 1
720 nfirst(ns_total) = nfirst1(is) + nfirst2(iis) - 1
721 nlast(ns_total ) = nfirst1(is) + nlast2(iis) - 1
722 DO i = nfirst2(iis),nlast2(iis)
723 i2 = nfirst1(is) + i - 1
724 indx_total(i2) = indx_sub(indx1(i))
727 DEALLOCATE(indx1,nfirst2,nlast2, itri,indx_sub)
729 DEALLOCATE(nfirst1,nlast1)
733 ALLOCATE(idstack(ns_total))
735 ns_stack = ns_stack + ns_total
741 npt_stack =
max(npt_stack,npt)
743 ids = iwork_t(ii)%IDSTACK
749 ALLOCATE(stack%IGEO(4*npt_stack+2,ns_stack))
750 ALLOCATE(stack%GEO(6*npt_stack+1,ns_stack))
751 ALLOCATE(stack%PM(20,ns_stack))
759 ngeo_stack = numgeo + numstack + numply + is
770 DO i= nfirst(is) , nlast(is)
773 iworksh(2,ii) = ngeo_stack
774 iworksh(3,ii) = ns_stack0 + is
778 DO j=2,npropgi - ltitr
779 igeo(j,pid) = igeo_stack(j,idstack(is))
784 geo(j,pid) = geo_stack(j,idstack(is))
789 nums = numgeo_stack(numgeo + idstack(is))
791 jpid = stack_info(nums)%PID(j)
794 jjpid = iwork_t(ies)%PLYID(jj)
795 IF(jjpid == jpid)
THEN
806 stack%IGEO(1,iis) = npt
807 stack%IGEO(2,iis) = pid
810 ipmat_iply = ipmat + npt
811 ipnpt_lay = ipmat_iply + npt
817 ipthkly = ipdir + npt
818 ipweight =ipthkly + npt
821 nums = numgeo_stack(numgeo + pids)
824 stack%IGEO(ippid+j ,iis) = stack_info(nums)%PID(js)
825 stack%IGEO(ipmat + j ,iis) = stack_info(nums)%MID(js)
826 stack%IGEO(ipmat_iply+j ,iis) = stack_info(nums)%MID_IP(js
827 stack%IGEO(ipnpt_lay + j,iis) = iwork_t(ies)%NPT_PLY(j)
828 stack%GEO(ipang + j ,iis) = stack_info(nums)%ANG(js)
829 stack%GEO(ipthk + j ,iis) = stack_info(nums)%THK(js)
830 stack%GEO(ippos + j ,iis) = stack_info(nums)%POS(js)
831 stack%GEO(ipdir + j ,iis) = stack_info(nums)%DIR(js)
832 stack%GEO(ipthkly + j ,iis) = stack_info(nums)%THKLY(js)
833 stack%GEO(ipweight + j ,iis) = stack_info(nums)%WEIGHT(js)
838 zshift = geo(199,pid)
844 tmin =
min(tmin,stack%GEO(ippos + j ,iis)-dt)
845 tmax =
max(tmax,stack%GEO(ippos + j ,iis)+dt)
849 stack%GEO(ipthk+j,iis)=
850 . stack%GEO(ipthk+j,iis)/
max(thickt,em20)
851 stack%GEO(ippos+j,iis)=
852 . stack%GEO(ippos+j,iis)/
max(thickt,em20)
858 thickt = thickt + stack%GEO(ipthk+j,iis)
861 stack%GEO(ipthk+j,iis) =
862 . stack%GEO(ipthk+j,iis)/
max(thickt,em20)
865 IF(ipos == 2 )zshift = zshift /
max(thickt,em20)
867 stack%GEO(ippos+1,iis) = zshift +
868 . half*stack%GEO(ipthk+1,iis)
870 stack%GEO(ippos+j,iis) =
871 . stack%GEO(ippos+j-1,iis) +
872 . half*(stack%GEO(ipthk+j,iis)+
873 . stack%GEO(ipthk+j-1,iis))
878 stack%GEO(1,iis) = thickt
883 pids = stack%IGEO(ippid + ilay ,iis)
884 nptt = igeo_stack(4,pids
885 igeo(4,pid) =
max(igeo(4,pid),nptt)
889 DEALLOCATE(indx,nfirst,nlast,indx_total,idstack,activ_ply)
892 DO i=1,numelc + numeltg
895 DEALLOCATE(iwork_t(i)%PLYID)
896 DEALLOCATE(iwork_t(i)%NPT_PLY)
899 IF(ipart_stack > 0)
THEN
900 IF(ipart_pcompp == 0)
THEN
901 ALLOCATE(stack%IGEO(4*npt_stack0+2,ns_stack0))
902 ALLOCATE(stack%GEO(6*npt_stack0+1,ns_stack0))
903 ALLOCATE(stack%PM(20,ns_stack0))
909 DO j = 1, 4*npt_stack0 + 2
910 stack%IGEO(j, is ) = iworks%IGEO(j,is)
912 DO j = 1, 6*npt_stack0+1
913 stack%GEO(j, is ) = iworks%GEO(j,is)
917 DEALLOCATE(iworks%IGEO, iworks%GEO)
920 IF(ns_stack > 0)
THEN
922 npt = stack%IGEO(1,is)
923 pid = stack%IGEO(2,is)
924 thickt = stack%GEO(1,is)
928 WRITE(iout,1000)id, is
929 WRITE(iout,1100) thickt,npt
937 pid = stack%IGEO(ippid + j ,is)
938 pos = stack%GEO( ippos + j ,is)
940 id = igeo_stack(1,pid)
941 WRITE(iout,2000)j, id , pos
945 pid = stack%IGEO(ippid
946 pos = stack%GEO( ippos + j ,is)
949 WRITE(iout,2000)j, id , pos
955 IF(ipart_pcompp > 0 .AND. ipart_stack == 0) ipart_stack = 1
957 DEALLOCATE (indx_sh,pid_sh,isubstack,
962 & 5x,
'COMPOSITE STACK SHELL PROPERTY SET ',
963 &
'WITH VARIABLE THICKNESSES AND MATERIALS'//,
964 & 7x,
'PROPERTY SET NUMBER . . . . . . . . . . ..=',i10/,
965 & 7x,
'SUB PROPERTY SET NUMBER . . . . . . . . . .=',i10/)
967 & 8x,
'SHELL THICKNESS . . . . . . . . . . . .=',1pg20.13/
968 & 8x,
'NUMBER OF PLIES. . . . . . . . . . . . =',i10/)
971 & 8x,
' PLY PID NUMBER . . . . . . . . .=',i10/
972 & 8x,
' POSITION. . . . . . . . . . . . .=',1pg20.13/)