26subroutine fm_util_set_value_real_array_(name, rval, length, caller, no_overwrite, good_name_list)
34character(len=*),
intent(in) :: name
35integer,
intent(in) :: length
36real(FMS_FM_KIND_),
intent(in) :: rval(length)
37character(len=*),
intent(in),
optional :: caller
38logical,
intent(in),
optional :: no_overwrite
39character(len=FMS_PATH_LEN),
intent(in),
optional :: good_name_list
45character(len=48),
parameter :: sub_name =
'fm_util_set_value_real_array'
51character(len=256) :: error_header
52character(len=256) :: warn_header
53character(len=256) :: note_header
54character(len=128) :: caller_str
55character(len=32) :: str_error
57integer :: field_length
59logical :: no_overwrite_use
60character(len=FMS_PATH_LEN) :: good_name_list_use
63integer,
parameter :: lkind=fms_fm_kind_
69if (
present(caller))
then
70 caller_str =
'[' // trim(caller) //
']'
72 caller_str = fm_util_default_caller
75error_header =
'==>Error from ' // trim(mod_name) // &
76 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
77warn_header =
'==>Warning from ' // trim(mod_name) // &
78 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
79note_header =
'==>Note from ' // trim(mod_name) // &
80 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
86if (name .eq.
' ')
then
87 call mpp_error(fatal, trim(error_header) //
' Empty name given')
94if (length .lt. 0)
then
95 call mpp_error(fatal, trim(error_header) //
' Negative array length')
102if (
present(no_overwrite))
then
103 no_overwrite_use = no_overwrite
105 no_overwrite_use = default_no_overwrite
112if (
present(good_name_list))
then
113 good_name_list_use = good_name_list
115 good_name_list_use = default_good_name_list
122if (length .eq. 0)
then
123 if (.not. (no_overwrite_use .and. fm_exists(name)))
then
124 field_index = fm_new_value(name, 0.0_lkind, index = 0)
125 if (field_index .le. 0)
then
126 write (str_error,*)
' with length = ', length
127 call mpp_error(fatal, trim(error_header) //
' Problem setting ' // trim(name) // trim(str_error))
131 if (no_overwrite_use .and. fm_exists(name))
then
132 field_length = fm_get_length(name)
133 if (field_length .lt. 0)
then
134 call mpp_error(fatal, trim(error_header) //
' Problem getting length of ' // trim(name))
136 do n = field_length + 1, length
137 field_index = fm_new_value(name, rval(n), index = n)
138 if (field_index .le. 0)
then
139 write (str_error,*)
' with index = ', n
140 call mpp_error(fatal, trim(error_header) //
' Problem setting ' // trim(name) // trim(str_error))
144 field_index = fm_new_value(name, rval(1))
145 if (field_index .le. 0)
then
146 call mpp_error(fatal, trim(error_header) //
' Problem setting ' // trim(name))
149 field_index = fm_new_value(name, rval(n), index = n)
150 if (field_index .le. 0)
then
151 write (str_error,*)
' with index = ', n
152 call mpp_error(fatal, trim(error_header) //
' Problem setting ' // trim(name) // trim(str_error))
163if (good_name_list_use .ne.
' ')
then
164 if (fm_exists(good_name_list_use))
then
165 add_name = fm_util_get_index_string(good_name_list_use, name, &
166 caller = caller_str) .le. 0
170 if (add_name .and. fm_exists(name))
then
171 if (fm_new_value(good_name_list_use, name, append = .true., create = .true.) .le. 0)
then
172 call mpp_error(fatal, trim(error_header) // &
173 ' Could not add ' // trim(name) //
' to "' // trim(good_name_list_use) //
'" list')
180end subroutine fm_util_set_value_real_array_
185subroutine fm_util_set_value_real_(name, rval, caller, index, append, no_create, &
186 no_overwrite, good_name_list)
194character(len=*),
intent(in) :: name
195real(FMS_FM_KIND_),
intent(in) :: rval
196character(len=*),
intent(in),
optional :: caller
197integer,
intent(in),
optional :: index
198logical,
intent(in),
optional :: append
199logical,
intent(in),
optional :: no_create
200logical,
intent(in),
optional :: no_overwrite
201character(len=*),
intent(in),
optional :: good_name_list
207character(len=48),
parameter :: sub_name =
'fm_util_set_value_real'
213character(len=256) :: error_header
214character(len=256) :: warn_header
215character(len=256) :: note_header
216character(len=128) :: caller_str
217character(len=32) :: str_error
218integer :: field_index
219logical :: no_overwrite_use
220integer :: field_length
221character(len=FMS_PATH_LEN) :: good_name_list_use
229if (
present(caller))
then
230 caller_str =
'[' // trim(caller) //
']'
232 caller_str = fm_util_default_caller
235error_header =
'==>Error from ' // trim(mod_name) // &
236 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
237warn_header =
'==>Warning from ' // trim(mod_name) // &
238 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
239note_header =
'==>Note from ' // trim(mod_name) // &
240 '(' // trim(sub_name) //
')' // trim(caller_str) //
':'
246if (name .eq.
' ')
then
247 call mpp_error(fatal, trim(error_header) //
' Empty name given')
254if (
present(index) .and.
present(append))
then
255 call mpp_error(fatal, trim(error_header) //
' Append and index both given as arguments')
262if (
present(no_overwrite))
then
263 no_overwrite_use = no_overwrite
265 no_overwrite_use = default_no_overwrite
272if (
present(good_name_list))
then
273 good_name_list_use = good_name_list
275 good_name_list_use = default_good_name_list
278if (
present(no_create))
then
279 create = .not. no_create
280 if (no_create .and. (
present(append) .or.
present(index)))
then
281 call mpp_error(fatal, trim(error_header) // &
282 &
' append or index are present when no_create is true for ' // trim(name))
288if (
present(index))
then
289 if (fm_exists(name))
then
290 field_length = fm_get_length(name)
291 if (field_length .lt. 0)
then
292 call mpp_error(fatal, trim(error_header) //
' Problem getting length of ' // trim(name))
294 if (.not. (no_overwrite_use .and. field_length .ge. index))
then
295 field_index = fm_new_value(name, rval, index = index)
296 if (field_index .le. 0)
then
297 write (str_error,*)
' with index = ', index
298 call mpp_error(fatal, trim(error_header) //
' Problem overwriting ' // trim(name) // trim(str_error))
302 field_index = fm_new_value(name, rval, index = index)
303 if (field_index .le. 0)
then
304 write (str_error,*)
' with index = ', index
305 call mpp_error(fatal, trim(error_header) //
' Problem setting ' // trim(name) // trim(str_error))
308elseif (
present(append))
then
309 field_index = fm_new_value(name, rval, append = append)
310 if (field_index .le. 0)
then
311 write (str_error,*)
' with append = ', append
312 call mpp_error(fatal, trim(error_header) //
' Problem setting ' // trim(name) // trim(str_error))
315 if (fm_exists(name))
then
316 if (.not. no_overwrite_use)
then
317 field_index = fm_new_value(name, rval)
318 if (field_index .le. 0)
then
319 call mpp_error(fatal, trim(error_header) //
' Problem overwriting ' // trim(name))
323 field_index = fm_new_value(name, rval)
324 if (field_index .le. 0)
then
325 call mpp_error(fatal, trim(error_header) //
' Problem creating ' // trim(name))
335if (good_name_list_use .ne.
' ')
then
336 if (fm_exists(good_name_list_use))
then
337 add_name = fm_util_get_index_string(good_name_list_use, name, &
338 caller = caller_str) .le. 0
342 if (add_name .and. fm_exists(name))
then
343 if (fm_new_value(good_name_list_use, name, append = .true., create = .true.) .le. 0)
then
344 call mpp_error(fatal, trim(error_header) // &
345 ' Could not add ' // trim(name) //
' to "' // trim(good_name_list_use) //
'" list')
352end subroutine fm_util_set_value_real_