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(2)
1015 select case (fetype)
1017 localcoord(:) = 1.d0/3.d0
1019 localcoord(:) = 0.d0
1022 localcoord(:) = 0.d0
1029 integer,
intent(in) :: fetype
1030 real(kind=kreal),
intent(inout) :: localcoord(2)
1031 real(kind=kreal),
optional :: clearance
1032 real(kind=kreal) :: clr, coord3
1035 if(
present(clearance) ) clr = clearance
1036 if( dabs(localcoord(1))<clr ) localcoord(1)=0.d0
1037 if( dabs(localcoord(2))<clr ) localcoord(2)=0.d0
1038 if( dabs(dabs(localcoord(1))-1.d0)<clr ) &
1039 localcoord(1)=sign(1.d0,localcoord(1))
1040 if( dabs(dabs(localcoord(2))-1.d0)<clr ) &
1041 localcoord(2)=sign(1.d0,localcoord(2))
1043 select case (fetype)
1046 coord3 = 1.d0-(localcoord(1)+localcoord(2))
1047 if( dabs(coord3)<clr ) coord3=0.d0
1048 if( localcoord(1)>=0.d0 .and. localcoord(1)<=1.d0 .and. &
1049 localcoord(2)>=0.d0 .and. localcoord(2)<=1.d0 .and. &
1050 coord3>=0.d0 .and. coord3<=1.d0 )
then
1052 if( localcoord(1)==1.d0 )
then
1054 elseif( localcoord(2)==1.d0 )
then
1056 elseif( coord3==1.d0 )
then
1058 elseif( coord3==0.d0 )
then
1060 elseif( localcoord(1)==0.d0 )
then
1062 elseif( localcoord(2)==0.d0 )
then
1068 if( all(dabs(localcoord)<=1.d0) )
then
1070 if( localcoord(1)==-1.d0 .and. localcoord(2)==-1.d0 )
then
1072 elseif( localcoord(1)==1.d0 .and. localcoord(2)==-1.d0 )
then
1074 elseif( localcoord(1)==1.d0 .and. localcoord(2)==1.d0 )
then
1076 elseif( localcoord(1)==-1.d0 .and. localcoord(2)==1.d0 )
then
1078 elseif( localcoord(2)==-1.d0 )
then
1080 elseif( localcoord(1)==1.d0 )
then
1082 elseif( localcoord(2)==1.d0 )
then
1084 elseif( localcoord(1)==-1.d0 )
then
1094 integer,
intent(in) :: fetype
1095 real(kind=kreal),
intent(inout) :: localcoord(3)
1096 real(kind=kreal),
optional :: clearance
1097 real(kind=kreal) :: clr, coord4
1102 if(
present(clearance) ) clr = clearance
1104 if( dabs(localcoord(idof))<clr ) localcoord(idof)=0.d0
1105 if( dabs(dabs(localcoord(idof))-1.d0)<clr ) &
1106 & localcoord(idof)=sign(1.d0,localcoord(idof))
1110 select case (fetype)
1113 coord4 = 1.d0-(localcoord(1)+localcoord(2)+localcoord(3))
1114 if( dabs(coord4)<clr ) coord4=0.d0
1117 if( localcoord(idof) < 0.d0 .or. localcoord(idof) > 1.d0 )
isinside3delement = -1
1122 coord4 = 1.d0-(localcoord(1)+localcoord(2))
1125 if( localcoord(idof) < 0.d0 .or. localcoord(idof) > 1.d0 )
isinside3delement = -1
1136 integer,
intent(in) :: fetype
1137 integer,
intent(in) :: cnode
1138 real(kind=kreal),
intent(out) :: localcoord(2)
1140 select case (fetype)
1145 elseif( cnode==2 )
then
1154 localcoord(1) =-1.d0
1155 localcoord(2) =-1.d0
1156 elseif( cnode==2 )
then
1158 localcoord(2) =-1.d0
1159 elseif( cnode==3 )
then
1163 localcoord(1) =-1.d0
1171 real(kind=kreal),
intent(in) :: lpos(:)
1172 integer,
intent(in) :: fetype
1173 integer,
intent(in) :: nnode
1174 real(kind=kreal),
intent(in) :: pvalue(:)
1175 real(kind=kreal),
intent(out) :: ndvalue(:,:)
1178 real(kind=kreal) :: shapefunc(nnode)
1181 ndvalue(i,:) = shapefunc(i)*pvalue(:)
1187 real(kind=kreal),
intent(in) :: lpos(:)
1188 integer,
intent(in) :: fetype
1189 integer,
intent(in) :: nnode
1190 real(kind=kreal),
intent(out) :: pvalue(:)
1191 real(kind=kreal),
intent(in) :: ndvalue(:,:)
1194 real(kind=kreal) :: shapefunc(nnode)
1198 pvalue(:) = pvalue(:)+ shapefunc(i)*ndvalue(i,:)
1204 integer,
intent(in) :: fetype
1205 real(kind=kreal),
intent(in) :: gaussv(:,:)
1206 real(kind=kreal),
intent(out) :: nodev(:,:)
1208 integer :: i, ngauss, nnode
1209 real(kind=kreal) :: localcoord(3), func(100)
1213 select case (fetype)
1217 nodev(i,:) = gaussv(1,:)
1236 nodev(i,:) = gaussv(1,:)
1239 nodev(i+3,:) = gaussv(2,:)
1246 nodev(i,:) = gaussv(1,:)
1252 stop
"Element type not defined"
1259 integer,
intent(in) :: fetype
1260 integer,
intent(in) :: nn
1261 real(kind=kreal),
intent(in) :: localcoord(2)
1262 real(kind=kreal),
intent(in) :: elecoord(3,nn)
1263 real(kind=kreal) :: detjxy, detjyz, detjxz, detj
1264 detjxy =
getdeterminant( fetype, nn, localcoord, elecoord(1:2,1:nn) )
1265 detjyz =
getdeterminant( fetype, nn, localcoord, elecoord(2:3,1:nn) )
1266 detjxz =
getdeterminant( fetype, nn, localcoord, elecoord(1:3:2,1:nn) )
1267 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 surface 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)