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

Data Types

type  dis2dtype
 Structured grid discretization. More...
type  disfoundtype
 Simplifies tracking parameters sourced from the input context. More...

Functions/Subroutines

subroutine, public dis2d_cr (dis, name_model, input_mempath, inunit, iout)
 Create a new structured discretization object.
subroutine dis3d_df (this)
 Define the discretization.
subroutine dis3d_da (this)
 Deallocate variables.
subroutine source_options (this)
 Copy options from IDM into package.
subroutine log_options (this, found)
 Write user options to list file.
subroutine source_dimensions (this)
 Copy dimensions from IDM into package.
subroutine log_dimensions (this, found)
 Write dimensions to list file.
subroutine source_griddata (this)
 Copy grid data from IDM into package.
subroutine log_griddata (this, found)
 Write dimensions to list file.
subroutine grid_finalize (this)
 Finalize grid (check properties, allocate arrays, compute connections).
subroutine write_grb (this, icelltype)
 Write a binary grid file.
subroutine nodeu_to_string (this, nodeu, str)
 Convert a user nodenumber to a string (nodenumber) or (k,i,j).
subroutine nodeu_to_array (this, nodeu, arr)
 Convert a user nodenumber to an array (nodenumber) or (i,j).
integer(i4b) function get_nodenumber_idx1 (this, nodeu, icheck)
 Get reduced node number from user node number.
integer(i4b) function get_nodenumber_idx2 (this, k, j, icheck)
 Get reduced node number from layer, row and column indices.
subroutine allocate_scalars (this, name_model, input_mempath)
 Allocate and initialize scalar variables.
subroutine allocate_arrays (this)
 Allocate and initialize arrays.
integer(i4b) function nodeu_from_string (this, lloc, istart, istop, in, iout, line, flag_string, allow_zero)
 Convert a string to a user nodenumber.
integer(i4b) function nodeu_from_cellid (this, cellid, inunit, iout, flag_string, allow_zero)
 Convert a cellid string to a user nodenumber.
logical function supports_layers (this)
 Indicates whether the grid discretization supports layers.
integer(i4b) function get_ncpl (this)
 Return number of cells per layer (nrow * ncol).
subroutine connection_normal (this, noden, nodem, ihc, xcomp, ycomp, zcomp, ipos)
 Get normal vector components between the cell and a given neighbor.
subroutine connection_vector (this, noden, nodem, nozee, satn, satm, ihc, xcomp, ycomp, zcomp, conlen)
 Get unit vector components between the cell and a given neighbor.
subroutine get_dis_type (this, dis_type)
 Get the discretization type.
integer(i4b) function get_dis_enum (this)
 Get the discretization type enumeration.
subroutine get_polyverts (this, ic, polyverts, closed)
 Get a 2D array of polygon vertices, listed in.
integer(i4b) function get_npolyverts (this, ic, closed)
 Get the number of polygon vertices.
integer(i4b) function get_max_npolyverts (this, closed)
 Get the maximum number of polygon vertices.
subroutine read_int_array (this, line, lloc, istart, istop, iout, in, iarray, aname)
 Read an integer array.
subroutine read_dbl_array (this, line, lloc, istart, istop, iout, in, darray, aname)
 Read a double precision array.
subroutine read_layer_array (this, nodelist, darray, ncolbnd, maxbnd, icolbnd, aname, inunit, iout)
 Read a 2d double array into col icolbnd of darray.
subroutine record_array (this, darray, iout, iprint, idataun, aname, cdatafmp, nvaluesp, nwidthp, editdesc, dinact)
 Record a double precision array.
subroutine record_srcdst_list_header (this, text, textmodel, textpackage, dstmodel, dstpackage, naux, auxtxt, ibdchn, nlist, iout)
 Record list header for imeth=6.
subroutine nlarray_to_nodelist (this, darray, nodelist, maxbnd, nbound, aname)
 Convert an integer array (layer numbers) to nodelist.

Function/Subroutine Documentation

◆ allocate_arrays()

subroutine dis2dmodule::allocate_arrays ( class(dis2dtype) this)
private

Definition at line 762 of file Dis2d.f90.

763 ! -- dummy
764 class(Dis2dType) :: this
765 !
766 ! -- Allocate arrays in DisBaseType (mshape, top, bot, area)
767 call this%DisBaseType%allocate_arrays()
768 !
769 ! -- Allocate arrays for DisType
770 if (this%nodes < this%nodesuser) then
771 call mem_allocate(this%nodeuser, this%nodes, 'NODEUSER', this%memoryPath)
772 call mem_allocate(this%nodereduced, this%nodesuser, 'NODEREDUCED', &
773 this%memoryPath)
774 else
775 call mem_allocate(this%nodeuser, 1, 'NODEUSER', this%memoryPath)
776 call mem_allocate(this%nodereduced, 1, 'NODEREDUCED', this%memoryPath)
777 end if
778 !
779 ! -- Initialize
780 this%mshape(1) = this%nrow
781 this%mshape(2) = this%ncol
782 !

◆ allocate_scalars()

subroutine dis2dmodule::allocate_scalars ( class(dis2dtype) this,
character(len=*), intent(in) name_model,
character(len=*), intent(in) input_mempath )
private

Definition at line 740 of file Dis2d.f90.

741 ! -- dummy
742 class(Dis2dType) :: this
743 character(len=*), intent(in) :: name_model
744 character(len=*), intent(in) :: input_mempath
745 !
746 ! -- Allocate parent scalars
747 call this%DisBaseType%allocate_scalars(name_model, input_mempath)
748 !
749 ! -- Allocate
750 call mem_allocate(this%nrow, 'NROW', this%memoryPath)
751 call mem_allocate(this%ncol, 'NCOL', this%memoryPath)
752 !
753 ! -- Initialize
754 this%nrow = 0
755 this%ncol = 0
756 this%ndim = 2
757 !

◆ connection_normal()

subroutine dis2dmodule::connection_normal ( class(dis2dtype) this,
integer(i4b), intent(in) noden,
integer(i4b), intent(in) nodem,
integer(i4b), intent(in) ihc,
real(dp), intent(inout) xcomp,
real(dp), intent(inout) ycomp,
real(dp), intent(inout) zcomp,
integer(i4b), intent(in) ipos )
private

The normal points outward from the shared face between noden and nodem.

Parameters
[in]nodencell (reduced nn)
[in]nodemneighbor (reduced nn)
[in]ihchorizontal connection flag

Definition at line 975 of file Dis2d.f90.

977 ! -- dummy
978 class(Dis2dType) :: this
979 integer(I4B), intent(in) :: noden !< cell (reduced nn)
980 integer(I4B), intent(in) :: nodem !< neighbor (reduced nn)
981 integer(I4B), intent(in) :: ihc !< horizontal connection flag
982 real(DP), intent(inout) :: xcomp
983 real(DP), intent(inout) :: ycomp
984 real(DP), intent(inout) :: zcomp
985 integer(I4B), intent(in) :: ipos
986 ! -- local
987 integer(I4B) :: nodeu1, i1, j1, k1
988 integer(I4B) :: nodeu2, i2, j2, k2
989 !
990 ! -- Set vector components based on ihc
991 if (ihc == 0) then
992 xcomp = dzero
993 ycomp = dzero
994 if (nodem < noden) then
995 !
996 ! -- nodem must be above noden, so upward connection
997 zcomp = done
998 else
999 !
1000 ! -- nodem must be below noden, so downward connection
1001 zcomp = -done
1002 end if
1003 else
1004 xcomp = dzero
1005 ycomp = dzero
1006 zcomp = dzero
1007 nodeu1 = this%get_nodeuser(noden)
1008 nodeu2 = this%get_nodeuser(nodem)
1009 call get_ijk(nodeu1, this%nrow, this%ncol, 1, i1, j1, k1)
1010 call get_ijk(nodeu2, this%nrow, this%ncol, 1, i2, j2, k2)
1011 if (i2 < i1) then ! back
1012 ycomp = done
1013 elseif (j2 < j1) then ! left
1014 xcomp = -done
1015 elseif (j2 > j1) then ! right
1016 xcomp = done
1017 else ! front
1018 ycomp = -done
1019 end if
1020 !
1021 end if
1022 !
Here is the call graph for this function:

