38 SUBROUTINE rini45(NEL ,IOUT ,IPROP , IX, X, XL ,
39 3 MASS ,XINER ,STIFN , STIFR ,VISCM ,
40 4 VISCR,UVAR ,NUVAR,IXR, IXR_KJ,ID,TITR)
46 use element_mod ,
only : nixr
74#include "implicit_f.inc"
82#include "vect01_c.inc"
87 INTEGER NEL,IOUT,IPROP,NUVAR,IX(4,MVSIZ),IXR(NIXR,*),
90 . mass(nel) ,xiner(nel) ,stifn(nel),xl(mvsiz,3) ,
91 . stifr(nel),viscm(nel) ,viscr(nel),uvar(nuvar,*),
94 CHARACTER(LEN=NCHARTITLE) :: TITR
98 INTEGER I,IDSK1,IDSK2,JTYP,SKFLG,IFKNX,IFKNY,IFKNZ,
99 . IFKRX,IFKRY,IFKRZ,IFCNX,IFCNY,IFCNZ,IFCRX,IFCRY,IFCRZ,
101 my_real kxx,kyy,kzz,krx,kry,krz,knn,kr,x1,y1,z1,len2,
102 . k1,k2,k3,k4,k5,k6,c1,c2,c3,c4,c5,c6,ktt,krr,ctt,crr,
103 . cxx,cyy,czz,crx,cry,crz, deri,xf,get_u_func,fm,
104 . ex(lskew),get_u_geo,scf,get_u_func_deri,derimax,kfm,
105 . theta0(3),vect1(lskew),vect2(lskew),stop_angl_min(3),
111 jtyp = nint(get_u_geo(1,iprop))
113 kxx = get_u_geo(4,iprop)
114 kyy = get_u_geo(5,iprop)
115 kzz = get_u_geo(6,iprop)
116 krx = get_u_geo(7,iprop)
117 kry = get_u_geo(8,iprop)
118 krz = get_u_geo(9,iprop)
119 knn = get_u_geo(10,iprop)
120 scf = get_u_geo(11,iprop)
122 stop_angl_min(i) = get_u_geo(35+2*(i-1),iprop)
123 stop_angl_max(i) = get_u_geo(36+2*(i-1),iprop)
139 xf = get_u_func(ifknx,zero,deri)
140 k1 =
max(kxx*deri, em20)
143 xf = get_u_func(ifkny,zero,deri)
144 k2 =
max(kyy*deri, em20)
147 xf = get_u_func(ifknz,zero,deri)
148 k3 =
max(kzz*deri, em20)
151 xf = get_u_func(ifkrx,zero,deri)
152 k4 =
max(krx*deri, em20)
155 xf = get_u_func(ifkry,zero,deri)
156 k5 =
max(kry*deri, em20)
159 xf = get_u_func(ifkrz,zero,deri)
160 k6 =
max(krz*deri, em20)
162 cxx = get_u_geo(21,iprop)
163 cyy = get_u_geo(22,iprop)
164 czz = get_u_geo(23,iprop)
165 crx = get_u_geo(24,iprop)
166 cry = get_u_geo(25,iprop)
167 crz = get_u_geo(26,iprop)
183 xf = get_u_func(ifcnx,zero,deri)
184 c1 =
max(cxx*deri, em20)
187 xf = get_u_func(ifcny,zero,deri)
188 c2 =
max(cyy*deri, em20)
191 xf = get_u_func(ifcnz,zero,deri)
192 c3 =
max(czz*deri, em20)
195 xf = get_u_func(ifcrx,zero,deri)
196 c4 =
max(crx*deri, em20)
199 xf = get_u_func(ifcry,zero,deri)
200 c5 =
max(cry*deri, em20)
203 xf = get_u_func(ifcrz,zero,deri)
204 c6 =
max(crz*deri, em20)
208 kfm = get_u_geo(40+i,iprop)
209 fm = get_u_geo(46+i,iprop)
211 derimax = fm*get_u_func_deri(ifm)
212 IF (derimax>kfm)
THEN
214 . msgtype=msgwarning,
215 . anmode=aninfo_blind_2,
229 CALL init_skew45(jtyp,iprop,idsk1,idsk2,vect1,vect2,id,titr)
241 ierr=ierr+
get_skew45(iout,jtyp,ex,ixr,ixr_kj,il,x,id,titr
242 . idsk1,idsk2,vect1,vect2,theta0,
243 . stop_angl_min,stop_angl_max)
248 xl(i,1)=ex(1)*x1+ex(2)*y1+ex(3)*z1
249 xl(i,2)=ex(4)*x1+ex(5)*y1+ex(6)*z1
250 xl(i,3)=ex(7)*x1+ex(8)*y1+ex(9)*z1
255 len2=xl(i,1)*xl(i,1)+xl(i,2)*xl(i,2)+xl(i,3)*xl(i,3)
258 uvar(7,i) = theta0(1)
259 uvar(8,i) = theta0(2)
260 uvar(9,i) = theta0(3)
278 kr = knn*
max(scf,len2)
285 IF(jtyp>=2.AND.jtyp<=4)
THEN
299 ELSEIF(jtyp>=6.AND.jtyp<=8)
THEN
317 stifr(i) = krr+ktt*len2
336 INTEGER FUNCTION get_skew45(IOUT,JTYP,EX,IXR,IXR_KJ,IEL,X,ID,TITR,
337 . IDSK1,IDSK2,VECT1,VECT2,THETA0,
338 . STOP_ANGL_MIN,STOP_ANGL_MAX)
344 use element_mod ,
only : nixr
348#include "implicit_f.inc"
352#include "param_c.inc"
353#include "com04_c.inc"
357 INTEGER iout,ixr(,*),iel,jtyp,ixr_kj(5,*)
360 INTEGER,
INTENT(INOUT) :: idsk1,idsk2
361 my_real,
INTENT(INOUT) :: vect1(lskew),vect2(lskew)
362 my_real,
INTENT(INOUT) :: theta0(3)
363 my_real,
INTENT(INOUT) :: stop_angl_min(3),stop_angl_max
364 CHARACTER(LEN=NCHARTITLE) :: titr
368 INTEGER i,j,k,nnod,n1,n2,n3,n4,ierr1,ielusr,nn(6),hh
369 INTEGER numel_kj,id_kj,nnod2,nnod_req(9),nb_rot
370 my_real pp1,pp2,pp3,pp4,len,scal,exmax
371 my_real vect1_upt(lskew),vect2_upt(lskew),q(lskew),nr,t(3),
372 . cosk,sink,si2,e,ksi,umi,err,scal_sign
383 numel_kj = ixr_kj(1,numelr+1)
384 ielusr = ixr(nixr,iel)
397 IF (ixr(1+j,iel)/=0)
THEN
399 nn(nnod) = ixr(1+j,iel)
404 IF (ixr_kj(4,j)==ielusr) id_kj = j
409 IF (ixr_kj(j,id_kj)/=0)
THEN
411 nn(nnod) = ixr_kj(j,id_kj)
418 len = sqrt((x(1,nn(1))-x(1,nn(2)))**2+(x(2,nn(1))-x(2,nn(2)))**2
419 . +(x(3,nn(1))-x(3,nn(2)))**2)
420 IF ((nnod==2).AND.(len>em10)) nnod2=3
422 IF ((nnod2<nnod_req(jtyp)).AND.(idsk1 == 0))
THEN
428 . anmode=aninfo_blind_2,
433 . i4=nnod_req(jtyp)-nnod2)
434 ELSEIF ((nnod==2).AND.((jtyp==1).OR.(jtyp==8)).AND.(idsk1==0))
THEN
450 ELSEIF ((nnod==2).AND.(len>em10))
THEN
457 ex(1)=x(1,n2)-x(1,n1)
458 ex(2)=x(2,n2)-x(2,n1)
459 ex(3)=x(3,n2)-x(3,n1)
460 pp1=sqrt(ex(1)*ex(1)+ex(2)*ex(2)+ex(3)*ex(3))
463 IF (abs(ex(j))>= exmax)
THEN
478 pp2=sqrt(ex(4)*ex(4)+ex(5)*ex(5)+ex(6)*ex(6))
480 ex(7)=ex(2)*ex(6)-ex(3)*ex(5)
481 ex(8)=ex(3)*ex(4)-ex(1)*ex(6)
482 ex(9)=ex(1)*ex(5)-ex(2)*ex(4)
483 pp3=sqrt(ex(7)*ex(7)+ex(8)*ex(8)+ex(9)*ex
484 ELSEIF (nnod==3)
THEN
491 ex(1)=x(1,n2)-x(1,n1)
492 ex(2)=x(2,n2)-x(2,n1)
493 ex(3)=x(3,n2)-x(3,n1)
494 pp1=sqrt(ex(1)*ex(1)+ex(2)*ex(2)+ex(3)*ex(3))
497 IF (abs(ex(j)) >= exmax)
THEN
512 pp2=sqrt(ex(4)*ex(4)+ex(5)*ex(5)+ex(6)*ex(6))
514 ex(7)=ex(2)*ex(6)-ex(3)*ex(5)
515 ex(8)=ex(3)*ex(4)-ex(1)*ex(6)
516 ex(9)=ex(1)*ex(5)-ex(2)*ex(4)
517 pp3=sqrt(ex(7)*ex(7)+ex(8)*ex(8)+ex(9)*ex(9))
522 . anmode=aninfo_blind_2,
527 ELSEIF ((nnod>=4).AND.(jtyp/=5))
THEN
535 ex(1)=x(1,n2)-x(1,n1)
536 ex(2)=x(2,n2)-x(2,n1)
537 ex(3)=x(3,n2)-x(3,n1)
538 pp1=sqrt(ex(1)*ex(1)+ex(2)*ex(2)+ex(3)*ex(3))
540 ex(4)=x(1,n3)-x(1,n1)
541 ex(5)=x(2,n3)-x(2,n1)
542 ex(6)=x(3,n3)-x(3,n1)
543 pp2=sqrt(ex(4)*ex(4)+ex(5)*ex(5)+ex(6)*ex(6))
545 ex(7)=ex(2)*ex(6)-ex(3)*ex(5)
546 ex(8)=ex(3)*ex(4)-ex(1)*ex(6)
547 ex(9)=ex(1)*ex(5)-ex(2)*ex(4)
548 pp3=sqrt(ex(7)*ex(7)+ex(8)*ex(8)+ex(9)*ex(9))
550 scal =abs(ex(1)*ex(4)+ex(2)*ex(5)+ex(3)*ex(6))/(pp1*pp2)
551 IF (abs(scal)>=0.98)
THEN
554 . anmode=aninfo_blind_2,
559 ex(4)=ex(8)*ex(3)-ex(9)*ex(2)
560 ex(5)=ex(9)*ex(1)-ex(7)*ex(3)
561 ex(6)=ex(7)*ex(2)-ex(8)*ex(1)
562 pp2=sqrt(ex(4)*ex(4)+ex(5)*ex(5)+ex(6)*ex(6))
565 IF ((n4==n1).OR.(n4==n2).OR.(n4==n3))
THEN
568 . anmode=aninfo_blind_2,
572 pp4 = sqrt((x(1,n3)-x(1,n2))**2+(x(2,n3)-x(2,n2))**2
573 . +(x(3,n3)-x(3,n2))**2)
574 IF ((pp1<=em10).OR.(pp2<=em10).OR.(pp4<=em10))
THEN
577 . anmode=aninfo_blind_2,
582 ELSEIF ((nnod>=4).AND.(jtyp==5))
THEN
590 ex(4)=x(1,n2)-x(1,n1)
591 ex(5)=x(2,n2)-x(2,n1)
592 ex(6)=x(3,n2)-x(3,n1)
593 pp2=sqrt(ex(4)*ex(4)+ex(5)*ex(5)+ex(6)*ex(6))
595 ex(7)=x(1,n3)-x(1,n1)
596 ex(8)=x(2,n3)-x(2,n1)
597 ex(9)=x(3,n3)-x(3,n1)
598 pp3=sqrt(ex(7)*ex(7)+ex(8)*ex(8)+ex(9)*ex(9))
600 ex(1)=ex(5)*ex(9)-ex(6)*ex(8)
601 ex(2)=ex(6)*ex(7)-ex(4)*ex(9)
602 ex(3)=ex(4)*ex(8)-ex(5)*ex(7)
603 pp1=sqrt(ex(1)*ex(1)+ex(2)*ex(2)+ex(3)*ex(3))
605 scal =abs(ex(7)*ex(4)+ex(8)*ex(5)+ex(9)*ex(6))/(pp1+pp2)
606 IF (abs(scal)>=0.98)
THEN
609 . anmode=aninfo_blind_2,
613 ELSEIF (scal>=1e-4)
THEN
616 . msgtype=msgwarning,
617 . anmode=aninfo_blind_2,
622 ex(7)=ex(2)*ex(6)-ex(3)*ex(5)
623 ex(8)=ex(3)*ex(4)-ex(1)*ex(6)
624 ex(9)=ex(1)*ex(5)-ex(2)*ex(4)
625 pp3=sqrt(ex(7)*ex(7)+ex(8)*ex(8)+ex(9)*ex(9))
628 pp4 = sqrt((x(1,n3)-x(1,n2))**2+(x(2,n3)-x(2,n2))**2
629 . +(x(3,n3)-x(3,n2))**2)
630 IF ((pp1<=em10).OR.(pp2<=em10).OR.(pp4<=em10))
THEN
633 . anmode=aninfo_blind_2,
638 ELSEIF (idsk1 > 0)
THEN
649 . anmode=aninfo_blind_2,
670 IF ((idsk1 > 0).AND.(idsk2 > 2))
THEN
673 IF ((jtyp==2).OR.(jtyp==3).OR.(jtyp==4))
THEN
677 scal_sign = sign(one,ex(1)*vect1(1)+ex(2)*vect1(2)+ex(3)*vect1(3))
678 scal = abs(ex(1)*vect1(1)+ex(2)*vect1(2)+ex(3)*vect1(3))
679 IF (scal.LT.0.98)
THEN
683 . anmode=aninfo_blind_1,
689 IF ((one-scal).GT.em05)
THEN
692 . msgtype=msgwarning,
693 . anmode=aninfo_blind_2,
700 vect1_upt(1:3) = scal_sign*ex(1:3)
702 vect1_upt(7)=vect1_upt(2)*vect1(6)-vect1_upt
703 vect1_upt(8)=vect1_upt(3)*vect1(4)-vect1_upt(1)*vect1(6)
704 vect1_upt(9)=vect1_upt(1)*vect1(5)-vect1_upt(2)*vect1(4)
706 vect1_upt(4)=vect1_upt(8)*vect1_upt(3)-vect1_upt(9)*vect1_upt(2)
707 vect1_upt(5)=vect1_upt(9)*vect1_upt(1)-vect1_upt(7)*vect1_upt(3)
708 vect1_upt(6)=vect1_upt(7)*vect1_upt(2)-vect1_upt(8)*vect1_upt(1)
709 vect1(1:9) = vect1_upt(1:9)
711 scal_sign = sign(one,ex(1)*vect2(1)+ex(2)*vect2(2)+ex(3)*vect2(3))
712 scal = abs(ex(1)*vect2(1)+ex(2)*vect2(2)+ex(3)*vect2(3))
713 IF (scal.LT.0.98)
THEN
717 . anmode=aninfo_blind_1,
723 IF ((one-scal).GT.em05)
THEN
726 . msgtype=msgwarning,
727 . anmode=aninfo_blind_2,
734 vect2_upt(1:3) = scal_sign*ex(1:3)
736 vect2_upt(7)=vect2_upt(2)*vect2(6)-vect2_upt(3)*vect2(5)
737 vect2_upt(8)=vect2_upt(3)*vect2(4)-vect2_upt(1)*vect2(6)
738 vect2_upt(9)=vect2_upt(1)*vect2(5)-vect2_upt(2)*vect2(4)
740 vect2_upt(4)=vect2_upt(8)*vect2_upt(3)-vect2_upt(9)*vect2_upt(2)
741 vect2_upt(5)=vect2_upt(9)*vect2_upt(1)-vect2_upt(7)*vect2_upt(3)
742 vect2_upt(6)=vect2_upt(7)*vect2_upt(2)-vect2_upt(8)*vect2_upt(1)
743 vect2(1:9) = vect2_upt(1:9)
751 cosk = half * (e - one)
753 cosk =
max(cosk,-one)
762 t(1) = (q(6) - q(8)) * si2
763 t(2) = (q(7) - q(3)) * si2
764 t(3) = (q(2) - q(4)) * si2
765 nr = sqrt(t(1)*t(1)+t(2)*t(2)+t(3)*t(3))
766 IF (nr/=zero) nr = one/nr
778 IF (theta0(i)<0)
THEN
779 IF ((theta0(i)<stop_angl_min(i)).AND.(stop_angl_min(i)/=zero))
THEN
782 . anmode=aninfo_blind_1,
786 . r2=stop_angl_min(i))
789 IF ((theta0(i)>stop_angl_max(i)).AND.(stop_angl_max(i)/=zero))
THEN
792 . anmode=aninfo_blind_1,
796 . r2=stop_angl_max(i))
819 SUBROUTINE init_skew45(JTYP,IPROP,IDSK1,IDSK2,VECT1,VECT2,ID,TITR)
832#include "implicit_f.inc"
836#include "param_c.inc"
840 INTEGER JTYP,IPROP,ID,IDSK1,IDSK2
841 my_real,
INTENT(INOUT) :: VECT1(LSKEW),VECT2(LSKEW)
842 CHARACTER(LEN=NCHARTITLE) :: TITR
846 INTEGER I,J,GET_U_SKEW,N1,N2,N3,ISK
848 . Q(LSKEW),GET_U_GEO,NR,T(3),COSK,SINK,
849 . SI2,,KSI,UMI,ERR,STOP_ANGL
852 EXTERNAL get_u_geo,get_u_skew
855 idsk1 = nint(get_u_geo(53,iprop))
856 idsk2 = nint(get_u_geo(54,iprop))
860 isk = get_u_skew(idsk1,n1,n2,n3,vect1)
864 . anmode=aninfo_blind_1,
873 isk = get_u_skew(idsk2,n1,n2,n3,vect2)
877 . anmode=aninfo_blind_1,
882 IF ((jtyp>4).AND.(jtyp<9))
THEN
885 . msgtype=msgwarning,
886 . anmode=aninfo_blind_1,
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)