Skip to content

Commit ff65984

Browse files
committed
adds optional parameter reading for Mesh_Par_file
1 parent 9109894 commit ff65984

File tree

6 files changed

+114
-12
lines changed

6 files changed

+114
-12
lines changed

src/generate_databases/model_tomography.f90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -762,7 +762,7 @@ subroutine tomo_read_next_line(unit_in,string_read)
762762
if (ier /= 0) stop 'error while reading tomography file'
763763

764764
! suppress leading white spaces, if any
765-
string_read = adjustl(string_read)
765+
string_read = trim(adjustl(string_read))
766766

767767
! suppress trailing carriage return (ASCII code 13) if any (e.g. if input text file coming from Windows/DOS)
768768
if (index(string_read,achar(13)) > 0) string_read = string_read(1:index(string_read,achar(13))-1)

src/generate_databases/model_vs30.f90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ subroutine read_next_line(unit_in,string_read)
215215
if (ier /= 0) stop 'Error while reading Vs30 interface file'
216216

217217
! suppress leading white spaces, if any
218-
string_read = adjustl(string_read)
218+
string_read = trim(adjustl(string_read))
219219

220220
! suppress trailing carriage return (ASCII code 13) if any (e.g. if input text file coming from Windows/DOS)
221221
if (index(string_read,achar(13)) > 0) string_read = string_read(1:index(string_read,achar(13))-1)

src/meshfem3D/meshfem3D_par.f90

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ module meshfem_par
9090

9191
! CPML
9292
double precision :: THICKNESS_OF_X_PML,THICKNESS_OF_Y_PML,THICKNESS_OF_Z_PML
93-
logical :: ADD_PML_AS_EXTRA_MESH_LAYERS
94-
integer :: NUMBER_OF_PML_LAYERS_TO_ADD
93+
logical :: ADD_PML_AS_EXTRA_MESH_LAYERS = .false. ! for mesh extension with PML layers
94+
integer :: NUMBER_OF_PML_LAYERS_TO_ADD = 0
9595
logical, dimension(:), allocatable :: is_CPML
9696
integer, dimension(:), allocatable :: CPML_to_spec,CPML_regions
9797
integer :: nspec_CPML

src/meshfem3D/read_mesh_parameter_file.f90

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -197,13 +197,13 @@ subroutine read_mesh_parameter_file()
197197
if (THICKNESS_OF_Y_PML < 0.0) stop 'Error invalid negative value THICKNESS_OF_Y_PML'
198198
if (THICKNESS_OF_Z_PML < 0.0) stop 'Error invalid negative value THICKNESS_OF_Z_PML'
199199

200-
! add PML as extra mesh layers
201-
call read_value_logical_mesh(IIN,IGNORE_JUNK,ADD_PML_AS_EXTRA_MESH_LAYERS, 'ADD_PML_AS_EXTRA_MESH_LAYERS', ier)
202-
if (ier /= 0) stop 'Error reading Mesh parameter ADD_PML_AS_EXTRA_MESH_LAYERS'
203-
204-
! number of PML layers added as extra outer layers
205-
call read_value_integer_mesh(IIN,IGNORE_JUNK,NUMBER_OF_PML_LAYERS_TO_ADD, 'NUMBER_OF_PML_LAYERS_TO_ADD', ier)
206-
if (ier /= 0) stop 'Error reading Mesh parameter NUMBER_OF_PML_LAYERS_TO_ADD'
200+
! PML mesh extension
201+
! (optional) add PML as extra mesh layers
202+
call read_value_logical_mesh_optional(IIN,ADD_PML_AS_EXTRA_MESH_LAYERS, 'ADD_PML_AS_EXTRA_MESH_LAYERS', ier)
203+
if (ier /= 0) stop 'Error reading (optional) Mesh parameter ADD_PML_AS_EXTRA_MESH_LAYERS'
204+
! (optional) number of PML layers added as extra outer layers
205+
call read_value_integer_mesh_optional(IIN,NUMBER_OF_PML_LAYERS_TO_ADD, 'NUMBER_OF_PML_LAYERS_TO_ADD', ier)
206+
if (ier /= 0) stop 'Error reading (optional) Mesh parameter NUMBER_OF_PML_LAYERS_TO_ADD'
207207