◆ connection_vector()

subroutine dis2dmodule::connection_vector ( class(dis2dtype) this,
integer(i4b), intent(in) noden,
integer(i4b), intent(in) nodem,
logical, intent(in) nozee,
real(dp), intent(in) satn,
real(dp), intent(in) satm,
integer(i4b), intent(in) ihc,
real(dp), intent(inout) xcomp,
real(dp), intent(inout) ycomp,
real(dp), intent(inout) zcomp,
real(dp), intent(inout) conlen )
private
Parameters
[in]nodencell (reduced nn)
[in]nodemneighbor (reduced nn)
[in]nozeenot used for dis2d
[in]satnnot used for dis2d
[in]satmnot used for dis2d
[in]ihcnot used for dis2d (always horizontal)
[in,out]xcompx component of the connection vector
[in,out]ycompy component of the connection vector
[in,out]zcompz component, which is always zero
[in,out]conlencalculated connection length

Definition at line 1028 of file Dis2d.f90.

1030 ! modules
1031 use disvgeom, only: line_unit_vector
1032 ! dummy
1033 class(Dis2dType) :: this
1034 integer(I4B), intent(in) :: noden !< cell (reduced nn)
1035 integer(I4B), intent(in) :: nodem !< neighbor (reduced nn)
1036 logical, intent(in) :: nozee !< not used for dis2d
1037 real(DP), intent(in) :: satn !< not used for dis2d
1038 real(DP), intent(in) :: satm !< not used for dis2d
1039 integer(I4B), intent(in) :: ihc !< not used for dis2d (always horizontal)
1040 real(DP), intent(inout) :: xcomp !< x component of the connection vector
1041 real(DP), intent(inout) :: ycomp !< y component of the connection vector
1042 real(DP), intent(inout) :: zcomp !< z component, which is always zero
1043 real(DP), intent(inout) :: conlen !< calculated connection length
1044 ! local
1045 real(DP) :: z1, z2
1046 real(DP) :: x1, y1, x2, y2
1047 real(DP) :: ds
1048 integer(I4B) :: i1, i2, j1, j2, k1, k2
1049 integer(I4B) :: nodeu1, nodeu2, ipos
1050
1051 ! Calculate vector components
1052 z1 = dzero
1053 z2 = dzero
1054 ipos = this%con%getjaindex(noden, nodem)
1055 ds = this%con%cl1(this%con%jas(ipos)) + this%con%cl2(this%con%jas(ipos))
1056 nodeu1 = this%get_nodeuser(noden)
1057 nodeu2 = this%get_nodeuser(nodem)
1058 call get_ijk(nodeu1, this%nrow, this%ncol, 1, i1, j1, k1)
1059 call get_ijk(nodeu2, this%nrow, this%ncol, 1, i2, j2, k2)
1060 x1 = dzero
1061 x2 = dzero
1062 y1 = dzero
1063 y2 = dzero
1064 if (i2 < i1) then ! back
1065 y2 = ds
1066 elseif (j2 < j1) then ! left
1067 x2 = -ds
1068 elseif (j2 > j1) then ! right
1069 x2 = ds
1070 else ! front
1071 y2 = -ds
1072 end if
1073 call line_unit_vector(x1, y1, z1, x2, y2, z2, xcomp, ycomp, zcomp, conlen)
subroutine, public line_unit_vector(x0, y0, z0, x1, y1, z1, xcomp, ycomp, zcomp, vmag)
Calculate the vector components (xcomp, ycomp, and zcomp) for a line defined by two points,...
Definition DisvGeom.f90:475
Here is the call graph for this function:

◆ dis2d_cr()

subroutine, public dis2dmodule::dis2d_cr ( class(disbasetype), pointer dis,
character(len=*), intent(in) name_model,
character(len=*), intent(in) input_mempath,
integer(i4b), intent(in) inunit,
integer(i4b), intent(in) iout )

Definition at line 93 of file Dis2d.f90.

94 ! -- dummy
95 class(DisBaseType), pointer :: dis
96 character(len=*), intent(in) :: name_model
97 character(len=*), intent(in) :: input_mempath
98 integer(I4B), intent(in) :: inunit
99 integer(I4B), intent(in) :: iout
100 ! -- locals
101 type(Dis2dType), pointer :: disnew
102 ! -- formats
103 character(len=*), parameter :: fmtheader = &
104 "(1X, /1X, 'DIS -- STRUCTURED GRID DISCRETIZATION PACKAGE,', &
105 &' VERSION 2 : 3/27/2014 - INPUT READ FROM MEMPATH: ', A, /)"
106 !
107 allocate (disnew)
108 dis => disnew
109 call disnew%allocate_scalars(name_model, input_mempath)
110 dis%inunit = inunit
111 dis%iout = iout
112 !
113 ! -- If dis enabled
114 if (inunit > 0) then
115 !
116 ! -- Identify package
117 if (iout > 0) then
118 write (iout, fmtheader) dis%input_mempath
119 end if
120 end if
121 !
Here is the caller graph for this function:

◆ dis3d_da()

subroutine dis2dmodule::dis3d_da ( class(dis2dtype) this)
private

Definition at line 150 of file Dis2d.f90.

151 ! -- dummy
152 class(Dis2dType) :: this
153 !
154 ! -- Deallocate idm memory
155 call memorystore_remove(this%name_model, 'DIS2D', idm_context)
156 !
157 ! -- DisBaseType deallocate
158 call this%DisBaseType%dis_da()
159 !
160 ! -- Deallocate scalars
161 call mem_deallocate(this%nrow)
162 call mem_deallocate(this%ncol)
163 call mem_deallocate(this%delr)
164 call mem_deallocate(this%delc)
165 call mem_deallocate(this%cellx)
166 call mem_deallocate(this%celly)
167 !
168 ! -- Deallocate Arrays
169 call mem_deallocate(this%nodereduced)
170 call mem_deallocate(this%nodeuser)
171 call mem_deallocate(this%bottom)
172 call mem_deallocate(this%idomain)
173 !
Here is the call graph for this function:

◆ dis3d_df()

subroutine dis2dmodule::dis3d_df ( class(dis2dtype) this)
private

Definition at line 126 of file Dis2d.f90.

127 ! -- dummy
128 class(Dis2dType) :: this
129 !
130 ! -- Transfer the data from the memory manager into this package object
131 if (this%inunit /= 0) then
132 !
133 ! -- source input options
134 call this%source_options()
135 !
136 ! -- source input dimensions
137 call this%source_dimensions()
138 !
139 ! -- source input griddata
140 call this%source_griddata()
141 end if
142 !
143 ! -- Final grid initialization
144 call this%grid_finalize()
145 !

◆ get_dis_enum()

integer(i4b) function dis2dmodule::get_dis_enum ( class(dis2dtype), intent(in) this)
private

Definition at line 1088 of file Dis2d.f90.

1089 use constantsmodule, only: dis2d
1090 class(Dis2dType), intent(in) :: this
1091 integer(I4B) :: dis_enum
1092 dis_enum = dis2d
This module contains simulation constants.
Definition Constants.f90:9
@ dis2d
DIS2D6 discretization.

◆ get_dis_type()

subroutine dis2dmodule::get_dis_type ( class(dis2dtype), intent(in) this,
character(len=*), intent(out) dis_type )
private

Definition at line 1078 of file Dis2d.f90.

1079 ! -- dummy
1080 class(Dis2dType), intent(in) :: this
1081 character(len=*), intent(out) :: dis_type
1082 !
1083 dis_type = "DIS2D"
1084 !

◆ get_max_npolyverts()

integer(i4b) function dis2dmodule::get_max_npolyverts ( class(dis2dtype), intent(inout) this,
logical(lgp), intent(in), optional closed )
private
Parameters
[in]closedwhether to close the polygon, duplicating a vertex

