forked from dnowacki-usgs/swanmod
-
Notifications
You must be signed in to change notification settings - Fork 0
/
SwanPrintGridInfo.ftn90
179 lines (178 loc) · 6 KB
/
SwanPrintGridInfo.ftn90
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
subroutine SwanPrintGridInfo
!
! --|-----------------------------------------------------------|--
! | Delft University of Technology |
! | Faculty of Civil Engineering and Geosciences |
! | Environmental Fluid Mechanics Section |
! | P.O. Box 5048, 2600 GA Delft, The Netherlands |
! | |
! | Programmer: Marcel Zijlema |
! --|-----------------------------------------------------------|--
!
!
! SWAN (Simulating WAves Nearshore); a third generation wave model
! Copyright (C) 1993-2015 Delft University of Technology
!
! This program is free software; you can redistribute it and/or
! modify it under the terms of the GNU General Public License as
! published by the Free Software Foundation; either version 2 of
! the License, or (at your option) any later version.
!
! This program is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! GNU General Public License for more details.
!
! A copy of the GNU General Public License is available at
! http://www.gnu.org/copyleft/gpl.html#SEC3
! or by writing to the Free Software Foundation, Inc.,
! 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
!
!
! Authors
!
! 40.80: Marcel Zijlema
!
! Updates
!
! 40.80, July 2007: New subroutine
!
! Purpose
!
! Prints some relevant information concerning the grid
!
! Modules used
!
use ocpcomm4
use SwanGriddata
use SwanGridobjects
!
implicit none
!
! Local variables
!
integer :: i ! loop counter
integer, save :: ient = 0 ! number of entries in this subroutine
integer :: iface ! actual face of the present cell
integer :: j ! loop counter
integer :: ncellsb ! number of boundary cells
integer :: ncellsi ! number of internal cells
integer :: nfacesb ! number of boundary faces
integer :: nfacesi ! number of internal faces
!
real :: area ! area of cell
real :: gridsize ! actual gridsize of cell
real, dimension(3) :: h ! altitudes of triangle
!
character(80), dimension(2) :: helptxt ! auxiliary textlines
!
type(celltype), dimension(:), pointer :: cell ! datastructure for cells with their attributes
type(facetype), dimension(:), pointer :: face ! datastructure for faces with their attributes
!
! Structure
!
! Description of the pseudo code
!
! Source text
!
if (ltrace) call strace (ient,'SwanPrintGridInfo')
!
! point to cell and face objects
!
cell => gridobject%cell_grid
face => gridobject%face_grid
!
if ( grid_generator == meth_adcirc ) then
!
! grid is generated by SMS/ADCIRC
!
write (helptxt(1),'(a)') 'solely triangles'
write (helptxt(2),'(a)') 'SMS/ADCIRC'
!
elseif ( grid_generator == meth_triangle ) then
!
! grid is generated by Triangle
!
write (helptxt(1),'(a)') 'solely triangles'
write (helptxt(2),'(a)') 'Triangle'
!
elseif ( grid_generator == meth_easy ) then
!
! grid is generated by Easymesh
!
write (helptxt(1),'(a)') 'solely triangles'
write (helptxt(2),'(a)') 'Easymesh'
!
else
!
write (helptxt(1),'(a)') 'triangles or hybrid cells'
write (helptxt(2),'(a)') 'unknown'
!
endif
!
! determine number of boundary faces and boundary cells
!
nfacesb = 0
do i = 1, nfaces
if ( face(i)%atti(FMARKER) == 1 ) nfacesb = nfacesb + 1
enddo
nfacesi = nfaces - nfacesb
ncellsb = 0
do i = 1, ncells
if ( cell(i)%atti(CMARKER) == 1 ) ncellsb = ncellsb + 1
enddo
ncellsi = ncells - ncellsb
!
! write some constant with respect to the grid to PRINT file
!
write(PRINTF,100) trim(helptxt(1)), trim(helptxt(2)), nverts, ncells, &
ncellsi, ncellsb, nfaces, nfacesi, nfacesb
!
! determine minimum and maximum gridsize of the grid
!
mingsiz = 1.0e10
maxgsiz = 0.0
!
do i = 1, ncells
!
! area of cell
!
area = cell(i)%attr(CELLAREA)
!
! altitude of cell
!
do j = 1, cell(i)%nof
iface = cell(i)%face(j)%atti(FACEID)
h(j) = 2.*area/face(iface)%attr(FACELEN)
enddo
!
! compute gridsize of current cell
!
gridsize = 1./sqrt((h(1)**(-2)+h(2)**(-2)+h(3)**(-2))/3.)
!
! determine minimum and maximum gridsize
!
if ( gridsize < mingsiz ) then
mingsiz = gridsize
elseif ( gridsize > maxgsiz ) then
maxgsiz = gridsize
endif
!
enddo
!
write(PRINTF,200) mingsiz
write(PRINTF,300) maxgsiz
!
! format statements
!
100 format(// ' The unstructured grid contains ',a,' generated by ',a// &
' Number of vertices = ',i7// &
' Number of cells = ', i7/ &
' Number of internal cells = ', i7/ &
' Number of boundary cells = ',i7// &
' Number of faces = ',i7/ &
' Number of internal faces = ',i7/ &
' Number of boundary faces = ',i7//)
200 format(' The minimum gridsize =',f12.5)
300 format(' The maximum gridsize =',f12.5)
end subroutine SwanPrintGridInfo