60 integer,
parameter,
private :: kreal = kind(0.0d0)
112 integer,
intent(in) :: etype
126 integer,
intent(in) :: etype
163 integer,
intent(in) :: etype
188 integer,
intent(in) :: intype
189 integer,
intent(in) :: innumber
190 integer,
intent(out) :: outtype
191 integer,
intent(out) :: nodes(:)
194 select case ( intype )
197 select case ( innumber )
199 nodes(1)=1; nodes(2)=2; nodes(3)=3
201 nodes(1)=4; nodes(2)=2; nodes(3)=1
203 nodes(1)=4; nodes(2)=3; nodes(3)=2
205 nodes(1)=4; nodes(2)=1; nodes(3)=3
209 select case ( innumber )
211 nodes(1)=1; nodes(2)=2; nodes(3)=3
212 nodes(4)=5; nodes(5)=6; nodes(6)=7
214 nodes(1)=4; nodes(2)=2; nodes(3)=1
215 nodes(4)=9; nodes(5)=5; nodes(6)=8
217 nodes(1)=4; nodes(2)=3; nodes(3)=2
218 nodes(4)=10; nodes(5)=6; nodes(6)=9
220 nodes(1)=4; nodes(2)=1; nodes(3)=3
221 nodes(4)=8; nodes(5)=7; nodes(6)=10
225 select case ( innumber )
227 nodes(1)=1; nodes(2)=2; nodes(3)=3
228 nodes(4)=5; nodes(5)=6; nodes(6)=7
230 nodes(1)=4; nodes(2)=2; nodes(3)=1
231 nodes(4)=9; nodes(5)=5; nodes(6)=8
233 nodes(1)=4; nodes(2)=3; nodes(3)=2
234 nodes(4)=10; nodes(5)=6; nodes(6)=9
236 nodes(1)=4; nodes(2)=1; nodes(3)=3
237 nodes(4)=8; nodes(5)=7; nodes(6)=10
241 select case ( innumber )
243 nodes(1)=1; nodes(2)=2; nodes(3)=3; nodes(4)=4
245 nodes(1)=8; nodes(2)=7; nodes(3)=6; nodes(4)=5
247 nodes(1)=5; nodes(2)=6; nodes(3)=2; nodes(4)=1
249 nodes(1)=6; nodes(2)=7; nodes(3)=3; nodes(4)=2
251 nodes(1)=7; nodes(2)=8; nodes(3)=4; nodes(4)=3
253 nodes(1)=8; nodes(2)=5; nodes(3)=1; nodes(4)=4
259 select case ( innumber )
261 nodes(1)=1; nodes(2)=2; nodes(3)=3; nodes(4)=4
262 nodes(5)=9; nodes(6)=10; nodes(7)=11; nodes(8)=12
264 nodes(1)=8; nodes(2)=7; nodes(3)=6; nodes(4)=5
265 nodes(5)=15; nodes(6)=14; nodes(7)=13; nodes(8)=16
267 nodes(1)=5; nodes(2)=6; nodes(3)=2; nodes(4)=1
268 nodes(5)=13; nodes(6)=18; nodes(7)=9; nodes(8)=17
270 nodes(1)=6; nodes(2)=7; nodes(3)=3; nodes(4)=2
271 nodes(5)=14; nodes(6)=19; nodes(7)=10; nodes(8)=18
273 nodes(1)=7; nodes(2)=8; nodes(3)=4; nodes(4)=3
274 nodes(5)=15; nodes(6)=20; nodes(7)=11; nodes(8)=19
276 nodes(1)=8; nodes(2)=5; nodes(3)=1; nodes(4)=4
277 nodes(5)=16; nodes(6)=17; nodes(7)=12; nodes(8)=20
282 select case ( innumber )
285 nodes(1)=1; nodes(2)=2; nodes(3)=3
288 nodes(1)=6; nodes(2)=5; nodes(3)=4
291 nodes(1)=4; nodes(2)=5; nodes(3)=2; nodes(4)=1
294 nodes(1)=5; nodes(2)=6; nodes(3)=3; nodes(4)=2
297 nodes(1)=6; nodes(2)=4; nodes(3)=1; nodes(4)=3
300 select case ( innumber )
303 nodes(1)=1; nodes(2)=2; nodes(3)=3
304 nodes(4)=7; nodes(5)=8; nodes(6)=9
307 nodes(1)=6; nodes(2)=5; nodes(3)=4
308 nodes(4)=11; nodes(5)=10; nodes(6)=12
311 nodes(1)=4; nodes(2)=5; nodes(3)=2; nodes(4)=1
312 nodes(5)=10; nodes(6)=14; nodes(7)=7; nodes(8)=13
315 nodes(1)=5; nodes(2)=6; nodes(3)=3; nodes(4)=2
316 nodes(5)=11; nodes(6)=15; nodes(7)=8; nodes(8)=14
319 nodes(1)=6; nodes(2)=4; nodes(3)=1; nodes(4)=3
320 nodes(5)=12; nodes(6)=13; nodes(7)=9; nodes(8)=15
324 select case (innumber )
326 nodes(1) = 1; nodes(2)=2
328 nodes(1) = 2; nodes(2)=3
330 nodes(1) = 3; nodes(2)=1
334 select case (innumber )
336 nodes(1) = 1; nodes(2)=2; nodes(3)=4
338 nodes(1) = 2; nodes(2)=3; nodes(3)=5
340 nodes(1) = 3; nodes(2)=1; nodes(3)=6
344 select case (innumber )
346 nodes(1) = 1; nodes(2)=2
348 nodes(1) = 2; nodes(2)=3
350 nodes(1) = 3; nodes(2)=4
352 nodes(1) = 4; nodes(2)=1
356 select case (innumber )
358 nodes(1) = 1; nodes(2)=2; nodes(3)=5
360 nodes(1) = 2; nodes(2)=3; nodes(3)=6
362 nodes(1) = 3; nodes(2)=4; nodes(3)=7
364 nodes(1) = 4; nodes(2)=1; nodes(3)=8
367 select case ( innumber )
370 nodes(1)=1; nodes(2)=2; nodes(3)=3
373 nodes(1)=6; nodes(2)=5; nodes(3)=4
376 nodes(1)=4; nodes(2)=5; nodes(3)=2; nodes(4)=1
379 nodes(1)=5; nodes(2)=6; nodes(3)=3; nodes(4)=2
382 nodes(1)=6; nodes(2)=4; nodes(3)=1; nodes(4)=3
386 select case ( innumber )
388 nodes(1)=1; nodes(2)=2; nodes(3)=3; nodes(4)=4
390 nodes(1)=8; nodes(2)=7; nodes(3)=6; nodes(4)=5
392 nodes(1)=5; nodes(2)=6; nodes(3)=2; nodes(4)=1
394 nodes(1)=6; nodes(2)=7; nodes(3)=3; nodes(4)=2
396 nodes(1)=7; nodes(2)=8; nodes(3)=4; nodes(4)=3
398 nodes(1)=8; nodes(2)=5; nodes(3)=1; nodes(4)=4
404 select case ( innumber )
406 nodes(1)=1; nodes(2)=2; nodes(3)=3
412 select case ( innumber )
414 nodes(1)=1; nodes(2)=2; nodes(3)=3
415 nodes(4)=4; nodes(5)=5; nodes(6)=6
421 select case ( innumber )
423 nodes(1)=1; nodes(2)=2; nodes(3)=3; nodes(4)=4
429 select case ( innumber )
431 nodes(1)=1; nodes(2)=2; nodes(3)=3; nodes(4)=4
432 nodes(5)=5; nodes(6)=6; nodes(7)=7; nodes(8)=8
438 stop
"element type not defined-sbs"
445 integer,
intent(in) :: fetype
476 stop
"element type not defined-np"
483 integer,
intent(in) :: fetype
484 integer,
intent(in) :: np
485 real(kind=kreal),
intent(out) :: pos(:)
522 stop
"element type not defined-qp"
529 integer,
intent(in) :: fetype
530 integer,
intent(in) :: np
571 integer,
intent(in) :: fetype
572 real(kind=kreal),
intent(in) :: localcoord(:)
573 real(kind=kreal),
intent(out) :: shapederiv(:,:)
609 stop
"Element type not defined-sde"
615 integer,
intent(in) :: fetype
616 real(kind=kreal),
intent(in) :: localcoord(:)
617 real(kind=kreal),
intent(out) :: shapederiv(:,:,:)
634 stop
"Cannot calculate second derivatives of shape function"
640 integer,
intent(in) :: fetype
641 real(kind=kreal),
intent(in) :: localcoord(:)
642 real(kind=kreal),
intent(out) :: func(:)
683 stop
"Element type not defined-sf"
694 integer,
intent(in) :: fetype
695 real(kind = kreal),
intent(out) :: nncoord(:, :)
699 select case( fetype )
718 stop
"Element type not defined-sde"
734 integer,
intent(in) :: fetype
735 integer,
intent(in) :: nn
736 real(kind=kreal),
intent(in) :: localcoord(:)
737 real(kind=kreal),
intent(in) :: elecoord(:,:)
738 real(kind=kreal),
intent(out) :: det
739 real(kind=kreal),
intent(out) :: gderiv(:,:)
741 real(kind=kreal) :: dum, xj(3,3), xji(3,3), deriv(nn,3)
748 xj(1:2,1:2)=matmul( elecoord(1:2,1:nn), deriv(1:nn,1:2) )
749 det=xj(1,1)*xj(2,2)-xj(2,1)*xj(1,2)
750 if( det==0.d0 ) stop
"Math error in GetGlobalDeriv! Determinant==0.0"
752 xji(1,1)= xj(2,2)*dum
753 xji(1,2)=-xj(1,2)*dum
754 xji(2,1)=-xj(2,1)*dum
755 xji(2,2)= xj(1,1)*dum
758 xj(1:3,1:3)= matmul( elecoord(1:3,1:nn), deriv(1:nn,1:3) )
760 det=xj(1,1)*xj(2,2)*xj(3,3) &
761 +xj(2,1)*xj(3,2)*xj(1,3) &
762 +xj(3,1)*xj(1,2)*xj(2,3) &
763 -xj(3,1)*xj(2,2)*xj(1,3) &
764 -xj(2,1)*xj(1,2)*xj(3,3) &
765 -xj(1,1)*xj(3,2)*xj(2,3)
766 if( det==0.d0 ) stop
"Math error in GetGlobalDeriv! Determinant==0.0"
769 xji(1,1)=dum*( xj(2,2)*xj(3,3)-xj(3,2)*xj(2,3) )
770 xji(1,2)=dum*(-xj(1,2)*xj(3,3)+xj(3,2)*xj(1,3) )
771 xji(1,3)=dum*( xj(1,2)*xj(2,3)-xj(2,2)*xj(1,3) )
772 xji(2,1)=dum*(-xj(2,1)*xj(3,3)+xj(3,1)*xj(2,3) )
773 xji(2,2)=dum*( xj(1,1)*xj(3,3)-xj(3,1)*xj(1,3) )
774 xji(2,3)=dum*(-xj(1,1)*xj(2,3)+xj(2,1)*xj(1,3) )
775 xji(3,1)=dum*( xj(2,1)*xj(3,2)-xj(3,1)*xj(2,2) )
776 xji(3,2)=dum*(-xj(1,1)*xj(3,2)+xj(3,1)*xj(1,2) )
777 xji(3,3)=dum*( xj(1,1)*xj(2,2)-xj(2,1)*xj(1,2) )
780 gderiv(1:nn,1:nspace)=matmul( deriv(1:nn,1:nspace), xji(1:nspace,1:nspace) )
785 integer,
intent(in) :: fetype
786 integer,
intent(in) :: nn
787 real(kind=kreal),
intent(in) :: localcoord(:)
788 real(kind=kreal),
intent(in) :: elecoord(:,:)
790 real(kind=kreal) :: xj(3,3), deriv(nn,3)
797 xj(1:2,1:2)=matmul( elecoord(1:2,1:nn), deriv(1:nn,1:2) )
800 xj(1:3,1:3)= matmul( elecoord(1:3,1:nn), deriv(1:nn,1:3) )
802 +xj(2,1)*xj(3,2)*xj(1,3) &
803 +xj(3,1)*xj(1,2)*xj(2,3) &
804 -xj(3,1)*xj(2,2)*xj(1,3) &
805 -xj(2,1)*xj(1,2)*xj(3,3) &
806 -xj(1,1)*xj(3,2)*xj(2,3)
812 subroutine getjacobian( fetype, nn, localcoord, elecoord, det, jacobian, inverse )
813 integer,
intent(in) :: fetype
814 integer,
intent(in) :: nn
815 real(kind=kreal),
intent(in) :: localcoord(:)
816 real(kind=kreal),
intent(in) :: elecoord(:,:)
817 real(kind=kreal),
intent(out) :: det
818 real(kind=kreal),
intent(out) :: jacobian(:,:)
819 real(kind=kreal),
intent(out) :: inverse(:,:)
821 real(kind=kreal) :: dum, deriv(nn,3)
828 jacobian(1:2,1:2)=matmul( elecoord(1:2,1:nn), deriv(1:nn,1:2) )
829 det=jacobian(1,1)*jacobian(2,2)-jacobian(2,1)*jacobian(1,2)
830 if( det==0.d0 ) stop
"Math error in getJacobain! Determinant==0.0"
832 inverse(1,1)= jacobian(2,2)*dum
833 inverse(1,2)=-jacobian(1,2)*dum
834 inverse(2,1)=-jacobian(2,1)*dum
835 inverse(2,2)= jacobian(1,1)*dum
838 jacobian(1:3,1:3)= matmul( elecoord(1:3,1:nn), deriv(1:nn,1:3) )
840 det=jacobian(1,1)*jacobian(2,2)*jacobian(3,3) &
841 +jacobian(2,1)*jacobian(3,2)*jacobian(1,3) &
842 +jacobian(3,1)*jacobian(1,2)*jacobian(2,3) &
843 -jacobian(3,1)*jacobian(2,2)*jacobian(1,3) &
844 -jacobian(2,1)*jacobian(1,2)*jacobian(3,3) &
845 -jacobian(1,1)*jacobian(3,2)*jacobian(2,3)
846 if( det==0.d0 ) stop
"Math error in getJacobain! Determinant==0.0"
849 inverse(1,1)=dum*( jacobian(2,2)*jacobian(3,3)-jacobian(3,2)*jacobian(2,3) )
850 inverse(1,2)=dum*(-jacobian(1,2)*jacobian(3,3)+jacobian(3,2)*jacobian(1,3) )
851 inverse(1,3)=dum*( jacobian(1,2)*jacobian(2,3)-jacobian(2,2)*jacobian(1,3) )
852 inverse(2,1)=dum*(-jacobian(2,1)*jacobian(3,3)+jacobian(3,1)*jacobian(2,3) )
853 inverse(2,2)=dum*( jacobian(1,1)*jacobian(3,3)-jacobian(3,1)*jacobian(1,3) )
854 inverse(2,3)=dum*(-jacobian(1,1)*jacobian(2,3)+jacobian(2,1)*jacobian(1,3) )
855 inverse(3,1)=dum*( jacobian(2,1)*jacobian(3,2)-jacobian(3,1)*jacobian(2,2) )
856 inverse(3,2)=dum*(-jacobian(1,1)*jacobian(3,2)+jacobian(3,1)*jacobian(1,2) )
857 inverse(3,3)=dum*( jacobian(1,1)*jacobian(2,2)-jacobian(2,1)*jacobian(1,2) )
863 integer,
intent(in) :: fetype
864 integer,
intent(in) :: nn
865 real(kind=kreal),
intent(in) :: localcoord(2)
866 real(kind=kreal),
intent(in) :: elecoord(3,nn)
867 real(kind=kreal) :: normal(3)
868 real(kind=kreal) :: deriv(nn,2), gderiv(3,2)
889 gderiv = matmul( elecoord, deriv )
890 normal(1) = gderiv(2,1)*gderiv(3,2) - gderiv(3,1)*gderiv(2,2)
891 normal(2) = gderiv(3,1)*gderiv(1,2) - gderiv(1,1)*gderiv(3,2)
892 normal(3) = gderiv(1,1)*gderiv(2,2) - gderiv(2,1)*gderiv(1,2)
897 function edgenormal( fetype, nn, localcoord, elecoord )
result( normal )
898 integer,
intent(in) :: fetype
899 integer,
intent(in) :: nn
900 real(kind=kreal),
intent(in) :: localcoord(1)
901 real(kind=kreal),
intent(in) :: elecoord(2,nn)
902 real(kind=kreal) :: normal(2)
903 real(kind=kreal) :: deriv(nn,1), gderiv(2,1)
918 gderiv = matmul( elecoord, deriv )
919 normal(1) = -gderiv(2,1)
920 normal(2) = gderiv(1,1)
925 subroutine tangentbase( fetype, nn, localcoord, elecoord, tangent )
926 integer,
intent(in) :: fetype
927 integer,
intent(in) :: nn
928 real(kind=kreal),
intent(in) :: localcoord(2)
929 real(kind=kreal),
intent(in) :: elecoord(3,nn)
930 real(kind=kreal),
intent(out) :: tangent(3,2)
931 real(kind=kreal) :: deriv(nn,2)
955 tangent = matmul( elecoord, deriv )
959 subroutine curvature( fetype, nn, localcoord, elecoord, l2ndderiv, normal, curv )
960 integer,
intent(in) :: fetype
961 integer,
intent(in) :: nn
962 real(kind=kreal),
intent(in) :: localcoord(2)
963 real(kind=kreal),
intent(in) :: elecoord(3,nn)
964 real(kind=kreal),
intent(out) :: l2ndderiv(3,2,2)
965 real(kind=kreal),
intent(in),
optional :: normal(3)
966 real(kind=kreal),
intent(out),
optional :: curv(2,2)
967 real(kind=kreal) :: deriv2(nn,2,2)
988 stop
"Cannot calculate second derivatives of shape function"
991 l2ndderiv(1:3,1,1) = matmul( elecoord(1:3,1:nn), deriv2(1:nn,1,1) )
992 l2ndderiv(1:3,1,2) = matmul( elecoord(1:3,1:nn), deriv2(1:nn,1,2) )
993 l2ndderiv(1:3,2,1) = matmul( elecoord(1:3,1:nn), deriv2(1:nn,2,1) )
994 l2ndderiv(1:3,2,2) = matmul( elecoord(1:3,1:nn), deriv2(1:nn,2,2) )
995 if(
present(curv) )
then
996 curv(1,1) = dot_product( l2ndderiv(:,1,1), normal(:) )
997 curv(1,2) = dot_product( l2ndderiv(:,1,2), normal(:) )
998 curv(2,1) = dot_product( l2ndderiv(:,2,1), normal(:) )
999 curv(2,2) = dot_product( l2ndderiv(:,2,2), normal(:) )
1005 integer,
intent(in) :: fetype
1006 real(kind=kreal),
intent(out) :: localcoord(2)
1008 select case (fetype)
1010 localcoord(:) = 1.d0/3.d0
1012 localcoord(:) = 0.d0
1015 localcoord(:) = 0.d0
1022 integer,
intent(in) :: fetype
1023 real(kind=kreal),
intent(inout) :: localcoord(2)
1024 real(kind=kreal),
optional :: clearance
1025 real(kind=kreal) :: clr, coord3
1028 if(
present(clearance) ) clr = clearance
1029 if( dabs(localcoord(1))<clr ) localcoord(1)=0.d0
1030 if( dabs(localcoord(2))<clr ) localcoord(2)=0.d0
1031 if( dabs(dabs(localcoord(1))-1.d0)<clr ) &
1032 localcoord(1)=sign(1.d0,localcoord(1))
1033 if( dabs(dabs(localcoord(2))-1.d0)<clr ) &
1034 localcoord(2)=sign(1.d0,localcoord(2))
1036 select case (fetype)
1039 coord3 = 1.d0-(localcoord(1)+localcoord(2))
1040 if( dabs(coord3)<clr ) coord3=0.d0
1041 if( localcoord(1)>=0.d0 .and. localcoord(1)<=1.d0 .and. &
1042 localcoord(2)>=0.d0 .and. localcoord(2)<=1.d0 .and. &
1043 coord3>=0.d0 .and. coord3<=1.d0 )
then
1045 if( localcoord(1)==1.d0 )
then
1047 elseif( localcoord(2)==1.d0 )
then
1049 elseif( coord3==1.d0 )
then
1051 elseif( coord3==0.d0 )
then
1053 elseif( localcoord(1)==0.d0 )
then
1055 elseif( localcoord(2)==0.d0 )
then
1061 if( all(dabs(localcoord)<=1.d0) )
then
1063 if( localcoord(1)==-1.d0 .and. localcoord(2)==-1.d0 )
then
1065 elseif( localcoord(1)==1.d0 .and. localcoord(2)==-1.d0 )
then
1067 elseif( localcoord(1)==1.d0 .and. localcoord(2)==1.d0 )
then
1069 elseif( localcoord(1)==-1.d0 .and. localcoord(2)==1.d0 )
then
1071 elseif( localcoord(2)==-1.d0 )
then
1073 elseif( localcoord(1)==1.d0 )
then
1075 elseif( localcoord(2)==1.d0 )
then
1077 elseif( localcoord(1)==-1.d0 )
then
1086 integer,
intent(in) :: fetype
1087 integer,
intent(in) :: cnode
1088 real(kind=kreal),
intent(out) :: localcoord(2)
1090 select case (fetype)
1095 elseif( cnode==2 )
then
1104 localcoord(1) =-1.d0
1105 localcoord(2) =-1.d0
1106 elseif( cnode==2 )
then
1108 localcoord(2) =-1.d0
1109 elseif( cnode==3 )
then
1113 localcoord(1) =-1.d0
1121 real(kind=kreal),
intent(in) :: lpos(:)
1122 integer,
intent(in) :: fetype
1123 integer,
intent(in) :: nnode
1124 real(kind=kreal),
intent(in) :: pvalue(:)
1125 real(kind=kreal),
intent(out) :: ndvalue(:,:)
1128 real(kind=kreal) :: shapefunc(nnode)
1131 ndvalue(i,:) = shapefunc(i)*pvalue(:)
1137 real(kind=kreal),
intent(in) :: lpos(:)
1138 integer,
intent(in) :: fetype
1139 integer,
intent(in) :: nnode
1140 real(kind=kreal),
intent(out) :: pvalue(:)
1141 real(kind=kreal),
intent(in) :: ndvalue(:,:)
1144 real(kind=kreal) :: shapefunc(nnode)
1148 pvalue(:) = pvalue(:)+ shapefunc(i)*ndvalue(i,:)
1154 integer,
intent(in) :: fetype
1155 real(kind=kreal),
intent(in) :: gaussv(:,:)
1156 real(kind=kreal),
intent(out) :: nodev(:,:)
1158 integer :: i, ngauss, nnode
1159 real(kind=kreal) :: localcoord(3), func(100)
1163 select case (fetype)
1167 nodev(i,:) = gaussv(1,:)
1186 nodev(i,:) = gaussv(1,:)
1189 nodev(i+3,:) = gaussv(2,:)
1196 nodev(i,:) = gaussv(1,:)
1202 stop
"Element type not defined"
1209 integer,
intent(in) :: fetype
1210 integer,
intent(in) :: nn
1211 real(kind=kreal),
intent(in) :: localcoord(2)
1212 real(kind=kreal),
intent(in) :: elecoord(3,nn)
1213 real(kind=kreal) :: detjxy, detjyz, detjxz, detj
1214 detjxy =
getdeterminant( fetype, nn, localcoord, elecoord(1:2,1:nn) )
1215 detjyz =
getdeterminant( fetype, nn, localcoord, elecoord(2:3,1:nn) )
1216 detjxz =
getdeterminant( fetype, nn, localcoord, elecoord(1:3:2,1:nn) )
1217 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 coodinate 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_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 deivatives of shape fucntion in natural coordiante 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_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 coodinate 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_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)