208208
! user output
209209
if (myrank == 0) then

src/meshfem3D/read_value_mesh_parameters.f90

Lines changed: 100 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ subroutine read_value_integer_mesh(iunit,ignore_junk,value_to_read, name, ier)
3838
integer, intent(inout) :: value_to_read
3939
integer, intent(inout) :: ier
4040
character(len=*), intent(in) :: name
41+
! local parameters
4142
character(len=MAX_STRING_LEN) :: string_read
4243

4344
call unused_string(name)
@@ -50,6 +51,53 @@ subroutine read_value_integer_mesh(iunit,ignore_junk,value_to_read, name, ier)
5051

5152
end subroutine read_value_integer_mesh
5253

54+
!--------------------
55+
56+
subroutine read_value_integer_mesh_optional(iunit, value_to_read, name, ier)
57+
58+
! reads an optional integer parameter value if found by name
59+
60+
use constants, only: MAX_STRING_LEN
61+
62+
implicit none
63+
64+
integer, intent(in) :: iunit
65+
integer, intent(inout) :: value_to_read
66+
character(len=*), intent(in) :: name
67+
integer, intent(inout) :: ier
68+
! local parameters
69+
character(len=MAX_STRING_LEN) :: string_read
70+
integer :: index_equal_sign
71+
72+
! reads full line (with parameter name)
73+
call read_next_line(iunit,.false.,string_read,ier)
74+
if (ier /= 0) return
75+
76+
! debug
77+
!print *,'optional line: ***',trim(string_read),'*** integer name index: ',index(string_read,trim(name))
78+
79+
! reads parameter value if current line contains name string
80+
if (index(string_read,trim(name)) > 0) then
81+
! suppress leading parameter name (up to the first equal sign, included)
82+
index_equal_sign = index(string_read,'=')
83+
if (index_equal_sign <= 1 .or. index_equal_sign == len_trim(string_read)) then
84+
print *,'Error reading Mesh_Par_file of optional parameter ',trim(name),' in line: ',trim(string_read)
85+
stop 'Error incorrect syntax detected in Mesh_Par_file'
86+
else
87+
string_read = string_read((index_equal_sign + 1):len_trim(string_read))
88+
endif
89+
90+
! reads parameter value
91+
read(string_read,*,iostat=ier) value_to_read
92+
93+
else
94+
! line contains another new parameter
95+
! reverts back file pointer to previous line for the next read statements
96+
backspace(iunit)
97+
endif
98+
99+
end subroutine read_value_integer_mesh_optional
100+
53101
!--------------------
54102