Definition at line 1157 of file Dis2d.f90.

1158 class(Dis2dType), intent(inout) :: this
1159 logical(LGP), intent(in), optional :: closed !< whether to close the polygon, duplicating a vertex
1160 integer(I4B) :: max_npolyverts
1161 max_npolyverts = 4
1162 if (present(closed)) then
1163 if (closed) max_npolyverts = 5
1164 end if

◆ get_ncpl()

integer(i4b) function dis2dmodule::get_ncpl ( class(dis2dtype) this)
private

Definition at line 965 of file Dis2d.f90.

966 integer(I4B) :: get_ncpl
967 class(Dis2dType) :: this
968 get_ncpl = this%nrow * this%ncol
Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_nodenumber_idx1()

integer(i4b) function dis2dmodule::get_nodenumber_idx1 ( class(dis2dtype), intent(in) this,
integer(i4b), intent(in) nodeu,
integer(i4b), intent(in) icheck )
private

Definition at line 666 of file Dis2d.f90.

667 ! -- return
668 integer(I4B) :: nodenumber
669 ! -- dummy
670 class(Dis2dType), intent(in) :: this
671 integer(I4B), intent(in) :: nodeu
672 integer(I4B), intent(in) :: icheck
673 !
674 ! -- check the node number if requested
675 if (icheck /= 0) then
676 !
677 ! -- If within valid range, convert to reduced nodenumber
678 if (nodeu < 1 .or. nodeu > this%nodesuser) then
679 write (errmsg, '(a,i0,a)') &
680 'Node number (', nodeu, &
681 ') less than 1 or greater than the number of nodes.'
682 call store_error(errmsg)
683 nodenumber = 0
684 else
685 nodenumber = nodeu
686 if (this%nodes < this%nodesuser) nodenumber = this%nodereduced(nodeu)
687 end if
688 else
689 nodenumber = nodeu
690 if (this%nodes < this%nodesuser) nodenumber = this%nodereduced(nodeu)
691 end if
692 !
Here is the call graph for this function:

◆ get_nodenumber_idx2()

integer(i4b) function dis2dmodule::get_nodenumber_idx2 ( class(dis2dtype), intent(in) this,
integer(i4b), intent(in) k,
integer(i4b), intent(in) j,
integer(i4b), intent(in) icheck )
private

Definition at line 697 of file Dis2d.f90.

698 ! -- return
699 integer(I4B) :: nodenumber
700 ! -- dummy
701 class(Dis2dType), intent(in) :: this
702 integer(I4B), intent(in) :: k, j
703 integer(I4B), intent(in) :: icheck
704 ! -- local
705 integer(I4B) :: nodeu, i
706 ! formats
707 character(len=*), parameter :: fmterr = &
708 "('Error in structured-grid cell indices: row = ',i0,&
709 &', column = ',i0)"
710 !
711 i = k
712 nodeu = get_node(1, i, j, 1, this%nrow, this%ncol)
713 if (nodeu < 1) then
714 write (errmsg, fmterr) i, j
715 call store_error(errmsg, terminate=.true.)
716 end if
717 nodenumber = nodeu
718 if (this%nodes < this%nodesuser) nodenumber = this%nodereduced(nodeu)
719 !
720 ! -- check the node number if requested
721 if (icheck /= 0) then
722 !
723 if (i < 1 .or. i > this%nrow) &
724 call store_error('Row less than one or greater than nrow')
725 if (j < 1 .or. j > this%ncol) &
726 call store_error('Column less than one or greater than ncol')
727 !
728 ! -- Error if outside of range
729 if (nodeu < 1 .or. nodeu > this%nodesuser) then
730 write (errmsg, '(a,i0,a)') &
731 'Node number (', nodeu, ')less than 1 or greater than nodes.'
732 call store_error(errmsg)
733 end if
734 end if
735 !
Here is the call graph for this function:

◆ get_npolyverts()

integer(i4b) function dis2dmodule::get_npolyverts ( class(dis2dtype), intent(inout) this,
integer(i4b), intent(in) ic,
logical(lgp), intent(in), optional closed )
private
Parameters
[in]closedwhether to close the polygon, duplicating a vertex

Definition at line 1145 of file Dis2d.f90.

1146 class(Dis2dType), intent(inout) :: this
1147 integer(I4B), intent(in) :: ic
1148 logical(LGP), intent(in), optional :: closed !< whether to close the polygon, duplicating a vertex
1149 integer(I4B) :: npolyverts
1150 npolyverts = 4
1151 if (present(closed)) then
1152 if (closed) npolyverts = 5
1153 end if

◆ get_polyverts()

subroutine dis2dmodule::get_polyverts ( class(dis2dtype), intent(inout) this,
integer(i4b), intent(in) ic,
real(dp), dimension(:, :), intent(out), allocatable polyverts,
logical(lgp), intent(in), optional closed )
private

clockwise order beginning with the lower left corner

Parameters
[in]iccell number (reduced)
[out]polyvertspolygon vertices (column-major indexing)
[in]closedwhether to close the polygon, duplicating a vertex

Definition at line 1099 of file Dis2d.f90.

1100 ! -- dummy
1101 class(Dis2dType), intent(inout) :: this
1102 integer(I4B), intent(in) :: ic !< cell number (reduced)
1103 real(DP), allocatable, intent(out) :: polyverts(:, :) !< polygon vertices (column-major indexing)
1104 logical(LGP), intent(in), optional :: closed !< whether to close the polygon, duplicating a vertex
1105 ! -- local
1106 integer(I4B) :: icu, nverts, irow, jcol, klay
1107 real(DP) :: cellx, celly, dxhalf, dyhalf
1108 logical(LGP) :: lclosed
1109 !
1110 nverts = 4
1111 !
1112 ! check closed option
1113 if (.not. (present(closed))) then
1114 lclosed = .false.
1115 else
1116 lclosed = closed
1117 end if
1118 !
1119 ! allocate vertices array
1120 if (lclosed) then
1121 allocate (polyverts(2, nverts + 1))
1122 else
1123 allocate (polyverts(2, nverts))
1124 end if
1125 !
1126 ! set vertices
1127 icu = this%get_nodeuser(ic)
1128 call get_ijk(icu, this%nrow, this%ncol, 1, irow, jcol, klay)
1129 cellx = this%cellx(jcol)
1130 celly = this%celly(irow)
1131 dxhalf = dhalf * this%delr(jcol)
1132 dyhalf = dhalf * this%delc(irow)
1133 polyverts(:, 1) = (/cellx - dxhalf, celly - dyhalf/) ! SW
1134 polyverts(:, 2) = (/cellx - dxhalf, celly + dyhalf/) ! NW
1135 polyverts(:, 3) = (/cellx + dxhalf, celly + dyhalf/) ! NE
1136 polyverts(:, 4) = (/cellx + dxhalf, celly - dyhalf/) ! SE
1137 !
1138 ! close if enabled
1139 if (lclosed) &
1140 polyverts(:, nverts + 1) = polyverts(:, 1)
1141 !
Here is the call graph for this function:

◆ grid_finalize()

subroutine dis2dmodule::grid_finalize ( class(dis2dtype) this)
private

Definition at line 360 of file Dis2d.f90.

