MODFLOW 6 version 6.9.0.dev0
USGS Modular Hydrologic Model
Loading...
Searching...
No Matches
observemodule Module Reference

This module contains the derived types ObserveType and ObsDataType. More...

Data Types

type  observetype
type  obsdatatype
interface  processidsub
 @ brief Process user-provided IDstring More...

Functions/Subroutines

subroutine resetcurrentvalue (this)
 @ brief Reset current observation value
subroutine writeto (this, obstab, btagfound, fnamein)
 @ brief Write observation input data
subroutine resetobsindex (this)
 @ brief Reset a observation index
subroutine addobsindex (this, indx)
 @ brief Add a observation index
subroutine da (this)
 @ brief Deallocate a observation
subroutine, public constructobservation (newobservation, defline, numunit, formatted, indx, obsdata, inunit)
 @ brief Construct a new ObserveType
type(observetype) function, pointer castasobservetype (obj)
 @ brief Cast a object as a ObserveType
subroutine, public addobstolist (list, obs)
 @ brief Add a ObserveType to a list
type(observetype) function, pointer, public getobsfromlist (list, idx)
 @ brief Get an ObserveType from a list

Detailed Description

This module contains the derived types ObserveType and ObsDataType.

  • ObserveType – is designed to contain all information and functionality needed for one observation. ObserveType contains a pointer to an ObsDataType object.
  • ObsDataType – is for storing package ID, observation type, and a pointer to a subroutine that will be called to process the IDstring provided in Obs input. The ProcessIdPtr member of ObsDataType requires a pointer to an ObserveType object.

Function/Subroutine Documentation

◆ addobsindex()

subroutine observemodule::addobsindex ( class(observetype), intent(inout) this,
integer(i4b), intent(in) indx )
private

Subroutine to add the observation index to the observation index array (indxbnds). The observation index count (indxbnds_count) is also incremented by one and the observation index array is expanded, if necessary.

Parameters
[in]indxobservation index

Definition at line 192 of file Observe.f90.

193 ! -- dummy
194 class(ObserveType), intent(inout) :: this
195 integer(I4B), intent(in) :: indx !< observation index
196 !
197 ! -- Increment the index count
198 this%indxbnds_count = this%indxbnds_count + 1
199 !
200 ! -- Expand the observation index array, if necessary
201 call expandarraywrapper(this%indxbnds_count, this%indxbnds, loginc=.true.)
202 !
203 ! -- add index to observation index
204 this%indxbnds(this%indxbnds_count) = indx

◆ addobstolist()

subroutine, public observemodule::addobstolist ( type(listtype), intent(inout) list,
type(observetype), intent(inout), pointer obs )

Subroutine to add a ObserveType to a list.

Parameters
[in,out]listObserveType list
[in,out]obsObserveType

Definition at line 318 of file Observe.f90.

319 ! -- dummy
320 type(ListType), intent(inout) :: list !< ObserveType list
321 type(ObserveType), pointer, intent(inout) :: obs !< ObserveType
322 ! -- local
323 class(*), pointer :: obj
324 !
325 obj => obs
326 call list%Add(obj)
Here is the caller graph for this function:

◆ castasobservetype()

type(observetype) function, pointer observemodule::castasobservetype ( class(*), intent(inout), pointer obj)
private

Function to cast an object as a ObserveType object.

Parameters
[in,out]objobject
Returns
returned ObserveType object

Definition at line 298 of file Observe.f90.

299 ! -- dummy
300 class(*), pointer, intent(inout) :: obj !< object
301 ! -- return
302 type(ObserveType), pointer :: res !< returned ObserveType object
303 !
304 res => null()
305 if (.not. associated(obj)) return
306 !
307 select type (obj)
308 type is (observetype)
309 res => obj
310 end select
Here is the caller graph for this function:

◆ constructobservation()

subroutine, public observemodule::constructobservation ( type(observetype), pointer newobservation,
character(len=*), intent(in) defline,
integer(i4b), intent(in) numunit,
logical, intent(in) formatted,
integer(i4b), intent(in) indx,
type(obsdatatype), dimension(:), intent(in), pointer obsdata,
integer(i4b), intent(in) inunit )

Subroutine to construct and return an ObserveType object based on the contents of defLine.

Parameters
newobservationnew ObserveType
[in]deflinestring with observation data
[in]numunitOutput unit number
[in]formattedlogical indicating if formatted output will be written
[in]indxIndex in ObsOutput array
[in]obsdataobsData type
[in]inunitobservation input file unit

Definition at line 228 of file Observe.f90.

