MODFLOW 6  version 6.7.0.dev0
USGS Modular Hydrologic Model
gwfgwtexchangemodule Module Reference

Data Types

type  gwfgwtexchangetype
 

Functions/Subroutines

subroutine, public gwfgwt_cr (filename, id, m1_id, m2_id)
 Create a new GWF to GWT exchange object. More...
 
subroutine set_model_pointers (this)
 Allocate and read. More...
 
subroutine exg_df (this)
 Define the GwfGwt Exchange object. More...
 
subroutine exg_ar (this)
 Allocate and read. More...
 
subroutine gwfconn2gwtconn (this, gwfModel, gwtModel)
 Link GWT connections to GWF connections or exchanges. More...
 
subroutine link_connections (this, gwtConn, gwfConn)
 Links a GWT connection to its GWF counterpart. More...
 
subroutine exg_da (this)
 Deallocate memory. More...
 
subroutine allocate_scalars (this)
 Allocate package scalars. More...
 
subroutine gwfbnd2gwtfmi (this)
 Call routines in FMI that will set pointers to the necessary flow data. More...
 

Function/Subroutine Documentation

◆ allocate_scalars()

subroutine gwfgwtexchangemodule::allocate_scalars ( class(gwfgwtexchangetype this)

Definition at line 512 of file exg-gwfgwt.f90.

513  ! -- modules
515  ! -- dummy
516  class(GwfGwtExchangeType) :: this
517  !
518  call mem_allocate(this%m1_idx, 'M1ID', this%memoryPath)
519  call mem_allocate(this%m2_idx, 'M2ID', this%memoryPath)
520  this%m1_idx = 0
521  this%m2_idx = 0

◆ exg_ar()

subroutine gwfgwtexchangemodule::exg_ar ( class(gwfgwtexchangetype this)

Definition at line 184 of file exg-gwfgwt.f90.

185  ! -- modules
187  use dismodule, only: distype
188  use disvmodule, only: disvtype
189  use disumodule, only: disutype
190  ! -- dummy
191  class(GwfGwtExchangeType) :: this
192  ! -- local
193  class(BaseModelType), pointer :: mb => null()
194  type(GwfModelType), pointer :: gwfmodel => null()
195  type(GwtModelType), pointer :: gwtmodel => null()
196  ! -- formats
197  character(len=*), parameter :: fmtdiserr = &
198  "('GWF and GWT Models do not have the same discretization for exchange&
199  & ',a,'.&
200  & GWF Model has ', i0, ' user nodes and ', i0, ' reduced nodes.&
201  & GWT Model has ', i0, ' user nodes and ', i0, ' reduced nodes.&
202  & Ensure discretization packages, including IDOMAIN, are identical.')"
203  character(len=*), parameter :: fmtidomerr = &
204  "('GWF and GWT Models do not have the same discretization for exchange&
205  & ',a,'.&
206  & GWF Model and GWT Model have different IDOMAIN arrays.&
207  & Ensure discretization packages, including IDOMAIN, are identical.')"
208  !
209  ! -- set gwfmodel
210  mb => getbasemodelfromlist(basemodellist, this%m1_idx)
211  select type (mb)
212  type is (gwfmodeltype)
213  gwfmodel => mb
214  end select
215  !
216  ! -- set gwtmodel
217  mb => getbasemodelfromlist(basemodellist, this%m2_idx)
218  select type (mb)
219  type is (gwtmodeltype)
220  gwtmodel => mb
221  end select
222  !
223  ! -- Check to make sure sizes are identical
224  if (gwtmodel%dis%nodes /= gwfmodel%dis%nodes .or. &
225  gwtmodel%dis%nodesuser /= gwfmodel%dis%nodesuser) then
226  write (errmsg, fmtdiserr) trim(this%name), &
227  gwfmodel%dis%nodesuser, &
228  gwfmodel%dis%nodes, &
229  gwtmodel%dis%nodesuser, &
230  gwtmodel%dis%nodes
231  call store_error(errmsg, terminate=.true.)
232  end if
233  !
234  ! -- Make sure idomains are identical
235  select type (gwfdis => gwfmodel%dis)
236  type is (distype)
237  select type (gwtdis => gwtmodel%dis)
238  type is (distype)
239  if (.not. all(gwfdis%idomain == gwtdis%idomain)) then
240  write (errmsg, fmtidomerr) trim(this%name)
241  call store_error(errmsg, terminate=.true.)
242  end if
243  end select
244  type is (disvtype)
245  select type (gwtdis => gwtmodel%dis)
246  type is (disvtype)
247  if (.not. all(gwfdis%idomain == gwtdis%idomain)) then
248  write (errmsg, fmtidomerr) trim(this%name)
249  call store_error(errmsg, terminate=.true.)
250  end if
251  end select
252  type is (disutype)
253  select type (gwtdis => gwtmodel%dis)
254  type is (disutype)
255  if (.not. all(gwfdis%idomain == gwtdis%idomain)) then
256  write (errmsg, fmtidomerr) trim(this%name)
257  call store_error(errmsg, terminate=.true.)
258  end if
259  end select
260  end select
261  !
262  ! -- setup pointers to gwf variables allocated in gwf_ar
263  gwtmodel%fmi%gwfhead => gwfmodel%x
264  call mem_checkin(gwtmodel%fmi%gwfhead, &
265  'GWFHEAD', gwtmodel%fmi%memoryPath, &
266  'X', gwfmodel%memoryPath)
267  gwtmodel%fmi%gwfsat => gwfmodel%npf%sat
268  call mem_checkin(gwtmodel%fmi%gwfsat, &
269  'GWFSAT', gwtmodel%fmi%memoryPath, &
270  'SAT', gwfmodel%npf%memoryPath)
271  gwtmodel%fmi%gwfspdis => gwfmodel%npf%spdis
272  call mem_checkin(gwtmodel%fmi%gwfspdis, &
273  'GWFSPDIS', gwtmodel%fmi%memoryPath, &
274  'SPDIS', gwfmodel%npf%memoryPath)
275  !
276  ! -- setup pointers to the flow storage rates. GWF strg arrays are
277  ! available after the gwf_ar routine is called.
278  if (gwtmodel%inmst > 0) then
279  if (gwfmodel%insto > 0) then
280  gwtmodel%fmi%gwfstrgss => gwfmodel%sto%strgss
281  gwtmodel%fmi%igwfstrgss = 1
282  if (gwfmodel%sto%iusesy == 1) then
283  gwtmodel%fmi%gwfstrgsy => gwfmodel%sto%strgsy
284  gwtmodel%fmi%igwfstrgsy = 1
285  end if
286  end if
287  end if
288  !
289  ! -- Set a pointer to conc in buy
290  if (gwfmodel%inbuy > 0) then
291  call gwfmodel%buy%set_concentration_pointer(gwtmodel%name, gwtmodel%x, &
292  gwtmodel%ibound)
293  end if
294  !
295  ! -- Set a pointer to conc (which could be a temperature) in vsc
296  if (gwfmodel%invsc > 0) then
297  call gwfmodel%vsc%set_concentration_pointer(gwtmodel%name, gwtmodel%x, &
298  gwtmodel%ibound)
299  end if
300  !
301  ! -- transfer the boundary package information from gwf to gwt
302  call this%gwfbnd2gwtfmi()
303  !
304  ! -- if mover package is active, then set a pointer to it's budget object
305  if (gwfmodel%inmvr /= 0) then
306  gwtmodel%fmi%mvrbudobj => gwfmodel%mvr%budobj
307  end if
308  !
309  ! -- connect Connections
310  call this%gwfconn2gwtconn(gwfmodel, gwtmodel)
Definition: Dis.f90:1
Structured grid discretization.
Definition: Dis.f90:23
Unstructured grid discretization.
Definition: Disu.f90:28
Vertex grid discretization.
Definition: Disv.f90:24
Here is the call graph for this function:

◆ exg_da()

subroutine gwfgwtexchangemodule::exg_da ( class(gwfgwtexchangetype this)

Definition at line 500 of file exg-gwfgwt.f90.

501  ! -- modules
503  ! -- dummy
504  class(GwfGwtExchangeType) :: this
505  !
506  call mem_deallocate(this%m1_idx)
507  call mem_deallocate(this%m2_idx)

◆ exg_df()

subroutine gwfgwtexchangemodule::exg_df ( class(gwfgwtexchangetype this)

Definition at line 134 of file exg-gwfgwt.f90.

135  ! -- modules
137  ! -- dummy
138  class(GwfGwtExchangeType) :: this
139  ! -- local
140  class(BaseModelType), pointer :: mb => null()
141  type(GwfModelType), pointer :: gwfmodel => null()
142  type(GwtModelType), pointer :: gwtmodel => null()
143  !
144  ! -- set gwfmodel
145  mb => getbasemodelfromlist(basemodellist, this%m1_idx)
146  select type (mb)
147  type is (gwfmodeltype)
148  gwfmodel => mb
149  end select
150  !
151  ! -- set gwtmodel
152  mb => getbasemodelfromlist(basemodellist, this%m2_idx)
153  select type (mb)
154  type is (gwtmodeltype)
155  gwtmodel => mb
156  end select
157  !
158  ! -- Check to make sure that flow is solved before transport and in a
159  ! different IMS solution
160  if (gwfmodel%idsoln >= gwtmodel%idsoln) then
161  write (errmsg, '(3a)') 'Problem with GWF-GWT exchange ', trim(this%name), &
162  '. The GWF model must be solved by a different IMS than the GWT model. &
163  &Furthermore, the IMS specified for GWF must be listed in mfsim.nam &
164  &before the IMS for GWT.'
165  call store_error(errmsg, terminate=.true.)
166  end if
167  !
168  ! -- Set pointer to flowja
169  gwtmodel%fmi%gwfflowja => gwfmodel%flowja
170  call mem_checkin(gwtmodel%fmi%gwfflowja, &
171  'GWFFLOWJA', gwtmodel%fmi%memoryPath, &
172  'FLOWJA', gwfmodel%memoryPath)
173 
174  !
175  ! -- Set the npf flag so that specific discharge is available for
176  ! transport calculations if dispersion is active
177  if (gwtmodel%indsp > 0) then
178  gwfmodel%npf%icalcspdis = 1
179  end if
Here is the call graph for this function:

◆ gwfbnd2gwtfmi()

subroutine gwfgwtexchangemodule::gwfbnd2gwtfmi ( class(gwfgwtexchangetype this)

Definition at line 527 of file exg-gwfgwt.f90.

528  ! -- dummy
529  class(GwfGwtExchangeType) :: this
530  ! -- local
531  integer(I4B) :: ngwfpack, ip, iterm, imover
532  class(BaseModelType), pointer :: mb => null()
533  type(GwfModelType), pointer :: gwfmodel => null()
534  type(GwtModelType), pointer :: gwtmodel => null()
535  class(BndType), pointer :: packobj => null()
536  !
537  ! -- set gwfmodel
538  mb => getbasemodelfromlist(basemodellist, this%m1_idx)
539  select type (mb)
540  type is (gwfmodeltype)
541  gwfmodel => mb
542  end select
543  !
544  ! -- set gwtmodel
545  mb => getbasemodelfromlist(basemodellist, this%m2_idx)
546  select type (mb)
547  type is (gwtmodeltype)
548  gwtmodel => mb
549  end select
550  !
551  ! -- Call routines in FMI that will set pointers to the necessary flow
552  ! data (SIMVALS and SIMTOMVR) stored within each GWF flow package
553  ngwfpack = gwfmodel%bndlist%Count()
554  iterm = 1
555  do ip = 1, ngwfpack
556  packobj => getbndfromlist(gwfmodel%bndlist, ip)
557  call gwtmodel%fmi%gwfpackages(iterm)%set_pointers( &
558  'SIMVALS', &
559  packobj%memoryPath, packobj%input_mempath)
560  iterm = iterm + 1
561  !
562  ! -- If a mover is active for this package, then establish a separate
563  ! pointer link for the mover flows stored in SIMTOMVR
564  imover = packobj%imover
565  if (packobj%isadvpak /= 0) imover = 0
566  if (imover /= 0) then
567  call gwtmodel%fmi%gwfpackages(iterm)%set_pointers( &
568  'SIMTOMVR', &
569  packobj%memoryPath, packobj%input_mempath)
570  iterm = iterm + 1
571  end if
572  end do
Here is the call graph for this function:

◆ gwfconn2gwtconn()

subroutine gwfgwtexchangemodule::gwfconn2gwtconn ( class(gwfgwtexchangetype this,
type(gwfmodeltype), pointer  gwfModel,
type(gwtmodeltype), pointer  gwtModel 
)
Parameters
thisthis exchange
gwfmodelthe flow model
gwtmodelthe transport model

Definition at line 315 of file exg-gwfgwt.f90.

316  ! -- modules
318  use simvariablesmodule, only: iout
320  ! -- dummy
321  class(GwfGwtExchangeType) :: this !< this exchange
322  type(GwfModelType), pointer :: gwfModel !< the flow model
323  type(GwtModelType), pointer :: gwtModel !< the transport model
324  ! -- local
325  class(SpatialModelConnectionType), pointer :: conn => null()
326  class(*), pointer :: objPtr => null()
327  class(GwtGwtConnectionType), pointer :: gwtConn => null()
328  class(GwfGwfConnectionType), pointer :: gwfConn => null()
329  class(GwfExchangeType), pointer :: gwfExg => null()
330  class(GwtExchangeType), pointer :: gwtExg => null()
331  integer(I4B) :: ic1, ic2, iex
332  integer(I4B) :: gwfConnIdx, gwfExIdx
333  logical(LGP) :: areEqual
334  !
335  ! loop over all connections
336  gwtloop: do ic1 = 1, baseconnectionlist%Count()
337  !
338  conn => get_smc_from_list(baseconnectionlist, ic1)
339  if (.not. associated(conn%owner, gwtmodel)) cycle gwtloop
340  !
341  ! start with a GWT conn.
342  objptr => conn
343  gwtconn => castasgwtgwtconnection(objptr)
344  gwtexg => gwtconn%gwtExchange
345  gwfconnidx = -1
346  gwfexidx = -1
347  !
348  ! find matching GWF conn. in same list
349  gwfloop: do ic2 = 1, baseconnectionlist%Count()
350  conn => get_smc_from_list(baseconnectionlist, ic2)
351  !
352  if (associated(conn%owner, gwfmodel)) then
353  !
354  objptr => conn
355  gwfconn => castasgwfgwfconnection(objptr)
356  gwfexg => gwfconn%gwfExchange
357  !
358  ! A model can have multiple exchanges, even connecting the same two
359  ! models. We have a match if
360  ! 1. gwtgwt%model1 is connected to gwfgwf%model1
361  ! 2. gwtgwt%model2 is connected to gwfgwf%model2
362  ! 3. the list of connected nodes (nodem1, nodem2) is equivalent, such
363  ! that it contains the same nodes, appearing in the same order in the
364  ! exchange data block
365  !
366  if (gwfexg%v_model1%name /= gwtexg%gwfmodelname1) cycle
367  if (gwfexg%v_model2%name /= gwtexg%gwfmodelname2) cycle
368  !
369  areequal = (gwfexg%nexg == gwtexg%nexg)
370  if (areequal) then
371  areequal = all(gwfexg%nodem1 == gwtexg%nodem1)
372  areequal = areequal .and. all(gwfexg%nodem2 == gwtexg%nodem2)
373  end if
374  if (areequal) then
375  ! same DIS, same exchange: link and go to next GWT conn.
376  write (iout, '(/6a)') 'Linking exchange ', &
377  trim(gwtexg%name), ' to ', trim(gwfexg%name), &
378  ' (using interface model) for GWT model ', &
379  trim(gwtmodel%name)
380  gwfconnidx = ic2
381  call this%link_connections(gwtconn, gwfconn)
382  exit gwfloop
383  end if
384  end if
385  end do gwfloop
386  !
387  ! fallback option: coupling to old gwfgwf exchange,
388  ! the conditions are equal to what is used above
389  ! (this will go obsolete at some point)
390  if (gwfconnidx == -1) then
391  gwfloopexg: do iex = 1, baseexchangelist%Count()
392  gwfexg => getgwfexchangefromlist(baseexchangelist, iex)
393  !
394  if (.not. associated(gwfexg)) cycle gwfloopexg
395  !
396  if (associated(gwfexg%model1, gwfmodel) .or. &
397  associated(gwfexg%model2, gwfmodel)) then
398  !
399  if (gwfexg%v_model1%name /= gwtexg%gwfmodelname1) cycle
400  if (gwfexg%v_model2%name /= gwtexg%gwfmodelname2) cycle
401  !
402  areequal = (gwfexg%nexg == gwtexg%nexg)
403  !
404  if (areequal) then
405  areequal = all(gwfexg%nodem1 == gwtexg%nodem1)
406  areequal = areequal .and. all(gwfexg%nodem2 == gwtexg%nodem2)
407  end if
408  if (areequal) then
409  ! link exchange to connection
410  write (iout, '(/6a)') 'Linking exchange ', &
411  trim(gwtexg%name), ' to ', trim(gwfexg%name), ' for GWT model ', &
412  trim(gwtmodel%name)
413  gwfexidx = iex
414  if (gwtconn%owns_exchange) then
415  gwtexg%gwfsimvals => gwfexg%simvals
416  call mem_checkin(gwtexg%gwfsimvals, &
417  'GWFSIMVALS', gwtexg%memoryPath, &
418  'SIMVALS', gwfexg%memoryPath)
419  end if
420  !
421  !cdl link up mvt to mvr
422  if (gwfexg%inmvr > 0) then
423  if (gwtconn%owns_exchange) then
424  !cdl todo: check and make sure gwtEx has mvt active
425  call gwtexg%mvt%set_pointer_mvrbudobj(gwfexg%mvr%budobj)
426  end if
427  end if
428  !
429  if (associated(gwfexg%model2, gwfmodel)) gwtconn%exgflowSign = -1
430  gwtconn%gwtInterfaceModel%fmi%flows_from_file = .false.
431  !
432  exit gwfloopexg
433  end if
434  end if
435  !
436  end do gwfloopexg
437  end if
438  !
439  if (gwfconnidx == -1 .and. gwfexidx == -1) then
440  ! none found, report
441  write (errmsg, *) 'Cannot find GWF-GWF exchange when connecting'// &
442  ' GWT model ', trim(gwtmodel%name), ' with exchange ', &
443  trim(gwtexg%name), ' to GWF model ', trim(gwfmodel%name), &
444  '. Note: GWF-GWF and GWT-GWT need identical exchange data '// &
445  '(both in value and order) for the match to succeed.'
446  call store_error(errmsg)
447  end if
448  !
449  end do gwtloop
450  !
451  ! -- report errors
452  if (count_errors() > 0) then
453  call store_error_filename(this%filename)
454  end if
This module contains simulation methods.
Definition: Sim.f90:10
subroutine, public store_error(msg, terminate)
Store an error message.
Definition: Sim.f90:92
integer(i4b) function, public count_errors()
Return number of errors.
Definition: Sim.f90:59
subroutine, public store_error_filename(filename, terminate)
Store the erroring file name.
Definition: Sim.f90:203
This module contains simulation variables.
Definition: SimVariables.f90:9
integer(i4b) iout
file unit number for simulation output
Here is the call graph for this function:

◆ gwfgwt_cr()

subroutine, public gwfgwtexchangemodule::gwfgwt_cr ( character(len=*), intent(in)  filename,
integer(i4b), intent(in)  id,
integer(i4b), intent(in)  m1_id,
integer(i4b), intent(in)  m2_id 
)

Definition at line 48 of file exg-gwfgwt.f90.

49  ! -- modules
51  ! -- dummy
52  character(len=*), intent(in) :: filename
53  integer(I4B), intent(in) :: id
54  integer(I4B), intent(in) :: m1_id
55  integer(I4B), intent(in) :: m2_id
56  ! -- local
57  class(BaseExchangeType), pointer :: baseexchange => null()
58  type(GwfGwtExchangeType), pointer :: exchange => null()
59  character(len=20) :: cint
60  !
61  ! -- Create a new exchange and add it to the baseexchangelist container
62  allocate (exchange)
63  baseexchange => exchange
64  call addbaseexchangetolist(baseexchangelist, baseexchange)
65  !
66  ! -- Assign id and name
67  exchange%id = id
68  write (cint, '(i0)') id
69  exchange%name = 'GWF-GWT_'//trim(adjustl(cint))
70  exchange%memoryPath = exchange%name
71  exchange%filename = filename
72  !
73  ! -- allocate scalars
74  call exchange%allocate_scalars()
75  !
76  ! -- NB: convert from id to local model index in base model list
77  exchange%m1_idx = model_loc_idx(m1_id)
78  exchange%m2_idx = model_loc_idx(m2_id)
79  !
80  ! -- set model pointers
81  call exchange%set_model_pointers()
integer(i4b), dimension(:), allocatable model_loc_idx
equals the local index into the basemodel list (-1 when not available)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ link_connections()

subroutine gwfgwtexchangemodule::link_connections ( class(gwfgwtexchangetype this,
class(gwtgwtconnectiontype), pointer  gwtConn,
class(gwfgwfconnectiontype), pointer  gwfConn 
)
Parameters
thisthis exchange
gwtconnGWT connection
gwfconnGWF connection

Definition at line 459 of file exg-gwfgwt.f90.

460  ! -- modules
462  ! -- dummy
463  class(GwfGwtExchangeType) :: this !< this exchange
464  class(GwtGwtConnectionType), pointer :: gwtConn !< GWT connection
465  class(GwfGwfConnectionType), pointer :: gwfConn !< GWF connection
466  !
467  !gwtConn%exgflowja => gwfConn%exgflowja
468  if (gwtconn%owns_exchange) then
469  gwtconn%gwtExchange%gwfsimvals => gwfconn%gwfExchange%simvals
470  call mem_checkin(gwtconn%gwtExchange%gwfsimvals, &
471  'GWFSIMVALS', gwtconn%gwtExchange%memoryPath, &
472  'SIMVALS', gwfconn%gwfExchange%memoryPath)
473  end if
474  !
475  !cdl link up mvt to mvr
476  if (gwfconn%gwfExchange%inmvr > 0) then
477  if (gwtconn%owns_exchange) then
478  !cdl todo: check and make sure gwtEx has mvt active
479  call gwtconn%gwtExchange%mvt%set_pointer_mvrbudobj( &
480  gwfconn%gwfExchange%mvr%budobj)
481  end if
482  end if
483  !
484  if (associated(gwfconn%gwfExchange%model2, gwfconn%owner)) then
485  gwtconn%exgflowSign = -1
486  end if
487  !
488  ! fmi flows are not read from file
489  gwtconn%gwtInterfaceModel%fmi%flows_from_file = .false.
490  !
491  ! set concentration pointer for buoyancy
492  ! call gwfConn%gwfInterfaceModel%buy%set_concentration_pointer( &
493  ! gwtConn%gwtModel%name, &
494  ! gwtConn%conc, &
495  ! gwtConn%icbound)

◆ set_model_pointers()

subroutine gwfgwtexchangemodule::set_model_pointers ( class(gwfgwtexchangetype this)

Definition at line 86 of file exg-gwfgwt.f90.

87  ! -- dummy
88  class(GwfGwtExchangeType) :: this
89  ! -- local
90  class(BaseModelType), pointer :: mb => null()
91  type(GwfModelType), pointer :: gwfmodel => null()
92  type(GwtModelType), pointer :: gwtmodel => null()
93  !
94  ! -- set gwfmodel
95  gwfmodel => null()
96  mb => getbasemodelfromlist(basemodellist, this%m1_idx)
97  select type (mb)
98  type is (gwfmodeltype)
99  gwfmodel => mb
100  end select
101  !
102  ! -- set gwtmodel
103  gwtmodel => null()
104  mb => getbasemodelfromlist(basemodellist, this%m2_idx)
105  select type (mb)
106  type is (gwtmodeltype)
107  gwtmodel => mb
108  end select
109  !
110  ! -- Verify that gwf model is of the correct type
111  if (.not. associated(gwfmodel)) then
112  write (errmsg, '(3a)') 'Problem with GWF-GWT exchange ', trim(this%name), &
113  '. Specified GWF Model does not appear to be of the correct type.'
114  call store_error(errmsg, terminate=.true.)
115  end if
116  !
117  ! -- Verify that gwt model is of the correct type
118  if (.not. associated(gwtmodel)) then
119  write (errmsg, '(3a)') 'Problem with GWF-GWT exchange ', trim(this%name), &
120  '. Specified GWT Model does not appear to be of the correct type.'
121  call store_error(errmsg, terminate=.true.)
122  end if
123  !
124  ! -- Tell transport model fmi flows are not read from file
125  gwtmodel%fmi%flows_from_file = .false.
126  !
127  ! -- Set a pointer to the GWF bndlist. This will allow the transport model
128  ! to look through the flow packages and establish a link to GWF flows
129  gwtmodel%fmi%gwfbndlist => gwfmodel%bndlist
Here is the call graph for this function: