61 integer,
parameter,
private :: kreal = kind(0.0d0)
118 integer,
intent(in) :: etype
132 integer,
intent(in) :: etype
169 integer,
intent(in) :: etype
194 integer,
intent(in) :: intype
195 integer,
intent(in) :: innumber
196 integer,
intent(out) :: outtype
197 integer,
intent(out) :: nodes(:)
200 select case ( intype )
203 select case ( innumber )
205 nodes(1)=1; nodes(2)=2; nodes(3)=3
207 nodes(1)=4; nodes(2)=2; nodes(3)=1
209 nodes(1)=4; nodes(2)=3; nodes(3)=2
211 nodes(1)=4; nodes(2)=1; nodes(3)=3
215 select case ( innumber )
217 nodes(1)=1; nodes(2)=2; nodes(3)=3
218 nodes(4)=5; nodes(5)=6; nodes(6)=7
220 nodes(1)=4; nodes(2)=2; nodes(3)=1
221 nodes(4)=9; nodes(5)=5; nodes(6)=8
223 nodes(1)=4; nodes(2)=3; nodes(3)=2
224 nodes(4)=10; nodes(5)=6; nodes(6)=9
226 nodes(1)=4; nodes(2)=1; nodes(3)=3
227 nodes(4)=8; nodes(5)=7; nodes(6)=10
231 select case ( innumber )
233 nodes(1)=1; nodes(2)=2; nodes(3)=3
234 nodes(4)=5; nodes(5)=6; nodes(6)=7
236 nodes(1)=4; nodes(2)=2; nodes(3)=1
237 nodes(4)=9; nodes(5)=5; nodes(6)=8
239 nodes(1)=4; nodes(2)=3; nodes(3)=2
240 nodes(4)=10; nodes(5)=6; nodes(6)=9
242 nodes(1)=4; nodes(2)=1; nodes(3)=3
243 nodes(4)=8; nodes(5)=7; nodes(6)=10
247 select case ( innumber )
249 nodes(1)=1; nodes(2)=2; nodes(3)=3; nodes(4)=4
251 nodes(1)=8; nodes(2)=7; nodes(3)=6; nodes(4)=5
253 nodes(1)=5; nodes(2)=6; nodes(3)=2; nodes(4)=1
255 nodes(1)=6; nodes(2)=7; nodes(3)=3; nodes(4)=2
257 nodes(1)=7; nodes(2)=8; nodes(3)=4; nodes(4)=3
259 nodes(1)=8; nodes(2)=5; nodes(3)=1; nodes(4)=4
265 select case ( innumber )
267 nodes(1)=1; nodes(2)=2; nodes(3)=3; nodes(4)=4
268 nodes(5)=9; nodes(6)=10; nodes(7)=11; nodes(8)=12
270 nodes(1)=8; nodes(2)=7; nodes(3)=6; nodes(4)=5
271 nodes(5)=15; nodes(6)=14; nodes(7)=13; nodes(8)=16
273 nodes(1)=5; nodes(2)=6; nodes(3)=2; nodes(4)=1
274 nodes(5)=13; nodes(6)=18; nodes(7)=9; nodes(8)=17
276 nodes(1)=6; nodes(2)=7; nodes(3)=3; nodes(4)=2
277 nodes(5)=14; nodes(6)=19; nodes(7)=10; nodes(8)=18
279 nodes(1)=7; nodes(2)=8; nodes(3)=4; nodes(4)=3
280 nodes(5)=15; nodes(6)=20; nodes(7)=11; nodes(8)=19
282 nodes(1)=8; nodes(2)=5; nodes(3)=1; nodes(4)=4
283 nodes(5)=16; nodes(6)=17; nodes(7)=12; nodes(8)=20
288 select case ( innumber )
291 nodes(1)=1; nodes(2)=2; nodes(3)=3
294 nodes(1)=6; nodes(2)=5; nodes(3)=4
297 nodes(1)=4; nodes(2)=5; nodes(3)=2; nodes(4)=1
300 nodes(1)=5; nodes(2)=6; nodes(3)=3; nodes(4)=2
303 nodes(1)=6; nodes(2)=4; nodes(3)=1; nodes(4)=3
306 select case ( innumber )
309 nodes(1)=1; nodes(2)=2; nodes(3)=3
310 nodes(4)=7; nodes(5)=8; nodes(6)=9
313 nodes(1)=6; nodes(2)=5; nodes(3)=4
314 nodes(4)=11; nodes(5)=10; nodes(6)=12
317 nodes(1)=4; nodes(2)=5; nodes(3)=2; nodes(4)=1
318 nodes(5)=10; nodes(6)=14; nodes(7)=7; nodes(8)=13
321 nodes(1)=5; nodes(2)=6; nodes(3)=3; nodes(4)=2
322 nodes(5)=11; nodes(6)=15; nodes(7)=8; nodes(8)=14
325 nodes(1)=6; nodes(2)=4; nodes(3)=1; nodes(4)=3
326 nodes(5)=12; nodes(6)=13; nodes(7)=9; nodes(8)=15
330 select case (innumber )
332 nodes(1) = 1; nodes(2)=2
334 nodes(1) = 2; nodes(2)=3
336 nodes(1) = 3; nodes(2)=1
340 select case (innumber )
342 nodes(1) = 1; nodes(2)=2; nodes(3)=4
344 nodes(1) = 2; nodes(2)=3; nodes(3)=5
346 nodes(1) = 3; nodes(2)=1; nodes(3)=6
350 select case (innumber )
352 nodes(1) = 1; nodes(2)=2
354 nodes(1) = 2; nodes(2)=3
356 nodes(1) = 3; nodes(2)=4
358 nodes(1) = 4; nodes(2)=1
362 select case (innumber )
364 nodes(1) = 1; nodes(2)=2; nodes(3)=5
366 nodes(1) = 2; nodes(2)=3; nodes(3)=6
368 nodes(1) = 3; nodes(2)=4; nodes(3)=7
370 nodes(1) = 4; nodes(2)=1; nodes(3)=8
373 select case ( innumber )
376 nodes(1)=1; nodes(2)=2; nodes(3)=3
379 nodes(1)=6; nodes(2)=5; nodes(3)=4
382 nodes(1)=4; nodes(2)=5; nodes(3)=2; nodes(4)=1
385 nodes(1)=5; nodes(2)=6; nodes(3)=3; nodes(4)=2
388 nodes(1)=6; nodes(2)=4; nodes(3)=1; nodes(4)=3
392 select case ( innumber )
394 nodes(1)=1; nodes(2)=2; nodes(3)=3; nodes(4)=4
396 nodes(1)=8; nodes(2)=7; nodes(3)=6; nodes(4)=5
398 nodes(1)=5; nodes(2)=6; nodes(3)=2; nodes(4)=1
400 nodes(1)=6; nodes(2)=7; nodes(3)=3; nodes(4)=2
402 nodes(1)=7; nodes(2)=8; nodes(3)=4; nodes(4)=3
404 nodes(1)=8; nodes(2)=5; nodes(3)=1; nodes(4)=4
410 select case ( innumber )
412 nodes(1)=1; nodes(2)=2; nodes(3)=3
418 select case ( innumber )
420 nodes(1)=1; nodes(2)=2; nodes(3)=3
421 nodes(4)=4; nodes(5)=5; nodes(6)=6
427 select case ( innumber )
429 nodes(1)=1; nodes(2)=2; nodes(3)=3; nodes(4)=4
435 select case ( innumber )
437 nodes(1)=1; nodes(2)=2; nodes(3)=3; nodes(4)=4
438 nodes(5)=5; nodes(6)=6; nodes(7)=7; nodes(8)=8
444 stop
"element type not defined-sbs"
451 integer,
intent(in) :: fetype
484 stop
"element type not defined-np"
490 integer,
intent(in) :: etype
505 integer,
intent(in) :: etype, np
506 real(kind=kreal),
intent(out) :: zeta
509 stop
"invalid shell thickness quadrature point"
523 integer,
intent(in) :: etype, np
526 stop
"invalid shell thickness quadrature point"
540 integer,
intent(in) :: fetype
541 integer,
intent(in) :: np
542 real(kind=kreal),
intent(out) :: pos(:)
579 stop
"element type not defined-qp"
586 integer,
intent(in) :: fetype
587 integer,
intent(in) :: np
625 integer,
intent(in) :: fetype
626 integer,
intent(in) :: np, n_intp
627 real(kind=kreal),
intent(out) :: pos(:)
628 real(kind=kreal),
intent(out),
optional :: shapefunc(:)
647 stop
"element type not defined-qp"
650 if(
present(shapefunc))
call getshapefunc( fetype, pos, shapefunc )
656 integer,
intent(in) :: fetype
657 integer,
intent(in) :: np, n_intp
676 stop
"element type not defined-qp"
685 integer,
intent(in) :: fetype
686 real(kind=kreal),
intent(in) :: localcoord(:)
687 real(kind=kreal),
intent(out) :: shapederiv(:,:)
723 stop
"Element type not defined-sde"
729 integer,
intent(in) :: fetype
730 real(kind=kreal),
intent(in) :: localcoord(:)
731 real(kind=kreal),
intent(out) :: shapederiv(:,:,:)
748 stop
"Cannot calculate second derivatives of shape function"
754 integer,
intent(in) :: fetype
755 real(kind=kreal),
intent(in) :: localcoord(:)
756 real(kind=kreal),
intent(out) :: func(:)
797 stop
"Element type not defined-sf"
808 integer,
intent(in) :: fetype
809 real(kind = kreal),
intent(out) :: nncoord(:, :)
813 select case( fetype )
832 stop
"Element type not defined-sde"
848 integer,
intent(in) :: fetype
849 integer,
intent(in) :: nn
850 real(kind=kreal),
intent(in) :: localcoord(:)
851 real(kind=kreal),
intent(in) :: elecoord(:,:)
852 real(kind=kreal),
intent(out) :: det
853 real(kind=kreal),
intent(out) :: gderiv(:,:)
855 real(kind=kreal) :: dum, xj(3,3), xji(3,3), deriv(nn,3)
862 xj(1:2,1:2)=matmul( elecoord(1:2,1:nn), deriv(1:nn,1:2) )
863 det=xj(1,1)*xj(2,2)-xj(2,1)*xj(1,2)
864 if( det==0.d0 ) stop
"Math error in GetGlobalDeriv! Determinant==0.0"
866 xji(1,1)= xj(2,2)*dum
867 xji(1,2)=-xj(1,2)*dum
868 xji(2,1)=-xj(2,1)*dum
869 xji(2,2)= xj(1,1)*dum
872 xj(1:3,1:3)= matmul( elecoord(1:3,1:nn), deriv(1:nn,1:3) )
874 det=xj(1,1)*xj(2,2)*xj(3,3) &
875 +xj(2,1)*xj(3,2)*xj(1,3) &
876 +xj(3,1)*xj(1,2)*xj(2,3) &
877 -xj(3,1)*xj(2,2)*xj(1,3) &
878 -xj(2,1)*xj(1,2)*xj(3,3) &
879 -xj(1,1)*xj(3,2)*xj(2,3)
880 if( det==0.d0 ) stop
"Math error in GetGlobalDeriv! Determinant==0.0"
883 xji(1,1)=dum*( xj(2,2)*xj(3,3)-xj(3,2)*xj(2,3) )
884 xji(1,2)=dum*(-xj(1,2)*xj(3,3)+xj(3,2)*xj(1,3) )
885 xji(1,3)=dum*( xj(1,2)*xj(2,3)-xj(2,2)*xj(1,3) )
886 xji(2,1)=dum*(-xj(2,1)*xj(3,3)+xj(3,1)*xj(2,3) )
887 xji(2,2)=dum*( xj(1,1)*xj(3,3)-xj(3,1)*xj(1,3) )
888 xji(2,3)=dum*(-xj(1,1)*xj(2,3)+xj(2,1)*xj(1,3) )
889 xji(3,1)=dum*( xj(2,1)*xj(3,2)-xj(3,1)*xj(2,2) )
890 xji(3,2)=dum*(-xj(1,1)*xj(3,2)+xj(3,1)*xj(1,2) )
891 xji(3,3)=dum*( xj(1,1)*xj(2,2)-xj(2,1)*xj(1,2) )
894 gderiv(1:nn,1:nspace)=matmul( deriv(1:nn,1:nspace), xji(1:nspace,1:nspace) )
899 integer,
intent(in) :: fetype
900 integer,
intent(in) :: nn
901 real(kind=kreal),
intent(in) :: localcoord(:)
902 real(kind=kreal),
intent(in) :: elecoord(:,:)
904 real(kind=kreal) :: xj(3,3), deriv(nn,3)
911 xj(1:2,1:2)=matmul( elecoord(1:2,1:nn), deriv(1:nn,1:2) )
914 xj(1:3,1:3)= matmul( elecoord(1:3,1:nn), deriv(1:nn,1:3) )
916 +xj(2,1)*xj(3,2)*xj(1,3) &
917 +xj(3,1)*xj(1,2)*xj(2,3) &
918 -xj(3,1)*xj(2,2)*xj(1,3) &
919 -xj(2,1)*xj(1,2)*xj(3,3) &
920 -xj(1,1)*xj(3,2)*xj(2,3)
926 subroutine getjacobian( fetype, nn, localcoord, elecoord, det, jacobian, inverse )
927 integer,
intent(in) :: fetype
928 integer,
intent(in) :: nn
929 real(kind=kreal),
intent(in) :: localcoord(:)
930 real(kind=kreal),
intent(in) :: elecoord(:,:)
931 real(kind=kreal),
intent(out) :: det
932 real(kind=kreal),
intent(out) :: jacobian(:,:)
933 real(kind=kreal),
intent(out) :: inverse(:,:)
935 real(kind=kreal) :: dum, deriv(nn,3)
942 jacobian(1:2,1:2)=matmul( elecoord(1:2,1:nn), deriv(1:nn,1:2) )
943 det=jacobian(1,1)*jacobian(2,2)-jacobian(2,1)*jacobian(1,2)
944 if( det==0.d0 ) stop
"Math error in getJacobain! Determinant==0.0"
946 inverse(1,1)= jacobian(2,2)*dum
947 inverse(1,2)=-jacobian(1,2)*dum
948 inverse(2,1)=-jacobian(2,1)*dum
949 inverse(2,2)= jacobian(1,1)*dum
952 jacobian(1:3,1:3)= matmul( elecoord(1:3,1:nn), deriv(1:nn,1:3) )
954 det=jacobian(1,1)*jacobian(2,2)*jacobian(3,3) &
955 +jacobian(2,1)*jacobian(3,2)*jacobian(1,3) &
956 +jacobian(3,1)*jacobian(1,2)*jacobian(2,3) &
957 -jacobian(3,1)*jacobian(2,2)*jacobian(1,3) &
958 -jacobian(2,1)*jacobian(1,2)*jacobian(3,3) &
959 -jacobian(1,1)*jacobian(3,2)*jacobian(2,3)
960 if( det==0.d0 ) stop
"Math error in getJacobain! Determinant==0.0"
963 inverse(1,1)=dum*( jacobian(2,2)*jacobian(3,3)-jacobian(3,2)*jacobian(2,3) )
964 inverse(1,2)=dum*(-jacobian(1,2)*jacobian(3,3)+jacobian(3,2)*jacobian(1,3) )
965 inverse(1,3)=dum*( jacobian(1,2)*jacobian(2,3)-jacobian(2,2)*jacobian(1,3) )
966 inverse(2,1)=dum*(-jacobian(2,1)*jacobian(3,3)+jacobian(3,1)*jacobian(2,3) )
967 inverse(2,2)=dum*( jacobian(1,1)*jacobian(3,3)-jacobian(3,1)*jacobian(1,3) )
968 inverse(2,3)=dum*(-jacobian(1,1)*jacobian(2,3)+jacobian(2,1)*jacobian(1,3) )
969 inverse(3,1)=dum*( jacobian(2,1)*jacobian(3,2)-jacobian(3,1)*jacobian(2,2) )
970 inverse(3,2)=dum*(-jacobian(1,1)*jacobian(3,2)+jacobian(3,1)*jacobian(1,2) )
971 inverse(3,3)=dum*( jacobian(1,1)*jacobian(2,2)-jacobian(2,1)*jacobian(1,2) )
976 integer,
intent(in) :: fetype
977 integer,
intent(in) :: nn
978 real(kind=kreal),
intent(in) :: localcoord(:)
979 real(kind=kreal),
intent(in) :: elecoord(:,:)
980 real(kind=kreal),
intent(out) :: det
981 real(kind=kreal) :: g1(3), g2(3), n(3), deriv(nn,2)
989 g1(i) = g1(i) + deriv(j,1) * elecoord(i,j)
990 g2(i) = g2(i) + deriv(j,2) * elecoord(i,j)
995 det = dsqrt(dot_product(n,n))
999 integer,
intent(in) :: etype
1000 integer,
intent(in) :: nn, n_intp
1001 real(kind=kreal),
intent(in) :: elecoord(:,:)
1002 real(kind=kreal),
intent(out) :: weight(:)
1004 real(kind=kreal) :: ncoord(2), det
1006 ncoord = 0.d0; det = 0.d0
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) :: normal(3)
1021 real(kind=kreal) :: deriv(nn,2), gderiv(3,2)
1023 select case (fetype)
1042 gderiv = matmul( elecoord, deriv )
1043 normal(1) = gderiv(2,1)*gderiv(3,2) - gderiv(3,1)*gderiv(2,2)
1044 normal(2) = gderiv(3,1)*gderiv(1,2) - gderiv(1,1)*gderiv(3,2)
1045 normal(3) = gderiv(1,1)*gderiv(2,2) - gderiv(2,1)*gderiv(1,2)
1050 function edgenormal( fetype, nn, localcoord, elecoord )
result( normal )
1051 integer,
intent(in) :: fetype
1052 integer,
intent(in) :: nn
1053 real(kind=kreal),
intent(in) :: localcoord(1)
1054 real(kind=kreal),
intent(in) :: elecoord(2,nn)
1055 real(kind=kreal) :: normal(2)
1056 real(kind=kreal) :: deriv(nn,1), gderiv(2,1)
1058 select case (fetype)
1071 gderiv = matmul( elecoord, deriv )
1072 normal(1) = -gderiv(2,1)
1073 normal(2) = gderiv(1,1)
1079 integer,
intent(in) :: fetype
1080 integer,
intent(in) :: nn
1081 real(kind=kreal),
intent(in) :: localcoord(2)
1082 real(kind=kreal),
intent(in) :: elecoord(3,nn)
1083 real(kind=kreal),
intent(out) :: tangent(3,2)
1084 real(kind=kreal) :: deriv(nn,2)
1086 select case (fetype)
1108 tangent = matmul( elecoord, deriv )
1112 subroutine curvature( fetype, nn, localcoord, elecoord, l2ndderiv, normal, curv )
1113 integer,
intent(in) :: fetype
1114 integer,
intent(in) :: nn
1115 real(kind=kreal),
intent(in) :: localcoord(2)
1116 real(kind=kreal),
intent(in) :: elecoord(3,nn)
1117 real(kind=kreal),
intent(out) :: l2ndderiv(3,2,2)
1118 real(kind=kreal),
intent(in),
optional :: normal(3)
1119 real(kind=kreal),
intent(out),
optional :: curv(2,2)
1120 real(kind=kreal) :: deriv2(nn,2,2)
1122 select case (fetype)
1141 stop
"Cannot calculate second derivatives of shape function"
1144 l2ndderiv(1:3,1,1) = matmul( elecoord(1:3,1:nn), deriv2(1:nn,1,1) )
1145 l2ndderiv(1:3,1,2) = matmul( elecoord(1:3,1:nn), deriv2(1:nn,1,2) )
1146 l2ndderiv(1:3,2,1) = matmul( elecoord(1:3,1:nn), deriv2(1:nn,2,1) )
1147 l2ndderiv(1:3,2,2) = matmul( elecoord(1:3,1:nn), deriv2(1:nn,2,2) )
1148 if(
present(curv) )
then
1149 curv(1,1) = dot_product( l2ndderiv(:,1,1), normal(:) )
1150 curv(1,2) = dot_product( l2ndderiv(:,1,2), normal(:) )
1151 curv(2,1) = dot_product( l2ndderiv(:,2,1), normal(:) )
1152 curv(2,2) = dot_product( l2ndderiv(:,2,2), normal(:) )
1158 integer,
intent(in) :: fetype
1159 real(kind=kreal),
intent(out) :: localcoord(:)
1161 select case (fetype)
1163 localcoord(1:2) = 1.d0/3.d0
1165 localcoord(1:2) = 0.d0
1167 localcoord(1:3) = 1.d0/4.d0
1169 localcoord(1) = 1.d0/3.d0
1170 localcoord(2) = 1.d0/3.d0
1171 localcoord(3) = 0.d0
1173 localcoord(1:3) = 0.d0
1175 localcoord(:) = 0.d0
1182 integer,
intent(in) :: fetype
1183 real(kind=kreal),
intent(inout) :: localcoord(2)
1184 real(kind=kreal),
optional :: clearance
1185 real(kind=kreal) :: clr, coord3
1188 if(
present(clearance) ) clr = clearance
1189 if( dabs(localcoord(1))<clr ) localcoord(1)=0.d0
1190 if( dabs(localcoord(2))<clr ) localcoord(2)=0.d0
1191 if( dabs(dabs(localcoord(1))-1.d0)<clr ) &
1192 localcoord(1)=sign(1.d0,localcoord(1))
1193 if( dabs(dabs(localcoord(2))-1.d0)<clr ) &
1194 localcoord(2)=sign(1.d0,localcoord(2))
1196 select case (fetype)
1199 coord3 = 1.d0-(localcoord(1)+localcoord(2))
1200 if( dabs(coord3)<clr ) coord3=0.d0
1201 if( localcoord(1)>=0.d0 .and. localcoord(1)<=1.d0 .and. &
1202 localcoord(2)>=0.d0 .and. localcoord(2)<=1.d0 .and. &
1203 coord3>=0.d0 .and. coord3<=1.d0 )
then
1205 if( localcoord(1)==1.d0 )
then
1207 elseif( localcoord(2)==1.d0 )
then
1209 elseif( coord3==1.d0 )
then
1211 elseif( coord3==0.d0 )
then
1213 elseif( localcoord(1)==0.d0 )
then
1215 elseif( localcoord(2)==0.d0 )
then
1221 if( all(dabs(localcoord)<=1.d0) )
then
1223 if( localcoord(1)==-1.d0 .and. localcoord(2)==-1.d0 )
then
1225 elseif( localcoord(1)==1.d0 .and. localcoord(2)==-1.d0 )
then
1227 elseif( localcoord(1)==1.d0 .and. localcoord(2)==1.d0 )
then
1229 elseif( localcoord(1)==-1.d0 .and. localcoord(2)==1.d0 )
then
1231 elseif( localcoord(2)==-1.d0 )
then
1233 elseif( localcoord(1)==1.d0 )
then
1235 elseif( localcoord(2)==1.d0 )
then
1237 elseif( localcoord(1)==-1.d0 )
then
1247 integer,
intent(in) :: fetype
1248 real(kind=kreal),
intent(inout) :: localcoord(3)
1249 real(kind=kreal),
optional :: clearance
1250 real(kind=kreal) :: clr, coord4
1255 if(
present(clearance) ) clr = clearance
1257 if( dabs(localcoord(idof))<clr ) localcoord(idof)=0.d0
1258 if( dabs(dabs(localcoord(idof))-1.d0)<clr ) &
1259 & localcoord(idof)=sign(1.d0,localcoord(idof))
1263 select case (fetype)
1266 coord4 = 1.d0-(localcoord(1)+localcoord(2)+localcoord(3))
1267 if( dabs(coord4)<clr ) coord4=0.d0
1270 if( localcoord(idof) < 0.d0 .or. localcoord(idof) > 1.d0 )
isinside3delement = -1
1275 coord4 = 1.d0-(localcoord(1)+localcoord(2))
1278 if( localcoord(idof) < 0.d0 .or. localcoord(idof) > 1.d0 )
isinside3delement = -1
1289 integer,
intent(in) :: fetype
1290 integer,
intent(in) :: cnode
1291 real(kind=kreal),
intent(out) :: localcoord(2)
1293 select case (fetype)
1298 elseif( cnode==2 )
then
1307 localcoord(1) =-1.d0
1308 localcoord(2) =-1.d0
1309 elseif( cnode==2 )
then
1311 localcoord(2) =-1.d0
1312 elseif( cnode==3 )
then
1316 localcoord(1) =-1.d0
1324 real(kind=kreal),
intent(in) :: lpos(:)
1325 integer,
intent(in) :: fetype
1326 integer,
intent(in) :: nnode
1327 real(kind=kreal),
intent(in) :: pvalue(:)
1328 real(kind=kreal),
intent(out) :: ndvalue(:,:)
1331 real(kind=kreal) :: shapefunc(nnode)
1334 ndvalue(i,:) = shapefunc(i)*pvalue(:)
1340 real(kind=kreal),
intent(in) :: lpos(:)
1341 integer,
intent(in) :: fetype
1342 integer,
intent(in) :: nnode
1343 real(kind=kreal),
intent(out) :: pvalue(:)
1344 real(kind=kreal),
intent(in) :: ndvalue(:,:)
1347 real(kind=kreal) :: shapefunc(nnode)
1351 pvalue(:) = pvalue(:)+ shapefunc(i)*ndvalue(i,:)
1357 integer,
intent(in) :: fetype
1358 real(kind=kreal),
intent(in) :: gaussv(:,:)
1359 real(kind=kreal),
intent(out) :: nodev(:,:)
1361 integer :: i, ngauss, nnode
1362 real(kind=kreal) :: localcoord(3), func(100)
1366 select case (fetype)
1370 nodev(i,:) = gaussv(1,:)
1389 nodev(i,:) = gaussv(1,:)
1392 nodev(i+3,:) = gaussv(2,:)
1399 nodev(i,:) = gaussv(1,:)
1405 stop
"Element type not defined"
1412 integer,
intent(in) :: fetype
1413 integer,
intent(in) :: nn
1414 real(kind=kreal),
intent(in) :: localcoord(2)
1415 real(kind=kreal),
intent(in) :: elecoord(3,nn)
1416 real(kind=kreal) :: detjxy, detjyz, detjxz, detj
1417 detjxy =
getdeterminant( fetype, nn, localcoord, elecoord(1:2,1:nn) )
1418 detjyz =
getdeterminant( fetype, nn, localcoord, elecoord(2:3,1:nn) )
1419 detjxz =
getdeterminant( fetype, nn, localcoord, elecoord(1:3:2,1:nn) )
1420 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
real(kind=kreal) function getweight_ss(fetype, np, n_intp)
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
subroutine getsurfacejacobian_det(fetype, nn, localcoord, elecoord, det)
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
subroutine get_intp_weights(etype, nn, n_intp, elecoord, weight)
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
subroutine getintpoint4ss(fetype, np, pos, n_intp, shapefunc)
This module provides aux functions.
subroutine cross_product(v1, v2, vn)
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(2, 16) gauss2d16
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, 27) gauss2d27
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(16) weight2d16
real(kind=kreal), dimension(3) weight1d3
real(kind=kreal), dimension(27) weight2d27
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)