361 ! -- modules
363 ! -- dummy
364 class(Dis2dType) :: this
365 ! -- locals
366 integer(I4B) :: i, j
367 integer(I4B) :: node
368 integer(I4B) :: noder
369 integer(I4B) :: nrsize
370 ! -- formats
371 character(len=*), parameter :: fmtdz = &
372 "('CELL (',i0,',',i0,',',i0,') THICKNESS <= 0. ', &
373 &'TOP, BOT: ',2(1pg24.15))"
374 character(len=*), parameter :: fmtnr = &
375 "(/1x, 'The specified IDOMAIN results in a reduced number of cells.',&
376 &/1x, 'Number of user nodes: ',I0,&
377 &/1X, 'Number of nodes in solution: ', I0, //)"
378 !
379 ! -- count active cells
380 this%nodes = 0
381 do i = 1, this%nrow
382 do j = 1, this%ncol
383 if (this%idomain(j, i) > 0) this%nodes = this%nodes + 1
384 end do
385 end do
386 !
387 ! -- Check to make sure nodes is a valid number
388 if (this%nodes == 0) then
389 call store_error('Model does not have any active nodes. &
390 &Ensure IDOMAIN array has some values greater &
391 &than zero.')
392 call store_error_filename(this%input_fname)
393 end if
394 !
395 ! -- Write message if reduced grid
396 if (this%nodes < this%nodesuser) then
397 write (this%iout, fmtnr) this%nodesuser, this%nodes
398 end if
399 !
400 ! -- Array size is now known, so allocate
401 call this%allocate_arrays()
402 !
403 ! -- Fill the nodereduced array with the reduced nodenumber, or
404 ! a negative number to indicate it is a pass-through cell, or
405 ! a zero to indicate that the cell is excluded from the
406 ! solution.
407 if (this%nodes < this%nodesuser) then
408 node = 1
409 noder = 1
410 do i = 1, this%nrow
411 do j = 1, this%ncol
412 if (this%idomain(j, i) > 0) then
413 this%nodereduced(node) = noder
414 noder = noder + 1
415 elseif (this%idomain(j, i) < 0) then
416 this%nodereduced(node) = -1
417 else
418 this%nodereduced(node) = 0
419 end if
420 node = node + 1
421 end do
422 end do
423 end if
424 !
425 ! -- allocate and fill nodeuser if a reduced grid
426 if (this%nodes < this%nodesuser) then
427 node = 1
428 noder = 1
429 do i = 1, this%nrow
430 do j = 1, this%ncol
431 if (this%idomain(j, i) > 0) then
432 this%nodeuser(noder) = node
433 noder = noder + 1
434 end if
435 node = node + 1
436 end do
437 end do
438 end if
439 !
440 ! -- fill x,y coordinate arrays
441 this%cellx(1) = dhalf * this%delr(1)
442 this%celly(this%nrow) = dhalf * this%delc(this%nrow)
443 do j = 2, this%ncol
444 this%cellx(j) = this%cellx(j - 1) + dhalf * this%delr(j - 1) + &
445 dhalf * this%delr(j)
446 end do
447 ! -- row number increases in negative y direction:
448 do i = this%nrow - 1, 1, -1
449 this%celly(i) = this%celly(i + 1) + dhalf * this%delc(i + 1) + &
450 dhalf * this%delc(i)
451 end do
452 !
453 ! -- Move bottom into bot, and calculate area
454 node = 0
455 do i = 1, this%nrow
456 do j = 1, this%ncol
457 node = node + 1
458 noder = node
459 if (this%nodes < this%nodesuser) noder = this%nodereduced(node)
460 if (noder <= 0) cycle
461 this%bot(noder) = this%bottom(j, i)
462 this%area(noder) = this%delr(j) * this%delc(i)
463 this%xc(noder) = this%cellx(j)
464 this%yc(noder) = this%celly(i)
465 end do
466 end do
467 !
468 ! -- create and fill the connections object
469 nrsize = 0
470 if (this%nodes < this%nodesuser) nrsize = this%nodes
471 allocate (this%con)
472 call this%con%disconnections(this%name_model, this%nodes, &
473 this%ncol, this%nrow, 1, &
474 nrsize, this%delr, this%delc, &
475 this%top, this%bot, this%nodereduced, &
476 this%nodeuser)
477 this%nja = this%con%nja
478 this%njas = this%con%njas
479 !
Here is the call graph for this function:

◆ log_dimensions()

subroutine dis2dmodule::log_dimensions ( class(dis2dtype) this,
type(disfoundtype), intent(in) found )
private

Definition at line 290 of file Dis2d.f90.

291 ! -- dummy
292 class(Dis2dType) :: this
293 type(DisFoundType), intent(in) :: found
294 !
295 write (this%iout, '(1x,a)') 'Setting Discretization Dimensions'
296 !
297 if (found%nrow) then
298 write (this%iout, '(4x,a,i0)') 'NROW = ', this%nrow
299 end if
300 !
301 if (found%ncol) then
302 write (this%iout, '(4x,a,i0)') 'NCOL = ', this%ncol
303 end if
304 !
305 write (this%iout, '(1x,a,/)') 'End Setting Discretization Dimensions'
306 !

◆ log_griddata()

subroutine dis2dmodule::log_griddata ( class(dis2dtype) this,
type(disfoundtype), intent(in) found )
private

Definition at line 331 of file Dis2d.f90.

332 ! -- dummy
333 class(Dis2dType) :: this
334 type(DisFoundType), intent(in) :: found
335 !
336 write (this%iout, '(1x,a)') 'Setting Discretization Griddata'
337 !
338 if (found%delr) then
339 write (this%iout, '(4x,a)') 'DELR set from input file'
340 end if
341 !
342 if (found%delc) then
343 write (this%iout, '(4x,a)') 'DELC set from input file'
344 end if
345 !
346 if (found%bottom) then
347 write (this%iout, '(4x,a)') 'BOTTOM set from input file'
348 end if
349 !
350 if (found%idomain) then
351 write (this%iout, '(4x,a)') 'IDOMAIN set from input file'
352 end if
353 !
354 write (this%iout, '(1x,a,/)') 'End Setting Discretization Griddata'
355 !

◆ log_options()

subroutine dis2dmodule::log_options ( class(dis2dtype) this,
type(disfoundtype), intent(in) found )
private

Definition at line 203 of file Dis2d.f90.

204 ! -- dummy
205 class(Dis2dType) :: this
206 type(DisFoundType), intent(in) :: found
207 !
208 write (this%iout, '(1x,a)') 'Setting Discretization Options'
209 !
210 if (found%length_units) then
211 write (this%iout, '(4x,a,i0)') 'Model length unit [0=UND, 1=FEET, &
212 &2=METERS, 3=CENTIMETERS] set as ', this%lenuni
213 end if
214 !
215 if (found%nogrb) then
216 write (this%iout, '(4x,a,i0)') 'Binary grid file [0=GRB, 1=NOGRB] &
217 &set as ', this%nogrb
218 end if
219 !
220 if (found%xorigin) then
221 write (this%iout, '(4x,a,G0)') 'XORIGIN = ', this%xorigin
222 end if
223 !
224 if (found%yorigin) then
225 write (this%iout, '(4x,a,G0)') 'YORIGIN = ', this%yorigin
226 end if
227 !
228 if (found%angrot) then
229 write (this%iout, '(4x,a,G0)') 'ANGROT = ', this%angrot
230 end if
231 !
232 write (this%iout, '(1x,a,/)') 'End Setting Discretization Options'
233 !

◆ nlarray_to_nodelist()

subroutine dis2dmodule::nlarray_to_nodelist ( class(dis2dtype) this,
integer(i4b), dimension(:), pointer, contiguous darray,
integer(i4b), dimension(maxbnd), intent(inout) nodelist,
integer(i4b), intent(in) maxbnd,
integer(i4b), intent(inout) nbound,
character(len=*), intent(in) aname )
private

Definition at line 1347 of file Dis2d.f90.