230 ! -- dummy variables
231 type(ObserveType), pointer :: newObservation !< new ObserveType
232 character(len=*), intent(in) :: defLine !< string with observation data
233 integer(I4B), intent(in) :: numunit !< Output unit number
234 logical, intent(in) :: formatted !< logical indicating if formatted output will be written
235 integer(I4B), intent(in) :: indx !< Index in ObsOutput array
236 type(ObsDataType), dimension(:), pointer, intent(in) :: obsData !< obsData type
237 integer(I4B), intent(in) :: inunit !< observation input file unit
238 ! -- local
239 real(DP) :: r
240 integer(I4B) :: i
241 integer(I4B) :: icol
242 integer(I4B) :: iout
243 integer(I4B) :: istart
244 integer(I4B) :: istop
245 integer(I4B) :: n
246 !
247 ! -- initialize
248 iout = 0
249 icol = 1
250 !
251 ! -- Allocate an ObserveType object.
252 allocate (newobservation)
253 allocate (newobservation%indxbnds(0))
254 !
255 ! -- Set indxbnds_count to 0
256 newobservation%indxbnds_count = 0
257 !
258 ! -- Define the contents of the ObservationSingleType object based on the
259 ! contents of defLine.
260 !
261 ! -- Get observation name and store it
262 call urword(defline, icol, istart, istop, 1, n, r, iout, inunit)
263 newobservation%Name = defline(istart:istop)
264 !
265 ! -- Get observation type, convert it to uppercase, and store it.
266 call urword(defline, icol, istart, istop, 1, n, r, iout, inunit)
267 newobservation%ObsTypeId = defline(istart:istop)
268 !
269 ! -- Look up package ID for this observation type and store it
270 do i = 1, maxobstypes
271 if (obsdata(i)%ObsTypeID == newobservation%ObsTypeId) then
272 newobservation%obsDatum => obsdata(i)
273 exit
274 elseif (obsdata(i)%ObsTypeID == '') then
275 exit
276 end if
277 end do
278 !
279 ! -- Remaining text is ID [and ID2]; store the remainder of the string
280 istart = istop + 1
281 istop = len_trim(defline)
282 if (istart > istop) then
283 istart = istop
284 end if
285 newobservation%IDstring = defline(istart:istop)
286 !
287 ! Store UnitNumber, FormattedOutput, and IndxObsOutput
288 newobservation%UnitNumber = numunit
289 newobservation%FormattedOutput = formatted
290 newobservation%IndxObsOutput = indx
Here is the call graph for this function:
Here is the caller graph for this function:

◆ da()

subroutine observemodule::da ( class(observetype), intent(inout) this)
private

Subroutine to deallocated a observation (ObserveType).

Definition at line 212 of file Observe.f90.

213 ! -- dummy
214 class(ObserveType), intent(inout) :: this
215 if (allocated(this%indxbnds)) then
216 deallocate (this%indxbnds)
217 end if

◆ getobsfromlist()

type(observetype) function, pointer, public observemodule::getobsfromlist ( type(listtype), intent(inout) list,
integer(i4b), intent(in) idx )

Function to get an ObserveType from a list.

Parameters
[in,out]listObserveType list
[in]idxObserveType list index
Returns
returned ObserveType

Definition at line 334 of file Observe.f90.

335 ! -- dummy
336 type(ListType), intent(inout) :: list !< ObserveType list
337 integer(I4B), intent(in) :: idx !< ObserveType list index
338 ! -- return
339 type(ObserveType), pointer :: res !< returned ObserveType
340 ! -- local
341 class(*), pointer :: obj
342 !
343 obj => list%GetItem(idx)
344 res => castasobservetype(obj)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ resetcurrentvalue()

subroutine observemodule::resetcurrentvalue ( class(observetype), intent(inout) this)
private

Subroutine to reset the current observation value.

Definition at line 117 of file Observe.f90.

118 ! -- dummy
119 class(ObserveType), intent(inout) :: this
120 !
121 ! -- Reset current value to zero.
122 this%CurrentTimeStepEndValue = dzero

◆ resetobsindex()

subroutine observemodule::resetobsindex ( class(observetype), intent(inout) this)
private

Subroutine to reset the observation index count and array.

Definition at line 168 of file Observe.f90.

169 ! -- dummy
170 class(ObserveType), intent(inout) :: this
171 !
172 ! -- Reset the index count
173 this%indxbnds_count = 0
174 !
175 ! -- Deallocate observation index array, if necessary
176 if (allocated(this%indxbnds)) then
177 deallocate (this%indxbnds)
178 end if
179 !
180 ! -- Allocate observation index array to size 0
181 allocate (this%indxbnds(0))

◆ writeto()

subroutine observemodule::writeto ( class(observetype), intent(inout) this,
type(tabletype), intent(inout) obstab,
character(len=*), intent(in) btagfound,
character(len=*), intent(in) fnamein )
private

Subroutine to write observation input data to a table in the model list file.

Parameters
[in,out]obstabobservation table
[in]btagfoundlogical indicating if boundname was found
[in]fnameinobservation input file name

Definition at line 131 of file Observe.f90.

132 ! -- dummy
133 class(ObserveType), intent(inout) :: this
134 type(TableType), intent(inout) :: obstab !< observation table
135 character(len=*), intent(in) :: btagfound !< logical indicating if boundname was found
136 character(len=*), intent(in) :: fnamein !< observation input file name
137 ! -- local
138 character(len=12) :: tag
139 character(len=80) :: fnameout
140 !
141 ! -- write btagfound to tag
142 if (len_trim(btagfound) > 12) then
143 tag = btagfound(1:12)
144 else
145 write (tag, '(a12)') btagfound
146 end if
147 !
148 ! -- write fnamein to fnameout
149 if (len_trim(fnamein) > 80) then
150 fnameout = fnamein(1:80)
151 else
152 write (fnameout, '(a80)') fnamein
153 end if
154 !
155 ! -- write data to observation table
156 call obstab%add_term(this%Name)
157 call obstab%add_term(tag//trim(this%ObsTypeId))
158 call obstab%add_term('ALL TIMES')
159 call obstab%add_term('"'//trim(this%IDstring)//'"')
160 call obstab%add_term(fnameout)