55103
subroutine read_value_dble_precision_mesh(iunit,ignore_junk,value_to_read, name, ier)
@@ -63,6 +111,7 @@ subroutine read_value_dble_precision_mesh(iunit,ignore_junk,value_to_read, name,
63111
double precision, intent(inout) :: value_to_read
64112
integer, intent(inout) :: ier
65113
character(len=*), intent(in) :: name
114+
! local parameters
66115
character(len=MAX_STRING_LEN) :: string_read
67116

68117
call unused_string(name)
@@ -88,6 +137,7 @@ subroutine read_value_logical_mesh(iunit,ignore_junk,value_to_read, name, ier)
88137
integer, intent(in) :: iunit
89138
integer, intent(inout) :: ier
90139
character(len=*), intent(in) :: name
140+
! local parameters
91141
character(len=MAX_STRING_LEN) :: string_read
92142

93143
call unused_string(name)
@@ -100,6 +150,53 @@ subroutine read_value_logical_mesh(iunit,ignore_junk,value_to_read, name, ier)
100150

101151
end subroutine read_value_logical_mesh
102152

153+
!--------------------
154+
155+
subroutine read_value_logical_mesh_optional(iunit, value_to_read, name, ier)
156+
157+
! reads an optional parameter value if found by name
158+
159+
use constants, only: MAX_STRING_LEN
160+
161+
implicit none
162+
163+
logical, intent(inout) :: value_to_read
164+
integer, intent(in) :: iunit
165+
integer, intent(inout) :: ier
166+
character(len=*), intent(in) :: name
167+
! local parameters
168+
character(len=MAX_STRING_LEN) :: string_read
169+
integer :: index_equal_sign
170+
171+
! reads full line (with parameter name)
172+
call read_next_line(iunit,.false.,string_read,ier)
173+
if (ier /= 0) return
174+
175+
! debug
176+
!print *,'optional line: ***',trim(string_read),'*** logical name index: ',index(string_read,trim(name))
177+
178+
! reads parameter value if current line contains name string
179+
if (index(string_read,trim(name)) > 0) then
180+
! suppress leading parameter name (up to the first equal sign, included)
181+
index_equal_sign = index(string_read,'=')
182+
if (index_equal_sign <= 1 .or. index_equal_sign == len_trim(string_read)) then
183+
print *,'Error reading Mesh_Par_file of optional parameter ',trim(name),' in line: ',trim(string_read)
184+
stop 'Error incorrect syntax detected in Mesh_Par_file'
185+
else
186+
string_read = string_read((index_equal_sign + 1):len_trim(string_read))
187+
endif
188+
189+
! reads parameter value
190+
read(string_read,*,iostat=ier) value_to_read
191+
192+
else
193+
! line contains another new parameter
194+
! reverts back file pointer to previous line for the next read statements
195+
backspace(iunit)
196+
endif
197+
198+
end subroutine read_value_logical_mesh_optional
199+
103200
!--------------------
104201

105202
subroutine read_value_string_mesh(iunit,ignore_junk,value_to_read, name, ier)
@@ -113,6 +210,7 @@ subroutine read_value_string_mesh(iunit,ignore_junk,value_to_read, name, ier)
113210
character(len=*), intent(inout) :: value_to_read
114211
integer, intent(inout) :: ier
115212
character(len=*), intent(in) :: name
213+
! local parameters
116214
character(len=MAX_STRING_LEN) :: string_read
117215

118216
call unused_string(name)
@@ -233,6 +331,7 @@ subroutine read_interface_parameters(iunit,SUPPRESS_UTM_PROJECTION,interface_fil
233331
double precision :: orig_x_interface,orig_y_interface
234332
double precision :: spacing_x_interface,spacing_y_interface
235333
character(len=MAX_STRING_LEN) :: interface_file
334+
! local parameters
236335
character(len=MAX_STRING_LEN) :: string_read
237336

238337
ier = 0
@@ -564,7 +663,7 @@ subroutine read_next_line(iunit,suppress_junk,string_read, ier)
564663
endif
565664

566665
! suppress leading white spaces, if any
567-
string_read = adjustl(string_read)
666+
string_read = trim(adjustl(string_read))
568667

569668
! suppress trailing carriage return (ASCII code 13) if any (e.g. if input text file coming from Windows/DOS)
570669
if (index(string_read,achar(13)) > 0) string_read = string_read(1:index(string_read,achar(13))-1)

src/specfem3D/read_stations.f90

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ subroutine read_stations(rec_filename)
5353
read(IIN,"(a)",iostat=ier) line
5454
if (ier /= 0) call exit_mpi(myrank, 'Error reading station file '//trim(rec_filename))
5555

56+
! suppress white space
57+
line = trim(adjustl(line))
58+
5659
! skip comment lines
5760
if (len_trim(line) > 0 .and. line(1:1) /= '#') then
5861
line = trim(line)

0 commit comments

Comments
 (0)