22 integer(I4B),
pointer :: nvert => null()
23 real(dp),
dimension(:),
pointer,
contiguous :: length => null()
24 real(dp),
dimension(:),
pointer,
contiguous :: width => null()
25 real(dp),
dimension(:),
pointer,
contiguous :: bottom => null()
26 integer(I4B),
dimension(:),
pointer,
contiguous :: idomain => null()
27 real(dp),
dimension(:, :),
pointer,
contiguous :: vertices => null()
28 real(dp),
dimension(:, :),
pointer,
contiguous :: cellxy => null()
29 real(dp),
dimension(:),
pointer,
contiguous :: fdc => null()
30 integer(I4B),
dimension(:),
pointer,
contiguous :: iavert => null()
31 integer(I4B),
dimension(:),
pointer,
contiguous :: javert => null()
67 logical :: length_units = .false.
68 logical :: nogrb = .false.
69 logical :: xorigin = .false.
70 logical :: yorigin = .false.
71 logical :: angrot = .false.
72 logical :: nodes = .false.
73 logical :: nvert = .false.
74 logical :: width = .false.
75 logical :: bottom = .false.
76 logical :: idomain = .false.
77 logical :: iv = .false.
78 logical :: xv = .false.
79 logical :: yv = .false.
80 logical :: icell1d = .false.
81 logical :: fdc = .false.
82 logical :: ncvert = .false.
83 logical :: icvert = .false.
88 subroutine disv1d_cr(dis, name_model, input_mempath, inunit, iout)
94 character(len=*),
intent(in) :: name_model
95 character(len=*),
intent(in) :: input_mempath
96 integer(I4B),
intent(in) :: inunit
97 integer(I4B),
intent(in) :: iout
100 logical(LGP) :: found_fname
101 character(len=*),
parameter :: fmtheader = &
102 "(1X, /1X, 'DISV1D -- DISCRETIZATION BY VERTICES IN 1D PACKAGE,', &
103 &' VERSION 1 : 4/2/2024 - INPUT READ FROM MEMPATH: ', A, /)"
106 call disnew%allocate_scalars(name_model, input_mempath)
107 dis%input_mempath = input_mempath
112 call mem_set_value(dis%input_fname,
'INPUT_FNAME', dis%input_mempath, &
120 write (iout, fmtheader) dis%input_mempath
133 if (this%inunit /= 0)
then
134 call this%disv1d_load()
138 call this%grid_finalize()
150 integer(I4B),
intent(in) :: noden
151 integer(I4B),
intent(in) :: nodem
152 integer(I4B),
intent(in) :: ihc
153 real(DP),
intent(inout) :: xcomp
154 real(DP),
intent(inout) :: ycomp
155 real(DP),
intent(inout) :: zcomp
156 integer(I4B),
intent(in) :: ipos
158 real(DP) :: angle, dmult
162 angle = this%con%anglex(this%con%jas(ipos))
164 if (nodem < noden) dmult = -
done
165 xcomp = cos(angle) * dmult
166 ycomp = sin(angle) * dmult
177 xcomp, ycomp, zcomp, conlen)
180 integer(I4B),
intent(in) :: noden
181 integer(I4B),
intent(in) :: nodem
182 logical,
intent(in) :: nozee
183 real(DP),
intent(in) :: satn
184 real(DP),
intent(in) :: satm
185 integer(I4B),
intent(in) :: ihc
186 real(DP),
intent(inout) :: xcomp
187 real(DP),
intent(inout) :: ycomp
188 real(DP),
intent(inout) :: zcomp
189 real(DP),
intent(inout) :: conlen
191 integer(I4B) :: nodeun, nodeum
192 real(DP) :: xn, xm, yn, ym, zn, zm
203 nodeun = this%get_nodeuser(noden)
204 nodeum = this%get_nodeuser(nodem)
205 xn = this%cellxy(1, nodeun)
206 yn = this%cellxy(2, nodeun)
207 xm = this%cellxy(1, nodeum)
208 ym = this%cellxy(2, nodeum)
217 character(len=*),
intent(out) :: dis_type
225 integer(I4B) :: dis_enum
237 character(len=*),
intent(in) :: name_model
238 character(len=*),
intent(in) :: input_mempath
241 call this%DisBaseType%allocate_scalars(name_model, input_mempath)
257 call this%source_options()
258 call this%source_dimensions()
259 call this%source_griddata()
262 if (this%nvert > 0)
then
263 call this%source_vertices()
264 call this%source_cell1d()
279 character(len=LENVARNAME),
dimension(3) :: lenunits = &
280 &[character(len=LENVARNAME) ::
'FEET',
'METERS',
'CENTIMETERS']
289 idmmemorypath, lenunits, found%length_units)
291 idmmemorypath, found%nogrb)
293 idmmemorypath, found%xorigin)
295 idmmemorypath, found%yorigin)
297 idmmemorypath, found%angrot)
300 if (this%iout > 0)
then
301 call this%log_options(found)
311 write (this%iout,
'(1x,a)')
'Setting Discretization Options'
313 if (found%length_units)
then
314 write (this%iout,
'(4x,a,i0)')
'Model length unit [0=UND, 1=FEET, &
315 &2=METERS, 3=CENTIMETERS] set as ', this%lenuni
318 if (found%nogrb)
then
319 write (this%iout,
'(4x,a,i0)')
'Binary grid file [0=GRB, 1=NOGRB] &
320 &set as ', this%nogrb
323 if (found%xorigin)
then
324 write (this%iout,
'(4x,a,G0)')
'XORIGIN = ', this%xorigin
327 if (found%yorigin)
then
328 write (this%iout,
'(4x,a,G0)')
'YORIGIN = ', this%yorigin
331 if (found%angrot)
then
332 write (this%iout,
'(4x,a,G0)')
'ANGROT = ', this%angrot
335 write (this%iout,
'(1x,a,/)')
'End Setting Discretization Options'
348 character(len=LENMEMPATH) :: idmMemoryPath
356 call mem_set_value(this%nodes,
'NODES', idmmemorypath, found%nodes)
357 call mem_set_value(this%nvert,
'NVERT', idmmemorypath, found%nvert)
360 this%nodesuser = this%nodes
363 if (this%iout > 0)
then
364 call this%log_dimensions(found)
368 if (this%nodesuser < 1)
then
370 'NODES was not specified or was specified incorrectly.')
373 if (this%nvert < 1)
then
375 'NVERT was not specified or was specified as zero. The &
376 &VERTICES and CELL1D blocks will not be read for the DISV1D6 &
377 &Package in model '//trim(this%memoryPath)//
'.')
382 'LENGTH', this%memoryPath)
384 'WIDTH', this%memoryPath)
386 'BOTTOM', this%memoryPath)
388 'IDOMAIN', this%memoryPath)
391 if (this%nvert > 0)
then
393 'VERTICES', this%memoryPath)
395 'FDC', this%memoryPath)
397 'CELLXY', this%memoryPath)
401 do n = 1, this%nodesuser
402 this%length(n) =
dzero
403 this%width(n) =
dzero
404 this%bottom(n) =
dzero
415 write (this%iout,
'(1x,a)')
'Setting Discretization Dimensions'
417 if (found%nodes)
then
418 write (this%iout,
'(4x,a,i0)')
'NODES = ', this%nodesuser
421 if (found%nvert)
then
422 write (this%iout,
'(4x,a,i0)')
'NVERT = ', this%nvert
425 write (this%iout,
'(1x,a,/)')
'End Setting Discretization Dimensions'
436 character(len=LENMEMPATH) :: idmMemoryPath
447 call mem_set_value(this%idomain,
'IDOMAIN', idmmemorypath, found%idomain)
449 if (.not. found%width)
then
450 write (errmsg,
'(a)')
'Error in GRIDDATA block: WIDTH not found.'
454 if (.not. found%bottom)
then
455 write (errmsg,
'(a)')
'Error in GRIDDATA block: BOTTOM not found.'
464 if (this%iout > 0)
then
465 call this%log_griddata(found)
476 write (this%iout,
'(1x,a)')
'Setting Discretization Griddata'
478 if (found%width)
then
479 write (this%iout,
'(4x,a)')
'WIDTH set from input file'
482 if (found%bottom)
then
483 write (this%iout,
'(4x,a)')
'BOTTOM set from input file'
486 if (found%idomain)
then
487 write (this%iout,
'(4x,a)')
'IDOMAIN set from input file'
490 write (this%iout,
'(1x,a,/)')
'End Setting Discretization Griddata'
506 character(len=LENMEMPATH) :: idmMemoryPath
507 real(DP),
dimension(:),
contiguous,
pointer :: vert_x => null()
508 real(DP),
dimension(:),
contiguous,
pointer :: vert_y => null()
519 if (
associated(vert_x) .and.
associated(vert_y))
then
521 this%vertices(1, i) = vert_x(i)
522 this%vertices(2, i) = vert_y(i)
525 call store_error(
'Required Vertex arrays not found.')
529 if (this%iout > 0)
then
530 write (this%iout,
'(1x,a)')
'Setting Discretization Vertices'
531 write (this%iout,
'(1x,a,/)')
'End setting discretization vertices'
547 character(len=LENMEMPATH) :: idmMemoryPath
548 integer(I4B),
dimension(:),
contiguous,
pointer :: icell1d => null()
549 integer(I4B),
dimension(:),
contiguous,
pointer :: ncvert => null()
550 integer(I4B),
dimension(:),
contiguous,
pointer :: icvert => null()
551 real(DP),
dimension(:),
contiguous,
pointer :: fdc => null()
559 call mem_setptr(icell1d,
'ICELL1D', idmmemorypath)
560 call mem_setptr(ncvert,
'NCVERT', idmmemorypath)
561 call mem_setptr(icvert,
'ICVERT', idmmemorypath)
564 if (
associated(icell1d) .and.
associated(ncvert) &
565 .and.
associated(icvert))
then
566 call this%define_cellverts(icell1d, ncvert, icvert)
568 call store_error(
'Required cell vertex arrays not found.')
575 if (
associated(fdc))
then
576 do i = 1, this%nodesuser
589 this%javert, this%length, this%cellxy)
592 if (this%iout > 0)
then
593 write (this%iout,
'(1x,a)')
'Setting Discretization CELL1D'
594 write (this%iout,
'(1x,a,/)')
'End Setting Discretization CELL1D'
607 integer(I4B),
dimension(:),
contiguous,
pointer,
intent(in) :: icell1d
608 integer(I4B),
dimension(:),
contiguous,
pointer,
intent(in) :: ncvert
609 integer(I4B),
dimension(:),
contiguous,
pointer,
intent(in) :: icvert
612 integer(I4B) :: i, j, ierr
613 integer(I4B) :: icv_idx, startvert, maxnnz = 2
616 call vert_spm%init(this%nodesuser, this%nvert, maxnnz)
620 do i = 1, this%nodesuser
621 if (icell1d(i) /= i)
call store_error(
'ICELL1D input sequence violation.')
623 call vert_spm%addconnection(i, icvert(icv_idx), 0)
625 startvert = icvert(icv_idx)
627 icv_idx = icv_idx + 1
632 call mem_allocate(this%iavert, this%nodesuser + 1,
'IAVERT', this%memoryPath)
633 call mem_allocate(this%javert, vert_spm%nnz,
'JAVERT', this%memoryPath)
634 call vert_spm%filliaja(this%iavert, this%javert, ierr)
635 call vert_spm%destroy()
642 real(DP),
dimension(:, :),
intent(in) :: vertices
643 real(DP),
dimension(:),
intent(in) :: fdc
644 integer(I4B),
dimension(:),
intent(in) :: iavert
645 integer(I4B),
dimension(:),
intent(in) :: javert
646 real(DP),
dimension(:),
intent(in) :: length
647 real(DP),
dimension(:, :),
intent(inout) :: cellxy
649 integer(I4B) :: nodes
660 nodes =
size(iavert) - 1
667 do j = iavert(n), iavert(n + 1) - 2
668 d =
calcdist(vertices, javert(j), javert(j + 1))
669 fd1 = fd0 + d / length(n)
673 if (fd1 >= fdc(n))
then
676 fd = (fdc(n) - fd0) / (fd1 - fd0)
684 cellxy(ixy, n) = (
done - fd) * vertices(ixy, iv0) + &
685 fd * vertices(ixy, iv1)
695 real(DP),
dimension(:, :),
intent(in) :: vertices
696 integer(I4B),
dimension(:),
intent(in) :: iavert
697 integer(I4B),
dimension(:),
intent(in) :: javert
698 real(DP),
dimension(:),
intent(inout) :: length
700 integer(I4B) :: nodes
705 nodes =
size(iavert) - 1
710 do j = iavert(n), iavert(n + 1) - 2
711 dlen = dlen +
calcdist(vertices, javert(j), javert(j + 1))
727 integer(I4B) :: node, noder, k
729 character(len=*),
parameter :: fmtnr = &
730 "(/1x, 'The specified IDOMAIN results in a reduced number of cells.',&
731 &/1x, 'Number of user nodes: ',I0,&
732 &/1X, 'Number of nodes in solution: ', I0, //)"
736 do k = 1, this%nodesuser
737 if (this%idomain(k) > 0) this%nodes = this%nodes + 1
741 if (this%nodes == 0)
then
742 call store_error(
'Model does not have any active nodes. Make sure &
743 &IDOMAIN has some values greater than zero.')
744 call store_error_filename(this%input_fname)
748 if (this%nodes < this%nodesuser)
then
749 write (this%iout, fmtnr) this%nodesuser, this%nodes
753 call this%allocate_arrays()
759 if (this%nodes < this%nodesuser)
then
762 do k = 1, this%nodesuser
763 if (this%idomain(k) > 0)
then
764 this%nodereduced(node) = noder
767 this%nodereduced(node) = 0
774 if (this%nodes < this%nodesuser)
then
777 do k = 1, this%nodesuser
778 if (this%idomain(k) > 0)
then
779 this%nodeuser(noder) = node
788 do node = 1, this%nodesuser
790 if (this%nodes < this%nodesuser) noder = this%nodereduced(node)
791 if (noder <= 0) cycle
792 this%bot(noder) = this%bottom(node)
793 this%area(noder) = this%length(node)
797 call this%create_connections()
808 call this%DisBaseType%allocate_arrays()
811 if (this%nodes < this%nodesuser)
then
812 call mem_allocate(this%nodeuser, this%nodes,
'NODEUSER', this%memoryPath)
813 call mem_allocate(this%nodereduced, this%nodesuser,
'NODEREDUCED', &
816 call mem_allocate(this%nodeuser, 1,
'NODEUSER', this%memoryPath)
817 call mem_allocate(this%nodereduced, 1,
'NODEREDUCED', this%memoryPath)
821 this%mshape(1) = this%nodesuser
829 integer(I4B) :: nrsize
833 if (this%nodes < this%nodesuser) nrsize = this%nodes
839 call this%con%disv1dconnections_verts(this%name_model, this%nodes, &
840 this%nodesuser, nrsize, this%nvert, &
841 this%vertices, this%iavert, &
842 this%javert, this%cellxy, this%fdc, &
843 this%nodereduced, this%nodeuser, &
846 this%nja = this%con%nja
847 this%njas = this%con%njas
859 integer(I4B),
dimension(:),
intent(in) :: icelltype
861 integer(I4B) :: i, iunit, ntxt
862 integer(I4B),
parameter :: lentxt = 100
863 character(len=50) :: txthdr
864 character(len=lentxt) :: txt
865 character(len=LINELENGTH) :: fname
866 character(len=*),
parameter :: fmtgrdsave = &
867 "(4X,'BINARY GRID INFORMATION WILL BE WRITTEN TO:', &
868 &/,6X,'UNIT NUMBER: ', I0,/,6X, 'FILE NAME: ', A)"
872 if (this%nvert > 0) ntxt = ntxt + 5
875 fname = trim(this%input_fname)//
'.grb'
877 write (this%iout, fmtgrdsave) iunit, trim(adjustl(fname))
878 call openfile(iunit, this%iout, trim(adjustl(fname)),
'DATA(BINARY)', &
882 write (txthdr,
'(a)')
'GRID DISV1D'
883 txthdr(50:50) = new_line(
'a')
885 write (txthdr,
'(a)')
'VERSION 1'
886 txthdr(50:50) = new_line(
'a')
888 write (txthdr,
'(a, i0)')
'NTXT ', ntxt
889 txthdr(50:50) = new_line(
'a')
891 write (txthdr,
'(a, i0)')
'LENTXT ', lentxt
892 txthdr(50:50) = new_line(
'a')
896 write (txt,
'(3a, i0)')
'NCELLS ',
'INTEGER ',
'NDIM 0 # ', this%nodesuser
897 txt(lentxt:lentxt) = new_line(
'a')
899 write (txt,
'(3a, i0)')
'NJA ',
'INTEGER ',
'NDIM 0 # ', this%con%nja
900 txt(lentxt:lentxt) = new_line(
'a')
902 write (txt,
'(3a, 1pg24.15)')
'XORIGIN ',
'DOUBLE ',
'NDIM 0 # ', this%xorigin
903 txt(lentxt:lentxt) = new_line(
'a')
905 write (txt,
'(3a, 1pg24.15)')
'YORIGIN ',
'DOUBLE ',
'NDIM 0 # ', this%yorigin
906 txt(lentxt:lentxt) = new_line(
'a')
908 write (txt,
'(3a, 1pg24.15)')
'ANGROT ',
'DOUBLE ',
'NDIM 0 # ', this%angrot
909 txt(lentxt:lentxt) = new_line(
'a')
911 write (txt,
'(3a, i0)')
'BOTM ',
'DOUBLE ',
'NDIM 1 ', this%nodesuser
912 txt(lentxt:lentxt) = new_line(
'a')
914 write (txt,
'(3a, i0)')
'IA ',
'INTEGER ',
'NDIM 1 ', this%nodesuser + 1
915 txt(lentxt:lentxt) = new_line(
'a')
917 write (txt,
'(3a, i0)')
'JA ',
'INTEGER ',
'NDIM 1 ', this%con%nja
918 txt(lentxt:lentxt) = new_line(
'a')
920 write (txt,
'(3a, i0)')
'ICELLTYPE ',
'INTEGER ',
'NDIM 1 ', this%nodesuser
921 txt(lentxt:lentxt) = new_line(
'a')
923 write (txt,
'(3a, i0)')
'IDOMAIN ',
'INTEGER ',
'NDIM 1 ', this%nodesuser
924 txt(lentxt:lentxt) = new_line(
'a')
928 if (this%nvert > 0)
then
929 write (txt,
'(3a, i0)')
'VERTICES ',
'DOUBLE ',
'NDIM 2 2 ', this%nvert
930 txt(lentxt:lentxt) = new_line(
'a')
932 write (txt,
'(3a, i0)')
'CELLX ',
'DOUBLE ',
'NDIM 1 ', this%nodesuser
933 txt(lentxt:lentxt) = new_line(
'a')
935 write (txt,
'(3a, i0)')
'CELLY ',
'DOUBLE ',
'NDIM 1 ', this%nodesuser
936 txt(lentxt:lentxt) = new_line(
'a')
938 write (txt,
'(3a, i0)')
'IAVERT ',
'INTEGER ',
'NDIM 1 ', this%nodesuser + 1
939 txt(lentxt:lentxt) = new_line(
'a')
941 write (txt,
'(3a, i0)')
'JAVERT ',
'INTEGER ',
'NDIM 1 ',
size(this%javert)
942 txt(lentxt:lentxt) = new_line(
'a')
947 write (iunit) this%nodesuser
948 write (iunit) this%nja
949 write (iunit) this%xorigin
950 write (iunit) this%yorigin
951 write (iunit) this%angrot
952 write (iunit) this%bottom
953 write (iunit) this%con%iausr
954 write (iunit) this%con%jausr
955 write (iunit) icelltype
956 write (iunit) this%idomain
959 if (this%nvert > 0)
then
960 write (iunit) this%vertices
961 write (iunit) (this%cellxy(1, i), i=1, this%nodesuser)
962 write (iunit) (this%cellxy(2, i), i=1, this%nodesuser)
963 write (iunit) this%iavert
964 write (iunit) this%javert
978 integer(I4B),
intent(in) :: nodeu
979 integer(I4B),
intent(in) :: icheck
980 integer(I4B) :: nodenumber
982 if (icheck /= 0)
then
983 if (nodeu < 1 .or. nodeu > this%nodes)
then
984 write (
errmsg,
'(a,i10)') &
985 'Nodenumber less than 1 or greater than nodes:', nodeu
991 if (this%nodes == this%nodesuser)
then
994 nodenumber = this%nodereduced(nodeu)
1001 integer(I4B),
intent(in) :: nodeu
1002 character(len=*),
intent(inout) :: str
1004 character(len=10) :: nstr
1006 write (nstr,
'(i0)') nodeu
1007 str =
'('//trim(adjustl(nstr))//
')'
1018 flag_string, allow_zero)
result(nodeu)
1021 integer(I4B),
intent(inout) :: lloc
1022 integer(I4B),
intent(inout) :: istart
1023 integer(I4B),
intent(inout) :: istop
1024 integer(I4B),
intent(in) :: in
1025 integer(I4B),
intent(in) :: iout
1026 character(len=*),
intent(inout) :: line
1027 logical,
optional,
intent(in) :: flag_string
1028 logical,
optional,
intent(in) :: allow_zero
1029 integer(I4B) :: nodeu
1031 integer(I4B) :: lloclocal, ndum, istat, n
1034 if (
present(flag_string))
then
1035 if (flag_string)
then
1038 call urword(line, lloclocal, istart, istop, 1, ndum, r, iout, in)
1039 read (line(istart:istop), *, iostat=istat) n
1040 if (istat /= 0)
then
1048 call urword(line, lloc, istart, istop, 2, nodeu, r, iout, in)
1050 if (nodeu == 0)
then
1051 if (
present(allow_zero))
then
1052 if (allow_zero)
then
1058 if (nodeu < 1 .or. nodeu > this%nodesuser)
then
1059 write (
errmsg,
'(a,i0,a)') &
1060 "Node number in list (", nodeu,
") is outside of the grid. "// &
1061 "Cell number cannot be determined in line '"// &
1062 trim(adjustl(line))//
"'."
1076 logical(LGP) :: deallocate_vertices
1082 deallocate_vertices = (this%nvert > 0)
1094 if (deallocate_vertices)
then
1103 call this%DisBaseType%dis_da()
1113 cdatafmp, nvaluesp, nwidthp, editdesc, dinact)
1119 real(DP),
dimension(:),
pointer,
contiguous,
intent(inout) :: darray
1120 integer(I4B),
intent(in) :: iout
1121 integer(I4B),
intent(in) :: iprint
1122 integer(I4B),
intent(in) :: idataun
1123 character(len=*),
intent(in) :: aname
1124 character(len=*),
intent(in) :: cdatafmp
1125 integer(I4B),
intent(in) :: nvaluesp
1126 integer(I4B),
intent(in) :: nwidthp
1127 character(len=*),
intent(in) :: editdesc
1128 real(DP),
intent(in) :: dinact
1130 integer(I4B) :: k, ifirst
1131 integer(I4B) :: nlay
1132 integer(I4B) :: nrow
1133 integer(I4B) :: ncol
1134 integer(I4B) :: nval
1135 integer(I4B) :: nodeu, noder
1136 integer(I4B) :: istart, istop
1137 real(DP),
dimension(:),
pointer,
contiguous :: dtemp
1139 character(len=*),
parameter :: fmthsv = &
1140 "(1X,/1X,a,' WILL BE SAVED ON UNIT ',I4, &
1141 &' AT END OF TIME STEP',I5,', STRESS PERIOD ',I4)"
1146 ncol = this%mshape(1)
1150 if (this%nodes < this%nodesuser)
then
1153 do nodeu = 1, this%nodesuser
1154 noder = this%get_nodenumber(nodeu, 0)
1155 if (noder <= 0)
then
1156 dtemp(nodeu) = dinact
1159 dtemp(nodeu) = darray(noder)
1167 if (iprint /= 0)
then
1170 istop = istart + nrow * ncol - 1
1172 aname, cdatafmp, nvaluesp, nwidthp, editdesc)
1178 if (idataun > 0)
then
1183 istop = istart + nrow * ncol - 1
1184 if (ifirst == 1)
write (iout, fmthsv) &
1185 trim(adjustl(aname)), idataun, &
1192 elseif (idataun < 0)
then
1195 call ubdsv1(
kstp,
kper, aname, -idataun, dtemp, ncol, nrow, nlay, &
1203 dstmodel, dstpackage, naux, auxtxt, &
1204 ibdchn, nlist, iout)
1210 character(len=16),
intent(in) :: text
1211 character(len=16),
intent(in) :: textmodel
1212 character(len=16),
intent(in) :: textpackage
1213 character(len=16),
intent(in) :: dstmodel
1214 character(len=16),
intent(in) :: dstpackage
1215 integer(I4B),
intent(in) :: naux
1216 character(len=16),
dimension(:),
intent(in) :: auxtxt
1217 integer(I4B),
intent(in) :: ibdchn
1218 integer(I4B),
intent(in) :: nlist
1219 integer(I4B),
intent(in) :: iout
1221 integer(I4B) :: nlay, nrow, ncol
1225 ncol = this%mshape(1)
1228 call ubdsv06(
kstp,
kper, text, textmodel, textpackage, dstmodel, dstpackage, &
1229 ibdchn, naux, auxtxt, ncol, nrow, nlay, &
1242 integer(I4B),
intent(in) :: n
1243 integer(I4B),
intent(in) :: m
1244 integer(I4B),
intent(in) :: idx_conn
1245 real(DP),
intent(out) :: width_n
1246 real(DP),
intent(out) :: width_m
1249 width_n = this%width(n)
1250 width_m = this%width(m)
This module contains simulation constants.
integer(i4b), parameter linelength
maximum length of a standard line
@ disv1d
DISV1D6 discretization.
integer(i4b), parameter lenvarname
maximum length of a variable name
real(dp), parameter dzero
real constant zero
integer(i4b), parameter lenmempath
maximum length of the memory path
real(dp), parameter done
real constant 1
real(dp) function, public calcdist(vertices, ivert1, ivert2)
Calculate distance between two vertices.
subroutine, public disv1d_cr(dis, name_model, input_mempath, inunit, iout)
subroutine log_options(this, found)
Write user options to list file.
subroutine nodeu_to_string(this, nodeu, str)
subroutine connection_normal(this, noden, nodem, ihc, xcomp, ycomp, zcomp, ipos)
Get normal vector components between the cell and a given neighbor.
subroutine record_srcdst_list_header(this, text, textmodel, textpackage, dstmodel, dstpackage, naux, auxtxt, ibdchn, nlist, iout)
Record list header using ubdsv06.
subroutine define_cellverts(this, icell1d, ncvert, icvert)
Construct the iavert and javert integer vectors which are compressed sparse row index arrays that rel...
subroutine calculate_cellxy(vertices, fdc, iavert, javert, length, cellxy)
Calculate x, y, coordinates of reach midpoint.
subroutine get_dis_type(this, dis_type)
Get the discretization type (DIS, DIS2D, DISV, DISV1D, DISU)
subroutine source_cell1d(this)
Copy cell1d information from input data context to model context.
integer(i4b) function get_nodenumber_idx1(this, nodeu, icheck)
Return a nodenumber from the user specified node number with an option to perform a check....
subroutine grid_finalize(this)
Finalize grid construction.
subroutine get_flow_width(this, n, m, idx_conn, width_n, width_m)
@ brief Calculate the flow width between two cells
subroutine record_array(this, darray, iout, iprint, idataun, aname, cdatafmp, nvaluesp, nwidthp, editdesc, dinact)
Record a double precision array.
subroutine source_griddata(this)
subroutine allocate_scalars(this, name_model, input_mempath)
Allocate scalar variables.
subroutine disv1d_df(this)
Define the discretization.
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 source_vertices(this)
Copy vertex information from input data context to model context.
subroutine calculate_cell_length(vertices, iavert, javert, length)
Calculate x, y, coordinates of reach midpoint.
subroutine disv1d_da(this)
integer(i4b) function get_dis_enum(this)
Get the discretization type enumeration.
subroutine source_dimensions(this)
Copy dimensions from IDM into package.
subroutine create_connections(this)
subroutine allocate_arrays(this)
subroutine write_grb(this, icelltype)
Write binary grid file.
subroutine disv1d_load(this)
integer(i4b) function nodeu_from_string(this, lloc, istart, istop, in, iout, line, flag_string, allow_zero)
nodeu_from_string – Receive a string and convert the string to a user nodenumber. The model is unstru...
subroutine log_dimensions(this, found)
Write dimensions to list file.
subroutine source_options(this)
Copy options from IDM into package.
subroutine log_griddata(this, found)
Write griddata found to list file.
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,...
This module defines variable data types.
character(len=lenmempath) function create_mem_path(component, subcomponent, context)
returns the path to the memory object
subroutine, public memorystore_remove(component, subcomponent, context)
This module contains simulation methods.
subroutine, public ustop(stopmess, ioutlocal)
Stop the simulation.
subroutine, public store_warning(msg, substring)
Store warning message.
subroutine, public store_error(msg, terminate)
Store an error message.
integer(i4b) function, public count_errors()
Return number of errors.
subroutine, public store_error_filename(filename, terminate)
Store the erroring file name.
This module contains simulation variables.
character(len=maxcharlen) errmsg
error message string
character(len=linelength) idm_context
character(len=maxcharlen) warnmsg
warning message string
real(dp), pointer, public pertim
time relative to start of stress period
real(dp), pointer, public totim
time relative to start of simulation
integer(i4b), pointer, public kstp
current time step number
integer(i4b), pointer, public kper
current stress period number
real(dp), pointer, public delt
length of the current time step
Simplifies tracking parameters sourced from the input context.