@@ -950,7 +950,7 @@ contains
950950 tri(k, 2 ) = model%trs(i)%v(k, 2 )
951951 tri(k, 3 ) = model%trs(i)%v(k, 3 )
952952 end do
953- tri_area = f_tri_area(tri)
953+ call f_tri_area(tri, tri_area )
954954
955955 if (tri_area > threshold_bary* cell_area_min) then
956956 num_inner_vertices = Ifactor_bary_3D* ceiling(tri_area/ cell_area_min)
@@ -1012,7 +1012,7 @@ contains
10121012 tri(k, 2 ) = model%trs(i)%v(k, 2 )
10131013 tri(k, 3 ) = model%trs(i)%v(k, 3 )
10141014 end do
1015- tri_area = f_tri_area(tri)
1015+ call f_tri_area(tri, tri_area )
10161016
10171017 if (tri_area > threshold_bary* cell_area_min) then
10181018 num_inner_vertices = Ifactor_bary_3D* ceiling(tri_area/ cell_area_min)
@@ -1168,6 +1168,25 @@ contains
11681168
11691169 end subroutine f_normals
11701170
1171+ !> This procedure calculates the barycentric facet area
1172+ pure subroutine f_tri_area (tri , tri_area )
1173+ real (wp), dimension (1 :3 , 1 :3 ), intent (in ) :: tri
1174+ real (wp), intent (out ) :: tri_area
1175+ t_vec3 :: AB, AC, cross
1176+ integer :: i !< Loop iterator
1177+
1178+ do i = 1 , 3
1179+ AB(i) = tri(2 , i) - tri(1 , i)
1180+ AC(i) = tri(3 , i) - tri(1 , i)
1181+ end do
1182+
1183+ cross(1 ) = AB(2 )* AC(3 ) - AB(3 )* AC(2 )
1184+ cross(2 ) = AB(3 )* AC(1 ) - AB(1 )* AC(3 )
1185+ cross(3 ) = AB(1 )* AC(2 ) - AB(2 )* AC(1 )
1186+ tri_area = 0.5_wp * sqrt (cross(1 )** 2 + cross(2 )** 2 + cross(3 )** 2 )
1187+
1188+ end subroutine f_tri_area
1189+
11711190 !> This procedure determines the levelset of interpolated 2D models.
11721191 !! @param interpolated_boundary_v Group of all the boundary vertices of the interpolated 2D model
11731192 !! @param total_vertices Total number of vertices after interpolation
@@ -1200,23 +1219,4 @@ contains
12001219
12011220 end function f_interpolated_distance
12021221
1203- !> This procedure calculates the barycentric facet area
1204- pure function f_tri_area (tri ) result(tri_area)
1205- real (wp), dimension (1 :3 , 1 :3 ), intent (in ) :: tri
1206- t_vec3 :: AB, AC, cross
1207- real (wp) :: tri_area
1208- integer :: i !< Loop iterator
1209-
1210- do i = 1 , 3
1211- AB(i) = tri(2 , i) - tri(1 , i)
1212- AC(i) = tri(3 , i) - tri(1 , i)
1213- end do
1214-
1215- cross(1 ) = AB(2 )* AC(3 ) - AB(3 )* AC(2 )
1216- cross(2 ) = AB(3 )* AC(1 ) - AB(1 )* AC(3 )
1217- cross(3 ) = AB(1 )* AC(2 ) - AB(2 )* AC(1 )
1218- tri_area = 0.5_wp * sqrt (cross(1 )** 2 + cross(2 )** 2 + cross(3 )** 2 )
1219-
1220- end function f_tri_area
1221-
12221222end module m_model
0 commit comments