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)
73#include "implicit_f.inc"
81#include "vect01_c.inc"
86 INTEGER NEL,IOUT,IPROP,NUVAR,IX(4,MVSIZ),IXR(NIXR,*),
89 . mass(nel) ,xiner(nel) ,stifn(nel),xl(mvsiz,3) ,
90 . stifr(nel),viscm(nel) ,viscr(nel),uvar(nuvar,*),
93 CHARACTER(LEN=NCHARTITLE) :: TITR
97 INTEGER I,IDSK1,IDSK2,JTYP,SKFLG,IFKNX,IFKNY,IFKNZ,
98 . IFKRX,IFKRY,IFKRZ,IFCNX,IFCNY,IFCNZ,IFCRX,IFCRY,IFCRZ,
100 my_real kxx,kyy,kzz,krx,kry,krz,knn,kr,x1,y1,z1,len2,
101 . k1,k2,k3,k4,k5,k6,c1,c2,c3,c4,c5,c6,ktt,krr,ctt,crr,
102 . cxx,cyy,czz,crx,cry,crz, deri,xf,get_u_func,fm,
103 . ex(lskew),get_u_geo,scf,get_u_func_deri,derimax,kfm,
104 . theta0(3),vect1(lskew),vect2(lskew),stop_angl_min(3),
110 jtyp = nint(get_u_geo(1,iprop))
112 kxx = get_u_geo(4,iprop)
113 kyy = get_u_geo(5,iprop)
114 kzz = get_u_geo(6,iprop)
115 krx = get_u_geo(7,iprop)
116 kry = get_u_geo(8,iprop)
117 krz = get_u_geo(9,iprop)
118 knn = get_u_geo(10,iprop)
119 scf = get_u_geo(11,iprop)
121 stop_angl_min(i) = get_u_geo(35+2*(i-1),iprop)
122 stop_angl_max(i) = get_u_geo(36+2*(i-1),iprop)
138 xf = get_u_func(ifknx,zero,deri)
139 k1 =
max(kxx*deri, em20)
142 xf = get_u_func(ifkny,zero,deri)
143 k2 =
max(kyy*deri, em20)
146 xf = get_u_func(ifknz,zero,deri)
147 k3 =
max(kzz*deri, em20)
150 xf = get_u_func(ifkrx,zero,deri)
151 k4 =
max(krx*deri, em20)
154 xf = get_u_func(ifkry,zero,deri)
155 k5 =
max(kry*deri, em20)
158 xf = get_u_func(ifkrz,zero,deri)
159 k6 =
max(krz*deri, em20)
161 cxx = get_u_geo(21,iprop)
162 cyy = get_u_geo(22,iprop)
163 czz = get_u_geo(23,iprop)
164 crx = get_u_geo(24,iprop)
165 cry = get_u_geo(25,iprop)
166 crz = get_u_geo(26,iprop)
182 xf = get_u_func(ifcnx,zero,deri)
183 c1 =
max(cxx*deri, em20)
186 xf = get_u_func(ifcny,zero,deri)
187 c2 =
max(cyy*deri, em20)
190 xf = get_u_func(ifcnz,zero,deri)
191 c3 =
max(czz*deri, em20)
194 xf = get_u_func(ifcrx,zero,deri)
195 c4 =
max(crx*deri, em20)
198 xf = get_u_func(ifcry,zero,deri)
199 c5 =
max(cry*deri, em20)
202 xf = get_u_func(ifcrz,zero,deri)
203 c6 =
max(crz*deri, em20)
207 kfm = get_u_geo(40+i,iprop)
208 fm = get_u_geo(46+i,iprop)
210 derimax = fm*get_u_func_deri(ifm)
211 IF (derimax>kfm)
THEN
213 . msgtype=msgwarning,
214 . anmode=aninfo_blind_2,
228 CALL init_skew45(jtyp,iprop,idsk1,idsk2,vect1,vect2,id,titr)
240 ierr=ierr+
get_skew45(iout,jtyp,ex,ixr,ixr_kj,il,x,id,titr,
241 . idsk1,idsk2,vect1,vect2,theta0,
242 . stop_angl_min,stop_angl_max)
247 xl(i,1)=ex(1)*x1+ex(2)*y1+ex(3)*z1
248 xl(i,2)=ex(4)*x1+ex(5)*y1+ex(6)*z1
249 xl(i,3)=ex(7)*x1+ex(8)*y1+ex(9)*z1
254 len2=xl(i,1)*xl(i,1)+xl(i,2)*xl(i,2)+xl(i,3)*xl(i,3)
257 uvar(7,i) = theta0(1)
258 uvar(8,i) = theta0(2)
259 uvar(9,i) = theta0(3)
277 kr = knn*
max(scf,len2)
284 IF(jtyp>=2.AND.jtyp<=4)
THEN
298 ELSEIF(jtyp>=6.AND.jtyp<=8)
THEN
316 stifr(i) = krr+ktt*len2
335 INTEGER FUNCTION get_skew45(IOUT,JTYP,EX,IXR,IXR_KJ,IEL,X,ID,TITR,
336 . IDSK1,IDSK2,VECT1,VECT2,THETA0,
337 . STOP_ANGL_MIN,STOP_ANGL_MAX)
346#include "implicit_f.inc"
350#include "param_c.inc"
351#include "com04_c.inc"
355 INTEGER iout,ixr(nixr,*),iel,jtyp,ixr_kj(5,*)
358 INTEGER,
INTENT(INOUT) :: idsk1,idsk2
359 my_real,
INTENT(INOUT) :: vect1(lskew),vect2(lskew)
360 my_real,
INTENT(INOUT) :: theta0(3)
361 my_real,
INTENT(INOUT) :: stop_angl_min(3),stop_angl_max(3)
362 CHARACTER(LEN=NCHARTITLE) :: titr
366 INTEGER i,j,k,nnod,n1,n2,n3,n4,ierr1,ielusr,nn(6),hh
367 INTEGER numel_kj,id_kj,nnod2,nnod_req(9),nb_rot
368 my_real pp1,pp2,pp3,pp4,len,scal,exmax
369 my_real vect1_upt(lskew),vect2_upt(lskew)
381 numel_kj = ixr_kj(1,numelr+1)
382 ielusr = ixr(nixr,iel)
395 IF (ixr(1+j,iel)/=0)
THEN
397 nn(nnod) = ixr(1+j,iel)
402 IF (ixr_kj(4,j)==ielusr) id_kj = j
407 IF (ixr_kj(j,id_kj)/=0)
THEN
409 nn(nnod) = ixr_kj(j,id_kj)
416 len = sqrt((x(1,nn(1))-x(1,nn(2)))**2+(x(2,nn(1))-x(2,nn(2)))**2
417 . +(x(3,nn(1))-x(3,nn(2)))**2)
418 IF ((nnod==2).AND.(len>em10)) nnod2=3
420 IF ((nnod2<nnod_req(jtyp)).AND.(idsk1 == 0))
THEN
426 . anmode=aninfo_blind_2,
431 . i4=nnod_req(jtyp)-nnod2)
432 ELSEIF ((nnod==2).AND.((jtyp==1).OR.(jtyp==8)).AND.(idsk1==0))
THEN
448 ELSEIF ((nnod==2).AND.(len>em10))
THEN
455 ex(1)=x(1,n2)-x(1,n1)
456 ex(2)=x(2,n2)-x(2,n1)
457 ex(3)=x(3,n2)-x(3,n1)
458 pp1=sqrt(ex(1)*ex(1)+ex(2)*ex(2)+ex(3)*ex(3))
461 IF (abs(ex(j))>= exmax)
THEN
476 pp2=sqrt(ex(4)*ex(4)+ex(5)*ex(5)+ex(6)*ex(6))
478 ex(7)=ex(2)*ex(6)-ex(3)*ex(5)
479 ex(8)=ex(3)*ex(4)-ex(1)*ex(6)
480 ex(9)=ex(1)*ex(5)-ex(2)*ex(4)
481 pp3=sqrt(ex(7)*ex(7)+ex(8)*ex(8)+ex(9)*ex(9))
482 ELSEIF (nnod==3)
THEN
489 ex(1)=x(1,n2)-x(1,n1)
490 ex(2)=x(2,n2)-x(2,n1)
491 ex(3)=x(3,n2)-x(3,n1)
492 pp1=sqrt(ex(1)*ex(1)+ex(2)*ex(2)+ex(3)*ex(3))
495 IF (abs(ex(j)) >= exmax)
THEN
510 pp2=sqrt(ex(4)*ex(4)+ex(5)*ex(5)+ex(6)*ex(6))
512 ex(7)=ex(2)*ex(6)-ex(3)*ex(5)
513 ex(8)=ex(3)*ex(4)-ex(1)*ex(6)
514 ex(9)=ex(1)*ex(5)-ex(2)*ex(4)
515 pp3=sqrt(ex(7)*ex(7)+ex(8)*ex(8)+ex(9)*ex(9))
520 . anmode=aninfo_blind_2,
525 ELSEIF ((nnod>=4).AND.(jtyp/=5))
THEN
533 ex(1)=x(1,n2)-x(1,n1)
534 ex(2)=x(2,n2)-x(2,n1)
535 ex(3)=x(3,n2)-x(3,n1)
536 pp1=sqrt(ex(1)*ex(1)+ex(2)*ex(2)+ex(3)*ex(3))
538 ex(4)=x(1,n3)-x(1,n1)
539 ex(5)=x(2,n3)-x(2,n1)
540 ex(6)=x(3,n3)-x(3,n1)
543 ex(7)=ex(2)*ex(6)-ex(3)*ex(5)
544 ex(8)=ex(3)*ex(4)-ex(1)*ex(6)
545 ex(9)=ex(1)*ex(5)-ex(2)*ex(4)
546 pp3=sqrt(ex(7)*ex(7)+ex(8)*ex(8)+ex(9)*ex(9))
548 scal =abs(ex(1)*ex(4)+ex(2)*ex(5)+ex(3)*ex(6))/(pp1*pp2)
557 ex(4)=ex(8)*ex(3)-ex(9)*ex(2)
558 ex(5)=ex(9)*ex(1)-ex(7)*ex(3)
559 ex(6)=ex(7)*ex(2)-ex(8)*ex(1)
560 pp2=sqrt(ex(4)*ex(4)+ex(5)*ex(5)+ex(6)*ex(6))
563 IF ((n4==n1).OR.(n4==n2).OR.(n4==n3))
THEN
566 . anmode=aninfo_blind_2,
570 pp4 = sqrt((x(1,n3)-x(1,n2))**2+(x(2,n3)-x(2,n2))**2
571 . +(x(3,n3)-x(3,n2))**2)
572 IF ((pp1<=em10).OR.(pp2<=em10).OR.(pp4<=em10))
THEN
575 . anmode=aninfo_blind_2,
580 ELSEIF ((nnod>=4).AND.(jtyp==5))
THEN
588 ex(4)=x(1,n2)-x(1,n1)
589 ex(5)=x(2,n2)-x(2,n1)
590 ex(6)=x(3,n2)-x(3,n1)
591 pp2=sqrt(ex(4)*ex(4)+ex(5)*ex(5)+ex(6)*ex(6))
593 ex(7)=x(1,n3)-x(1,n1)
594 ex(8)=x(2,n3)-x(2,n1)
595 ex(9)=x(3,n3)-x(3,n1)
596 pp3=sqrt(ex(7)*ex(7)+ex(8)*ex(8)+ex(9)*ex(9))
598 ex(1)=ex(5)*ex(9)-ex(6)*ex(8)
599 ex(2)=ex(6)*ex(7)-ex(4)*ex(9)
600 ex(3)=ex(4)*ex(8)-ex(5)*ex(7)
601 pp1=sqrt(ex(1)*ex(1)+ex(2)*ex(2)+ex(3)*ex(3))
603 scal =abs(ex(7)*ex(4)+ex(8)*ex(5)+ex(9)*ex(6))/(pp1+pp2)
604 IF (abs(scal)>=0.98)
THEN
607 . anmode=aninfo_blind_2,
611 ELSEIF (scal>=1e-4)
THEN
614 . msgtype=msgwarning,
615 . anmode=aninfo_blind_2,
620 ex(7)=ex(2)*ex(6)-ex(3)*ex(5)
621 ex(8)=ex(3)*ex(4)-ex(1)*ex(6)
622 ex(9)=ex(1)*ex(5)-ex(2)*ex(4)
623 pp3=sqrt(ex(7)*ex(7)+ex(8)*ex(8)+ex(9)*ex(9))
626 pp4 = sqrt((x(1,n3)-x(1,n2))**2+(x(2,n3)-x(2,n2))**2
627 . +(x(3,n3)-x(3,n2))**2)
628 IF ((pp1<=em10).OR.(pp2<=em10).OR.(pp4<=em10))
THEN
631 . anmode=aninfo_blind_2,
636 ELSEIF (idsk1 > 0)
THEN
647 . anmode=aninfo_blind_2,
668 IF ((idsk1 > 0).AND.(idsk2 > 2))
THEN
671 IF ((jtyp==2).OR.(jtyp==3).OR.(jtyp==4))
THEN
675 scal_sign = sign(one,ex(1)*vect1(1)+ex(2)*vect1(2)+ex(3)*vect1(3))
676 scal = abs(ex(1)*vect1(1)+ex(2)*vect1(2)+ex(3)*vect1(3))
677 IF (scal.LT.0.98)
THEN
681 . anmode=aninfo_blind_1,
687 IF ((one-scal).GT.em05)
THEN
690 . msgtype=msgwarning,
691 . anmode=aninfo_blind_2,
698 vect1_upt(1:3) = scal_sign*ex(1:3)
700 vect1_upt(7)=vect1_upt(2)*vect1(6)-vect1_upt(3)*vect1(5)
701 vect1_upt(8)=vect1_upt(3)*vect1(4)-vect1_upt(1)*vect1(6)
702 vect1_upt(9)=vect1_upt(1)*vect1(5)-vect1_upt(2)*vect1(4)
704 vect1_upt(4)=vect1_upt(8)*vect1_upt(3)-vect1_upt(9)*vect1_upt(2)
705 vect1_upt(5)=vect1_upt(9)*vect1_upt(1)-vect1_upt(7)*vect1_upt(3)
706 vect1_upt(6)=vect1_upt(7)*vect1_upt(2)-vect1_upt(8)*vect1_upt(1)
707 vect1(1:9) = vect1_upt(1:9)
709 scal_sign = sign(one,ex(1)*vect2(1)+ex(2)*vect2(2)+ex(3)*vect2(3))
710 scal = abs(ex(1)*vect2(1)+ex(2)*vect2(2)+ex(3)*vect2(3))
711 IF (scal.LT.0.98)
THEN
715 . anmode=aninfo_blind_1,
721 IF ((one-scal).GT.em05)
THEN
724 . msgtype=msgwarning,
725 . anmode=aninfo_blind_2,
732 vect2_upt(1:3) = scal_sign*ex(1:3)
734 vect2_upt(7)=vect2_upt(2)*vect2(6)-vect2_upt(3)*vect2(5)
735 vect2_upt(8)=vect2_upt(3)*vect2(4)-vect2_upt(1)*vect2(6)
736 vect2_upt(9)=vect2_upt(1)*vect2(5)-vect2_upt(2)*vect2(4)
738 vect2_upt(4)=vect2_upt(8)*vect2_upt(3)-vect2_upt(9)*vect2_upt(2)
739 vect2_upt(5)=vect2_upt(9)*vect2_upt(1)-vect2_upt(7)*vect2_upt(3)
740 vect2_upt(6)=vect2_upt(7)*vect2_upt(2)-vect2_upt(8)*vect2_upt(1)
741 vect2(1:9) = vect2_upt(1:9)
749 cosk = half * (e - one)
751 cosk =
max(cosk,-one)
760 t(1) = (q(6) - q(8)) * si2
761 t(2) = (q(7) - q(3)) * si2
762 t(3) = (q(2) - q(4)) * si2
763 nr = sqrt(t(1)*t(1)+t(2)*t(2)+t(3)*t(3))
764 IF (nr/=zero) nr = one/nr
776 IF (theta0(i)<0)
THEN
777 IF ((theta0(i)<stop_angl_min(i)).AND.
THEN
780 . anmode=aninfo_blind_1,
784 . r2=stop_angl_min(i))
787 IF ((theta0(i)>stop_angl_max(i)).AND.(stop_angl_max(i)/=zero))
THEN
790 . anmode=aninfo_blind_1,
794 . r2=stop_angl_max(i))
817 SUBROUTINE init_skew45(JTYP,IPROP,IDSK1,IDSK2,VECT1,VECT2,ID,TITR)
830#include "implicit_f.inc"
834#include "param_c.inc"
838 INTEGER JTYP,IPROP,ID,IDSK1,IDSK2
839 my_real,
INTENT(INOUT) :: VECT1(LSKEW),VECT2(LSKEW)
840 CHARACTER(LEN=NCHARTITLE) :: TITR
844 INTEGER I,,GET_U_SKEW,N1,N2,N3,ISK
846 . Q(LSKEW),GET_U_GEO,NR,T(3),COSK,SINK,
847 . SI2,E,KSI,UMI,ERR,STOP_ANGL
850 EXTERNAL get_u_geo,get_u_skew
853 idsk1 = nint(get_u_geo(53,iprop))
854 idsk2 = nint(get_u_geo(54,iprop))
858 isk = get_u_skew(idsk1,n1,n2,n3,vect1)
862 . anmode=aninfo_blind_1,
871 isk = get_u_skew(idsk2,n1,n2,n3,vect2)
875 . anmode=aninfo_blind_1,
880 IF ((jtyp>4).AND.(jtyp<9))
THEN
883 . msgtype=msgwarning,
884 . 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)