1348 ! -- dummy
1349 class(Dis2dType) :: this
1350 integer(I4B), intent(in) :: maxbnd
1351 integer(I4B), dimension(:), pointer, contiguous :: darray
1352 integer(I4B), dimension(maxbnd), intent(inout) :: nodelist
1353 integer(I4B), intent(inout) :: nbound
1354 character(len=*), intent(in) :: aname
1355 ! -- local
1356 integer(I4B) :: il, ir, ic, ncol, nrow, nlay, nval, nodeu, noder, ipos, ierr
1357 !
1358 ! -- set variables
1359 nlay = 1
1360 nrow = this%mshape(1)
1361 ncol = this%mshape(2)
1362 !
1363 if (this%ndim > 1) then
1364 !
1365 nval = ncol * nrow
1366 !
1367 ! -- Copy array into nodelist
1368 ipos = 1
1369 ierr = 0
1370 do ir = 1, nrow
1371 do ic = 1, ncol
1372 nodeu = get_node(1, ir, ic, nlay, nrow, ncol)
1373 il = darray(nodeu)
1374 if (il < 1 .or. il > nlay) then
1375 write (errmsg, '(a,1x,i0)') 'Invalid layer number:', il
1376 call store_error(errmsg, terminate=.true.)
1377 end if
1378 nodeu = get_node(il, ir, ic, nlay, nrow, ncol)
1379 noder = this%get_nodenumber(nodeu, 0)
1380 if (ipos > maxbnd) then
1381 ierr = ipos
1382 else
1383 nodelist(ipos) = noder
1384 end if
1385 ipos = ipos + 1
1386 end do
1387 end do
1388 !
1389 ! -- Check for errors
1390 nbound = ipos - 1
1391 if (ierr > 0) then
1392 write (errmsg, '(a,1x,i0)') &
1393 'MAXBOUND dimension is too small.'// &
1394 'INCREASE MAXBOUND TO:', ierr
1395 call store_error(errmsg, terminate=.true.)
1396 end if
1397 !
1398 ! -- If nbound < maxbnd, then initialize nodelist to zero in this range
1399 if (nbound < maxbnd) then
1400 do ipos = nbound + 1, maxbnd
1401 nodelist(ipos) = 0
1402 end do
1403 end if
1404 !
1405 else
1406 !
1407 ! -- For unstructured, read nodelist directly, then check node numbers
1408 nodelist = darray
1409 do noder = 1, maxbnd
1410 if (noder < 1 .or. noder > this%nodes) then
1411 write (errmsg, '(a,1x,i0)') 'Invalid node number:', noder
1412 call store_error(errmsg, terminate=.true.)
1413 end if
1414 end do
1415 nbound = maxbnd
1416 !
1417 end if
1418 !
Here is the call graph for this function:

◆ nodeu_from_cellid()

integer(i4b) function dis2dmodule::nodeu_from_cellid ( class(dis2dtype) this,
character(len=*), intent(inout) cellid,
integer(i4b), intent(in) inunit,
integer(i4b), intent(in) iout,
logical, intent(in), optional flag_string,
logical, intent(in), optional allow_zero )
private

If flag_string is present and true, the first token may be non-numeric (e.g. boundary name). In this case, return -2.

If allow_zero is present and true, and all indices are zero, the result can be zero. If allow_zero is false, a zero in any index is an error.

Definition at line 876 of file Dis2d.f90.

878 ! -- return
879 integer(I4B) :: nodeu
880 ! -- dummy
881 class(Dis2dType) :: this
882 character(len=*), intent(inout) :: cellid
883 integer(I4B), intent(in) :: inunit
884 integer(I4B), intent(in) :: iout
885 logical, optional, intent(in) :: flag_string
886 logical, optional, intent(in) :: allow_zero
887 ! -- local
888 integer(I4B) :: lloclocal, istart, istop, ndum, n
889 integer(I4B) :: i, j, nrow, ncol
890 integer(I4B) :: istat
891 real(DP) :: r
892 !
893 if (present(flag_string)) then
894 if (flag_string) then
895 ! Check to see if first token in cellid can be read as an integer.
896 lloclocal = 1
897 call urword(cellid, lloclocal, istart, istop, 1, ndum, r, iout, inunit)
898 read (cellid(istart:istop), *, iostat=istat) n
899 if (istat /= 0) then
900 ! First token in cellid is not an integer; return flag to this effect.
901 nodeu = -2
902 return
903 end if
904 end if
905 end if
906 !
907 nrow = this%mshape(1)
908 ncol = this%mshape(2)
909 !
910 lloclocal = 1
911 call urword(cellid, lloclocal, istart, istop, 2, i, r, iout, inunit)
912 call urword(cellid, lloclocal, istart, istop, 2, j, r, iout, inunit)
913 !
914 if (i == 0 .and. j == 0) then
915 if (present(allow_zero)) then
916 if (allow_zero) then
917 nodeu = 0
918 return
919 end if
920 end if
921 end if
922 !
923 errmsg = ""
924 !
925 if (i < 1 .or. i > nrow) then
926 write (errmsg, '(a,1x,a,i0,a)') &
927 trim(adjustl(errmsg)), 'Row number in list (', i, &
928 ') is outside of the grid.'
929 end if
930 if (j < 1 .or. j > ncol) then
931 write (errmsg, '(a,1x,a,i0,a)') &
932 trim(adjustl(errmsg)), 'Column number in list (', j, &
933 ') is outside of the grid.'
934 end if
935 !
936 nodeu = get_node(1, i, j, 1, nrow, ncol)
937 !
938 if (nodeu < 1 .or. nodeu > this%nodesuser) then
939 write (errmsg, '(a,1x,a,i0,a)') &
940 trim(adjustl(errmsg)), &
941 "Cell number cannot be determined for cellid ("// &
942 trim(adjustl(cellid))//") and results in a user "// &
943 "node number (", nodeu, ") that is outside of the grid."
944 end if
945 !
946 if (len_trim(adjustl(errmsg)) > 0) then
947 call store_error(errmsg)
948 call store_error_unit(inunit)
949 end if
950 !
Here is the call graph for this function:

◆ nodeu_from_string()

integer(i4b) function dis2dmodule::nodeu_from_string ( class(dis2dtype) this,
integer(i4b), intent(inout) lloc,
integer(i4b), intent(inout) istart,
integer(i4b), intent(inout) istop,
integer(i4b), intent(in) in,
integer(i4b), intent(in) iout,
character(len=*), intent(inout) line,
logical, intent(in), optional flag_string,
logical, intent(in), optional allow_zero )
private

Parse layer, row and column and return user nodenumber. If flag_string is present and true, the first token may be non-numeric (e.g. boundary name). In this case, return -2.

Definition at line 791 of file Dis2d.f90.

793 ! -- dummy
794 class(Dis2dType) :: this
795 integer(I4B), intent(inout) :: lloc
796 integer(I4B), intent(inout) :: istart
797 integer(I4B), intent(inout) :: istop
798 integer(I4B), intent(in) :: in
799 integer(I4B), intent(in) :: iout
800 character(len=*), intent(inout) :: line
801 logical, optional, intent(in) :: flag_string
802 logical, optional, intent(in) :: allow_zero
803 integer(I4B) :: nodeu
804 ! -- local
805 integer(I4B) :: i, j, nrow, ncol
806 integer(I4B) :: lloclocal, ndum, istat, n
807 real(DP) :: r
808 !
809 if (present(flag_string)) then
810 if (flag_string) then
811 ! Check to see if first token in line can be read as an integer.
812 lloclocal = lloc
813 call urword(line, lloclocal, istart, istop, 1, ndum, r, iout, in)
814 read (line(istart:istop), *, iostat=istat) n
815 if (istat /= 0) then
816 ! First token in line is not an integer; return flag to this effect.
817 nodeu = -2
818 return
819 end if
820 end if
821 end if
822 !
823 nrow = this%mshape(1)
824 ncol = this%mshape(2)
825 !
826 call urword(line, lloc, istart, istop, 2, i, r, iout, in)
827 call urword(line, lloc, istart, istop, 2, j, r, iout, in)
828 !
829 if (i == 0 .and. j == 0) then
830 if (present(allow_zero)) then
831 if (allow_zero) then
832 nodeu = 0
833 return
834 end if
835 end if
836 end if
837 !
838 errmsg = ""
839 !
840 if (i < 1 .or. i > nrow) then
841 write (errmsg, '(a,1x,a,i0,a)') &
842 trim(adjustl(errmsg)), 'Row number in list (', i, &
843 ') is outside of the grid.'
844 end if
845 if (j < 1 .or. j > ncol) then
846 write (errmsg, '(a,1x,a,i0,a)') &
847 trim(adjustl(errmsg)), 'Column number in list (', j, &
848 ') is outside of the grid.'
849 end if
850 !
851 nodeu = get_node(1, i, j, 1, nrow, ncol)
852 !
853 if (nodeu < 1 .or. nodeu > this%nodesuser) then
854 write (errmsg, '(a,1x,a,i0,a)') &
855 trim(adjustl(errmsg)), &
856 "Node number in list (", nodeu, ") is outside of the grid. "// &
857 "Cell number cannot be determined in line '"// &
858 trim(adjustl(line))//"'."
859 end if
860 !
861 if (len_trim(adjustl(errmsg)) > 0) then
862 call store_error(errmsg)
863 call store_error_unit(in)
864 end if
865 !
Here is the call graph for this function:

◆ nodeu_to_array()

subroutine dis2dmodule::nodeu_to_array ( class(dis2dtype) this,
integer(i4b), intent(in) nodeu,
integer(i4b), dimension(:), intent(inout) arr )
private

Definition at line 637 of file Dis2d.f90.

638 ! -- dummy
639 class(Dis2dType) :: this
640 integer(I4B), intent(in) :: nodeu
641 integer(I4B), dimension(:), intent(inout) :: arr
642 ! -- local
643 integer(I4B) :: isize
644 integer(I4B) :: i, j, k
645 !
646 ! -- check the size of arr
647 isize = size(arr)
648 if (isize /= this%ndim) then
649 write (errmsg, '(a,i0,a,i0,a)') &
650 'Program error: nodeu_to_array size of array (', isize, &
651 ') is not equal to the discretization dimension (', this%ndim, ')'
652 call store_error(errmsg, terminate=.true.)
653 end if
654 !
655 ! -- get k, i, j
656 call get_ijk(nodeu, this%nrow, this%ncol, 1, i, j, k)
657 !
658 ! -- fill array
659 arr(1) = i
660 arr(2) = j
661 !
Here is the call graph for this function:

◆ nodeu_to_string()

subroutine dis2dmodule::nodeu_to_string ( class(dis2dtype) this,
integer(i4b), intent(in) nodeu,
character(len=*), intent(inout) str )
private

Definition at line 618 of file Dis2d.f90.

619 ! -- dummy
620 class(Dis2dType) :: this
621 integer(I4B), intent(in) :: nodeu
622 character(len=*), intent(inout) :: str
623 ! -- local
624 integer(I4B) :: i, j, k
625 character(len=10) :: istr, jstr
626 !
627 call get_ijk(nodeu, this%nrow, this%ncol, 1, i, j, k)
628 write (istr, '(i10)') i
629 write (jstr, '(i10)') j
630 str = '('//trim(adjustl(istr))//','// &
631 trim(adjustl(jstr))//')'
632 !
Here is the call graph for this function:

◆ read_dbl_array()

subroutine dis2dmodule::read_dbl_array ( class(dis2dtype), intent(inout) this,
character(len=*), intent(inout) line,
integer(i4b), intent(inout) lloc,
integer(i4b), intent(inout) istart,
integer(i4b), intent(inout) istop,
integer(i4b), intent(in) iout,
integer(i4b), intent(in) in,
real(dp), dimension(:), intent(inout), pointer, contiguous darray,
character(len=*), intent(in) aname )
private

Definition at line 1188 of file Dis2d.f90.

1190 ! -- dummy
1191 class(Dis2dType), intent(inout) :: this
1192 character(len=*), intent(inout) :: line
1193 integer(I4B), intent(inout) :: lloc
1194 integer(I4B), intent(inout) :: istart
1195 integer(I4B), intent(inout) :: istop
1196 integer(I4B), intent(in) :: in
1197 integer(I4B), intent(in) :: iout
1198 real(DP), dimension(:), pointer, contiguous, intent(inout) :: darray
1199 character(len=*), intent(in) :: aname
1200 !

◆ read_int_array()

subroutine dis2dmodule::read_int_array ( class(dis2dtype), intent(inout) this,
character(len=*), intent(inout) line,
integer(i4b), intent(inout) lloc,
integer(i4b), intent(inout) istart,
integer(i4b), intent(inout) istop,
integer(i4b), intent(in) iout,
integer(i4b), intent(in) in,
integer(i4b), dimension(:), intent(inout), pointer, contiguous iarray,
character(len=*), intent(in) aname )
private

Definition at line 1169 of file Dis2d.f90.

1171 ! -- dummy
1172 class(Dis2dType), intent(inout) :: this
1173 character(len=*), intent(inout) :: line
1174 integer(I4B), intent(inout) :: lloc
1175 integer(I4B), intent(inout) :: istart
1176 integer(I4B), intent(inout) :: istop
1177 integer(I4B), intent(in) :: in
1178 integer(I4B), intent(in) :: iout
1179 integer(I4B), dimension(:), pointer, contiguous, intent(inout) :: iarray
1180 character(len=*), intent(in) :: aname
1181 ! -- local
1182
1183 !

◆ read_layer_array()

subroutine dis2dmodule::read_layer_array ( class(dis2dtype) this,
integer(i4b), dimension(maxbnd) nodelist,
real(dp), dimension(ncolbnd, maxbnd), intent(inout) darray,
integer(i4b), intent(in) ncolbnd,
integer(i4b), intent(in) maxbnd,
integer(i4b), intent(in) icolbnd,
character(len=*), intent(in) aname,
integer(i4b), intent(in) inunit,
integer(i4b), intent(in) iout )
private

For cells that are outside of the active domain, do not copy the array value into darray.

Definition at line 1208 of file Dis2d.f90.

1210 ! -- dummy
1211 class(Dis2dType) :: this
1212 integer(I4B), intent(in) :: maxbnd
1213 integer(I4B), dimension(maxbnd) :: nodelist
1214 integer(I4B), intent(in) :: ncolbnd
1215 real(DP), dimension(ncolbnd, maxbnd), intent(inout) :: darray
1216 integer(I4B), intent(in) :: icolbnd
1217 character(len=*), intent(in) :: aname
1218 integer(I4B), intent(in) :: inunit
1219 integer(I4B), intent(in) :: iout
1220 !

◆ record_array()

subroutine dis2dmodule::record_array ( class(dis2dtype), intent(inout) this,
real(dp), dimension(:), intent(inout), pointer, contiguous darray,
integer(i4b), intent(in) iout,
integer(i4b), intent(in) iprint,
integer(i4b), intent(in) idataun,
character(len=*), intent(in) aname,
character(len=*), intent(in) cdatafmp,
integer(i4b), intent(in) nvaluesp,
integer(i4b), intent(in) nwidthp,
character(len=*), intent(in) editdesc,
real(dp), intent(in) dinact )
private

The array is written to a formatted or unformatted external file depending on the arguments.

Parameters
[in,out]darraydouble precision array to record
[in]ioutascii output unit number
[in]iprintwhether to print the array
[in]idataunbinary output unit number, if negative don't write by layers, write entire array
[in]anametext descriptor
[in]cdatafmpwrite format
[in]nvaluespvalues per line
[in]nwidthpnumber width
[in]editdescformat type (I, G, F, S, E)
[in]dinactdouble precision value for cells excluded from model domain

Definition at line 1228 of file Dis2d.f90.

