31 character(len=LENMEMPATH) :: memorypath
32 character(len=LENMEMPATH) :: input_mempath =
''
33 character(len=LENMODELNAME),
pointer :: name_model => null()
34 character(len=LINELENGTH),
pointer :: input_fname => null()
35 character(len=LINELENGTH),
pointer :: output_fname => null()
36 integer(I4B),
pointer :: inunit => null()
37 integer(I4B),
pointer :: iout => null()
38 integer(I4B),
pointer :: nodes => null()
39 integer(I4B),
pointer :: nodesuser => null()
40 integer(I4B),
pointer :: nja => null()
41 integer(I4B),
pointer :: njas => null()
42 integer(I4B),
pointer :: lenuni => null()
43 integer(I4B),
pointer :: ndim => null()
44 integer(I4B),
pointer :: icondir => null()
45 integer(I4B),
pointer :: nogrb => null()
46 real(dp),
dimension(:),
pointer,
contiguous :: xc => null()
47 real(dp),
dimension(:),
pointer,
contiguous :: yc => null()
48 real(dp),
pointer :: yorigin => null()
49 real(dp),
pointer :: xorigin => null()
50 real(dp),
pointer :: angrot => null()
51 integer(I4B),
dimension(:),
pointer,
contiguous :: mshape => null()
52 real(dp),
dimension(:),
pointer,
contiguous :: top => null()
53 real(dp),
dimension(:),
pointer,
contiguous :: bot => null()
54 real(dp),
dimension(:),
pointer,
contiguous :: area => null()
57 real(dp),
dimension(:),
pointer,
contiguous :: dbuff => null()
58 integer(I4B),
dimension(:),
pointer,
contiguous :: ibuff => null()
59 integer(I4B),
dimension(:),
pointer,
contiguous :: nodereduced => null()
60 integer(I4B),
dimension(:),
pointer,
contiguous :: nodeuser => null()
133 call store_error(
'Programmer error: dis_df must be overridden', &
143 integer(I4B),
intent(in) :: moffset
146 integer(I4B) :: i, j, ipos, iglo, jglo
149 do ipos = this%con%ia(i), this%con%ia(i + 1) - 1
150 j = this%con%ja(ipos)
153 call sparse%addconnection(iglo, jglo, 1)
159 subroutine dis_mc(this, moffset, idxglo, matrix_sln)
162 integer(I4B),
intent(in) :: moffset
163 integer(I4B),
dimension(:),
intent(inout) :: idxglo
166 integer(I4B) :: i, j, ipos, iglo, jglo
170 do ipos = this%con%ia(i), this%con%ia(i + 1) - 1
171 j = this%con%ja(ipos)
173 idxglo(ipos) = matrix_sln%get_position(iglo, jglo)
182 integer(I4B),
dimension(:),
intent(in) :: icelltype
184 integer(I4B),
dimension(:),
allocatable :: ict
185 integer(I4B) :: nu, nr
188 allocate (ict(this%nodesuser))
189 do nu = 1, this%nodesuser
190 nr = this%get_nodenumber(nu, 0)
192 ict(nu) = icelltype(nr)
198 if (this%nogrb == 0)
call this%write_grb(ict)
204 integer(I4B),
dimension(:),
intent(in) :: icelltype
205 call store_error(
'Programmer error: write_grb must be overridden', &
217 deallocate (this%name_model)
218 deallocate (this%input_fname)
219 deallocate (this%output_fname)
247 call this%con%con_da()
248 deallocate (this%con)
254 integer(I4B),
intent(in) :: nodeu
255 character(len=*),
intent(inout) :: str
257 call store_error(
'Programmer error: nodeu_to_string must be overridden', &
264 integer(I4B),
intent(in) :: nodeu
265 integer(I4B),
dimension(:),
intent(inout) :: arr
267 call store_error(
'Programmer error: nodeu_to_array must be overridden', &
274 integer(I4B),
intent(in) :: noder
275 integer(I4B) :: nodenumber
277 if (this%nodes < this%nodesuser)
then
278 nodenumber = this%nodeuser(noder)
286 integer(I4B),
intent(in) :: nodeu
287 integer(I4B),
intent(in) :: icheck
288 integer(I4B) :: nodenumber
291 call store_error(
'Programmer error: get_nodenumber_idx1 must be overridden', &
297 integer(I4B),
intent(in) :: k, j
298 integer(I4B),
intent(in) :: icheck
299 integer(I4B) :: nodenumber
302 call store_error(
'Programmer error: get_nodenumber_idx2 must be overridden', &
308 integer(I4B),
intent(in) :: k, i, j
309 integer(I4B),
intent(in) :: icheck
310 integer(I4B) :: nodenumber
313 call store_error(
'Programmer error: get_nodenumber_idx3 must be overridden', &
322 integer(I4B),
intent(in) :: noden
323 integer(I4B),
intent(in) :: nodem
324 integer(I4B),
intent(in) :: ihc
325 real(DP),
intent(inout) :: xcomp
326 real(DP),
intent(inout) :: ycomp
327 real(DP),
intent(inout) :: zcomp
328 integer(I4B),
intent(in) :: ipos
330 call store_error(
'Programmer error: connection_normal must be overridden', &
338 xcomp, ycomp, zcomp, conlen)
340 integer(I4B),
intent(in) :: noden
341 integer(I4B),
intent(in) :: nodem
342 logical,
intent(in) :: nozee
343 real(DP),
intent(in) :: satn
344 real(DP),
intent(in) :: satm
345 integer(I4B),
intent(in) :: ihc
346 real(DP),
intent(inout) :: xcomp
347 real(DP),
intent(inout) :: ycomp
348 real(DP),
intent(inout) :: zcomp
349 real(DP),
intent(inout) :: conlen
351 call store_error(
'Programmer error: connection_vector must be overridden', &
357 real(dp),
intent(in) :: x
358 real(dp),
intent(in) :: y
359 real(dp),
intent(in) :: xorigin
360 real(dp),
intent(in) :: yorigin
361 real(dp),
intent(in) :: angrot
362 real(dp),
intent(out) :: xglo
363 real(dp),
intent(out) :: yglo
372 if (ang /=
dzero)
then
373 xglo = x * cos(ang) - y * sin(ang)
374 yglo = x * sin(ang) + y * cos(ang)
378 xglo = xglo + xorigin
379 yglo = yglo + yorigin
385 character(len=*),
intent(out) :: dis_type
387 dis_type =
"Not implemented"
388 call store_error(
'Programmer error: get_dis_type must be overridden', &
396 integer(I4B) :: dis_enum
399 call store_error(
'Programmer error: get_dis_enum must be overridden', &
407 character(len=*),
intent(in) :: name_model
408 character(len=*),
intent(in) :: input_mempath
409 logical(LGP) :: found
415 allocate (this%name_model)
416 allocate (this%input_fname)
417 allocate (this%output_fname)
419 call mem_allocate(this%inunit,
'INUNIT', this%memoryPath)
422 call mem_allocate(this%nodesuser,
'NODESUSER', this%memoryPath)
424 call mem_allocate(this%icondir,
'ICONDIR', this%memoryPath)
426 call mem_allocate(this%xorigin,
'XORIGIN', this%memoryPath)
427 call mem_allocate(this%yorigin,
'YORIGIN', this%memoryPath)
428 call mem_allocate(this%angrot,
'ANGROT', this%memoryPath)
431 call mem_allocate(this%lenuni,
'LENUNI', this%memoryPath)
434 this%name_model = name_model
435 this%input_mempath = input_mempath
436 this%input_fname =
''
437 this%output_fname =
''
454 this%input_mempath, found)
456 this%input_mempath, found)
457 if (.not. found)
then
458 this%output_fname = trim(this%input_fname)//
'.grb'
468 call mem_allocate(this%mshape, this%ndim,
'MSHAPE', this%memoryPath)
469 call mem_allocate(this%xc, this%nodes,
'XC', this%memoryPath)
470 call mem_allocate(this%yc, this%nodes,
'YC', this%memoryPath)
471 call mem_allocate(this%top, this%nodes,
'TOP', this%memoryPath)
472 call mem_allocate(this%bot, this%nodes,
'BOT', this%memoryPath)
473 call mem_allocate(this%area, this%nodes,
'AREA', this%memoryPath)
476 this%mshape(1) = this%nodes
479 if (this%nodes < this%nodesuser)
then
480 isize = this%nodesuser
486 call mem_allocate(this%dbuff, isize,
'DBUFF', this%name_model)
487 call mem_allocate(this%ibuff, isize,
'IBUFF', this%name_model)
497 flag_string, allow_zero)
result(nodeu)
500 integer(I4B),
intent(inout) :: lloc
501 integer(I4B),
intent(inout) :: istart
502 integer(I4B),
intent(inout) :: istop
503 integer(I4B),
intent(in) :: in
504 integer(I4B),
intent(in) :: iout
505 character(len=*),
intent(inout) :: line
506 logical,
optional,
intent(in) :: flag_string
507 logical,
optional,
intent(in) :: allow_zero
508 integer(I4B) :: nodeu
511 call store_error(
'Programmer error: nodeu_from_string must be overridden', &
524 allow_zero)
result(nodeu)
527 character(len=*),
intent(inout) :: cellid
528 integer(I4B),
intent(in) :: inunit
529 integer(I4B),
intent(in) :: iout
530 logical,
optional,
intent(in) :: flag_string
531 logical,
optional,
intent(in) :: allow_zero
532 integer(I4B) :: nodeu
535 call store_error(
'Programmer error: nodeu_from_cellid must be overridden', &
547 flag_string)
result(noder)
550 integer(I4B),
intent(inout) :: lloc
551 integer(I4B),
intent(inout) :: istart
552 integer(I4B),
intent(inout) :: istop
553 integer(I4B),
intent(in) :: in
554 integer(I4B),
intent(in) :: iout
555 character(len=*),
intent(inout) :: line
556 logical,
optional,
intent(in) :: flag_string
557 integer(I4B) :: noder
559 integer(I4B) :: nodeu
560 character(len=LINELENGTH) :: nodestr
561 logical :: flag_string_local
563 if (
present(flag_string))
then
564 flag_string_local = flag_string
566 flag_string_local = .false.
568 nodeu = this%nodeu_from_string(lloc, istart, istop, in, iout, line, &
573 noder = this%get_nodenumber(nodeu, 0)
577 if (noder <= 0 .and. .not. flag_string_local)
then
578 call this%nodeu_to_string(nodeu, nodestr)
580 ' Cell is outside active grid domain: '// &
581 trim(adjustl(nodestr))
595 allow_zero)
result(noder)
597 integer(I4B) :: noder
600 character(len=*),
intent(inout) :: cellid
601 integer(I4B),
intent(in) :: inunit
602 integer(I4B),
intent(in) :: iout
603 logical,
optional,
intent(in) :: flag_string
604 logical,
optional,
intent(in) :: allow_zero
606 integer(I4B) :: nodeu
607 logical :: allowzerolocal
608 character(len=LINELENGTH) :: nodestr
609 logical :: flag_string_local
611 if (
present(flag_string))
then
612 flag_string_local = flag_string
614 flag_string_local = .false.
616 if (
present(allow_zero))
then
617 allowzerolocal = allow_zero
619 allowzerolocal = .false.
622 nodeu = this%nodeu_from_cellid(cellid, inunit, iout, flag_string_local, &
627 noder = this%get_nodenumber(nodeu, 0)
631 if (noder <= 0 .and. .not. flag_string_local)
then
632 call this%nodeu_to_string(nodeu, nodestr)
634 ' Cell is outside active grid domain: '// &
635 trim(adjustl(nodestr))
644 call store_error(
'Programmer error: supports_layers must be overridden', &
654 call store_error(
'Programmer error: get_ncpl must be overridden', &
664 integer(I4B),
intent(in) :: n
665 real(dp),
intent(in) :: x
676 thick = (tp - bt) * sat
684 integer(I4B),
intent(in) :: ic
685 real(DP),
allocatable,
intent(out) :: polyverts(:, :)
686 logical(LGP),
intent(in),
optional :: closed
688 errmsg =
'Programmer error: get_polyverts must be overridden'
695 integer(I4B),
intent(in) :: ic
696 logical(LGP),
intent(in),
optional :: closed
697 integer(I4B) :: npolyverts
699 errmsg =
'Programmer error: get_npolyverts must be overridden'
706 logical(LGP),
intent(in),
optional :: closed
707 integer(I4B) :: max_npolyverts
709 errmsg =
'Programmer error: get_max_npolyverts must be overridden'
718 character(len=*),
intent(inout) :: line
719 integer(I4B),
intent(inout) :: lloc
720 integer(I4B),
intent(inout) :: istart
721 integer(I4B),
intent(inout) :: istop
722 integer(I4B),
intent(in) :: in
723 integer(I4B),
intent(in) :: iout
724 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(inout) :: iarray
725 character(len=*),
intent(in) :: aname
727 errmsg =
'Programmer error: read_int_array must be overridden'
736 character(len=*),
intent(inout) :: line
737 integer(I4B),
intent(inout) :: lloc
738 integer(I4B),
intent(inout) :: istart
739 integer(I4B),
intent(inout) :: istop
740 integer(I4B),
intent(in) :: in
741 integer(I4B),
intent(in) :: iout
742 real(DP),
dimension(:),
pointer,
contiguous,
intent(inout) :: darray
743 character(len=*),
intent(in) :: aname
745 errmsg =
'Programmer error: read_dbl_array must be overridden'
753 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(in) :: ibuff1
754 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(inout) :: ibuff2
756 integer(I4B) :: nodeu
757 integer(I4B) :: noder
759 do nodeu = 1, this%nodesuser
760 noder = this%get_nodenumber(nodeu, 0)
761 if (noder <= 0) cycle
762 ibuff2(noder) = ibuff1(nodeu)
770 real(DP),
dimension(:),
pointer,
contiguous,
intent(in) :: buff1
771 real(DP),
dimension(:),
pointer,
contiguous,
intent(inout) :: buff2
773 integer(I4B) :: nodeu
774 integer(I4B) :: noder
776 do nodeu = 1, this%nodesuser
777 noder = this%get_nodenumber(nodeu, 0)
778 if (noder <= 0) cycle
779 buff2(noder) = buff1(nodeu)
790 subroutine read_list(this, line_reader, in, iout, iprpak, nlist, &
791 inamedbound, iauxmultcol, nodelist, rlist, auxvar, &
792 auxname, boundname, label, pkgname, tsManager, iscloc, &
805 integer(I4B),
intent(in) :: in
806 integer(I4B),
intent(in) :: iout
807 integer(I4B),
intent(in) :: iprpak
808 integer(I4B),
intent(inout) :: nlist
809 integer(I4B),
intent(in) :: inamedbound
810 integer(I4B),
intent(in) :: iauxmultcol
811 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(inout) :: nodelist
812 real(DP),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: rlist
813 real(DP),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: auxvar
814 character(len=LENAUXNAME),
dimension(:),
intent(inout) :: auxname
815 character(len=LENBOUNDNAME),
dimension(:),
pointer,
contiguous, &
816 intent(inout) :: boundname
817 character(len=*),
intent(in) :: label
818 character(len=*),
intent(in) :: pkgName
820 integer(I4B),
intent(in) :: iscloc
821 integer(I4B),
intent(in),
optional :: indxconvertflux
824 integer(I4B) :: nodeu, noder
825 character(len=LINELENGTH) :: nodestr
826 integer(I4B) :: ii, jj
827 real(DP),
pointer :: bndElem => null()
833 call lstrdobj%read_list(line_reader, in, iout, nlist, inamedbound, &
834 this%mshape, nodelist, rlist, auxvar, auxname, &
839 if (lstrdobj%ntxtrlist > 0)
then
840 do l = 1, lstrdobj%ntxtrlist
841 ii = lstrdobj%idxtxtrow(l)
842 jj = lstrdobj%idxtxtcol(l)
844 bndelem => rlist(jj, ii)
846 pkgname,
'BND', tsmanager, iprpak, &
848 if (
associated(tslinkbnd))
then
853 if (iauxmultcol > 0 .and. jj == iscloc)
then
854 tslinkbnd%RMultiplier => auxvar(iauxmultcol, ii)
858 if (lstrdobj%inamedbound == 1)
then
859 tslinkbnd%BndName = lstrdobj%boundname(tslinkbnd%IRow)
864 if (
present(indxconvertflux))
then
865 if (indxconvertflux == jj)
then
866 tslinkbnd%convertflux = .true.
868 noder = this%get_nodenumber(nodeu, 0)
869 tslinkbnd%CellArea = this%get_area(noder)
878 if (lstrdobj%ntxtauxvar > 0)
then
879 do l = 1, lstrdobj%ntxtauxvar
880 ii = lstrdobj%idxtxtauxrow(l)
881 jj = lstrdobj%idxtxtauxcol(l)
883 bndelem => auxvar(jj, ii)
885 pkgname,
'AUX', tsmanager, iprpak, &
887 if (lstrdobj%inamedbound == 1)
then
888 if (
associated(tslinkaux))
then
889 tslinkaux%BndName = lstrdobj%boundname(tslinkaux%IRow)
896 if (iauxmultcol > 0)
then
898 rlist(iscloc, l) = rlist(iscloc, l) * auxvar(iauxmultcol, l)
903 if (iprpak /= 0)
then
904 call lstrdobj%write_list()
910 if (this%nodes < this%nodesuser)
then
913 noder = this%get_nodenumber(nodeu, 0)
915 call this%nodeu_to_string(nodeu, nodestr)
917 ' Cell is outside active grid domain: '// &
918 trim(adjustl(nodestr))
939 icolbnd, aname, inunit, iout)
942 integer(I4B),
intent(in) :: ncolbnd
943 integer(I4B),
intent(in) :: maxbnd
944 integer(I4B),
dimension(maxbnd) :: nodelist
945 real(DP),
dimension(ncolbnd, maxbnd),
intent(inout) :: darray
946 integer(I4B),
intent(in) :: icolbnd
947 character(len=*),
intent(in) :: aname
948 integer(I4B),
intent(in) :: inunit
949 integer(I4B),
intent(in) :: iout
951 errmsg =
'Programmer error: read_layer_array must be overridden'
960 cdatafmp, nvaluesp, nwidthp, editdesc, dinact)
963 real(DP),
dimension(:),
pointer,
contiguous,
intent(inout) :: darray
964 integer(I4B),
intent(in) :: iout
965 integer(I4B),
intent(in) :: iprint
966 integer(I4B),
intent(in) :: idataun
967 character(len=*),
intent(in) :: aname
968 character(len=*),
intent(in) :: cdatafmp
969 integer(I4B),
intent(in) :: nvaluesp
970 integer(I4B),
intent(in) :: nwidthp
971 character(len=*),
intent(in) :: editdesc
972 real(DP),
intent(in) :: dinact
974 errmsg =
'Programmer error: record_array must be overridden'
982 real(DP),
dimension(:),
intent(in) :: flowja
983 integer(I4B),
intent(in) :: ibinun
984 integer(I4B),
intent(in) :: iout
986 character(len=16),
dimension(1) :: text
988 data text(1)/
' FLOW-JA-FACE'/
991 call ubdsv1(
kstp,
kper, text(1), ibinun, flowja,
size(flowja), 1, 1, &
999 integer(I4B),
intent(in) :: noder
1000 character(len=*),
intent(inout) :: str
1002 integer(I4B) :: nodeu
1004 nodeu = this%get_nodeuser(noder)
1005 call this%nodeu_to_string(nodeu, str)
1012 integer(I4B),
intent(in) :: noder
1013 integer(I4B),
dimension(:),
intent(inout) :: arr
1015 integer(I4B) :: nodeu
1017 nodeu = this%get_nodeuser(noder)
1018 call this%nodeu_to_array(nodeu, arr)
1023 dstmodel, dstpackage, naux, auxtxt, &
1024 ibdchn, nlist, iout)
1026 character(len=16),
intent(in) :: text
1027 character(len=16),
intent(in) :: textmodel
1028 character(len=16),
intent(in) :: textpackage
1029 character(len=16),
intent(in) :: dstmodel
1030 character(len=16),
intent(in) :: dstpackage
1031 integer(I4B),
intent(in) :: naux
1032 character(len=16),
dimension(:),
intent(in) :: auxtxt
1033 integer(I4B),
intent(in) :: ibdchn
1034 integer(I4B),
intent(in) :: nlist
1035 integer(I4B),
intent(in) :: iout
1037 errmsg =
'Programmer error: record_srcdst_list_header must be overridden'
1043 naux, aux, olconv, olconv2)
1046 integer(I4B),
intent(in) :: ibdchn
1047 integer(I4B),
intent(in) :: noder
1048 integer(I4B),
intent(in) :: noder2
1049 real(DP),
intent(in) :: q
1050 integer(I4B),
intent(in) :: naux
1051 real(DP),
dimension(naux),
intent(in) :: aux
1052 logical,
optional,
intent(in) :: olconv
1053 logical,
optional,
intent(in) :: olconv2
1057 integer(I4B) :: nodeu
1058 integer(I4B) :: nodeu2
1061 if (
present(olconv))
then
1067 nodeu = this%get_nodeuser(noder)
1071 if (
present(olconv2))
then
1077 nodeu2 = this%get_nodeuser(noder2)
1081 call ubdsvd(ibdchn, nodeu, nodeu2, q, naux, aux)
1090 integer(I4B),
intent(in) :: maxbnd
1091 integer(I4B),
dimension(:),
pointer,
contiguous :: darray
1092 integer(I4B),
dimension(maxbnd),
intent(inout) :: nodelist
1093 integer(I4B),
intent(inout) :: nbound
1094 character(len=*),
intent(in) :: aname
1096 errmsg =
'Programmer error: nlarray_to_nodelist must be overridden'
1104 integer(I4B),
intent(inout) :: n
1105 integer(I4B),
dimension(:),
intent(in) :: ibound
1107 integer(I4B) :: m, ii, iis
1108 logical done, bottomcell
1113 do while (.not. done)
1115 cloop:
do ii = this%con%ia(n) + 1, this%con%ia(n + 1) - 1
1117 iis = this%con%jas(ii)
1118 if (this%con%ihc(iis) == 0 .and. m > n)
then
1121 bottomcell = .false.
1124 if (ibound(m) /= 0)
then
1134 if (bottomcell) done = .true.
1142 integer(I4B),
intent(inout) :: n
1143 real(DP),
dimension(:),
intent(in) :: sat
1145 integer(I4B) :: m, ii, iis
1146 logical(LGP) :: is_done, bottomcell
1151 do while (.not. is_done)
1153 cloop:
do ii = this%con%ia(n) + 1, this%con%ia(n + 1) - 1
1155 iis = this%con%jas(ii)
1156 if (this%con%ihc(iis) == 0 .and. m > n)
then
1159 bottomcell = .false.
1162 if (sat(m) >
dzero)
then
1172 if (bottomcell) is_done = .true.
1179 integer(I4B),
intent(in) :: node
1182 area = this%area(node)
1196 real(dp) :: area_factor
1199 integer(I4B),
intent(in) :: node
1200 integer(I4B),
intent(in) :: idx_conn
1202 real(dp) :: area_node
1203 real(dp) :: area_conn
1206 area_node = this%area(node)
1207 area_conn = this%con%hwva(idx_conn)
1210 area_factor = area_conn / area_node
1223 integer(I4B),
intent(in) :: n
1224 integer(I4B),
intent(in) :: m
1225 integer(I4B),
intent(in) :: idx_conn
1226 real(DP),
intent(out) :: width_n
1227 real(DP),
intent(out) :: width_m
1229 integer(I4B) :: isympos
1232 isympos = this%con%jas(idx_conn)
1233 width_n = this%con%hwva(isympos)
1245 select case (this%get_dis_enum())
1258 select case (this%get_dis_enum())
1271 select case (this%get_dis_enum())
real(dp) function get_area(this, node)
Return the cell area for the given node.
subroutine dis_df(this)
Define the discretization.
subroutine noder_to_string(this, noder, str)
Convert reduced node number to string (nodenumber), (k,j) or (k,i,j)
integer(i4b) function get_nodenumber_idx2(this, k, j, icheck)
real(dp) function get_area_factor(this, node, idx_conn)
@ brief Calculate the area factor for the cell connection
subroutine read_layer_array(this, nodelist, darray, ncolbnd, maxbnd, icolbnd, aname, inunit, iout)
Read a 2d double array into col icolbnd of darray.
integer(i4b) function nodeu_from_string(this, lloc, istart, istop, in, iout, line, flag_string, allow_zero)
Convert a string to a user nodenumber.
subroutine allocate_scalars(this, name_model, input_mempath)
Allocate and initialize scalar variables.
subroutine dis_mc(this, moffset, idxglo, matrix_sln)
Map cell connections in the numerical solution coefficient matrix.
logical(lgp) function is_1d(this)
@Brief return true if grid is one dimensional
integer(i4b) function get_max_npolyverts(this, closed)
Get the maximum number of cell polygon vertices.
subroutine highest_active(this, n, ibound)
Find the first highest active cell beneath cell n.
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.
integer(i4b) function get_nodenumber_idx3(this, k, i, j, icheck)
subroutine record_srcdst_list_entry(this, ibdchn, noder, noder2, q, naux, aux, olconv, olconv2)
Record list header.
subroutine write_grb(this, icelltype)
Write a binary grid file.
subroutine, public dis_transform_xy(x, y, xorigin, yorigin, angrot, xglo, yglo)
Get global (x, y) coordinates from cell-local coordinates.
subroutine read_int_array(this, line, lloc, istart, istop, iout, in, iarray, aname)
Read an integer array.
logical(lgp) function is_3d(this)
@Brief return true if grid is three dimensional
logical function supports_layers(this)
Indicates whether the grid discretization supports layers.
subroutine connection_normal(this, noden, nodem, ihc, xcomp, ycomp, zcomp, ipos)
Get normal vector components between the cell and a given neighbor. The normal points outward from th...
subroutine nodeu_to_string(this, nodeu, str)
Convert a user nodenumber to a string (nodenumber), (k,j), or (k,i,j)
integer(i4b) function noder_from_string(this, lloc, istart, istop, in, iout, line, flag_string)
Convert a string to a reduced nodenumber.
subroutine fill_int_array(this, ibuff1, ibuff2)
Fill an integer array.
subroutine get_polyverts(this, ic, polyverts, closed)
Get a 2D array of cell polygon vertices, in clockwise order starting with the lower left corner.
subroutine dis_da(this)
@brier Deallocate variables
subroutine fill_dbl_array(this, buff1, buff2)
Fill a double precision array.
subroutine dis_ac(this, moffset, sparse)
Add connections to sparse cell connectivity matrix.
subroutine record_connection_array(this, flowja, ibinun, iout)
Record a connection-based double precision array.
subroutine nodeu_to_array(this, nodeu, arr)
Convert a user nodenumber to an array (nodenumber), (k,j), or (k,i,j)
integer(i4b) function get_nodenumber_idx1(this, nodeu, icheck)
integer(i4b) function nodeu_from_cellid(this, cellid, inunit, iout, flag_string, allow_zero)
Convert a cellid string to a user nodenumber.
subroutine highest_saturated(this, n, sat)
Find the first saturated cell beneath cell n.
logical(lgp) function is_2d(this)
@Brief return true if grid is two dimensional
subroutine noder_to_array(this, noder, arr)
Convert reduced node number to array (nodenumber), (k,j) or (k,i,j)
subroutine get_dis_type(this, dis_type)
Get the discretization type (DIS, DISV, or DISU)
integer(i4b) function get_nodeuser(this, noder)
Convert a reduced nodenumber to a user node number.
integer(i4b) function get_npolyverts(this, ic, closed)
Get the number of cell polygon vertices.
subroutine get_flow_width(this, n, m, idx_conn, width_n, width_m)
@ brief Calculate the flow width between two cells
subroutine read_dbl_array(this, line, lloc, istart, istop, iout, in, darray, aname)
Read a double precision array.
subroutine dis_ar(this, icelltype)
Allocate and setup variables, and write binary grid file.
subroutine allocate_arrays(this)
Allocate and initialize arrays.
integer(i4b) function get_dis_enum(this)
Get the discretization type enumeration.
integer(i4b) function noder_from_cellid(this, cellid, inunit, iout, flag_string, allow_zero)
Convert cellid string to reduced nodenumber.
subroutine nlarray_to_nodelist(this, darray, nodelist, maxbnd, nbound, aname)
Convert an integer array to nodelist.
integer(i4b) function get_ncpl(this)
Return number of cells per layer. This is nodes for a DISU grid, as there are no layers.
real(dp) function get_cell_volume(this, n, x)
Return volume of cell n based on x value passed.
subroutine read_list(this, line_reader, in, iout, iprpak, nlist, inamedbound, iauxmultcol, nodelist, rlist, auxvar, auxname, boundname, label, pkgname, tsManager, iscloc, indxconvertflux)
Read a list using the list reader.
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. Saturation must be provided to comp...
This module contains block parser methods.
This module contains simulation constants.
integer(i4b), parameter linelength
maximum length of a standard line
integer(i4b), parameter lenmodelname
maximum length of the model name
@ disu
DISV6 discretization.
@ dis
DIS6 discretization.
@ dis1d
DIS1D6 discretization.
@ disv2d
DISV2D6 discretization.
@ disv1d
DISV1D6 discretization.
@ dis2d
DIS2D6 discretization.
@ disv
DISU6 discretization.
@ disu1d
DISU1D6 discretization.
@ disundef
undefined discretization
@ disu2d
DISU2D6 discretization.
integer(i4b), parameter lenauxname
maximum length of a aux variable
integer(i4b), parameter lenboundname
maximum length of a bound name
real(dp), parameter dpio180
real constant
real(dp), parameter dzero
real constant zero
integer(i4b), parameter lenmempath
maximum length of the memory path
This module defines variable data types.
Generic List Reader Module.
This module contains the LongLineReaderType.
character(len=lenmempath) function create_mem_path(component, subcomponent, context)
returns the path to the memory object
This module contains simulation methods.
subroutine, public store_error(msg, terminate)
Store an error message.
integer(i4b) function, public count_errors()
Return number of errors.
subroutine, public store_error_unit(iunit, terminate)
Store the file unit number.
This module contains simulation variables.
character(len=maxcharlen) errmsg
error message string
real(dp) function squadraticsaturation(top, bot, x, eps)
@ brief sQuadraticSaturation
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
subroutine, public read_value_or_time_series(textInput, ii, jj, bndElem, pkgName, auxOrBnd, tsManager, iprpak, tsLink)
Call this subroutine if the time-series link is available or needed.