Skip to content
inpar_dyn.F90 5.61 KiB
Newer Older
Fabio Roberto Vitello's avatar
Fabio Roberto Vitello committed
!=======================================================================
!
!
                          SUBROUTINE inpar_dyn
!
!=======================================================================
!
!
!
!     Subroutine to read in parameters.
!
!     Input parameters:
!
!        headline  : identification string for the run.
!        nsteps    : number of timesteps.
!	 max_time  : maximum cpu time allowed for this run
!        dtime     : integrator  timestep.
!        dt_var    : T use dt variable, F use dtime as fix dt
!        tol       : error tolerance; 0.0 => exact (PP) calculation.
!        eps       : potential softening parameter.
!        usequad   : option to include (.TRUE.) quadrupole terms.
!
!                    nbodies
!                    ndimi
!		     mass_read
!
!                    znow
!		     tstep
!		     rsize
!		     rmin(1,2,ndim)
!		     
!
!=======================================================================
!
	 USE fly_h
	implicit none
	INCLUDE 'mpif.h'
        
	INTEGER(KIND=4) :: null_int4
	LOGICAL 	:: null_log
	REAL(KIND=8) 	:: null_r8

!=======================================================================
!   Read parameters, close the file.
!   --------------------------------
!   Open parameter file.
!   --------------------

	IF(me.eq.0) THEN
       	
     	OPEN(UNIT=upars,FILE=parsfile,STATUS='OLD')
	
        READ(upars,30) headline
        READ(upars,15) null_int4
        READ(upars,48) max_time
        READ(upars,10) dtime
        READ(upars,40) dt_var
        READ(upars,20) tol
        READ(upars,10) eps
        READ(upars,40) null_log
        READ(upars,10) null_r8
        READ(upars,10) null_r8
        READ(upars,10) null_r8
        READ(upars,12) null_r8
        READ(upars,45) null_int4
        READ(upars,10) null_r8
        READ(upars,35) ibodfile
        READ(upars,60) inasc
        READ(upars,35) f32
        READ(upars,60) ouasc
        READ(upars,15) chk_file	
	
	
        CLOSE(UNIT=upars)


	IF(ouasc.eq.'b') ouasc='B' 
	IF(ouasc.eq.'a') ouasc='A' 
	IF(ouasc.ne.'A' .and. ouasc .ne. 'B')  THEN
	  ouasc='B' 
		write(uterm,*)'WARNING: OBOD_TYPE wrong type. Forced to B (BINARY)'
		call flush(uterm)
         ENDIF
	IF(inasc.eq.'b') inasc='B' 
	IF(inasc.eq.'a') inasc='A' 
	IF(inasc.eq.'s') inasc='S' 
	IF(inasc.eq.'t') inasc='T' 
	IF(inasc.eq.'r') inasc='R' 
	IF(inasc.ne.'A' .and. inasc .ne. 'B' .and. inasc .ne. 'S'.and. inasc .ne. 'T'.and. inasc .ne. 'R')  THEN
	  inasc='B' 
	  write(uterm,*)'WARNING: IBOD_TYPE wrong type. Forced to B (BINARY)'
	  call flush(uterm)
        ENDIF

	IF(ouasc.eq.'b') ouasc='B' 
	IF(ouasc.eq.'a') ouasc='A' 
	IF(ouasc.ne.'A' .and. ouasc .ne. 'B')  THEN
	  ouasc='B' 
	  write(uterm,*)'WARNING: OBOD_TYPE wrong type. Forced to B (BINARY)'
        ENDIF
      

        
	OPEN(UNIT=upar1,FILE=par1file,STATUS='OLD')
	
        READ(upar1,10) null_r8
        READ(upar1,15) null_int4
        READ(upar1,15) tst_max
        READ(upar1,15) ncrit
        READ(upar1,15) nbodcrit        
        READ(upar1,20) null_r8        
        READ(upar1,20) null_r8        
        READ(upar1,15) l_end
 
	
	CLOSE(unit=upar1)

	