1230 ! -- dummy
1231 class(Dis2dType), intent(inout) :: this
1232 real(DP), dimension(:), pointer, contiguous, intent(inout) :: darray !< double precision array to record
1233 integer(I4B), intent(in) :: iout !< ascii output unit number
1234 integer(I4B), intent(in) :: iprint !< whether to print the array
1235 integer(I4B), intent(in) :: idataun !< binary output unit number, if negative don't write by layers, write entire array
1236 character(len=*), intent(in) :: aname !< text descriptor
1237 character(len=*), intent(in) :: cdatafmp !< write format
1238 integer(I4B), intent(in) :: nvaluesp !< values per line
1239 integer(I4B), intent(in) :: nwidthp !< number width
1240 character(len=*), intent(in) :: editdesc !< format type (I, G, F, S, E)
1241 real(DP), intent(in) :: dinact !< double precision value for cells excluded from model domain
1242 ! -- local
1243 integer(I4B) :: k, ifirst
1244 integer(I4B) :: nlay
1245 integer(I4B) :: nrow
1246 integer(I4B) :: ncol
1247 integer(I4B) :: nval
1248 integer(I4B) :: nodeu, noder
1249 integer(I4B) :: istart, istop
1250 real(DP), dimension(:), pointer, contiguous :: dtemp
1251 ! -- formats
1252 character(len=*), parameter :: fmthsv = &
1253 "(1X,/1X,a,' WILL BE SAVED ON UNIT ',I4, &
1254 &' AT END OF TIME STEP',I5,', STRESS PERIOD ',I4)"
1255 !
1256 ! -- set variables
1257 nlay = 1
1258 nrow = this%mshape(1)
1259 ncol = this%mshape(2)
1260 !
1261 ! -- If this is a reduced model, then copy the values from darray into
1262 ! dtemp.
1263 if (this%nodes < this%nodesuser) then
1264 nval = this%nodes
1265 dtemp => this%dbuff
1266 do nodeu = 1, this%nodesuser
1267 noder = this%get_nodenumber(nodeu, 0)
1268 if (noder <= 0) then
1269 dtemp(nodeu) = dinact
1270 cycle
1271 end if
1272 dtemp(nodeu) = darray(noder)
1273 end do
1274 else
1275 nval = this%nodes
1276 dtemp => darray
1277 end if
1278 !
1279 ! -- Print to iout if iprint /= 0
1280 if (iprint /= 0) then
1281 istart = 1
1282 do k = 1, nlay
1283 istop = istart + nrow * ncol - 1
1284 call ulaprufw(ncol, nrow, kstp, kper, k, iout, dtemp(istart:istop), &
1285 aname, cdatafmp, nvaluesp, nwidthp, editdesc)
1286 istart = istop + 1
1287 end do
1288 end if
1289 !
1290 ! -- Save array to an external file.
1291 if (idataun > 0) then
1292 ! -- write to binary file by layer
1293 ifirst = 1
1294 istart = 1
1295 do k = 1, nlay
1296 istop = istart + nrow * ncol - 1
1297 if (ifirst == 1) write (iout, fmthsv) &
1298 trim(adjustl(aname)), idataun, &
1299 kstp, kper
1300 ifirst = 0
1301 call ulasav(dtemp(istart:istop), aname, kstp, kper, &
1302 pertim, totim, ncol, nrow, k, idataun)
1303 istart = istop + 1
1304 end do
1305 elseif (idataun < 0) then
1306 !
1307 ! -- write entire array as one record
1308 call ubdsv1(kstp, kper, aname, -idataun, dtemp, ncol, nrow, nlay, &
1309 iout, delt, pertim, totim)
1310 end if
1311 !
Here is the call graph for this function:

◆ record_srcdst_list_header()

subroutine dis2dmodule::record_srcdst_list_header ( class(dis2dtype) this,
character(len=16), intent(in) text,
character(len=16), intent(in) textmodel,
character(len=16), intent(in) textpackage,
character(len=16), intent(in) dstmodel,
character(len=16), intent(in) dstpackage,
integer(i4b), intent(in) naux,
character(len=16), dimension(:), intent(in) auxtxt,
integer(i4b), intent(in) ibdchn,
integer(i4b), intent(in) nlist,
integer(i4b), intent(in) iout )
private

Definition at line 1316 of file Dis2d.f90.

1319 ! -- dummy
1320 class(Dis2dType) :: this
1321 character(len=16), intent(in) :: text
1322 character(len=16), intent(in) :: textmodel
1323 character(len=16), intent(in) :: textpackage
1324 character(len=16), intent(in) :: dstmodel
1325 character(len=16), intent(in) :: dstpackage
1326 integer(I4B), intent(in) :: naux
1327 character(len=16), dimension(:), intent(in) :: auxtxt
1328 integer(I4B), intent(in) :: ibdchn
1329 integer(I4B), intent(in) :: nlist
1330 integer(I4B), intent(in) :: iout
1331 ! -- local
1332 integer(I4B) :: nlay, nrow, ncol
1333 !
1334 nlay = 1
1335 nrow = this%mshape(1)
1336 ncol = this%mshape(2)
1337 !
1338 ! -- Use ubdsv06 to write list header
1339 call ubdsv06(kstp, kper, text, textmodel, textpackage, dstmodel, dstpackage, &
1340 ibdchn, naux, auxtxt, ncol, nrow, nlay, &
1341 nlist, iout, delt, pertim, totim)
1342 !
Here is the call graph for this function:

◆ source_dimensions()

subroutine dis2dmodule::source_dimensions ( class(dis2dtype) this)
private

Definition at line 238 of file Dis2d.f90.

239 ! -- dummy
240 class(Dis2dType) :: this
241 ! -- locals
242 integer(I4B) :: i, j
243 type(DisFoundType) :: found
244 !
245 ! -- update defaults with idm sourced values
246 call mem_set_value(this%nrow, 'NROW', this%input_mempath, found%nrow)
247 call mem_set_value(this%ncol, 'NCOL', this%input_mempath, found%ncol)
248 !
249 ! -- log simulation values
250 if (this%iout > 0) then
251 call this%log_dimensions(found)
252 end if
253 !
254 ! -- verify dimensions were set
255 if (this%nrow < 1) then
256 call store_error( &
257 'NROW was not specified or was specified incorrectly.')
258 call store_error_filename(this%input_fname)
259 end if
260 if (this%ncol < 1) then
261 call store_error( &
262 'NCOL was not specified or was specified incorrectly.')
263 call store_error_filename(this%input_fname)
264 end if
265 !
266 ! -- calculate nodesuser
267 this%nodesuser = this%nrow * this%ncol
268 !
269 ! -- Allocate delr, delc, and non-reduced vectors for dis
270 call mem_allocate(this%delr, this%ncol, 'DELR', this%memoryPath)
271 call mem_allocate(this%delc, this%nrow, 'DELC', this%memoryPath)
272 call mem_allocate(this%idomain, this%ncol, this%nrow, 'IDOMAIN', &
273 this%memoryPath)
274 call mem_allocate(this%bottom, this%ncol, this%nrow, 'BOTTOM', &
275 this%memoryPath)
276 call mem_allocate(this%cellx, this%ncol, 'CELLX', this%memoryPath)
277 call mem_allocate(this%celly, this%nrow, 'CELLY', this%memoryPath)
278 !
279 ! -- initialize all cells to be active (idomain = 1)
280 do i = 1, this%nrow
281 do j = 1, this%ncol
282 this%idomain(j, i) = 1
283 end do
284 end do
285 !
Here is the call graph for this function:

◆ source_griddata()

subroutine dis2dmodule::source_griddata ( class(dis2dtype) this)
private

Definition at line 311 of file Dis2d.f90.

312 ! -- dummy
313 class(Dis2dType) :: this
314 type(DisFoundType) :: found
315 !
316 ! -- update defaults with idm sourced values
317 call mem_set_value(this%delr, 'DELR', this%input_mempath, found%delr)
318 call mem_set_value(this%delc, 'DELC', this%input_mempath, found%delc)
319 call mem_set_value(this%bottom, 'BOTTOM', this%input_mempath, found%bottom)
320 call mem_set_value(this%idomain, 'IDOMAIN', this%input_mempath, found%idomain)
321 !
322 ! -- log simulation values
323 if (this%iout > 0) then
324 call this%log_griddata(found)
325 end if
326 !

◆ source_options()

subroutine dis2dmodule::source_options ( class(dis2dtype) this)
private

Definition at line 178 of file Dis2d.f90.

