blob: a215550a7ac9f65eb11aeccbcc815b3b7aeba89b [file] [log] [blame]
c---------------------------------------------------------------------
c---------------------------------------------------------------------
subroutine read_input
c---------------------------------------------------------------------
c---------------------------------------------------------------------
implicit none
include 'applu.incl'
integer fstatus
!$ integer omp_get_max_threads
!$ external omp_get_max_threads
c---------------------------------------------------------------------
c if input file does not exist, it uses defaults
c ipr = 1 for detailed progress output
c inorm = how often the norm is printed (once every inorm iterations)
c itmax = number of pseudo time steps
c dt = time step
c omega 1 over-relaxation factor for SSOR
c tolrsd = steady state residual tolerance levels
c nx, ny, nz = number of grid points in x, y, z directions
c---------------------------------------------------------------------
write(*, 1000)
open (unit=3,file='inputlu.data',status='old',
> access='sequential',form='formatted', iostat=fstatus)
if (fstatus .eq. 0) then
write(*, *) 'Reading from input file inputlu.data'
read (3,*)
read (3,*)
read (3,*) ipr, inorm
read (3,*)
read (3,*)
read (3,*) itmax
read (3,*)
read (3,*)
read (3,*) dt
read (3,*)
read (3,*)
read (3,*) omega
read (3,*)
read (3,*)
read (3,*) tolrsd(1),tolrsd(2),tolrsd(3),tolrsd(4),tolrsd(5)
read (3,*)
read (3,*)
read (3,*) nx0, ny0, nz0
close(3)
else
ipr = ipr_default
inorm = inorm_default
itmax = itmax_default
dt = dt_default
omega = omega_default
tolrsd(1) = tolrsd1_def
tolrsd(2) = tolrsd2_def
tolrsd(3) = tolrsd3_def
tolrsd(4) = tolrsd4_def
tolrsd(5) = tolrsd5_def
nx0 = isiz1
ny0 = isiz2
nz0 = isiz3
endif
c---------------------------------------------------------------------
c check problem size
c---------------------------------------------------------------------
if ( ( nx0 .lt. 4 ) .or.
> ( ny0 .lt. 4 ) .or.
> ( nz0 .lt. 4 ) ) then
write (*,2001)
2001 format (5x,'PROBLEM SIZE IS TOO SMALL - ',
> /5x,'SET EACH OF NX, NY AND NZ AT LEAST EQUAL TO 5')
stop
end if
if ( ( nx0 .gt. isiz1 ) .or.
> ( ny0 .gt. isiz2 ) .or.
> ( nz0 .gt. isiz3 ) ) then
write (*,2002)
2002 format (5x,'PROBLEM SIZE IS TOO LARGE - ',
> /5x,'NX, NY AND NZ SHOULD BE EQUAL TO ',
> /5x,'ISIZ1, ISIZ2 AND ISIZ3 RESPECTIVELY')
stop
end if
write(*, 1001) nx0, ny0, nz0
write(*, 1002) itmax
!$ write(*, 1003) omp_get_max_threads()
write(*, *)
1000 format(//,' NAS Parallel Benchmarks (NPB3.3-OMP)',
> ' - LU Benchmark', /)
1001 format(' Size: ', i4, 'x', i4, 'x', i4)
1002 format(' Iterations: ', i5)
1003 format(' Number of available threads: ', i5)
return
end