54 integer(I4B),
intent(in) :: iu, iout
55 integer(I4B),
intent(in) :: jj
56 integer(I4B),
dimension(jj),
intent(inout) :: iarr
57 character(len=*),
intent(in) :: aname
58 integer(I4B),
intent(in) :: ndim
59 integer(I4B),
intent(in) :: k
62 integer(I4B) :: iclose, iconst, iprn, j, locat, ncpl, ndig
63 integer(I4B) :: nval, nvalt
65 character(len=100) :: prfmt
67 character(len=30) :: arrname
68 character(len=MAXCHARLEN) :: ermsgr
70 2
format(/, 1x, a,
' = ', i0,
' FOR LAYER ', i0)
71 3
format(/, 1x, a,
' = ', i0)
84 write (iout, 2) trim(aname), iconst, k
86 write (iout, 3) trim(aname), iconst
89 elseif (locat > 0)
then
91 read (locat, *, iostat=istat, iomsg=ermsgr) (iarr(j), j=1, jj)
93 arrname = adjustl(aname)
94 errmsg =
"Error reading data for array '"//trim(arrname)// &
95 "'. "//trim(adjustl(ermsgr))
100 iarr(j) = iarr(j) * iconst
102 if (iclose == 1)
then
112 if (isok .EQV. .false.)
exit
113 read (locat, iostat=istat, iomsg=ermsgr) &
114 (iarr(j), j=nvalt + 1, nvalt + nval)
116 arrname = adjustl(aname)
117 errmsg =
"Error reading data for array '"//trim(arrname)// &
118 "'. "//trim(adjustl(ermsgr))
123 if (nvalt ==
size(iarr))
exit
128 iarr(j) = iarr(j) * iconst
132 if (iclose == 1)
then
138 if (iprn >= 0 .and. locat /= 0)
then
139 prowcolnum = (ndim == 3)
150 integer(I4B),
intent(in) :: iu, iout
151 integer(I4B),
intent(in) :: jj, ii
152 integer(I4B),
dimension(jj, ii),
intent(inout) :: iarr
153 character(len=*),
intent(in) :: aname
154 integer(I4B),
intent(in) :: ndim
155 integer(I4B),
intent(in) :: k
158 integer(I4B) :: i, iclose, iconst, iprn, j, locat, ncpl, ndig
160 logical :: prowcolnum
161 character(len=100) :: prfmt
162 integer(I4B) :: istat
163 character(len=30) :: arrname
164 character(len=MAXCHARLEN) :: ermsgr
166 2
format(/, 1x, a,
' = ', i0,
' FOR LAYER ', i0)
167 3
format(/, 1x, a,
' = ', i0)
182 write (iout, 2) trim(aname), iconst, k
184 write (iout, 3) trim(aname), iconst
187 elseif (locat > 0)
then
190 read (locat, *, iostat=istat, iomsg=ermsgr) (iarr(j, i), j=1, jj)
192 arrname = adjustl(aname)
193 errmsg =
"Error reading data for array '"//trim(arrname)// &
194 "'. "//trim(adjustl(ermsgr))
199 iarr(j, i) = iarr(j, i) * iconst
202 if (iclose == 1)
then
212 read (locat, iostat=istat, iomsg=ermsgr) (iarr(j, i), j=1, jj)
214 arrname = adjustl(aname)
215 errmsg =
"Error reading data for array '"//trim(arrname)// &
216 "'. "//trim(adjustl(ermsgr))
221 iarr(j, i) = iarr(j, i) * iconst
225 if (iclose == 1)
then
231 if (iprn >= 0 .and. locat /= 0)
then
232 prowcolnum = (ndim == 3)
250 integer(I4B),
intent(in) :: iu
251 integer(I4B),
intent(in) :: iout
252 integer(I4B),
intent(in) :: ndim
253 integer(I4B),
intent(in) :: ncol
254 integer(I4B),
intent(in) :: nrow
255 integer(I4B),
intent(in) :: nlay
256 integer(I4B),
intent(in) :: k1, k2
257 integer(I4B),
dimension(ncol, nrow, nlay),
intent(inout) :: iarr
258 character(len=*),
intent(in) :: aname
260 integer(I4B) :: k, kk
280 integer(I4B),
intent(in) :: iu
281 integer(I4B),
intent(in) :: iout
282 integer(I4B),
intent(in) :: ndim
283 integer(I4B),
intent(in) :: nvals
284 integer(I4B),
dimension(nvals, 1, 1),
intent(inout) :: iarr
285 character(len=*),
intent(in) :: aname
295 nlay, nval, iout, k1, k2)
297 integer(I4B),
intent(in) :: iu, iout
298 integer(I4B),
intent(in) :: ncol, nrow, nlay, nval
299 integer(I4B),
dimension(nval),
intent(inout) :: iarr
300 character(len=*),
intent(in) :: aname
301 integer(I4B),
intent(in) :: ndim
302 integer(I4B),
intent(in) :: k1, k2
305 call read_array_int3d(iu, iarr, aname, ndim, ncol, nrow, nlay, iout, k1, k2)
314 integer(I4B),
intent(in) :: iu, iout
315 integer(I4B),
intent(in) :: jj
316 real(DP),
dimension(jj),
intent(inout) :: darr
317 character(len=*),
intent(in) :: aname
318 integer(I4B),
intent(in) :: ndim
319 integer(I4B),
intent(in) :: k
322 integer(I4B) :: j, iclose, iprn, locat, ncpl, ndig
324 logical :: prowcolnum
325 character(len=100) :: prfmt
326 integer(I4B) :: istat
327 integer(I4B) :: nvalt, nval
328 character(len=30) :: arrname
329 character(len=MAXCHARLEN) :: ermsgr
331 2
format(/, 1x, a,
' = ', g14.7,
' FOR LAYER ', i0)
332 3
format(/, 1x, a,
' = ', g14.7)
345 write (iout, 2) trim(aname), cnstnt, k
347 write (iout, 3) trim(aname), cnstnt
350 elseif (locat > 0)
then
352 read (locat, *, iostat=istat, iomsg=ermsgr) (darr(j), j=1, jj)
354 arrname = adjustl(aname)
355 errmsg =
"Error reading data for array '"// &
356 trim(adjustl(arrname))//
"'. "//trim(adjustl(ermsgr))
361 darr(j) = darr(j) * cnstnt
363 if (iclose == 1)
then
373 if (isok .EQV. .false.)
exit
374 read (locat, iostat=istat, iomsg=ermsgr) &
375 (darr(j), j=nvalt + 1, nvalt + nval)
377 arrname = adjustl(aname)
378 errmsg =
"Error reading data for array '"// &
379 trim(adjustl(arrname))//
"'. "//trim(adjustl(ermsgr))
384 if (nvalt ==
size(darr))
exit
389 darr(j) = darr(j) * cnstnt
393 if (iclose == 1)
then
399 if (iprn >= 0 .and. locat /= 0)
then
400 prowcolnum = (ndim == 3)
411 integer(I4B),
intent(in) :: iu, iout
412 integer(I4B),
intent(in) :: jj, ii
413 real(DP),
dimension(jj, ii),
intent(inout) :: darr
414 character(len=*),
intent(in) :: aname
415 integer(I4B),
intent(in) :: ndim
416 integer(I4B),
intent(in) :: k
419 integer(I4B) :: i, iclose, iprn, j, locat, ncpl, ndig
422 logical :: prowcolnum
423 character(len=100) :: prfmt
424 integer(I4B) :: istat
425 character(len=30) :: arrname
426 character(len=MAXCHARLEN) :: ermsgr
428 2
format(/, 1x, a,
' = ', g14.7,
' FOR LAYER ', i0)
429 3
format(/, 1x, a,
' = ', g14.7)
444 write (iout, 2) trim(aname), cnstnt, k
446 write (iout, 3) trim(aname), cnstnt
449 elseif (locat > 0)
then
452 read (locat, *, iostat=istat, iomsg=ermsgr) (darr(j, i), j=1, jj)
454 arrname = adjustl(aname)
455 errmsg =
"Error reading data for array '"// &
456 trim(adjustl(arrname))//
"'. "//trim(adjustl(ermsgr))
461 darr(j, i) = darr(j, i) * cnstnt
464 if (iclose == 1)
then
474 read (locat, iostat=istat, iomsg=ermsgr) (darr(j, i), j=1, jj)
476 arrname = adjustl(aname)
477 errmsg =
"Error reading data for array '"// &
478 trim(adjustl(arrname))//
"'. "//trim(adjustl(ermsgr))
483 darr(j, i) = darr(j, i) * cnstnt
487 if (iclose == 1)
then
493 if (iprn >= 0 .and. locat /= 0)
then
494 prowcolnum = (ndim == 3)
512 integer(I4B),
intent(in) :: iu
513 integer(I4B),
intent(in) :: iout
514 integer(I4B),
intent(in) :: ndim
515 integer(I4B),
intent(in) :: ncol
516 integer(I4B),
intent(in) :: nrow
517 integer(I4B),
intent(in) :: nlay
518 integer(I4B),
intent(in) :: k1, k2
519 real(DP),
dimension(ncol, nrow, nlay),
intent(inout) :: darr
520 character(len=*),
intent(in) :: aname
522 integer(I4B) :: k, kk
545 integer(I4B),
intent(in) :: iu
546 integer(I4B),
intent(in) :: iout
547 integer(I4B),
intent(in) :: ndim
548 integer(I4B),
intent(in) :: nvals
549 real(DP),
dimension(nvals, 1, 1),
intent(inout) :: darr
550 character(len=*),
intent(in) :: aname
560 nlay, nval, iout, k1, k2)
562 integer(I4B),
intent(in) :: iu, iout
563 integer(I4B),
intent(in) :: ncol, nrow, nlay, nval
564 real(DP),
dimension(nval),
intent(inout) :: darr
565 character(len=*),
intent(in) :: aname
566 integer(I4B),
intent(in) :: ndim
567 integer(I4B),
intent(in) :: k1, k2
570 call read_array_dbl3d(iu, darr, aname, ndim, ncol, nrow, nlay, iout, k1, k2)
586 integer(I4B),
intent(in) :: iu
587 integer(I4B),
intent(in) :: iout
588 character(len=*),
intent(in) :: aname
589 integer(I4B),
intent(out) :: locat
590 integer(I4B),
intent(out) :: iconst
591 integer(I4B),
intent(out) :: iclose
592 integer(I4B),
intent(out) :: iprn
594 integer(I4B) :: icol, icol1, istart, istop, n
596 character(len=MAXCHARLEN) :: fname
597 character(len=:),
allocatable :: line
600 call read_control_1(iu, iout, aname, locat, iclose, line, icol, fname)
603 call urword(line, icol, istart, istop, 2, iconst, r, iout, iu)
611 call urword(line, icol, istart, istop, 1, n, r, iout, iu)
612 if (line(istart:istop) ==
'FACTOR')
then
613 call urword(line, icol, istart, istop, 2, iconst, r, iout, iu)
614 if (iconst == 0) iconst = 1
621 call read_control_2(iu, iout, fname, line, icol, locat, iclose, iprn)
635 integer(I4B),
intent(in) :: iu
636 integer(I4B),
intent(in) :: iout
637 character(len=*),
intent(in) :: aname
638 integer(I4B),
intent(out) :: locat
639 real(DP),
intent(out) :: cnstnt
640 integer(I4B),
intent(out) :: iclose
641 integer(I4B),
intent(out) :: iprn
644 integer(I4B) :: icol, icol1, istart, istop, n
646 character(len=MAXCHARLEN) :: fname
647 character(len=:),
allocatable :: line
650 call read_control_1(iu, iout, aname, locat, iclose, line, icol, fname)
653 call urword(line, icol, istart, istop, 3, n, cnstnt, iout, iu)
661 call urword(line, icol, istart, istop, 1, n, r, iout, iu)
662 if (line(istart:istop) ==
'FACTOR')
then
663 call urword(line, icol, istart, istop, 3, n, cnstnt, iout, iu)
671 call read_control_2(iu, iout, fname, line, icol, locat, iclose, iprn)
680 integer(I4B),
intent(in) :: iu
681 integer(I4B),
intent(in) :: iout
682 character(len=*),
intent(in) :: aname
683 integer(I4B),
intent(out) :: locat
684 integer(I4B),
intent(out) :: iclose
685 character(len=:),
allocatable,
intent(inout) :: line
686 integer(I4B),
intent(inout) :: icol
687 character(len=*),
intent(inout) :: fname
690 integer(I4B) :: istart, istop, n
696 call u9rdcom(iu, iout, line, ierr)
701 call urword(line, icol, istart, istop, 1, n, r, iout, iu)
702 if (line(istart:istop) .eq.
'CONSTANT')
then
704 elseif (line(istart:istop) .eq.
'INTERNAL')
then
706 elseif (line(istart:istop) .eq.
'OPEN/CLOSE')
then
707 call urword(line, icol, istart, istop, 0, n, r, iout, iu)
708 fname = line(istart:istop)
712 errmsg =
'READING CONTROL RECORD FOR '// &
713 trim(adjustl(aname))//
"'. "// &
714 'Use CONSTANT, INTERNAL, or OPEN/CLOSE.'
716 call store_error_unit(iu)
727 integer(I4B),
intent(in) :: iu, iout, iclose
728 character(len=*),
intent(in) :: fname
729 character(len=*),
intent(inout) :: line
730 integer(I4B),
intent(inout) :: icol, iprn, locat
732 integer(I4B) :: i, n, istart, istop, lenkey
734 character(len=MAXCHARLEN) :: keyword
740 if (locat .ne. 0)
then
744 call urword(line, icol, istart, istop, 1, n, r, iout, iu)
745 keyword = line(istart:istop)
746 lenkey = len_trim(keyword)
747 select case (keyword)
749 if (iclose == 0)
then
750 errmsg =
'"(BINARY)" option for array input is valid only if'// &
751 ' OPEN/CLOSE is also specified.'
758 call urword(line, icol, istart, istop, 2, iprn, r, iout, iu)
763 errmsg =
'Invalid option found in array-control record: "' &
770 if (iclose == 0)
then
776 call openfile(locat, iout, fname,
'OPEN/CLOSE', fmtarg_opt=
form, &
780 call openfile(locat, iout, fname,
'OPEN/CLOSE')
791 integer(I4B),
intent(inout) :: iprn
792 character(len=*),
intent(out) :: prfmt
793 logical,
intent(in) :: prowcolnum
794 integer(I4B),
intent(out) :: ncpl, ndig
796 integer(I4B) :: nwidp
803 if (iprn > 9) iprn = 0
847 integer(I4B),
intent(inout) :: iprn
848 character(len=*),
intent(out) :: prfmt
849 logical,
intent(in) :: prowcolnum
850 integer(I4B),
intent(out) :: ncpl, ndig
852 integer(I4B) :: nwidp
853 character(len=1) :: editdesc
860 if (iprn > 21) iprn = 0
975 if (editdesc ==
'F')
then
987 ncpl, ndig, prowcolnum)
989 integer(I4B),
intent(in) :: iout, jj, ii, k
990 integer(I4B),
intent(in) :: ncpl
991 integer(I4B),
intent(in) :: ndig
992 integer(I4B),
dimension(jj, ii),
intent(in) :: iarr
993 character(len=*),
intent(in) :: aname
994 character(len=*),
intent(in) :: prfmt
995 logical,
intent(in) :: prowcolnum
999 2
format(/, 1x, a, 1x,
'FOR LAYER ', i0)
1002 if (iout <= 0)
return
1006 write (iout, 2) trim(aname), k
1008 write (iout, 3) trim(aname)
1012 if (prowcolnum)
then
1014 call ucolno(1, jj, 4, ncpl, ndig, iout)
1018 write (iout, prfmt) i, (iarr(j, i), j=1, jj)
1022 errmsg =
'Program error printing array '//trim(aname)// &
1023 ': ii > 1 when prowcolnum is false.'
1028 write (iout, prfmt) (iarr(j, 1), j=1, jj)
1035 ncpl, ndig, prowcolnum)
1037 integer(I4B),
intent(in) :: iout, jj, ii, k
1038 integer(I4B),
intent(in) :: ncpl
1039 integer(I4B),
intent(in) :: ndig
1040 real(DP),
dimension(jj, ii),
intent(in) :: darr
1041 character(len=*),
intent(in) :: aname
1042 character(len=*),
intent(in) :: prfmt
1043 logical,
intent(in) :: prowcolnum
1045 integer(I4B) :: i, j
1047 2
format(/, 1x, a, 1x,
'FOR LAYER ', i0)
1050 if (iout <= 0)
return
1054 write (iout, 2) trim(aname), k
1056 write (iout, 3) trim(aname)
1060 if (prowcolnum)
then
1062 call ucolno(1, jj, 4, ncpl, ndig, iout)
1066 write (iout, prfmt) i, (darr(j, i), j=1, jj)
1070 errmsg =
'Program error printing array '//trim(aname)// &
1071 ': ii > 1 when prowcolnum is false.'
1076 write (iout, prfmt) (darr(j, 1), j=1, jj)
1084 integer(I4B),
intent(in) :: locat
1085 integer(I4B),
intent(in) :: iout
1086 character(len=*),
intent(in) :: arrname
1087 integer,
intent(out) :: nval
1089 integer(I4B) :: istat
1090 integer(I4B) :: kstp, kper, m1, m2, m3
1091 real(dp) :: pertim, totim
1092 character(len=16) :: text
1093 character(len=MAXCHARLEN) :: ermsgr
1094 character(len=*),
parameter :: fmthdr = &
1095 "(/,1X,'HEADER FROM BINARY FILE HAS FOLLOWING ENTRIES',&
1096 &/,4X,'KSTP: ',I0,' KPER: ',I0,&
1097 &/,4x,'PERTIM: ',G0,' TOTIM: ',G0,&
1099 &/,4X,'MSIZE 1: ',I0,' MSIZE 2: ',I0,' MSIZE 3: ',I0)"
1102 read (locat, iostat=istat, iomsg=ermsgr) kstp, kper, pertim, totim, text, &
1106 if (istat /= 0)
then
1107 errmsg =
"Error reading data for array '"//adjustl(trim(arrname))// &
1108 "'. "//trim(adjustl(ermsgr))
1115 write (iout, fmthdr) kstp, kper, pertim, totim, text, m1, m2, m3
1133 integer(I4B),
intent(in) :: nval
1134 integer(I4B),
intent(in) :: nvalt
1135 integer(I4B),
intent(in) :: arrsize
1136 character(len=*),
intent(in) :: aname
1137 integer(I4B),
intent(in) :: locat
1140 logical(LGP) :: isok
1145 if (nvalt + nval > arrsize)
then
1146 write (
errmsg,
'(a,i0,a,1x,a,1x,a,i0,a,1x,i0,3(1x,a))') &
1147 'The size of the data array calculated from the binary header (', &
1148 nval,
') will exceed the remainder of the', trim(adjustl(aname)), &
1149 'data array (', arrsize,
') array by', nvalt + nval - arrsize, &
1150 'elements. This is usually caused by incorrect assignment of', &
1151 '(m1,m2,m3) in the binary header. See the mf6io.pdf document', &
1152 'for information on assigning (m1,m2,m3).'
subroutine read_array_dbl1d_layered(iu, darr, aname, ndim, ncol, nrow, nlay, nval, iout, k1, k2)
subroutine read_control_2(iu, iout, fname, line, icol, locat, iclose, iprn)
subroutine read_control_1(iu, iout, aname, locat, iclose, line, icol, fname)
subroutine read_array_dbl3d_all(iu, darr, aname, ndim, nvals, iout)
subroutine, public read_binary_header(locat, iout, arrname, nval)
subroutine print_array_dbl(darr, aname, iout, jj, ii, k, prfmt, ncpl, ndig, prowcolnum)
subroutine read_array_int2d(iu, iarr, aname, ndim, jj, ii, iout, k)
subroutine read_array_int3d(iu, iarr, aname, ndim, ncol, nrow, nlay, iout, k1, k2)
subroutine read_array_dbl2d(iu, darr, aname, ndim, jj, ii, iout, k)
subroutine read_control_dbl(iu, iout, aname, locat, cnstnt, iclose, iprn)
subroutine read_array_dbl1d(iu, darr, aname, ndim, jj, iout, k)
subroutine read_array_int1d(iu, iarr, aname, ndim, jj, iout, k)
subroutine build_format_int(iprn, prfmt, prowcolnum, ncpl, ndig)
logical(lgp) function check_binary_size(nval, nvalt, arrsize, aname, locat)
@ brief Check the binary data size
subroutine read_array_int1d_layered(iu, iarr, aname, ndim, ncol, nrow, nlay, nval, iout, k1, k2)
subroutine read_array_int3d_all(iu, iarr, aname, ndim, nvals, iout)
subroutine build_format_dbl(iprn, prfmt, prowcolnum, ncpl, ndig)
subroutine read_control_int(iu, iout, aname, locat, iconst, iclose, iprn)
subroutine read_array_dbl3d(iu, darr, aname, ndim, ncol, nrow, nlay, iout, k1, k2)
subroutine print_array_int(iarr, aname, iout, jj, ii, k, prfmt, ncpl, ndig, prowcolnum)
This module contains simulation constants.
integer(i4b), parameter linelength
maximum length of a standard line
integer(i4b), parameter namedboundflag
named bound flag
integer(i4b), parameter lenbigline
maximum length of a big line
integer(i4b), parameter lenboundname
maximum length of a bound name
real(dp), parameter dzero
real constant zero
integer(i4b), parameter maxcharlen
maximum length of char string
real(dp), parameter done
real constant 1
This module defines variable data types.
This module contains simulation methods.
subroutine, public ustop(stopmess, ioutlocal)
Stop the simulation.
subroutine, public store_error(msg, terminate)
Store an error message.
subroutine, public store_error_unit(iunit, terminate)
Store the file unit number.
This module contains simulation variables.
character(len=maxcharlen) errmsg
error message string