200	CONTINUE
	CLOSE(UNIT=upar35)
	
	write(uterm,*)' '             
	write(uterm,*)' '             
	write(uterm,*)'----------------------------'             
	write(uterm,*)'T-step = ',tstep+1,'  INPUT DATA'
	write(uterm,*)'----------------------------'             
        write(uterm,130) 'HEADER   =',headline
        write(uterm,148) 'MAX_TIME =',max_time
        write(uterm,110) 'DELTA T. =',dtime
        write(uterm,140) 'DT VAR.  =',dt_var
        write(uterm,120) 'OPEN PAR.=',tol
        write(uterm,110) 'SOFT PAR.=',eps
        write(uterm,110) 'MASS BODY=',mass_read
        write(uterm,135) 'IBOD_FILE=',ibodfile(1:LEN_TRIM(ibodfile))
        write(uterm,160) 'IBOD_TYPE=',inasc
        write(uterm,135) 'OBOD_FILE=',f32(1:LEN_TRIM(f32))
        write(uterm,160) 'OBOD_TYPE=',ouasc
        write(uterm,115) 'CHK_FILE =',chk_file
        WRITE(uterm,110) 'CURR.REDS=',znow
        WRITE(uterm,115) 'CURR.STEP=',tstep
        WRITE(uterm,115) 'MAX  STEP=',tst_max
        WRITE(uterm,115) 'LIV. GROU=',ncrit
        WRITE(uterm,115) 'BODY GRO.=',nbodcrit	
	write(uterm,*)'----------------------------'             


      ENDIF   ! if(me.eq.0)	

10	FORMAT(10x,F20.15)
12	FORMAT(10x,F10.6)
13	FORMAT(10x,E20.15)
15	FORMAT(10x,I4)
16	FORMAT(10x,I5)
20	FORMAT(10x,F5.2)
25	FORMAT(10x,3(1x,F3.1))
30	FORMAT(10x,A)
35	FORMAT(10x,A)
40	FORMAT(10x,L1)
45	FORMAT(10x,I12)	
48	FORMAT(10x,I20)	
60	FORMAT(10x,A1)	
110	FORMAT(A10,F20.15)
113	FORMAT(A10,E20.15)
115	FORMAT(A10,I4)
130	FORMAT(A10,A)
135	FORMAT(A10,A)
120	FORMAT(A10,F5.2)
122	FORMAT(A10,F9.4)
140	FORMAT(A10,L1)
148	FORMAT(A10,I20)
160	FORMAT(A10,A1)	

	
!------------ SEND PARAMETERS using Broadcast

	NLONG=1	
	CALL MPI_Bcast(max_time, NLONG, MPI_INTEGER4, PE0, MPI_COMM_WORLD, ierror)
	CALL MPI_Bcast(dtime, NLONG, MPI_REAL8, PE0, MPI_COMM_WORLD, ierror)
	CALL MPI_Bcast(dt_var, NLONG, MPI_LOGICAL, PE0, MPI_COMM_WORLD, ierror)
	CALL MPI_Bcast(tol, NLONG, MPI_REAL8, PE0, MPI_COMM_WORLD, ierror)
	CALL MPI_Bcast(eps, NLONG, MPI_REAL8, PE0, MPI_COMM_WORLD, ierror)
	CALL MPI_Bcast(inasc, NLONG, MPI_CHARACTER, PE0, MPI_COMM_WORLD, ierror)
	CALL MPI_Bcast(ouasc, NLONG, MPI_CHARACTER , PE0, MPI_COMM_WORLD, ierror)
	CALL MPI_Bcast(chk_file, NLONG, MPI_INTEGER, PE0, MPI_COMM_WORLD, ierror)

        CALL MPI_Bcast(tst_max, NLONG, MPI_INTEGER, PE0, MPI_COMM_WORLD, ierror)
        CALL MPI_Bcast(ncrit, NLONG, MPI_INTEGER, PE0, MPI_COMM_WORLD, ierror)
        CALL MPI_Bcast(nbodcrit, NLONG, MPI_INTEGER, PE0, MPI_COMM_WORLD, ierror)
        CALL MPI_Bcast(l_end, NLONG, MPI_INTEGER, PE0, MPI_COMM_WORLD, ierror)
	
        RETURN
        END