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"
490 integer,
intent(in) :: fetype
491 integer,
intent(in) :: np
492 real(kind=kreal),
intent(out) :: pos(:)
529 stop
"element type not defined-qp"
536 integer,
intent(in) :: fetype
537 integer,
intent(in) :: np
578 integer,
intent(in) :: fetype
579 real(kind=kreal),
intent(in) :: localcoord(:)
580 real(kind=kreal),
intent(out) :: shapederiv(:,:)
616 stop
"Element type not defined-sde"
622 integer,
intent(in) :: fetype
623 real(kind=kreal),
intent(in) :: localcoord(:)
624 real(kind=kreal),
intent(out) :: shapederiv(:,:,:)
641 stop
"Cannot calculate second derivatives of shape function"
647 integer,
intent(in) :: fetype
648 real(kind=kreal),
intent(in) :: localcoord(:)
649 real(kind=kreal),
intent(out) :: func(:)
690 stop
"Element type not defined-sf"
701 integer,
intent(in) :: fetype
702 real(kind = kreal),
intent(out) :: nncoord(:, :)
706 select case( fetype )
725 stop
"Element type not defined-sde"
741 integer,
intent(in) :: fetype
742 integer,
intent(in) :: nn
743 real(kind=kreal),
intent(in) :: localcoord(:)
744 real(kind=kreal),
intent(in) :: elecoord(:,:)
745 real(kind=kreal),
intent(out) :: det
746 real(kind=kreal),
intent(out) :: gderiv(:,:)
748 real(kind=kreal) :: dum, xj(3,3), xji(3,3), deriv(nn,3)
755 xj(1:2,1:2)=matmul( elecoord(1:2,1:nn), deriv(1:nn,1:2) )
756 det=xj(1,1)*xj(2,2)-xj(2,1)*xj(1,2)
757 if( det==0.d0 ) stop
"Math error in GetGlobalDeriv! Determinant==0.0"
759 xji(1,1)= xj(2,2)*dum
760 xji(1,2)=-xj(1,2)*dum
761 xji(2,1)=-xj(2,1)*dum
762 xji(2,2)= xj(1,1)*dum
765 xj(1:3,1:3)= matmul( elecoord(1:3,1:nn), deriv(1:nn,1:3) )
767 det=xj(1,1)*xj(2,2)*xj(3,3) &
768 +xj(2,1)*xj(3,2)*xj(1,3) &
769 +xj(3,1)*xj(1,2)*xj(2,3) &
770 -xj(3,1)*xj(2,2)*xj(1,3) &
771 -xj(2,1)*xj(1,2)*xj(3,3) &
772 -xj(1,1)*xj(3,2)*xj(2,3)
773 if( det==0.d0 ) stop
"Math error in GetGlobalDeriv! Determinant==0.0"
776 xji(1,1)=dum*( xj(2,2)*xj(3,3)-xj(3,2)*xj(2,3) )
777 xji(1,2)=dum*(-xj(1,2)*xj(3,3)+xj(3,2)*xj(1,3) )
778 xji(1,3)=dum*( xj(1,2)*xj(2,3)-xj(2,2)*xj(1,3) )
779 xji(2,1)=dum*(-xj(2,1)*xj(3,3)+xj(3,1)*xj(2,3) )
780 xji(2,2)=dum*( xj(1,1)*xj(3,3)-xj(3,1)*xj(1,3) )
781 xji(2,3)=dum*(-xj(1,1)*xj(2,3)+xj(2,1)*xj(1,3) )
782 xji(3,1)=dum*( xj(2,1)*xj(3,2)-xj(3,1)*xj(2,2) )
783 xji(3,2)=dum*(-xj(1,1)*xj(3,2)+xj(3,1)*xj(1,2) )
784 xji(3,3)=dum*( xj(1,1)*xj(2,2)-xj(2,1)*xj(1,2) )
787 gderiv(1:nn,1:nspace)=matmul( deriv(1:nn,1:nspace), xji(1:nspace,1:nspace) )
792 integer,
intent(in) :: fetype
793 integer,
intent(in) :: nn
794 real(kind=kreal),
intent(in) :: localcoord(:)
795 real(kind=kreal),
intent(in) :: elecoord(:,:)
797 real(kind=kreal) :: xj(3,3), deriv(nn,3)
804 xj(1:2,1:2)=matmul( elecoord(1:2,1:nn), deriv(1:nn,1:2) )
807 xj(1:3,1:3)= matmul( elecoord(1:3,1:nn), deriv(1:nn,1:3) )
809 +xj(2,1)*xj(3,2)*xj(1,3) &
810 +xj(3,1)*xj(1,2)*xj(2,3) &
811 -xj(3,1)*xj(2,2)*xj(1,3) &
812 -xj(2,1)*xj(1,2)*xj(3,3) &
813 -xj(1,1)*xj(3,2)*xj(2,3)
819 subroutine getjacobian( fetype, nn, localcoord, elecoord, det, jacobian, inverse )
820 integer,
intent(in) :: fetype
821 integer,
intent(in) :: nn
822 real(kind=kreal),
intent(in) :: localcoord(:)
823 real(kind=kreal),
intent(in) :: elecoord(:,:)
824 real(kind=kreal),
intent(out) :: det
825 real(kind=kreal),
intent(out) :: jacobian(:,:)
826 real(kind=kreal),
intent(out) :: inverse(:,:)
828 real(kind=kreal) :: dum, deriv(nn,3)
835 jacobian(1:2,1:2)=matmul( elecoord(1:2,1:nn), deriv(1:nn,1:2) )
836 det=jacobian(1,1)*jacobian(2,2)-jacobian(2,1)*jacobian(1,2)
837 if( det==0.d0 ) stop
"Math error in getJacobain! Determinant==0.0"
839 inverse(1,1)= jacobian(2,2)*dum
840 inverse(1,2)=-jacobian(1,2)*dum
841 inverse(2,1)=-jacobian(2,1)*dum
842 inverse(2,2)= jacobian(1,1)*dum
845 jacobian(1:3,1:3)= matmul( elecoord(1:3,1:nn), deriv(1:nn,1:3) )
847 det=jacobian(1,1)*jacobian(2,2)*jacobian(3,3) &
848 +jacobian(2,1)*jacobian(3,2)*jacobian(1,3) &
849 +jacobian(3,1)*jacobian(1,2)*jacobian(2,3) &
850 -jacobian(3,1)*jacobian(2,2)*jacobian(1,3) &
851 -jacobian(2,1)*jacobian(1,2)*jacobian(3,3) &
852 -jacobian(1,1)*jacobian(3,2)*jacobian(2,3)
853 if( det==0.d0 ) stop
"Math error in getJacobain! Determinant==0.0"
856 inverse(1,1)=dum*( jacobian(2,2)*jacobian(3,3)-jacobian(3,2)*jacobian(2,3) )
857 inverse(1,2)=dum*(-jacobian(1,2)*jacobian(3,3)+jacobian(3,2)*jacobian(1,3) )
858 inverse(1,3)=dum*( jacobian(1,2)*jacobian(2,3)-jacobian(2,2)*jacobian(1,3) )
859 inverse(2,1)=dum*(-jacobian(2,1)*jacobian(3,3)+jacobian(3,1)*jacobian(2,3) )
860 inverse(2,2)=dum*( jacobian(1,1)*jacobian(3,3)-jacobian(3,1)*jacobian(1,3) )
861 inverse(2,3)=dum*(-jacobian(1,1)*jacobian(2,3)+jacobian(2,1)*jacobian(1,3) )
862 inverse(3,1)=dum*( jacobian(2,1)*jacobian(3,2)-jacobian(3,1)*jacobian(2,2) )
863 inverse(3,2)=dum*(-jacobian(1,1)*jacobian(3,2)+jacobian(3,1)*jacobian(1,2) )
864 inverse(3,3)=dum*( jacobian(1,1)*jacobian(2,2)-jacobian(2,1)*jacobian(1,2) )
870 integer,
intent(in) :: fetype
871 integer,
intent(in) :: nn
872 real(kind=kreal),
intent(in) :: localcoord(2)
873 real(kind=kreal),
intent(in) :: elecoord(3,nn)
874 real(kind=kreal) :: normal(3)
875 real(kind=kreal) :: deriv(nn,2), gderiv(3,2)
896 gderiv = matmul( elecoord, deriv )
897 normal(1) = gderiv(2,1)*gderiv(3,2) - gderiv(3,1)*gderiv(2,2)
898 normal(2) = gderiv(3,1)*gderiv(1,2) - gderiv(1,1)*gderiv(3,2)
899 normal(3) = gderiv(1,1)*gderiv(2,2) - gderiv(2,1)*gderiv(1,2)
904 function edgenormal( fetype, nn, localcoord, elecoord )
result( normal )
905 integer,
intent(in) :: fetype
906 integer,
intent(in) :: nn
907 real(kind=kreal),
intent(in) :: localcoord(1)
908 real(kind=kreal),
intent(in) :: elecoord(2,nn)
909 real(kind=kreal) :: normal(2)
910 real(kind=kreal) :: deriv(nn,1), gderiv(2,1)
925 gderiv = matmul( elecoord, deriv )
926 normal(1) = -gderiv(2,1)
927 normal(2) = gderiv(1,1)
932 subroutine tangentbase( fetype, nn, localcoord, elecoord, tangent )
933 integer,
intent(in) :: fetype
934 integer,
intent(in) :: nn
935 real(kind=kreal),
intent(in) :: localcoord(2)
936 real(kind=kreal),
intent(in) :: elecoord(3,nn)
937 real(kind=kreal),
intent(out) :: tangent(3,2)
938 real(kind=kreal) :: deriv(nn,2)
962 tangent = matmul( elecoord, deriv )
966 subroutine curvature( fetype, nn, localcoord, elecoord, l2ndderiv, normal, curv )
967 integer,
intent(in) :: fetype
968 integer,
intent(in) :: nn
969 real(kind=kreal),
intent(in) :: localcoord(2)
970 real(kind=kreal),
intent(in) :: elecoord(3,nn)
971 real(kind=kreal),
intent(out) :: l2ndderiv(3,2,2)
972 real(kind=kreal),
intent(in),
optional :: normal(3)
973 real(kind=kreal),
intent(out),
optional :: curv(2,2)
974 real(kind=kreal) :: deriv2(nn,2,2)
995 stop
"Cannot calculate second derivatives of shape function"
998 l2ndderiv(1:3,1,1) = matmul( elecoord(1:3,1:nn), deriv2(1:nn,1,1) )
999 l2ndderiv(1:3,1,2) = matmul( elecoord(1:3,1:nn), deriv2(1:nn,1,2) )
1000 l2ndderiv(1:3,2,1) = matmul( elecoord(1:3,1:nn), deriv2(1:nn,2,1) )
1001 l2ndderiv(1:3,2,2) = matmul( elecoord(1:3,1:nn), deriv2(1:nn,2,2) )
1002 if(
present(curv) )
then
1003 curv(1,1) = dot_product( l2ndderiv(:,1,1), normal(:) )
1004 curv(1,2) = dot_product( l2ndderiv(:,1,2), normal(:) )
1005 curv(2,1) = dot_product( l2ndderiv(:,2,1), normal(:) )
1006 curv(2,2) = dot_product( l2ndderiv(:,2,2), normal(:) )
1012 integer,
intent(in) :: fetype
1013 real(kind=kreal),
intent(out) :: localcoord(:)
1015 select case (fetype)
1017 localcoord(1:2) = 1.d0/3.d0
1019 localcoord(1:2) = 0.d0
1021 localcoord(1:3) = 1.d0/4.d0
1023 localcoord(1) = 1.d0/3.d0
1024 localcoord(2) = 1.d0/3.d0
1025 localcoord(3) = 0.d0
1027 localcoord(1:3) = 0.d0
1029 localcoord(:) = 0.d0
1036 integer,
intent(in) :: fetype
1037 real(kind=kreal),
intent(inout) :: localcoord(2)
1038 real(kind=kreal),
optional :: clearance
1039 real(kind=kreal) :: clr, coord3
1042 if(
present(clearance) ) clr = clearance
1043 if( dabs(localcoord(1))<clr ) localcoord(1)=0.d0
1044 if( dabs(localcoord(2))<clr ) localcoord(2)=0.d0
1045 if( dabs(dabs(localcoord(1))-1.d0)<clr ) &
1046 localcoord(1)=sign(1.d0,localcoord(1))
1047 if( dabs(dabs(localcoord(2))-1.d0)<clr ) &
1048 localcoord(2)=sign(1.d0,localcoord(2))
1050 select case (fetype)
1053 coord3 = 1.d0-(localcoord(1)+localcoord(2))
1054 if( dabs(coord3)<clr ) coord3=0.d0
1055 if( localcoord(1)>=0.d0 .and. localcoord(1)<=1.d0 .and. &
1056 localcoord(2)>=0.d0 .and. localcoord(2)<=1.d0 .and. &
1057 coord3>=0.d0 .and. coord3<=1.d0 )
then
1059 if( localcoord(1)==1.d0 )
then
1061 elseif( localcoord(2)==1.d0 )
then
1063 elseif( coord3==1.d0 )
then
1065 elseif( coord3==0.d0 )
then
1067 elseif( localcoord(1)==0.d0 )
then
1069 elseif( localcoord(2)==0.d0 )
then
1075 if( all(dabs(localcoord)<=1.d0) )
then
1077 if( localcoord(1)==-1.d0 .and. localcoord(2)==-1.d0 )
then
1079 elseif( localcoord(1)==1.d0 .and. localcoord(2)==-1.d0 )
then
1081 elseif( localcoord(1)==1.d0 .and. localcoord(2)==1.d0 )
then
1083 elseif( localcoord(1)==-1.d0 .and. localcoord(2)==1.d0 )
then
1085 elseif( localcoord(2)==-1.d0 )
then
1087 elseif( localcoord(1)==1.d0 )
then
1089 elseif( localcoord(2)==1.d0 )
then
1091 elseif( localcoord(1)==-1.d0 )
then
1101 integer,
intent(in) :: fetype
1102 real(kind=kreal),
intent(inout) :: localcoord(3)
1103 real(kind=kreal),
optional :: clearance
1104 real(kind=kreal) :: clr, coord4
1109 if(
present(clearance) ) clr = clearance
1111 if( dabs(localcoord(idof))<clr ) localcoord(idof)=0.d0
1112 if( dabs(dabs(localcoord(idof))-1.d0)<clr ) &
1113 & localcoord(idof)=sign(1.d0,localcoord(idof))
1117 select case (fetype)
1120 coord4 = 1.d0-(localcoord(1)+localcoord(2)+localcoord(3))
1121 if( dabs(coord4)<clr ) coord4=0.d0
1124 if( localcoord(idof) < 0.d0 .or. localcoord(idof) > 1.d0 )
isinside3delement = -1
1129 coord4 = 1.d0-(localcoord(1)+localcoord(2))
1132 if( localcoord(idof) < 0.d0 .or. localcoord(idof) > 1.d0 )
isinside3delement = -1
1143 integer,
intent(in) :: fetype
1144 integer,
intent(in) :: cnode
1145 real(kind=kreal),
intent(out) :: localcoord(2)
1147 select case (fetype)
1152 elseif( cnode==2 )
then
1161 localcoord(1) =-1.d0
1162 localcoord(2) =-1.d0
1163 elseif( cnode==2 )
then
1165 localcoord(2) =-1.d0
1166 elseif( cnode==3 )
then
1170 localcoord(1) =-1.d0
1178 real(kind=kreal),
intent(in) :: lpos(:)
1179 integer,
intent(in) :: fetype
1180 integer,
intent(in) :: nnode
1181 real(kind=kreal),
intent(in) :: pvalue(:)
1182 real(kind=kreal),
intent(out) :: ndvalue(:,:)
1185 real(kind=kreal) :: shapefunc(nnode)
1188 ndvalue(i,:) = shapefunc(i)*pvalue(:)
1194 real(kind=kreal),
intent(in) :: lpos(:)
1195 integer,
intent(in) :: fetype
1196 integer,
intent(in) :: nnode
1197 real(kind=kreal),
intent(out) :: pvalue(:)
1198 real(kind=kreal),
intent(in) :: ndvalue(:,:)
1201 real(kind=kreal) :: shapefunc(nnode)
1205 pvalue(:) = pvalue(:)+ shapefunc(i)*ndvalue(i,:)
1211 integer,
intent(in) :: fetype
1212 real(kind=kreal),
intent(in) :: gaussv(:,:)
1213 real(kind=kreal),
intent(out) :: nodev(:,:)
1215 integer :: i, ngauss, nnode
1216 real(kind=kreal) :: localcoord(3), func(100)
1220 select case (fetype)
1224 nodev(i,:) = gaussv(1,:)
1243 nodev(i,:) = gaussv(1,:)
1246 nodev(i+3,:) = gaussv(2,:)
1253 nodev(i,:) = gaussv(1,:)
1259 stop
"Element type not defined"
1266 integer,
intent(in) :: fetype
1267 integer,
intent(in) :: nn
1268 real(kind=kreal),
intent(in) :: localcoord(2)
1269 real(kind=kreal),
intent(in) :: elecoord(3,nn)
1270 real(kind=kreal) :: detjxy, detjyz, detjxz, detj
1271 detjxy =
getdeterminant( fetype, nn, localcoord, elecoord(1:2,1:nn) )
1272 detjyz =
getdeterminant( fetype, nn, localcoord, elecoord(2:3,1:nn) )
1273 detjxz =
getdeterminant( fetype, nn, localcoord, elecoord(1:3:2,1:nn) )
1274 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 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
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.
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(27) weight3d3
real(kind=kreal), dimension(3, 27) gauss3d3
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)