179 ! -- dummy
180 class(Dis2dType) :: this
181 ! -- locals
182 character(len=LENVARNAME), dimension(3) :: lenunits = &
183 &[character(len=LENVARNAME) :: 'FEET', 'METERS', 'CENTIMETERS']
184 type(disfoundtype) :: found
185 !
186 ! -- update defaults with idm sourced values
187 call mem_set_value(this%lenuni, 'LENGTH_UNITS', this%input_mempath, &
188 lenunits, found%length_units)
189 call mem_set_value(this%nogrb, 'NOGRB', this%input_mempath, found%nogrb)
190 call mem_set_value(this%xorigin, 'XORIGIN', this%input_mempath, found%xorigin)
191 call mem_set_value(this%yorigin, 'YORIGIN', this%input_mempath, found%yorigin)
192 call mem_set_value(this%angrot, 'ANGROT', this%input_mempath, found%angrot)
193 !
194 ! -- log values to list file
195 if (this%iout > 0) then
196 call this%log_options(found)
197 end if
198 !

◆ supports_layers()

logical function dis2dmodule::supports_layers ( class(dis2dtype) this)
private

Definition at line 955 of file Dis2d.f90.

956 ! -- dummy
957 class(Dis2dType) :: this
958 !
959 supports_layers = .true.
960 !
Here is the call graph for this function:
Here is the caller graph for this function:

◆ write_grb()

subroutine dis2dmodule::write_grb ( class(dis2dtype) this,
integer(i4b), dimension(:), intent(in) icelltype )
private

Definition at line 484 of file Dis2d.f90.

485 ! -- modules
486 use openspecmodule, only: access, form
487 use constantsmodule, only: lenbigline
488 ! -- dummy
489 class(Dis2dType) :: this
490 integer(I4B), dimension(:), intent(in) :: icelltype
491 ! -- local
492 integer(I4B) :: iunit, ntxt, version
493 integer(I4B), parameter :: lentxt = 100
494 character(len=50) :: txthdr
495 character(len=lentxt) :: txt
496 character(len=LINELENGTH) :: fname
497 character(len=LENBIGLINE) :: crs
498 logical(LGP) :: found_crs
499 character(len=*), parameter :: fmtgrdsave = &
500 "(4X,'BINARY GRID INFORMATION WILL BE WRITTEN TO:', &
501 &/,6X,'UNIT NUMBER: ', I0,/,6X, 'FILE NAME: ', A)"
502 !
503 ! -- Initialize
504 version = 1
505 ntxt = 14
506 !
507 call mem_set_value(crs, 'CRS', this%input_mempath, found_crs)
508 !
509 ! -- set version
510 if (found_crs) then
511 ntxt = ntxt + 1
512 version = 2
513 end if
514 !
515 ! -- Open the file
516 fname = trim(this%output_fname)
517 iunit = getunit()
518 write (this%iout, fmtgrdsave) iunit, trim(adjustl(fname))
519 call openfile(iunit, this%iout, trim(adjustl(fname)), 'DATA(BINARY)', &
520 form, access, 'REPLACE')
521 !
522 ! -- write header information
523 write (txthdr, '(a)') 'GRID DIS2D'
524 txthdr(50:50) = new_line('a')
525 write (iunit) txthdr
526 write (txthdr, '(a, i0)') 'VERSION ', version
527 txthdr(50:50) = new_line('a')
528 write (iunit) txthdr
529 write (txthdr, '(a, i0)') 'NTXT ', ntxt
530 txthdr(50:50) = new_line('a')
531 write (iunit) txthdr
532 write (txthdr, '(a, i0)') 'LENTXT ', lentxt
533 txthdr(50:50) = new_line('a')
534 write (iunit) txthdr
535 !
536 ! -- write variable definitions
537 write (txt, '(3a, i0)') 'NCELLS ', 'INTEGER ', 'NDIM 0 # ', this%nodesuser
538 txt(lentxt:lentxt) = new_line('a')
539 write (iunit) txt
540 write (txt, '(3a, i0)') 'NROW ', 'INTEGER ', 'NDIM 0 # ', this%nrow
541 txt(lentxt:lentxt) = new_line('a')
542 write (iunit) txt
543 write (txt, '(3a, i0)') 'NCOL ', 'INTEGER ', 'NDIM 0 # ', this%ncol
544 txt(lentxt:lentxt) = new_line('a')
545 write (iunit) txt
546 write (txt, '(3a, i0)') 'NJA ', 'INTEGER ', 'NDIM 0 # ', this%nja
547 txt(lentxt:lentxt) = new_line('a')
548 write (iunit) txt
549 write (txt, '(3a, 1pg24.15)') 'XORIGIN ', 'DOUBLE ', 'NDIM 0 # ', this%xorigin
550 txt(lentxt:lentxt) = new_line('a')
551 write (iunit) txt
552 write (txt, '(3a, 1pg24.15)') 'YORIGIN ', 'DOUBLE ', 'NDIM 0 # ', this%yorigin
553 txt(lentxt:lentxt) = new_line('a')
554 write (iunit) txt
555 write (txt, '(3a, 1pg24.15)') 'ANGROT ', 'DOUBLE ', 'NDIM 0 # ', this%angrot
556 txt(lentxt:lentxt) = new_line('a')
557 write (iunit) txt
558 write (txt, '(3a, i0)') 'DELR ', 'DOUBLE ', 'NDIM 1 ', this%ncol
559 txt(lentxt:lentxt) = new_line('a')
560 write (iunit) txt
561 write (txt, '(3a, i0)') 'DELC ', 'DOUBLE ', 'NDIM 1 ', this%nrow
562 txt(lentxt:lentxt) = new_line('a')
563 write (iunit) txt
564 write (txt, '(3a, i0)') 'BOTM ', 'DOUBLE ', 'NDIM 1 ', this%nodesuser
565 txt(lentxt:lentxt) = new_line('a')
566 write (iunit) txt
567 write (txt, '(3a, i0)') 'IA ', 'INTEGER ', 'NDIM 1 ', this%nodesuser + 1
568 txt(lentxt:lentxt) = new_line('a')
569 write (iunit) txt
570 write (txt, '(3a, i0)') 'JA ', 'INTEGER ', 'NDIM 1 ', size(this%con%jausr)
571 txt(lentxt:lentxt) = new_line('a')
572 write (iunit) txt
573 write (txt, '(3a, i0)') 'IDOMAIN ', 'INTEGER ', 'NDIM 1 ', this%nodesuser
574 txt(lentxt:lentxt) = new_line('a')
575 write (iunit) txt
576 write (txt, '(3a, i0)') 'ICELLTYPE ', 'INTEGER ', 'NDIM 1 ', this%nodesuser
577 txt(lentxt:lentxt) = new_line('a')
578 write (iunit) txt
579 !
580 ! -- if version 2 write character array headers
581 if (version == 2) then
582 if (found_crs) then
583 write (txt, '(3a, i0)') 'CRS ', 'CHARACTER ', 'NDIM 1 ', &
584 len_trim(crs)
585 txt(lentxt:lentxt) = new_line('a')
586 write (iunit) txt
587 end if
588 end if
589 !
590 ! -- write data
591 write (iunit) this%nodesuser ! ncells
592 write (iunit) this%nrow ! nrow
593 write (iunit) this%ncol ! ncol
594 write (iunit) this%nja ! nja
595 write (iunit) this%xorigin ! xorigin
596 write (iunit) this%yorigin ! yorigin
597 write (iunit) this%angrot ! angrot
598 write (iunit) this%delr ! delr
599 write (iunit) this%delc ! delc
600 write (iunit) this%bottom ! bottom
601 write (iunit) this%con%iausr ! iausr
602 write (iunit) this%con%jausr ! jausr
603 write (iunit) this%idomain ! idomain
604 write (iunit) icelltype ! icelltype
605 !
606 ! -- if version 2 write character array data
607 if (version == 2) then
608 if (found_crs) write (iunit) trim(crs) ! crs user input
609 end if
610 !
611 ! -- Close the file
612 close (iunit)
613 !
integer(i4b), parameter lenbigline
maximum length of a big line
Definition Constants.f90:15
character(len=20) access
Definition OpenSpec.f90:7
character(len=20) form
Definition OpenSpec.f90:7
Here is the call graph for this function: