60 integer,
parameter,
private :: kreal = kind(0.0d0)
117 integer,
intent(in) :: etype
131 integer,
intent(in) :: etype
168 integer,
intent(in) :: etype
193 integer,
intent(in) :: intype
194 integer,
intent(in) :: innumber
195 integer,
intent(out) :: outtype
196 integer,
intent(out) :: nodes(:)
199 select case ( intype )
202 select case ( innumber )
204 nodes(1)=1; nodes(2)=2; nodes(3)=3
206 nodes(1)=4; nodes(2)=2; nodes(3)=1
208 nodes(1)=4; nodes(2)=3; nodes(3)=2
210 nodes(1)=4; nodes(2)=1; nodes(3)=3
214 select case ( innumber )
216 nodes(1)=1; nodes(2)=2; nodes(3)=3
217 nodes(4)=5; nodes(5)=6; nodes(6)=7
219 nodes(1)=4; nodes(2)=2; nodes(3)=1
220 nodes(4)=9; nodes(5)=5; nodes(6)=8
222 nodes(1)=4; nodes(2)=3; nodes(3)=2
223 nodes(4)=10; nodes(5)=6; nodes(6)=9
225 nodes(1)=4; nodes(2)=1; nodes(3)=3
226 nodes(4)=8; nodes(5)=7; nodes(6)=10
230 select case ( innumber )
232 nodes(1)=1; nodes(2)=2; nodes(3)=3
233 nodes(4)=5; nodes(5)=6; nodes(6)=7
235 nodes(1)=4; nodes(2)=2; nodes(3)=1
236 nodes(4)=9; nodes(5)=5; nodes(6)=8
238 nodes(1)=4; nodes(2)=3; nodes(3)=2
239 nodes(4)=10; nodes(5)=6; nodes(6)=9
241 nodes(1)=4; nodes(2)=1; nodes(3)=3
242 nodes(4)=8; nodes(5)=7; nodes(6)=10
246 select case ( innumber )
248 nodes(1)=1; nodes(2)=2; nodes(3)=3; nodes(4)=4
250 nodes(1)=8; nodes(2)=7; nodes(3)=6; nodes(4)=5
252 nodes(1)=5; nodes(2)=6; nodes(3)=2; nodes(4)=1
254 nodes(1)=6; nodes(2)=7; nodes(3)=3; nodes(4)=2
256 nodes(1)=7; nodes(2)=8; nodes(3)=4; nodes(4)=3
258 nodes(1)=8; nodes(2)=5; nodes(3)=1; nodes(4)=4
264 select case ( innumber )
266 nodes(1)=1; nodes(2)=2; nodes(3)=3; nodes(4)=4
267 nodes(5)=9; nodes(6)=10; nodes(7)=11; nodes(8)=12
269 nodes(1)=8; nodes(2)=7; nodes(3)=6; nodes(4)=5
270 nodes(5)=15; nodes(6)=14; nodes(7)=13; nodes(8)=16
272 nodes(1)=5; nodes(2)=6; nodes(3)=2; nodes(4)=1
273 nodes(5)=13; nodes(6)=18; nodes(7)=9; nodes(8)=17
275 nodes(1)=6; nodes(2)=7; nodes(3)=3; nodes(4)=2
276 nodes(5)=14; nodes(6)=19; nodes(7)=10; nodes(8)=18
278 nodes(1)=7; nodes(2)=8; nodes(3)=4; nodes(4)=3
279 nodes(5)=15; nodes(6)=20; nodes(7)=11; nodes(8)=19
281 nodes(1)=8; nodes(2)=5; nodes(3)=1; nodes(4)=4
282 nodes(5)=16; nodes(6)=17; nodes(7)=12; nodes(8)=20
287 select case ( innumber )
290 nodes(1)=1; nodes(2)=2; nodes(3)=3
293 nodes(1)=6; nodes(2)=5; nodes(3)=4
296 nodes(1)=4; nodes(2)=5; nodes(3)=2; nodes(4)=1
299 nodes(1)=5; nodes(2)=6; nodes(3)=3; nodes(4)=2
302 nodes(1)=6; nodes(2)=4; nodes(3)=1; nodes(4)=3
305 select case ( innumber )
308 nodes(1)=1; nodes(2)=2; nodes(3)=3
309 nodes(4)=7; nodes(5)=8; nodes(6)=9
312 nodes(1)=6; nodes(2)=5; nodes(3)=4
313 nodes(4)=11; nodes(5)=10; nodes(6)=12
316 nodes(1)=4; nodes(2)=5; nodes(3)=2; nodes(4)=1
317 nodes(5)=10; nodes(6)=14; nodes(7)=7; nodes(8)=13
320 nodes(1)=5; nodes(2)=6; nodes(3)=3; nodes(4)=2
321 nodes(5)=11; nodes(6)=15; nodes(7)=8; nodes(8)=14
324 nodes(1)=6; nodes(2)=4; nodes(3)=1; nodes(4)=3
325 nodes(5)=12; nodes(6)=13; nodes(7)=9; nodes(8)=15
329 select case (innumber )
331 nodes(1) = 1; nodes(2)=2
333 nodes(1) = 2; nodes(2)=3
335 nodes(1) = 3; nodes(2)=1
339 select case (innumber )
341 nodes(1) = 1; nodes(2)=2; nodes(3)=4
343 nodes(1) = 2; nodes(2)=3; nodes(3)=5
345 nodes(1) = 3; nodes(2)=1; nodes(3)=6
349 select case (innumber )
351 nodes(1) = 1; nodes(2)=2
353 nodes(1) = 2; nodes(2)=3
355 nodes(1) = 3; nodes(2)=4
357 nodes(1) = 4; nodes(2)=1
361 select case (innumber )
363 nodes(1) = 1; nodes(2)=2; nodes(3)=5
365 nodes(1) = 2; nodes(2)=3; nodes(3)=6
367 nodes(1) = 3; nodes(2)=4; nodes(3)=7
369 nodes(1) = 4; nodes(2)=1; nodes(3)=8
372 select case ( innumber )
375 nodes(1)=1; nodes(2)=2; nodes(3)=3
378 nodes(1)=6; nodes(2)=5; nodes(3)=4
381 nodes(1)=4; nodes(2)=5; nodes(3)=2; nodes(4)=1
384 nodes(1)=5; nodes(2)=6; nodes(3)=3; nodes(4)=2
387 nodes(1)=6; nodes(2)=4; nodes(3)=1; nodes(4)=3
391 select case ( innumber )
393 nodes(1)=1; nodes(2)=2; nodes(3)=3; nodes(4)=4
395 nodes(1)=8; nodes(2)=7; nodes(3)=6; nodes(4)=5
397 nodes(1)=5; nodes(2)=6; nodes(3)=2; nodes(4)=1
399 nodes(1)=6; nodes(2)=7; nodes(3)=3; nodes(4)=2
401 nodes(1)=7; nodes(2)=8; nodes(3)=4; nodes(4)=3
403 nodes(1)=8; nodes(2)=5; nodes(3)=1; nodes(4)=4
409 select case ( innumber )
411 nodes(1)=1; nodes(2)=2; nodes(3)=3
417 select case ( innumber )
419 nodes(1)=1; nodes(2)=2; nodes(3)=3
420 nodes(4)=4; nodes(5)=5; nodes(6)=6
426 select case ( innumber )
428 nodes(1)=1; nodes(2)=2; nodes(3)=3; nodes(4)=4
434 select case ( innumber )
436 nodes(1)=1; nodes(2)=2; nodes(3)=3; nodes(4)=4
437 nodes(5)=5; nodes(6)=6; nodes(7)=7; nodes(8)=8
443 stop
"element type not defined-sbs"
450 integer,
intent(in) :: fetype
483 stop
"element type not defined-np"
489 integer,
intent(in) :: etype
504 integer,
intent(in) :: etype, np
505 real(kind=kreal),
intent(out) :: zeta
508 stop
"invalid shell thickness quadrature point"
522 integer,
intent(in) :: etype, np
525 stop
"invalid shell thickness quadrature point"
539 integer,
intent(in) :: fetype
540 integer,
intent(in) :: np
541 real(kind=kreal),
intent(out) :: pos(:)
578 stop
"element type not defined-qp"
585 integer,
intent(in) :: fetype
586 integer,
intent(in) :: np
627 integer,
intent(in) :: fetype
628 real(kind=kreal),
intent(in) :: localcoord(:)
629 real(kind=kreal),
intent(out) :: shapederiv(:,:)
665 stop
"Element type not defined-sde"
671 integer,
intent(in) :: fetype
672 real(kind=kreal),
intent(in) :: localcoord(:)
673 real(kind=kreal),
intent(out) :: shapederiv(:,:,:)
690 stop
"Cannot calculate second derivatives of shape function"
696 integer,
intent(in) :: fetype
697 real(kind=kreal),
intent(in) :: localcoord(:)
698 real(kind=kreal),
intent(out) :: func(:)
739 stop
"Element type not defined-sf"
750 integer,
intent(in) :: fetype
751 real(kind = kreal),
intent(out) :: nncoord(:, :)
755 select case( fetype )
774 stop
"Element type not defined-sde"
790 integer,
intent(in) :: fetype
791 integer,
intent(in) :: nn
792 real(kind=kreal),
intent(in) :: localcoord(:)
793 real(kind=kreal),
intent(in) :: elecoord(:,:)
794 real(kind=kreal),
intent(out) :: det
795 real(kind=kreal),
intent(out) :: gderiv(:,:)
797 real(kind=kreal) :: dum, xj(3,3), xji(3,3), deriv(nn,3)
804 xj(1:2,1:2)=matmul( elecoord(1:2,1:nn), deriv(1:nn,1:2) )
805 det=xj(1,1)*xj(2,2)-xj(2,1)*xj(1,2)
806 if( det==0.d0 ) stop
"Math error in GetGlobalDeriv! Determinant==0.0"
808 xji(1,1)= xj(2,2)*dum
809 xji(1,2)=-xj(1,2)*dum
810 xji(2,1)=-xj(2,1)*dum
811 xji(2,2)= xj(1,1)*dum
814 xj(1:3,1:3)= matmul( elecoord(1:3,1:nn), deriv(1:nn,1:3) )
816 det=xj(1,1)*xj(2,2)*xj(3,3) &
817 +xj(2,1)*xj(3,2)*xj(1,3) &
818 +xj(3,1)*xj(1,2)*xj(2,3) &
819 -xj(3,1)*xj(2,2)*xj(1,3) &
820 -xj(2,1)*xj(1,2)*xj(3,3) &
821 -xj(1,1)*xj(3,2)*xj(2,3)
822 if( det==0.d0 ) stop
"Math error in GetGlobalDeriv! Determinant==0.0"
825 xji(1,1)=dum*( xj(2,2)*xj(3,3)-xj(3,2)*xj(2,3) )
826 xji(1,2)=dum*(-xj(1,2)*xj(3,3)+xj(3,2)*xj(1,3) )
827 xji(1,3)=dum*( xj(1,2)*xj(2,3)-xj(2,2)*xj(1,3) )
828 xji(2,1)=dum*(-xj(2,1)*xj(3,3)+xj(3,1)*xj(2,3) )
829 xji(2,2)=dum*( xj(1,1)*xj(3,3)-xj(3,1)*xj(1,3) )
830 xji(2,3)=dum*(-xj(1,1)*xj(2,3)+xj(2,1)*xj(1,3) )
831 xji(3,1)=dum*( xj(2,1)*xj(3,2)-xj(3,1)*xj(2,2) )
832 xji(3,2)=dum*(-xj(1,1)*xj(3,2)+xj(3,1)*xj(1,2) )
833 xji(3,3)=dum*( xj(1,1)*xj(2,2)-xj(2,1)*xj(1,2) )
836 gderiv(1:nn,1:nspace)=matmul( deriv(1:nn,1:nspace), xji(1:nspace,1:nspace) )
841 integer,
intent(in) :: fetype
842 integer,
intent(in) :: nn
843 real(kind=kreal),
intent(in) :: localcoord(:)
844 real(kind=kreal),
intent(in) :: elecoord(:,:)
846 real(kind=kreal) :: xj(3,3), deriv(nn,3)
853 xj(1:2,1:2)=matmul( elecoord(1:2,1:nn), deriv(1:nn,1:2) )
856 xj(1:3,1:3)= matmul( elecoord(1:3,1:nn), deriv(1:nn,1:3) )
858 +xj(2,1)*xj(3,2)*xj(1,3) &
859 +xj(3,1)*xj(1,2)*xj(2,3) &
860 -xj(3,1)*xj(2,2)*xj(1,3) &
861 -xj(2,1)*xj(1,2)*xj(3,3) &
862 -xj(1,1)*xj(3,2)*xj(2,3)
868 subroutine getjacobian( fetype, nn, localcoord, elecoord, det, jacobian, inverse )
869 integer,
intent(in) :: fetype
870 integer,
intent(in) :: nn
871 real(kind=kreal),
intent(in) :: localcoord(:)
872 real(kind=kreal),
intent(in) :: elecoord(:,:)
873 real(kind=kreal),
intent(out) :: det
874 real(kind=kreal),
intent(out) :: jacobian(:,:)
875 real(kind=kreal),
intent(out) :: inverse(:,:)
877 real(kind=kreal) :: dum, deriv(nn,3)
884 jacobian(1:2,1:2)=matmul( elecoord(1:2,1:nn), deriv(1:nn,1:2) )
885 det=jacobian(1,1)*jacobian(2,2)-jacobian(2,1)*jacobian(1,2)
886 if( det==0.d0 ) stop
"Math error in getJacobain! Determinant==0.0"
888 inverse(1,1)= jacobian(2,2)*dum
889 inverse(1,2)=-jacobian(1,2)*dum
890 inverse(2,1)=-jacobian(2,1)*dum
891 inverse(2,2)= jacobian(1,1)*dum
894 jacobian(1:3,1:3)= matmul( elecoord(1:3,1:nn), deriv(1:nn,1:3) )
896 det=jacobian(1,1)*jacobian(2,2)*jacobian(3,3) &
897 +jacobian(2,1)*jacobian(3,2)*jacobian(1,3) &
898 +jacobian(3,1)*jacobian(1,2)*jacobian(2,3) &
899 -jacobian(3,1)*jacobian(2,2)*jacobian(1,3) &
900 -jacobian(2,1)*jacobian(1,2)*jacobian(3,3) &
901 -jacobian(1,1)*jacobian(3,2)*jacobian(2,3)
902 if( det==0.d0 ) stop
"Math error in getJacobain! Determinant==0.0"
905 inverse(1,1)=dum*( jacobian(2,2)*jacobian(3,3)-jacobian(3,2)*jacobian(2,3) )
906 inverse(1,2)=dum*(-jacobian(1,2)*jacobian(3,3)+jacobian(3,2)*jacobian(1,3) )
907 inverse(1,3)=dum*( jacobian(1,2)*jacobian(2,3)-jacobian(2,2)*jacobian(1,3) )
908 inverse(2,1)=dum*(-jacobian(2,1)*jacobian(3,3)+jacobian(3,1)*jacobian(2,3) )
909 inverse(2,2)=dum*( jacobian(1,1)*jacobian(3,3)-jacobian(3,1)*jacobian(1,3) )
910 inverse(2,3)=dum*(-jacobian(1,1)*jacobian(2,3)+jacobian(2,1)*jacobian(1,3) )
911 inverse(3,1)=dum*( jacobian(2,1)*jacobian(3,2)-jacobian(3,1)*jacobian(2,2) )
912 inverse(3,2)=dum*(-jacobian(1,1)*jacobian(3,2)+jacobian(3,1)*jacobian(1,2) )
913 inverse(3,3)=dum*( jacobian(1,1)*jacobian(2,2)-jacobian(2,1)*jacobian(1,2) )
919 integer,
intent(in) :: fetype
920 integer,
intent(in) :: nn
921 real(kind=kreal),
intent(in) :: localcoord(2)
922 real(kind=kreal),
intent(in) :: elecoord(3,nn)
923 real(kind=kreal) :: normal(3)
924 real(kind=kreal) :: deriv(nn,2), gderiv(3,2)
945 gderiv = matmul( elecoord, deriv )
946 normal(1) = gderiv(2,1)*gderiv(3,2) - gderiv(3,1)*gderiv(2,2)
947 normal(2) = gderiv(3,1)*gderiv(1,2) - gderiv(1,1)*gderiv(3,2)
948 normal(3) = gderiv(1,1)*gderiv(2,2) - gderiv(2,1)*gderiv(1,2)
953 function edgenormal( fetype, nn, localcoord, elecoord )
result( normal )
954 integer,
intent(in) :: fetype
955 integer,
intent(in) :: nn
956 real(kind=kreal),
intent(in) :: localcoord(1)
957 real(kind=kreal),
intent(in) :: elecoord(2,nn)
958 real(kind=kreal) :: normal(2)
959 real(kind=kreal) :: deriv(nn,1), gderiv(2,1)
974 gderiv = matmul( elecoord, deriv )
975 normal(1) = -gderiv(2,1)
976 normal(2) = gderiv(1,1)
981 subroutine tangentbase( fetype, nn, localcoord, elecoord, tangent )
982 integer,
intent(in) :: fetype
983 integer,
intent(in) :: nn
984 real(kind=kreal),
intent(in) :: localcoord(2)
985 real(kind=kreal),
intent(in) :: elecoord(3,nn)
986 real(kind=kreal),
intent(out) :: tangent(3,2)
987 real(kind=kreal) :: deriv(nn,2)
1011 tangent = matmul( elecoord, deriv )
1015 subroutine curvature( fetype, nn, localcoord, elecoord, l2ndderiv, normal, curv )
1016 integer,
intent(in) :: fetype
1017 integer,
intent(in) :: nn
1018 real(kind=kreal),
intent(in) :: localcoord(2)
1019 real(kind=kreal),
intent(in) :: elecoord(3,nn)
1020 real(kind=kreal),
intent(out) :: l2ndderiv(3,2,2)
1021 real(kind=kreal),
intent(in),
optional :: normal(3)
1022 real(kind=kreal),
intent(out),
optional :: curv(2,2)
1023 real(kind=kreal) :: deriv2(nn,2,2)
1025 select case (fetype)
1044 stop
"Cannot calculate second derivatives of shape function"
1047 l2ndderiv(1:3,1,1) = matmul( elecoord(1:3,1:nn), deriv2(1:nn,1,1) )
1048 l2ndderiv(1:3,1,2) = matmul( elecoord(1:3,1:nn), deriv2(1:nn,1,2) )
1049 l2ndderiv(1:3,2,1) = matmul( elecoord(1:3,1:nn), deriv2(1:nn,2,1) )
1050 l2ndderiv(1:3,2,2) = matmul( elecoord(1:3,1:nn), deriv2(1:nn,2,2) )
1051 if(
present(curv) )
then
1052 curv(1,1) = dot_product( l2ndderiv(:,1,1), normal(:) )
1053 curv(1,2) = dot_product( l2ndderiv(:,1,2), normal(:) )
1054 curv(2,1) = dot_product( l2ndderiv(:,2,1), normal(:) )
1055 curv(2,2) = dot_product( l2ndderiv(:,2,2), normal(:) )
1061 integer,
intent(in) :: fetype
1062 real(kind=kreal),
intent(out) :: localcoord(:)
1064 select case (fetype)
1066 localcoord(1:2) = 1.d0/3.d0
1068 localcoord(1:2) = 0.d0
1070 localcoord(1:3) = 1.d0/4.d0
1072 localcoord(1) = 1.d0/3.d0
1073 localcoord(2) = 1.d0/3.d0
1074 localcoord(3) = 0.d0
1076 localcoord(1:3) = 0.d0
1078 localcoord(:) = 0.d0
1085 integer,
intent(in) :: fetype
1086 real(kind=kreal),
intent(inout) :: localcoord(2)
1087 real(kind=kreal),
optional :: clearance
1088 real(kind=kreal) :: clr, coord3
1091 if(
present(clearance) ) clr = clearance
1092 if( dabs(localcoord(1))<clr ) localcoord(1)=0.d0
1093 if( dabs(localcoord(2))<clr ) localcoord(2)=0.d0
1094 if( dabs(dabs(localcoord(1))-1.d0)<clr ) &
1095 localcoord(1)=sign(1.d0,localcoord(1))
1096 if( dabs(dabs(localcoord(2))-1.d0)<clr ) &
1097 localcoord(2)=sign(1.d0,localcoord(2))
1099 select case (fetype)
1102 coord3 = 1.d0-(localcoord(1)+localcoord(2))
1103 if( dabs(coord3)<clr ) coord3=0.d0
1104 if( localcoord(1)>=0.d0 .and. localcoord(1)<=1.d0 .and. &
1105 localcoord(2)>=0.d0 .and. localcoord(2)<=1.d0 .and. &
1106 coord3>=0.d0 .and. coord3<=1.d0 )
then
1108 if( localcoord(1)==1.d0 )
then
1110 elseif( localcoord(2)==1.d0 )
then
1112 elseif( coord3==1.d0 )
then
1114 elseif( coord3==0.d0 )
then
1116 elseif( localcoord(1)==0.d0 )
then
1118 elseif( localcoord(2)==0.d0 )
then
1124 if( all(dabs(localcoord)<=1.d0) )
then
1126 if( localcoord(1)==-1.d0 .and. localcoord(2)==-1.d0 )
then
1128 elseif( localcoord(1)==1.d0 .and. localcoord(2)==-1.d0 )
then
1130 elseif( localcoord(1)==1.d0 .and. localcoord(2)==1.d0 )
then
1132 elseif( localcoord(1)==-1.d0 .and. localcoord(2)==1.d0 )
then
1134 elseif( localcoord(2)==-1.d0 )
then
1136 elseif( localcoord(1)==1.d0 )
then
1138 elseif( localcoord(2)==1.d0 )
then
1140 elseif( localcoord(1)==-1.d0 )
then
1150 integer,
intent(in) :: fetype
1151 real(kind=kreal),
intent(inout) :: localcoord(3)
1152 real(kind=kreal),
optional :: clearance
1153 real(kind=kreal) :: clr, coord4
1158 if(
present(clearance) ) clr = clearance
1160 if( dabs(localcoord(idof))<clr ) localcoord(idof)=0.d0
1161 if( dabs(dabs(localcoord(idof))-1.d0)<clr ) &
1162 & localcoord(idof)=sign(1.d0,localcoord(idof))
1166 select case (fetype)
1169 coord4 = 1.d0-(localcoord(1)+localcoord(2)+localcoord(3))
1170 if( dabs(coord4)<clr ) coord4=0.d0
1173 if( localcoord(idof) < 0.d0 .or. localcoord(idof) > 1.d0 )
isinside3delement = -1
1178 coord4 = 1.d0-(localcoord(1)+localcoord(2))
1181 if( localcoord(idof) < 0.d0 .or. localcoord(idof) > 1.d0 )
isinside3delement = -1
1192 integer,
intent(in) :: fetype
1193 integer,
intent(in) :: cnode
1194 real(kind=kreal),
intent(out) :: localcoord(2)
1196 select case (fetype)
1201 elseif( cnode==2 )
then
1210 localcoord(1) =-1.d0
1211 localcoord(2) =-1.d0
1212 elseif( cnode==2 )
then
1214 localcoord(2) =-1.d0
1215 elseif( cnode==3 )
then
1219 localcoord(1) =-1.d0
1227 real(kind=kreal),
intent(in) :: lpos(:)
1228 integer,
intent(in) :: fetype
1229 integer,
intent(in) :: nnode
1230 real(kind=kreal),
intent(in) :: pvalue(:)
1231 real(kind=kreal),
intent(out) :: ndvalue(:,:)
1234 real(kind=kreal) :: shapefunc(nnode)
1237 ndvalue(i,:) = shapefunc(i)*pvalue(:)
1243 real(kind=kreal),
intent(in) :: lpos(:)
1244 integer,
intent(in) :: fetype
1245 integer,
intent(in) :: nnode
1246 real(kind=kreal),
intent(out) :: pvalue(:)
1247 real(kind=kreal),
intent(in) :: ndvalue(:,:)
1250 real(kind=kreal) :: shapefunc(nnode)
1254 pvalue(:) = pvalue(:)+ shapefunc(i)*ndvalue(i,:)
1260 integer,
intent(in) :: fetype
1261 real(kind=kreal),
intent(in) :: gaussv(:,:)
1262 real(kind=kreal),
intent(out) :: nodev(:,:)
1264 integer :: i, ngauss, nnode
1265 real(kind=kreal) :: localcoord(3), func(100)
1269 select case (fetype)
1273 nodev(i,:) = gaussv(1,:)
1292 nodev(i,:) = gaussv(1,:)
1295 nodev(i+3,:) = gaussv(2,:)
1302 nodev(i,:) = gaussv(1,:)
1308 stop
"Element type not defined"
1315 integer,
intent(in) :: fetype
1316 integer,
intent(in) :: nn
1317 real(kind=kreal),
intent(in) :: localcoord(2)
1318 real(kind=kreal),
intent(in) :: elecoord(3,nn)
1319 real(kind=kreal) :: detjxy, detjyz, detjxz, detj
1320 detjxy =
getdeterminant( fetype, nn, localcoord, elecoord(1:2,1:nn) )
1321 detjyz =
getdeterminant( fetype, nn, localcoord, elecoord(2:3,1:nn) )
1322 detjxz =
getdeterminant( fetype, nn, localcoord, elecoord(1:3:2,1:nn) )
1323 detj = dsqrt( detjxy **2 + detjyz **2 + detjxz **2 )
This module encapsulate the basic functions of all elements provide by this software.
subroutine getshapefunc(fetype, localcoord, func)
Calculate the shape function in natural coordinate system.
subroutine getjacobian(fetype, nn, localcoord, elecoord, det, jacobian, inverse)
calculate Jacobian matrix, its determinant and inverse
integer(kind=kind(2)) function getnumberofnodes(etype)
Obtain number of nodes of the element.
integer, parameter fe_beam341
integer, parameter fe_if_line2n
integer function isinside3delement(fetype, localcoord, clearance)
if a point is inside a surface element -1: No; 0: Yes; >0: Node's (vertex) number
integer, parameter fe_tri3n_patch
integer, parameter fe_unknown
real(kind=kreal) function, dimension(2) edgenormal(fetype, nn, localcoord, elecoord)
Calculate normal of 2d-edge.
subroutine getquadpoint(fetype, np, pos)
Fetch the coordinate of gauss point.
subroutine getglobalderiv(fetype, nn, localcoord, elecoord, det, gderiv)
Calculate shape derivative in global coordinate system.
integer, parameter fe_line2n
subroutine getelementcenter(fetype, localcoord)
Return natural coordinate of the center of element.
integer, parameter fe_tri6n
integer, parameter fe_prism6n
integer, parameter fe_tet10nc
integer(kind=kind(2)) function getnumberofsubface(etype)
Obtain number of sub-surface.
subroutine getshellthicknessquadpoint(etype, np, zeta)
Fetch the through-thickness quadrature coordinate of a shell element.
subroutine getsubface(intype, innumber, outtype, nodes)
Find the definition of surface of the element.
integer, parameter fe_dsg3_shell
subroutine getshapederiv(fetype, localcoord, shapederiv)
Calculate derivatives of shape function in natural coordinate system.
integer, parameter fe_mitc3_shell361
integer, parameter fe_prism15n
integer function numofshellthicknessquadpoints(etype)
Obtains the number of through-thickness quadrature points of a shell element.
subroutine getvertexcoord(fetype, cnode, localcoord)
Get the natural coord of a vertex node.
integer, parameter fe_hex20n
integer, parameter fe_quad8n_patch
integer, parameter fe_nodesmooth_tet4n
integer, parameter fe_tri3n
real(kind=kreal) function getdeterminant(fetype, nn, localcoord, elecoord)
Calculate shape derivative in global coordinate system.
subroutine tangentbase(fetype, nn, localcoord, elecoord, tangent)
Calculate base vector of tangent space of 3d surface.
integer, parameter fe_mitc4_shell
integer, parameter fe_hex27n
integer, parameter fe_truss
integer, parameter fe_mitc9_shell
integer, parameter fe_tet4n_pipi
subroutine getshape2ndderiv(fetype, localcoord, shapederiv)
Calculate the 2nd derivative of shape function in natural coordinate system.
real(kind=kreal) function getweight(fetype, np)
Fetch the weight value in given gauss point.
integer, parameter fe_mitc4_shell361
integer, parameter fe_quad4n
integer, parameter fe_mitc8_shell
integer, parameter fe_hex8n
integer, parameter fe_tri6n_patch
integer function numofquadpoints(fetype)
Obtains the number of quadrature points of the element.
integer(kind=kind(2)) function getspacedimension(etype)
Obtain the space dimension of the element.
subroutine extrapolatevalue(lpos, fetype, nnode, pvalue, ndvalue)
This subroutine extrapolate a point value into elemental nodes.
integer function isinsideelement(fetype, localcoord, clearance)
if a point is inside a surface element -1: No; 0: Yes; >0: Node's (vertex) number
integer, parameter fe_mitc3_shell
integer, parameter fe_tri6nc
real(kind=kreal) function, dimension(3) surfacenormal(fetype, nn, localcoord, elecoord)
Calculate normal of 3d-surface.
subroutine getnodalnaturalcoord(fetype, nncoord)
integer, parameter fe_beam2n
real(kind=kreal) function getreferencelength(fetype, nn, localcoord, elecoord)
This function calculates reference length at a point in surface.
integer, parameter fe_line3n
subroutine curvature(fetype, nn, localcoord, elecoord, l2ndderiv, normal, curv)
Calculate curvature tensor at a point along 3d surface.
integer, parameter fe_edgesmooth_tet4n
integer, parameter fe_tet10n
integer, parameter fe_tri6n_shell
subroutine gauss2node(fetype, gaussv, nodev)
This subroutine extroplate value in quadrature point to element nodes.
subroutine interapolatevalue(lpos, fetype, nnode, pvalue, ndvalue)
This subroutine interapolate element nodes value into a point value.
real(kind=kreal) function getshellthicknessweight(etype, np)
Fetch the through-thickness quadrature weight of a shell element.
integer, parameter fe_quad4n_patch
integer, parameter fe_beam3n
integer, parameter fe_quad8n
integer, parameter fe_tet4n
This module contains Gauss point information.
real(kind=kreal), dimension(3, 9) gauss3d8
real(kind=kreal), dimension(2, 1) gauss2d4
real(kind=kreal), dimension(3, 4) gauss3d5
real(kind=kreal), dimension(1) weight2d4
real(kind=kreal), dimension(3, 8) gauss3d2
real(kind=kreal), dimension(3, 2) gauss3d7
real(kind=kreal), dimension(2, 9) gauss2d3
real(kind=kreal), dimension(2, 4) gauss2d2
real(kind=kreal), dimension(9) weight3d8
real(kind=kreal), dimension(3, 1) gauss3d4
real(kind=kreal), dimension(2) weight1d2
real(kind=kreal), dimension(4) weight3d5
real(kind=kreal), dimension(2, 3) gauss2d5
real(kind=kreal), dimension(1, 2) gauss1d2
real(kind=kreal), dimension(2, 4) gauss2d6
real(kind=kreal), dimension(1, 3) gauss1d3
real(kind=kreal), dimension(27) weight3d3
real(kind=kreal), dimension(3, 27) gauss3d3
real(kind=kreal), dimension(3) weight1d3
real(kind=kreal), dimension(8) weight3d2
real(kind=kreal), dimension(9) weight2d3
real(kind=kreal), dimension(4) weight2d2
real(kind=kreal), dimension(2) weight3d7
real(kind=kreal), dimension(1) weight3d4
real(kind=kreal), dimension(3) weight2d5
real(kind=kreal), dimension(1) weight1d1
real(kind=kreal), dimension(1, 1) gauss1d1
This module contains functions for interpolation in 20 node hexahedral element (Serendipity interpola...
subroutine shapefunc_hex20n(localcoord, func)
subroutine shapederiv_hex20n(localcoord, func)
This module contains functions for interpolation in 8 node hexahedral element (Langrange interpolatio...
subroutine shapederiv_hex8n(localcoord, func)
subroutine shapefunc_hex8n(localcoord, func)
This module contains functions for interpolation in 2 node line element (Langrange interpolation)
subroutine shapefunc_line2n(lcoord, func)
subroutine shapederiv_line2n(func)
This module contains functions for interpolation in 3 nodes line element (Langrange interpolation)
subroutine shapefunc_line3n(lcoord, func)
subroutine shapederiv_line3n(lcoord, func)
This module contains functions for interpolation in 15 node prism element (Langrange interpolation)
subroutine shapefunc_prism15n(ncoord, shp)
subroutine shapederiv_prism15n(ncoord, func)
This module contains functions for interpolation in 6 node prism element (Langrange interpolation)
subroutine shapefunc_prism6n(ncoord, func)
subroutine shapederiv_prism6n(ncoord, func)
This module contains functions for interpolation in 4 node qudrilateral element (Langrange interpolat...
subroutine shapederiv_quad4n(lcoord, func)
subroutine shape2ndderiv_quad4n(func)
subroutine shapefunc_quad4n(lcoord, func)
subroutine nodalnaturalcoord_quad4n(nncoord)
This module contains functions for interpolation in 8 node quadrilateral element (Serendipity interpo...
subroutine shape2ndderiv_quad8n(lcoord, func)
subroutine shapederiv_quad8n(lcoord, func)
subroutine shapefunc_quad8n(lcoord, func)
This module contains functions for interpolation in 9 node quadrilateral element.
subroutine shapederiv_quad9n(lcoord, func)
subroutine shapefunc_quad9n(lcoord, func)
subroutine nodalnaturalcoord_quad9n(nncoord)
This module contains functions for interpolation in 10 node tetrahedron element (Langrange interpolat...
subroutine shapefunc_tet10n(volcoord, shp)
subroutine shapederiv_tet10n(volcoord, shp)
This module contains functions for interpolation in 4 node tetrahedron element (Langrange interpolati...
subroutine shapefunc_tet4n(volcoord, func)
subroutine shapederiv_tet4n(func)
This module contains functions for interpolation in 3 node trianglar element (Langrange interpolation...
subroutine shape2ndderiv_tri3n(func)
subroutine nodalnaturalcoord_tri3n(nncoord)
subroutine shapefunc_tri3n(areacoord, func)
subroutine shapederiv_tri3n(func)
This module contains functions for interpolation in 6 node trianglar element (Langrange interpolation...
subroutine shapefunc_tri6n(areacoord, func)
subroutine shape2ndderiv_tri6n(func)
subroutine shapederiv_tri6n(areacoord, func)