SPEED
READ_FILEXYZ.f90 File Reference

Go to the source code of this file.

Functions/Subroutines

subroutine read_filexyz (filec, num_nodes, num_tria, x, y, z, node1, node2, node3, max_length)
 Reads mesh of triangular elements (topography or alluvial basin)
 

Function/Subroutine Documentation

◆ read_filexyz()

subroutine read_filexyz ( character*70  filec,
integer*4  num_nodes,
integer*4  num_tria,
real*8, dimension(num_nodes)  x,
real*8, dimension(num_nodes)  y,
real*8, dimension(num_nodes)  z,
integer*4, dimension(num_tria)  node1,
integer*4, dimension(num_tria)  node2,
integer*4, dimension(num_tria)  node3,
real*8  max_length 
)

Reads mesh of triangular elements (topography or alluvial basin)

Author
Ilario Mazzieri
Date
September, 2013
Version
1.0
Parameters
[in]filecfile name for the mesh
[in]num_nodesnumber of nodes
[in]num_trianumber of triangular fault
[out]xx-coordinate for the node
[out]yy-coordinate for the node
[out]zz-coordinate for the node
[out]node11-vertex of the triangular fault
[out]node22-vertex of the triangular fault
[out]node33-vertex of the triangular fault
[out]max_lengthmax diameter of the triangles

Definition at line 34 of file READ_FILEXYZ.f90.

38
39 implicit none
40
41 integer*4 :: num_nodes,num_tria
42 integer*4 :: i
43 integer*4 :: trash
44 real*8, dimension(num_nodes) :: x,y,z
45 integer*4, dimension(num_tria) :: node1,node2,node3
46 character*70 :: filec
47 integer*4 :: ileft,iright
48 integer*4 :: status
49 character*100000 :: input_line
50 real*8 :: length_edge1,length_edge2,length_edge3
51 real*8 :: max_edge_length,max_length
52
53 max_length = 0.0d0
54
55 open(20,file=filec)
56 read(20,'(A)',iostat = status) input_line
57 ileft = 1
58 iright = len(input_line)
59 read(input_line(ileft:iright),*) num_nodes,num_tria
60
61 do i = 1,num_nodes
62 read(20,'(A)',iostat = status) input_line
63 if (status.ne.0) exit
64 ileft = 1
65 iright = len(input_line)
66 read(input_line(ileft:iright),*)trash,x(i),y(i),z(i)
67 enddo
68
69 do i = 1,num_tria
70 read(20,'(A)',iostat = status) input_line
71 if (status.ne.0) exit
72 ileft = 1
73 iright = len(input_line)
74 read(input_line(ileft:iright),*)trash,node1(i),node2(i),node3(i)
75 enddo
76
77 close(20)
78
79 ! compute max tria edge length
80
81 do i = 1,num_tria
82
83 length_edge1 = ( x(node1(i)) - x(node2(i)) )**2 + ( y(node1(i)) - y(node2(i)) )**2
84 length_edge2 = ( x(node2(i)) - x(node3(i)) )**2 + ( y(node2(i)) - y(node3(i)) )**2
85 length_edge3 = ( x(node3(i)) - x(node1(i)) )**2 + ( y(node3(i)) - y(node1(i)) )**2
86
87 max_edge_length = max(length_edge1,length_edge2,length_edge3)
88
89 if (max_length.lt.max_edge_length) then
90 max_length = max_edge_length
91 endif
92
93 enddo
94
95 max_length = sqrt(max_length)
96
97 return
98

Referenced by make_nothonoring().

Here is the caller graph for this function: