diff --git a/src/read_input_file.f90 b/src/read_input_file.f90
index 937ffa2e1ca88453311bee5510b880d7dcf2fc20..c41bfaf5286b5a0eb9f796ba95aa8b37f35de479 100644
--- a/src/read_input_file.f90
+++ b/src/read_input_file.f90
@@ -16,8 +16,8 @@
 !------------------------------------------------------------------------------|
 !------------------------------------------------------------------------------|
 
-subroutine read_input_file (params,threadinfo,material0,mat,             &
-                            surface,boxes,sections,cube_faces)         
+subroutine read_input_file (params,threadinfo,material0,mat,surface,boxes,     &
+                           sections,cube_faces)         
 
 !------------------------------------------------------------------------------|
 !(((((((((((((((( Purpose of the routine  ))))))))))))))))))))))))))))))))))))))
@@ -41,6 +41,8 @@ subroutine read_input_file (params,threadinfo,material0,mat,             &
 !     material 0 is void
 ! leveluniform_oct is level of uniform discretization (power of 2)
 ! levelmax_oct is maximum discretization level
+! matrule is the flag that determines the rule used for assigning material
+!    properties within the model volume
 ! levelcut is maximum level (within a leave) used to estimate integrals
 !    in divfem approximation
 ! levelapprox is maximum level to use to estimate positive volume
@@ -157,6 +159,22 @@ if (iproc==0) call scanfile (params%infile,'material0',material0,ires)
 call mpi_bcast(material0,1,mpi_integer,0,mpi_comm_world,ierr)
 write(threadinfo%Logunit,*) 'material0 ',material0
 
+params%bulkvisc=.false.
+if (iproc==0) then
+  call scanfile (params%infile,'bulkvisc',answer,ires)
+  params%bulkvisc=(trim(answer)=='T')
+endif
+call mpi_bcast(params%bulkvisc,1,mpi_logical,0,mpi_comm_world,ierr)
+write(threadinfo%Logunit,*) 'bulkvisc ',params%bulkvisc
+
+params%init_e2d=.false.
+if (iproc==0) then
+  call scanfile (params%infile,'init_e2d',answer,ires)
+  params%init_e2d=(trim(answer)=='T')
+endif
+call mpi_bcast(params%init_e2d,1,mpi_logical,0,mpi_comm_world,ierr)
+write(threadinfo%Logunit,*) 'init_e2d ',params%init_e2d
+
 do i=0,params%nmat
    write(cm,'(i3)') i
    il=1
@@ -248,19 +266,21 @@ if (iproc==0) call scanfile (params%infile,'leveluniform_oct',params%levelunifor
 call mpi_bcast(params%leveluniform_oct,1,mpi_integer,0,mpi_comm_world,ierr)
 write(threadinfo%Logunit,*) 'leveluniform_oct',params%leveluniform_oct
 
-
 params%levelmax_oct=4
 if (iproc==0) call scanfile (params%infile,'levelmax_oct',params%levelmax_oct,ires)
 call mpi_bcast(params%levelmax_oct,1,mpi_integer,0,mpi_comm_world,ierr)
 write(threadinfo%Logunit,*) 'levelmax_oct',params%levelmax_oct
 
+params%matrule=0
+if (iproc==0) call scanfile (params%infile,'matrule',params%matrule,ires)
+call mpi_bcast(params%matrule,1,mpi_integer,0,mpi_comm_world,ierr)
+write(threadinfo%Logunit,*) 'matrule',params%matrule
 
 params%levelcut=2
 if (iproc==0) call scanfile (params%infile,'levelcut',params%levelcut,ires)
 call mpi_bcast(params%levelcut,1,mpi_integer,0,mpi_comm_world,ierr)
 write(threadinfo%Logunit,*) 'levelcut',params%levelcut
 
-
 params%levelapprox=3
 if (iproc.eq.0) call scanfile (params%infile,'levelapprox',params%levelapprox,ires)
 call mpi_bcast(params%levelapprox,1,mpi_integer,0,mpi_comm_world,ierr)