!------------------------------------------------------------------------------|
!------------------------------------------------------------------------------|
!                                                                              |
!              ||===\\                                                         | 
!              ||    \\                                                        |
!              ||     ||   //==\\   ||  ||   //==||  ||/==\\                   |
!              ||     ||  ||    ||  ||  ||  ||   ||  ||    ||                  |
!              ||    //   ||    ||  ||  ||  ||   ||  ||                        |
!              ||===//     \\==//    \\==\\  \\==\\  ||                        |
!                                                                              |
!------------------------------------------------------------------------------|
!------------------------------------------------------------------------------|
!                                                                              |
!              READ_INPUT_FILE    Feb. 2007                                    |
!                                                                              |
!------------------------------------------------------------------------------|
!------------------------------------------------------------------------------|

subroutine read_input_file (params,threadinfo,material0,mat,surface,boxes,     &
                           sections,cube_faces,nest,bcdef)         

!------------------------------------------------------------------------------|
!(((((((((((((((( Purpose of the routine  ))))))))))))))))))))))))))))))))))))))
!------------------------------------------------------------------------------|

! subroutine where default values for all input parameters other than the
! controlling parameters are defined
! it is also where the input file 'input.txt' is read and the corresponding
! parameters are set

! nstep is number of time steps
! ns is number of surface - read in read_controlling_parameters
! dt is time step length
!  (note that if dt is negative, it will be replaced by a dynamically
!   determined value derived from Courant's condition and Courant's
!   parameter called "courant")
! nmat is number of material - read in read_controlling_parameters
! material0 is material number for stuff above 1st surface
!   or reference material when there is no surface
! mat:material properties, including, density,viscosity and compressibility
!     penalty parameters; ms is dimensioned (0:nmat)
!     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
!    beyond levelcut
! noctreemax is maximum size of octrees when they are created
! penalty is penalty parameters for linear constraints arising from
!    bad faces in octree discretization (should be large)
! tempscale is temperature scaling parameter
! strain_ratio is used for refinement (if=1 no refinement;
!    if=0 uniform refinement) down to levelmax_oct
! istrain_refine: two algortihms are allowed for the refinement based on the strain ratio
!    one is based on the maximum difference between any two components of velocity
!    inside an element (istrain_refine=0) the other is based on the norm of the
!    velocity gradient (istrain_refine=1). Default is istrain_refine=1
! courant is ratio of courant conditoin used for moving particles (<1)
! stretch is the maximum allowed increase in linear length between two initially
!    adjacent particles on any surface; when this stretch is achieved, a new
!    particle is inserted on the surface, half-way along the stretched edge
!    stretch is specific to each surface
! anglemax is the maximum allowed angle between two adjacent normals; when the
!    angle is reached, a new point is injected
!    anglemax is specific to each surface
!    default value is 1.d0
! surface are surface structure
!    for each surface, one needs to define a levelt, itype, material and fnme.
!    levelt is the initial level for the particles on the surface; to be accurate
!    and avoid wholes in the surface during definition of the lsf, one should use
!    levelt=levelmax_oct+1 for all surfaces as a minimum value; itype should be 1
!    for foldable surfaces or 0 for nonfoldable surfaces; material is the material
!    type refering to the table of material available (max nmat); fnme is the name
!    of the file containing the geometry of the particles defining the surface
! npmin is the minimum number of particles in the strain cloud per element
! npmax is the maximum number of particles in the strain cloud per element
!       at levelmax_oct level (smallest possible elements)
! nonlineariter is number of iterations in nonlinear analysis
!   if nonlineariter is 0 no nonlinear iterations are performed (linear analysis)
!   if nonlineariter is positive, nonlineariter is the number of iterations performed
!                         regardless of convergence of solution
!   if nonlineariter is negative, -nonlineariter is maximum number of iterations allowed
!                         to reach convergence as determined by tol
! tol is relative tolerance (duvw/uvw) to achieve convergence
! criterion is criterion used to define the octree in the vicinity of the
!    sufaces; criterion 1 corresponds to imposing that all leaves that contain at
!    least one particle of any surface is at levelmax_oct; criterion 2 corresponds
!    to imposing that discretization is proportional to the curvature of the
!    surface; curvature is calculated from the local divergence of the normals.
!    the criterion is specific to each surface (default is 2)
! anglemaxoctree is only defined for criterion 2; it is the maximum allowable angle
!    between two adjacent normals; if the angle is greater than anglemaxoctree, the local
!    octree leaves are forced to be at level levelmax_oct; otherwise they are
!    proportionally larger (smaller levels) (default is 10)
!    anglemaxoctree is specific to each surface
!   (be aware that these files are enormous...)
! niter_move is number of iterations used to move particles in an
!  implicit, mid-point algorithm
! restart is a restart flag; if irestart is not 0, the run will restart from
!    an output file given by restartfile and at step irestart+1 - read in
!    read_controlling_parameters
! ismooth is a flag to impose an additional level of smoothing after refinement
!    for the surfaces and strain rate. It ensures that no leaf is flanked by
!    other leaves diffeing by more than 1 level of refinement
!    If ismooth is 0, no smoothing is performed; if ismooth is set to 1, smoothing
!    is performed (default is 1)
! boxes is the set of nboxes box structures defined by the user where a set level
!    of discretization is imposed

!------------------------------------------------------------------------------|
!((((((((((((((((  declaration of the subroutine arguments  ))))))))))))))))))))
!------------------------------------------------------------------------------|

use constants
use definitions
!use mpi
use threads

implicit none

include 'mpif.h'

type (parameters) params
type (thread) threadinfo
integer material0
type (material) mat(0:params%nmat)
type (sheet) surface(params%ns)
type (box) boxes(params%nboxes)
type (cross_section) sections(params%nsections)
type (face),dimension(6) :: cube_faces
type (nest_info) :: nest
type (bc_definition) :: bcdef

!------------------------------------------------------------------------------|
!(((((((((((((((( declaration of the subroutine internal variables )))))))))))))
!------------------------------------------------------------------------------|

integer ires,i,il,ierr,iproc,nproc,j
character(len=72) :: shift
character(len=3)  :: cm
character(len=1)  :: answer

!------------------------------------------------------------------------------|
!------------------------------------------------------------------------------|

call mpi_comm_size (mpi_comm_world,nproc,ierr)
call mpi_comm_rank (mpi_comm_world,iproc,ierr)

shift=' '

!==============================================================================
!==============================================================================

params%nstep=2
if (iproc==0) call scanfile (params%infile,'nstep',params%nstep,ires)
call mpi_bcast(params%nstep,1,mpi_integer,0,mpi_comm_world,ierr)

params%nstep_spinup=0
if (iproc==0) call scanfile (params%infile,'nstep_spinup',params%nstep_spinup,ires)
call mpi_bcast(params%nstep_spinup,1,mpi_integer,0,mpi_comm_world,ierr)

params%savstep=1
if (iproc==0) call scanfile (params%infile,'savstep',params%savstep,ires)
call mpi_bcast(params%savstep,1,mpi_integer,0,mpi_comm_world,ierr)

params%savoffset=0
if (iproc==0) call scanfile (params%infile,'savoffset',params%savoffset,ires)
call mpi_bcast(params%savoffset,1,mpi_integer,0,mpi_comm_world,ierr)

!=====[material properties]====================================================

material0=0
if (iproc==0) call scanfile (params%infile,'material0',material0,ires)
call mpi_bcast(material0,1,mpi_integer,0,mpi_comm_world,ierr)

params%bulkvisc=.false.
if (iproc==0) then
  call scanfile (params%infile,'bulkvisc',answer,ires)
  if (ires==1) params%bulkvisc=(trim(answer)=='T')
endif
call mpi_bcast(params%bulkvisc,1,mpi_logical,0,mpi_comm_world,ierr)

params%init_e2d=.false.
if (iproc==0) then
  call scanfile (params%infile,'init_e2d',answer,ires)
  if (ires==1) params%init_e2d=(trim(answer)=='T')
endif
call mpi_bcast(params%init_e2d,1,mpi_logical,0,mpi_comm_world,ierr)

params%e2d0=1.d0
if (iproc==0) call scanfile (params%infile,'e2d0',params%e2d0,ires)
call mpi_bcast(params%e2d0,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%plastic_stress_min=-1.d0
if (iproc==0) call scanfile (params%infile,'plastic_stress_min',params%plastic_stress_min,ires)
call mpi_bcast(params%plastic_stress_min,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%pressure0=0.d0
if (iproc==0) call scanfile (params%infile,'pressure0',params%pressure0,ires)
call mpi_bcast(params%pressure0,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%dommat=-1
if (iproc==0) call scanfile (params%infile,'dommat',params%dommat,ires)
call mpi_bcast(params%dommat,1,mpi_integer,0,mpi_comm_world,ierr)

params%domvol=1.d-10
if (iproc==0) call scanfile (params%infile,'domvol',params%domvol,ires)
call mpi_bcast(params%domvol,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%materials_on_cloud=.false.
if (iproc==0) then
  call scanfile (params%infile,'materials_on_cloud',answer,ires)
  if (ires==1) params%materials_on_cloud=(trim(answer)=='T')
endif
call mpi_bcast(params%materials_on_cloud,1,mpi_logical,0,mpi_comm_world,ierr)

if (params%materials_on_cloud) then
  params%move_cloud_at_midpoint=.true.
else
  params%move_cloud_at_midpoint=.false.
endif
if (iproc==0) then
  call scanfile (params%infile,'move_cloud_at_midpoint',answer,ires)
  if (ires==1) params%move_cloud_at_midpoint=(trim(answer)=='T')
endif
call mpi_bcast(params%move_cloud_at_midpoint,1,mpi_logical,0,mpi_comm_world,ierr)

do i=0,params%nmat
   write(cm,'(i3)') i
   il=1
   if (i.lt.100) il=2
   if (i.lt.10) il=3

   mat(i)%density=1.d0
   if (i.eq.0) mat(i)%density=0.d0
   if (iproc==0) call scanfile (params%infile,'density'//cm(il:3),mat(i)%density,ires)
   call mpi_bcast(mat(i)%density,1,mpi_double_precision,0,mpi_comm_world,ierr)
 
   mat(i)%viscosity=1.d0
   if (i.eq.0) mat(i)%viscosity=1.d-8
   if (iproc==0) call scanfile (params%infile,'viscosity'//cm(il:3),mat(i)%viscosity,ires)
   call mpi_bcast(mat(i)%viscosity,1,mpi_double_precision,0,mpi_comm_world,ierr)

   mat(i)%penalty=1.d8
   if (iproc==0) call scanfile (params%infile,'penalty'//cm(il:3),mat(i)%penalty,ires)
   call mpi_bcast(mat(i)%penalty,1,mpi_double_precision,0,mpi_comm_world,ierr)

   mat(i)%expon=1.d0
   if (iproc==0) call scanfile (params%infile,'expon'//cm(il:3),mat(i)%expon,ires)
   call mpi_bcast(mat(i)%expon,1,mpi_double_precision,0,mpi_comm_world,ierr)
   
   mat(i)%activationenergy=0.d0
   if (iproc==0) call scanfile (params%infile,'activationenergy'//cm(il:3),mat(i)%activationenergy,ires)
   call mpi_bcast(mat(i)%activationenergy,1,mpi_double_precision,0,mpi_comm_world,ierr)
   
   mat(i)%expansion=0.d0
   if (iproc==0) call scanfile (params%infile,'expansion'//cm(il:3),mat(i)%expansion,ires)
   call mpi_bcast(mat(i)%expansion,1,mpi_double_precision,0,mpi_comm_world,ierr)

   mat(i)%diffusivity=1.d0
   if (iproc==0) call scanfile (params%infile,'diffusivity'//cm(il:3),mat(i)%diffusivity,ires)
   call mpi_bcast(mat(i)%diffusivity,1,mpi_double_precision,0,mpi_comm_world,ierr)

   mat(i)%heat=0.d0
   if (iproc==0) call scanfile (params%infile,'heat'//cm(il:3),mat(i)%heat,ires)
   call mpi_bcast(mat(i)%heat,1,mpi_double_precision,0,mpi_comm_world,ierr)

   mat(i)%fviscosity=1.d0
   if (iproc==0) call scanfile (params%infile,'fviscosity'//cm(il:3),mat(i)%fviscosity,ires)
   call mpi_bcast(mat(i)%fviscosity,1,mpi_double_precision,0,mpi_comm_world,ierr)

   mat(i)%fvisc_weak_type='tot_strain'
   if (iproc==0) call scanfile (params%infile,'fvisc_weak_type'//cm(il:3),mat(i)%fvisc_weak_type,ires)
   call mpi_bcast(mat(i)%fvisc_weak_type,16,mpi_character,0,mpi_comm_world,ierr)

   mat(i)%fvisc_weak_onset=-1.d0
   if (iproc==0) call scanfile (params%infile,'fvisc_weak_onset'//cm(il:3),mat(i)%fvisc_weak_onset,ires)
   call mpi_bcast(mat(i)%fvisc_weak_onset,1,mpi_double_precision,0,mpi_comm_world,ierr)

   mat(i)%fvisc_weak_end=1.d0
   if (iproc==0) call scanfile (params%infile,'fvisc_weak_end'//cm(il:3),mat(i)%fvisc_weak_end,ires)
   call mpi_bcast(mat(i)%fvisc_weak_end,1,mpi_double_precision,0,mpi_comm_world,ierr)

   mat(i)%fvisc_weak_final=1.d0
   if (iproc==0) call scanfile (params%infile,'fvisc_weak_final'//cm(il:3),mat(i)%fvisc_weak_final,ires)
   call mpi_bcast(mat(i)%fvisc_weak_final,1,mpi_double_precision,0,mpi_comm_world,ierr)

   mat(i)%fvisc_strong_onset=-1.d0
   if (iproc==0) call scanfile (params%infile,'fvisc_strong_onset'//cm(il:3),mat(i)%fvisc_strong_onset,ires)
   call mpi_bcast(mat(i)%fvisc_strong_onset,1,mpi_double_precision,0,mpi_comm_world,ierr)

   mat(i)%fvisc_strong_end=1.d0
   if (iproc==0) call scanfile (params%infile,'fvisc_strong_end'//cm(il:3),mat(i)%fvisc_strong_end,ires)
   call mpi_bcast(mat(i)%fvisc_strong_end,1,mpi_double_precision,0,mpi_comm_world,ierr)

   mat(i)%fvisc_strong_final=1.d0
   if (iproc==0) call scanfile (params%infile,'fvisc_strong_final'//cm(il:3),mat(i)%fvisc_strong_final,ires)
   call mpi_bcast(mat(i)%fvisc_strong_final,1,mpi_double_precision,0,mpi_comm_world,ierr)

   mat(i)%plasticity_type='No'
   if (iproc==0) call scanfile (params%infile,'plasticity_type'//cm(il:3),mat(i)%plasticity_type,ires)
   call mpi_bcast(mat(i)%plasticity_type,8,mpi_character,0,mpi_comm_world,ierr)

   mat(i)%plasticity_ss_type_coh='tot_strain'
   if (iproc==0) call scanfile (params%infile,'plasticity_ss_type_coh'//cm(il:3),mat(i)%plasticity_ss_type_coh,ires)
   call mpi_bcast(mat(i)%plasticity_ss_type_coh,16,mpi_character,0,mpi_comm_world,ierr)

   mat(i)%plasticity_ss_type_phi='tot_strain'
   if (iproc==0) call scanfile (params%infile,'plasticity_ss_type_phi'//cm(il:3),mat(i)%plasticity_ss_type_phi,ires)
   call mpi_bcast(mat(i)%plasticity_ss_type_phi,16,mpi_character,0,mpi_comm_world,ierr)
   
   mat(i)%compactible=.false.
   if (iproc==0) then
     call scanfile (params%infile,'compactible'//cm(il:3),answer,ires)
     if (ires==1) mat(i)%compactible=(trim(answer)=='T')
   endif
   call mpi_bcast(mat(i)%compactible,1,mpi_logical,0,mpi_comm_world,ierr)
   
   mat(i)%grain_density=1.d0
   if (i.eq.0) mat(i)%grain_density=0.d0
   if (iproc==0) call scanfile (params%infile,'grain_density'//cm(il:3),mat(i)%grain_density,ires)
   call mpi_bcast(mat(i)%grain_density,1,mpi_double_precision,0,mpi_comm_world,ierr)
   
   mat(i)%pore_fluid_density=1.d0
   if (i.eq.0) mat(i)%pore_fluid_density=0.d0
   if (iproc==0) call scanfile (params%infile,'pore_fluid_density'//cm(il:3),mat(i)%pore_fluid_density,ires)
   call mpi_bcast(mat(i)%pore_fluid_density,1,mpi_double_precision,0,mpi_comm_world,ierr)
   
   mat(i)%surface_porosity=1.d0
   if (i.eq.0) mat(i)%surface_porosity=0.d0
   if (iproc==0) call scanfile (params%infile,'surface_porosity'//cm(il:3),mat(i)%surface_porosity,ires)
   call mpi_bcast(mat(i)%surface_porosity,1,mpi_double_precision,0,mpi_comm_world,ierr)
   
   mat(i)%compaction_coef=1.d0
   if (i.eq.0) mat(i)%compaction_coef=0.d0
   if (iproc==0) call scanfile (params%infile,'compaction_coef'//cm(il:3),mat(i)%compaction_coef,ires)
   call mpi_bcast(mat(i)%compaction_coef,1,mpi_double_precision,0,mpi_comm_world,ierr)

   mat(i)%plasticity_parameters=0.d0
   mat(i)%plasticity_parameters(3)=-1.d0
   mat(i)%plasticity_parameters(6)=-1.d0
   mat(i)%plasticity_parameters(9)=-1.d0
   mat(i)%plasticity_parameters(12)=-1.d0
   if (trim(mat(i)%plasticity_type).ne.'No') then
     if (iproc==0) call scanfile (params%infile,'plasticity_1st_param'//cm(il:3),mat(i)%plasticity_parameters(1),ires)
     if (iproc==0) call scanfile (params%infile,'plasticity_2nd_param'//cm(il:3),mat(i)%plasticity_parameters(2),ires)
     if (iproc==0) call scanfile (params%infile,'plasticity_3rd_param'//cm(il:3),mat(i)%plasticity_parameters(3),ires)
     if (iproc==0) call scanfile (params%infile,'plasticity_4th_param'//cm(il:3),mat(i)%plasticity_parameters(4),ires)
     if (iproc==0) call scanfile (params%infile,'plasticity_5th_param'//cm(il:3),mat(i)%plasticity_parameters(5),ires)
     if (iproc==0) call scanfile (params%infile,'plasticity_6th_param'//cm(il:3),mat(i)%plasticity_parameters(6),ires)
     if (iproc==0) call scanfile (params%infile,'plasticity_7th_param'//cm(il:3),mat(i)%plasticity_parameters(7),ires)
     if (iproc==0) call scanfile (params%infile,'plasticity_8th_param'//cm(il:3),mat(i)%plasticity_parameters(8),ires)
     if (iproc==0) call scanfile (params%infile,'plasticity_9th_param'//cm(il:3),mat(i)%plasticity_parameters(9),ires)
     if (iproc==0) call scanfile (params%infile,'plasticity_10th_param'//cm(il:3),mat(i)%plasticity_parameters(10),ires)
     if (iproc==0) call scanfile (params%infile,'plasticity_11th_param'//cm(il:3),mat(i)%plasticity_parameters(11),ires)
     if (iproc==0) call scanfile (params%infile,'plasticity_12th_param'//cm(il:3),mat(i)%plasticity_parameters(12),ires)
     if (iproc==0) call scanfile (params%infile,'plasticity_13th_param'//cm(il:3),mat(i)%plasticity_parameters(13),ires)
     if (iproc==0) call scanfile (params%infile,'plasticity_14th_param'//cm(il:3),mat(i)%plasticity_parameters(14),ires)
     call mpi_bcast(mat(i)%plasticity_parameters,14,mpi_double_precision,0,mpi_comm_world,ierr)
   endif

   mat(i)%mattrans=-1.d0
   if (iproc==0) call scanfile (params%infile,'mattrans_xmin'//cm(il:3),mat(i)%mattrans(1),ires)
   if (iproc==0) call scanfile (params%infile,'mattrans_xmax'//cm(il:3),mat(i)%mattrans(2),ires)
   if (iproc==0) call scanfile (params%infile,'mattrans_ymin'//cm(il:3),mat(i)%mattrans(3),ires)
   if (iproc==0) call scanfile (params%infile,'mattrans_ymax'//cm(il:3),mat(i)%mattrans(4),ires)
   if (iproc==0) call scanfile (params%infile,'mattrans_zmin'//cm(il:3),mat(i)%mattrans(5),ires)
   if (iproc==0) call scanfile (params%infile,'mattrans_zmax'//cm(il:3),mat(i)%mattrans(6),ires)
   call mpi_bcast(mat(i)%mattrans,6,mpi_double_precision,0,mpi_comm_world,ierr)
   
   mat(i)%transnum=i
   if (iproc==0) then
     call scanfile (params%infile,'transnum_xmin'//cm(il:3),mat(i)%transnum(1),ires)
     call scanfile (params%infile,'transnum_xmax'//cm(il:3),mat(i)%transnum(2),ires)
     call scanfile (params%infile,'transnum_ymin'//cm(il:3),mat(i)%transnum(3),ires)
     call scanfile (params%infile,'transnum_ymax'//cm(il:3),mat(i)%transnum(4),ires)
     call scanfile (params%infile,'transnum_zmin'//cm(il:3),mat(i)%transnum(5),ires)
     call scanfile (params%infile,'transnum_zmax'//cm(il:3),mat(i)%transnum(6),ires)
     if (maxval(mat(i)%transnum).gt.params%nmat) call stop_run ('Error: transnum value is greater than nmat in read_input_file$')
   endif
   call mpi_bcast(mat(i)%transnum,6,mpi_integer,0,mpi_comm_world,ierr)
enddo

params%viscositymin=-1.d0
if (iproc==0) call scanfile (params%infile,'viscositymin',params%viscositymin,ires)
call mpi_bcast(params%viscositymin,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%viscositymax=-1.d0
if (iproc==0) call scanfile (params%infile,'viscositymax',params%viscositymax,ires)
call mpi_bcast(params%viscositymax,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%vex=1.d0
if (iproc==0) call scanfile (params%infile,'vex',params%vex,ires)
call mpi_bcast(params%vex,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%leveluniform_oct=3
if (iproc==0) call scanfile (params%infile,'leveluniform_oct',params%leveluniform_oct,ires)
call mpi_bcast(params%leveluniform_oct,1,mpi_integer,0,mpi_comm_world,ierr)

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)

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)

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)

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)

params%calculate_temp=.true.
if (iproc==0) then
   call scanfile (params%infile,'calculate_temp',answer,ires)
   if (ires==1) params%calculate_temp=(trim(answer)=='T')
end if
call mpi_bcast(params%calculate_temp,1,mpi_logical,0,mpi_comm_world,ierr)

params%ztemp=1.d0
if (iproc==0) call scanfile (params%infile,'ztemp',params%ztemp,ires)
params%ztemp=params%ztemp/params%vex
call mpi_bcast(params%ztemp,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%sstemp_spinup=.false.
if (iproc==0) then
   call scanfile (params%infile,'sstemp_spinup',answer,ires)
   if (ires==1) params%sstemp_spinup=(trim(answer)=='T')
end if
call mpi_bcast(params%sstemp_spinup,1,mpi_logical,0,mpi_comm_world,ierr)

params%sstemp_on_restart=.false.
if (iproc==0) then
   call scanfile (params%infile,'sstemp_on_restart',answer,ires)
   if (ires==1) params%sstemp_on_restart=(trim(answer)=='T')
end if
call mpi_bcast(params%sstemp_on_restart,1,mpi_logical,0,mpi_comm_world,ierr)

params%sstemp_viscosity_spinup=-1.d0
if (iproc==0) call scanfile (params%infile,'sstemp_viscosity_spinup',params%sstemp_viscosity_spinup,ires)
call mpi_bcast(params%sstemp_viscosity_spinup,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%sstemp_penalty_spinup=-1.d0
if (iproc==0) call scanfile (params%infile,'sstemp_penalty_spinup',params%sstemp_penalty_spinup,ires)
call mpi_bcast(params%sstemp_penalty_spinup,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%all_surf_fixed_spinup=.false.
if (iproc==0) then
   call scanfile (params%infile,'all_surf_fixed_spinup',answer,ires)
   if (ires==1) params%all_surf_fixed_spinup=(trim(answer)=='T')
end if
call mpi_bcast(params%all_surf_fixed_spinup,1,mpi_logical,0,mpi_comm_world,ierr)

params%fixed_cloud_spinup=.false.
if (iproc==0) then
   call scanfile (params%infile,'fixed_cloud_spinup',answer,ires)
   if (ires==1) params%fixed_cloud_spinup=(trim(answer)=='T')
end if
call mpi_bcast(params%fixed_cloud_spinup,1,mpi_logical,0,mpi_comm_world,ierr)

params%smoothing_type=0
if (iproc==0) call scanfile (params%infile,'smoothing_type',params%smoothing_type,ires)
call mpi_bcast(params%smoothing_type,1,mpi_integer,0,mpi_comm_world,ierr)

params%normaladvect=.false.
if (iproc==0) then
   call scanfile (params%infile,'normaladvect',answer,ires)
   if (ires==1) params%normaladvect=(trim(answer)=='T')
end if
call mpi_bcast(params%normaladvect,1,mpi_logical,0,mpi_comm_world,ierr)

params%excl_vol=.false.
if (iproc==0) then
   call scanfile (params%infile,'excl_vol',answer,ires)
   if (ires==1) params%excl_vol=(trim(answer)=='T')
end if
call mpi_bcast(params%excl_vol,1,mpi_logical,0,mpi_comm_world,ierr)

params%adaptive_tol=.false.
if (iproc==0) then
   call scanfile (params%infile,'adaptive_tol',answer,ires)
   if (ires==1) params%adaptive_tol=(trim(answer)=='T')
end if
call mpi_bcast(params%adaptive_tol,1,mpi_logical,0,mpi_comm_world,ierr)

params%wsmp_scaling=.false.
if (iproc==0) then
   call scanfile (params%infile,'wsmp_scaling',answer,ires)
   if (ires==1) params%wsmp_scaling=(trim(answer)=='T')
end if
call mpi_bcast(params%wsmp_scaling,1,mpi_logical,0,mpi_comm_world,ierr)

!=====[surface properties]=====================================================
do i=1,params%ns
   write(cm,'(i3)') i
   il=1
   if (i.lt.100) il=2
   if (il.lt.10) il=3

   surface(i)%itype=1
   if (iproc==0) call scanfile (params%infile,'itype'//cm(il:3),surface(i)%itype,ires)
   call mpi_bcast(surface(i)%itype,1,mpi_integer,0,mpi_comm_world,ierr)

   surface(i)%closed=0
   if (iproc==0) call scanfile (params%infile,'closed'//cm(il:3),surface(i)%closed,ires)
   call mpi_bcast(surface(i)%closed,1,mpi_integer,0,mpi_comm_world,ierr)

   surface(i)%material_main=1
   if (iproc==0) call scanfile (params%infile,'material'//cm(il:3),surface(i)%material_main,ires)
   call mpi_bcast(surface(i)%material_main,1,mpi_integer,0,mpi_comm_world,ierr)

   surface(i)%material_spinup=surface(i)%material_main
   if (iproc==0) call scanfile (params%infile,'material_spinup'//cm(il:3),surface(i)%material_spinup,ires)
   call mpi_bcast(surface(i)%material_spinup,1,mpi_integer,0,mpi_comm_world,ierr)

   surface(i)%material=surface(i)%material_main
   call mpi_bcast(surface(i)%material,1,mpi_integer,0,mpi_comm_world,ierr)

   surface(i)%rand=.false.
   if (iproc==0) then
      call scanfile (params%infile,'rand'//cm(il:3),answer,ires)
      if (ires==1) surface(i)%rand=(trim(answer)=='T')
   end if
   call mpi_bcast(surface(i)%rand,1,mpi_logical,0,mpi_comm_world,ierr)

   surface(i)%surf_for_mat_props=.true.
   if (iproc==0) then
      call scanfile (params%infile,'surf_for_mat_props'//cm(il:3),answer,ires)
      if (ires==1) surface(i)%surf_for_mat_props=(trim(answer)=='T')
   end if
   call mpi_bcast(surface(i)%surf_for_mat_props,1,mpi_logical,0,mpi_comm_world,ierr)

   surface(i)%levelt=params%levelmax_oct+1
   if (iproc==0) call scanfile (params%infile,'levelt'//cm(il:3),surface(i)%levelt,ires)
   call mpi_bcast(surface(i)%levelt,1,mpi_integer,0,mpi_comm_world,ierr)
   
   surface(i)%stretch=1.5d0
   if (iproc==0) call scanfile (params%infile,'stretch'//cm(il:3),surface(i)%stretch,ires)
   call mpi_bcast(surface(i)%stretch,1,mpi_double_precision,0,mpi_comm_world,ierr)

   surface(i)%criterion=1
   if (iproc==0) call scanfile (params%infile,'criterion'//cm(il:3),surface(i)%criterion,ires)
   call mpi_bcast(surface(i)%criterion,1,mpi_integer,0,mpi_comm_world,ierr)

   surface(i)%anglemax=1.d0
   if (iproc==0) call scanfile (params%infile,'anglemax'//cm(il:3),surface(i)%anglemax,ires)
   surface(i)%anglemax=surface(i)%anglemax*pi/180.d0
   call mpi_bcast(surface(i)%anglemax,1,mpi_double_precision,0,mpi_comm_world,ierr)

   surface(i)%anglemaxoctree=1.d0
   if (iproc==0) call scanfile (params%infile,'anglemaxoctree'//cm(il:3),surface(i)%anglemaxoctree,ires)
   surface(i)%anglemaxoctree=surface(i)%anglemaxoctree*pi/180.d0
   call mpi_bcast(surface(i)%anglemaxoctree,1,mpi_double_precision,0,mpi_comm_world,ierr)

   surface(i)%spread_surface_points=0
   if (iproc==0) call scanfile (params%infile,'spread_surface_points'//cm(il:3),surface(i)%spread_surface_points,ires)
   call mpi_bcast(surface(i)%spread_surface_points,1,mpi_integer,0,mpi_comm_world,ierr)

   surface(i)%fixed_surf_spinup=.false.
   if (iproc==0) then
      call scanfile (params%infile,'fixed_surf_spinup'//cm(il:3),answer,ires)
      if (ires==1) surface(i)%fixed_surf_spinup=(trim(answer)=='T')
   end if
   call mpi_bcast(surface(i)%fixed_surf_spinup,1,mpi_logical,0,mpi_comm_world,ierr)

   surface(i)%fixed_surf=.false.
   if (iproc==0) then
      call scanfile (params%infile,'fixed_surf'//cm(il:3),answer,ires)
      if (ires==1) surface(i)%fixed_surf=(trim(answer)=='T')
   end if
   call mpi_bcast(surface(i)%fixed_surf,1,mpi_logical,0,mpi_comm_world,ierr)

   surface(i)%surface_type = 0
   if (iproc==0) call scanfile (params%infile,'surface_type_'//cm(il:3),surface(i)%surface_type,ires)
   call mpi_bcast(surface(i)%surface_type,1,mpi_integer,0,mpi_comm_world,ierr)
 
   surface(i)%sp01 = 0.d0
   if (iproc==0) call scanfile (params%infile,'surface_param_01_'//cm(il:3),surface(i)%sp01,ires)
   surface(i)%sp02 = 0.d0
   if (iproc==0) call scanfile (params%infile,'surface_param_02_'//cm(il:3),surface(i)%sp02,ires)
   surface(i)%sp03 = 0.d0
   if (iproc==0) call scanfile (params%infile,'surface_param_03_'//cm(il:3),surface(i)%sp03,ires)
   surface(i)%sp04 = 0.d0
   if (iproc==0) call scanfile (params%infile,'surface_param_04_'//cm(il:3),surface(i)%sp04,ires)
   surface(i)%sp05 = 0.d0
   if (iproc==0) call scanfile (params%infile,'surface_param_05_'//cm(il:3),surface(i)%sp05,ires)
   surface(i)%sp06 = 0.d0
   if (iproc==0) call scanfile (params%infile,'surface_param_06_'//cm(il:3),surface(i)%sp06,ires)
   surface(i)%sp07 = 0.d0
   if (iproc==0) call scanfile (params%infile,'surface_param_07_'//cm(il:3),surface(i)%sp07,ires)
   surface(i)%sp08 = 0.d0
   if (iproc==0) call scanfile (params%infile,'surface_param_08_'//cm(il:3),surface(i)%sp08,ires)
   surface(i)%sp09 = 0.d0
   if (iproc==0) call scanfile (params%infile,'surface_param_09_'//cm(il:3),surface(i)%sp09,ires)
   surface(i)%sp10 = 0.d0
   if (iproc==0) call scanfile (params%infile,'surface_param_10_'//cm(il:3),surface(i)%sp10,ires)
   surface(i)%sp11 = surface(i)%sp01
   if (iproc==0) call scanfile (params%infile,'surface_param_11_'//cm(il:3),surface(i)%sp11,ires)
   surface(i)%sp12 = 45.d0
   if (iproc==0) call scanfile (params%infile,'surface_param_12_'//cm(il:3),surface(i)%sp12,ires)
   surface(i)%sp13 = surface(i)%sp11
   if (iproc==0) call scanfile (params%infile,'surface_param_13_'//cm(il:3),surface(i)%sp13,ires)
   surface(i)%sp14 = 45.d0
   if (iproc==0) call scanfile (params%infile,'surface_param_14_'//cm(il:3),surface(i)%sp14,ires)
   surface(i)%sp15 = 1.d0
   if (iproc==0) call scanfile (params%infile,'surface_param_15_'//cm(il:3),surface(i)%sp15,ires)
   
   call mpi_bcast(surface(i)%sp01,1,mpi_double_precision,0,mpi_comm_world,ierr)
   call mpi_bcast(surface(i)%sp02,1,mpi_double_precision,0,mpi_comm_world,ierr)
   call mpi_bcast(surface(i)%sp03,1,mpi_double_precision,0,mpi_comm_world,ierr)
   call mpi_bcast(surface(i)%sp04,1,mpi_double_precision,0,mpi_comm_world,ierr)
   call mpi_bcast(surface(i)%sp05,1,mpi_double_precision,0,mpi_comm_world,ierr)
   call mpi_bcast(surface(i)%sp06,1,mpi_double_precision,0,mpi_comm_world,ierr)
   call mpi_bcast(surface(i)%sp07,1,mpi_double_precision,0,mpi_comm_world,ierr)
   call mpi_bcast(surface(i)%sp08,1,mpi_double_precision,0,mpi_comm_world,ierr)
   call mpi_bcast(surface(i)%sp09,1,mpi_double_precision,0,mpi_comm_world,ierr)
   call mpi_bcast(surface(i)%sp10,1,mpi_double_precision,0,mpi_comm_world,ierr)
   call mpi_bcast(surface(i)%sp11,1,mpi_double_precision,0,mpi_comm_world,ierr)
   call mpi_bcast(surface(i)%sp12,1,mpi_double_precision,0,mpi_comm_world,ierr)
   call mpi_bcast(surface(i)%sp13,1,mpi_double_precision,0,mpi_comm_world,ierr)
   call mpi_bcast(surface(i)%sp14,1,mpi_double_precision,0,mpi_comm_world,ierr)
   call mpi_bcast(surface(i)%sp15,1,mpi_double_precision,0,mpi_comm_world,ierr)

   surface(i)%activation_time=-1.d0
   if (iproc==0) call scanfile (params%infile,'activation_time_'//cm(il:3),surface(i)%activation_time,ires)
   call mpi_bcast(surface(i)%activation_time,1,mpi_double_precision,0,mpi_comm_world,ierr)

   surface(i)%leveloct=6
   if (iproc==0) call scanfile (params%infile,'leveloct'//cm(il:3),surface(i)%leveloct,ires)
   call mpi_bcast(surface(i)%leveloct,1,mpi_integer,0,mpi_comm_world,ierr)

   surface(i)%remove_after_mat_def=.false.
   if (iproc==0) then
      call scanfile (params%infile,'remove_after_mat_def'//cm(il:3),answer,ires)
      if (ires==1) surface(i)%remove_after_mat_def=(trim(answer)=='T')
   end if
   call mpi_bcast(surface(i)%remove_after_mat_def,1,mpi_logical,0,mpi_comm_world,ierr)
enddo

!=====[face refinement parameters]=============================================

params%ref_on_faces=.false.
if(iproc==0) then
   call scanfile (params%infile,'ref_on_faces',answer,ires)
   if (ires==1) params%ref_on_faces=(trim(answer)=='T')
end if
call mpi_bcast(params%ref_on_faces,1,mpi_logical,0,mpi_comm_world,ierr)

do i=1,6
   write(cm,'(i3)') i

   cube_faces(i)%level = 1
   if (iproc==0) call scanfile (params%infile,'level_face'//cm(3:3),cube_faces(i)%level,ires)
   call mpi_bcast(cube_faces(i)%level,1,mpi_integer,0,mpi_comm_world,ierr)

   cube_faces(i)%l = 0.d0
   if (iproc==0) call scanfile (params%infile,'l'//cm(3:3),cube_faces(i)%l,ires)
   call mpi_bcast(cube_faces(i)%l,1,mpi_double_precision,0,mpi_comm_world,ierr)

   cube_faces(i)%r = 0.d0
   if (iproc==0) call scanfile (params%infile,'r'//cm(3:3),cube_faces(i)%r,ires)
   call mpi_bcast(cube_faces(i)%r,1,mpi_double_precision,0,mpi_comm_world,ierr)

   cube_faces(i)%b = 0.d0
   if (iproc==0) call scanfile (params%infile,'b'//cm(3:3),cube_faces(i)%b,ires)
   call mpi_bcast(cube_faces(i)%b,1,mpi_double_precision,0,mpi_comm_world,ierr)

   cube_faces(i)%t = 0.d0
   if (iproc==0) call scanfile (params%infile,'t'//cm(3:3),cube_faces(i)%t,ires)
   call mpi_bcast(cube_faces(i)%t,1,mpi_double_precision,0,mpi_comm_world,ierr)
end do

params%noctreemax=100000
if(iproc==0) call scanfile (params%infile,'noctreemax',params%noctreemax,ires)
call mpi_bcast(params%noctreemax,1,mpi_integer,0,mpi_comm_world,ierr)

params%nonlinear_iterations_main=3
if(iproc==0) call scanfile (params%infile,'nonlinear_iterations',params%nonlinear_iterations_main,ires)
call mpi_bcast(params%nonlinear_iterations_main,1,mpi_integer,0,mpi_comm_world,ierr)

params%nonlinear_iterations_spinup=params%nonlinear_iterations_main
if(iproc==0) call scanfile (params%infile,'nonlinear_iterations_spinup',params%nonlinear_iterations_spinup,ires)
call mpi_bcast(params%nonlinear_iterations_spinup,1,mpi_integer,0,mpi_comm_world,ierr)

params%nonlinear_iterations=params%nonlinear_iterations_main
call mpi_bcast(params%nonlinear_iterations,1,mpi_integer,0,mpi_comm_world,ierr)

params%initial_refine_level=6
if (iproc==0) call scanfile (params%infile,'initial_refine_level',params%initial_refine_level,ires)
call mpi_bcast(params%initial_refine_level,1,mpi_integer,0,mpi_comm_world,ierr)

params%dt_main=0.5d0
if (iproc==0) call scanfile (params%infile,'dt',params%dt_main,ires)
call mpi_bcast(params%dt_main,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%dt_spinup=params%dt_main
if (iproc==0) call scanfile (params%infile,'dt_spinup',params%dt_spinup,ires)
call mpi_bcast(params%dt_spinup,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%dt=params%dt_main
call mpi_bcast(params%dt,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%damp_surface=.true.
if (iproc==0) then
   call scanfile (params%infile,'damp_surface',answer,ires)
   if (ires==1) params%damp_surface = (trim(answer)=='T')
end if
call mpi_bcast(params%damp_surface,1,mpi_logical,0,mpi_comm_world,ierr)

params%damp_factor=1.0d0
if (iproc==0) call scanfile (params%infile,'damp_factor',params%damp_factor,ires)
call mpi_bcast(params%damp_factor,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%sedimentation=.false.
if (iproc==0) then
   call scanfile (params%infile,'sedimentation',answer,ires)
   if (ires==1) params%sedimentation = (trim(answer)=='T')
end if
call mpi_bcast(params%sedimentation,1,mpi_logical,0,mpi_comm_world,ierr)

params%remove_surf_pts=.false.
if (iproc==0) then
   call scanfile (params%infile,'remove_surf_pts',answer,ires)
   if (ires==1) params%remove_surf_pts = (trim(answer)=='T')
end if
call mpi_bcast(params%remove_surf_pts,1,mpi_logical,0,mpi_comm_world,ierr)

params%penalty=1.d8
if (iproc==0) call scanfile (params%infile,'penalty',params%penalty,ires)
call mpi_bcast(params%penalty,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%tempscale=1.d0
if (iproc==0) call scanfile (params%infile,'tempscale',params%tempscale,ires)
call mpi_bcast(params%tempscale,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%refine_ratio=1.d0                                                          
if (iproc==0) call scanfile (params%infile,'refine_ratio',params%refine_ratio,ires)              
call mpi_bcast(params%refine_ratio,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%refine_criterion=1                                                       
if(iproc==0) call scanfile (params%infile,'refine_criterion',params%refine_criterion,ires)    
call mpi_bcast(params%refine_criterion,1,mpi_integer,0,mpi_comm_world,ierr)

params%octree_refine_ratio=1.d0                                                   
if (iproc.eq.0) call scanfile (params%infile,'octree_refine_ratio',params%octree_refine_ratio,ires)
call mpi_bcast(params%octree_refine_ratio,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%courant=.5d0
if( iproc==0) call scanfile (params%infile,'courant',params%courant,ires)
call mpi_bcast(params%courant,1,mpi_double_precision,0,mpi_comm_world,ierr)

!=====[boundary conditions]=====================================================

params%invariants_2d=.false.
if(iproc==0) then
   call scanfile (params%infile,'invariants_2d',answer,ires)
   if (ires==1) params%invariants_2d=(trim(answer)=='T')
end if
call mpi_bcast(params%invariants_2d,1,mpi_logical,0,mpi_comm_world,ierr)

bcdef%bctype=''
if (iproc.eq.0) call scanfile (params%infile,'bctype',bcdef%bctype,ires)
call mpi_bcast(bcdef%bctype,40,mpi_character,0,mpi_comm_world,ierr)

select case(trim(bcdef%bctype))
case('basic')
  bcdef%bcorder='xyz'
  if (iproc.eq.0) call scanfile (params%infile,'bcorder',bcdef%bcorder,ires)
  call mpi_bcast(bcdef%bcorder,3,mpi_character,0,mpi_comm_world,ierr)

  bcdef%fixux0=.true.
  bcdef%fixux1=.true.
  bcdef%fixvx0=.true.
  bcdef%fixvx1=.true.
  bcdef%fixwx0=.true.
  bcdef%fixwx1=.true.
  bcdef%fixuy0=.true.
  bcdef%fixuy1=.true.
  bcdef%fixvy0=.true.
  bcdef%fixvy1=.true.
  bcdef%fixwy0=.true.
  bcdef%fixwy1=.true.
  bcdef%fixuz0=.true.
  bcdef%fixuz1=.true.
  bcdef%fixvz0=.true.
  bcdef%fixvz1=.true.
  bcdef%fixwz0=.true.
  bcdef%fixwz1=.true.
  if(iproc==0) then
    call scanfile (params%infile,'fixux0',answer,ires)
    if (ires==1) bcdef%fixux0=(trim(answer)=='T')
  endif
  if(iproc==0) then
    call scanfile (params%infile,'fixux1',answer,ires)
    if (ires==1) bcdef%fixux1=(trim(answer)=='T')
  endif
  if(iproc==0) then
    call scanfile (params%infile,'fixvx0',answer,ires)
    if (ires==1) bcdef%fixvx0=(trim(answer)=='T')
  endif
  if(iproc==0) then
    call scanfile (params%infile,'fixvx1',answer,ires)
    if (ires==1) bcdef%fixvx1=(trim(answer)=='T')
  endif
  if(iproc==0) then
    call scanfile (params%infile,'fixwx0',answer,ires)
    if (ires==1) bcdef%fixwx0=(trim(answer)=='T')
  endif
  if(iproc==0) then
    call scanfile (params%infile,'fixwx1',answer,ires)
    if (ires==1) bcdef%fixwx1=(trim(answer)=='T')
  endif
  if(iproc==0) then
    call scanfile (params%infile,'fixuy0',answer,ires)
    if (ires==1) bcdef%fixuy0=(trim(answer)=='T')
  endif
  if(iproc==0) then
    call scanfile (params%infile,'fixuy1',answer,ires)
    if (ires==1) bcdef%fixuy1=(trim(answer)=='T')
  endif
  if(iproc==0) then
    call scanfile (params%infile,'fixvy0',answer,ires)
    if (ires==1) bcdef%fixvy0=(trim(answer)=='T')
  endif
  if(iproc==0) then
    call scanfile (params%infile,'fixvy1',answer,ires)
    if (ires==1) bcdef%fixvy1=(trim(answer)=='T')
  endif
  if(iproc==0) then
    call scanfile (params%infile,'fixwy0',answer,ires)
    if (ires==1) bcdef%fixwy0=(trim(answer)=='T')
  endif
  if(iproc==0) then
    call scanfile (params%infile,'fixwy1',answer,ires)
    if (ires==1) bcdef%fixwy1=(trim(answer)=='T')
  endif
  if(iproc==0) then
    call scanfile (params%infile,'fixuz0',answer,ires)
    if (ires==1) bcdef%fixuz0=(trim(answer)=='T')
  endif
  if(iproc==0) then
    call scanfile (params%infile,'fixuz1',answer,ires)
    if (ires==1) bcdef%fixuz1=(trim(answer)=='T')
  endif
  if(iproc==0) then
    call scanfile (params%infile,'fixvz0',answer,ires)
    if (ires==1) bcdef%fixvz0=(trim(answer)=='T')
  endif
  if(iproc==0) then
    call scanfile (params%infile,'fixvz1',answer,ires)
    if (ires==1) bcdef%fixvz1=(trim(answer)=='T')
  endif
  if(iproc==0) then
    call scanfile (params%infile,'fixwz0',answer,ires)
    if (ires==1) bcdef%fixwz0=(trim(answer)=='T')
  endif
  if(iproc==0) then
    call scanfile (params%infile,'fixwz1',answer,ires)
    if (ires==1) bcdef%fixwz1=(trim(answer)=='T')
  endif
  call mpi_bcast(bcdef%fixux0,1,mpi_logical,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%fixux1,1,mpi_logical,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%fixvx0,1,mpi_logical,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%fixvx1,1,mpi_logical,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%fixwx0,1,mpi_logical,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%fixwx1,1,mpi_logical,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%fixuy0,1,mpi_logical,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%fixuy1,1,mpi_logical,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%fixvy0,1,mpi_logical,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%fixvy1,1,mpi_logical,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%fixwy0,1,mpi_logical,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%fixwy1,1,mpi_logical,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%fixuz0,1,mpi_logical,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%fixuz1,1,mpi_logical,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%fixvz0,1,mpi_logical,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%fixvz1,1,mpi_logical,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%fixwz0,1,mpi_logical,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%fixwz1,1,mpi_logical,0,mpi_comm_world,ierr)

  bcdef%ux0=0.d0
  bcdef%ux1=0.d0
  bcdef%vx0=0.d0
  bcdef%vx1=0.d0
  bcdef%wx0=0.d0
  bcdef%wx1=0.d0
  bcdef%uy0=0.d0
  bcdef%uy1=0.d0
  bcdef%vy0=0.d0
  bcdef%vy1=0.d0
  bcdef%wy0=0.d0
  bcdef%wy1=0.d0
  bcdef%uz0=0.d0
  bcdef%uz1=0.d0
  bcdef%vz0=0.d0
  bcdef%vz1=0.d0
  bcdef%wz0=0.d0
  bcdef%wz1=0.d0
  if (iproc==0) call scanfile (params%infile,'ux0',bcdef%ux0,ires)
  if (iproc==0) call scanfile (params%infile,'ux1',bcdef%ux1,ires)
  if (iproc==0) call scanfile (params%infile,'vx0',bcdef%vx0,ires)
  if (iproc==0) call scanfile (params%infile,'vx1',bcdef%vx1,ires)
  if (iproc==0) call scanfile (params%infile,'wx0',bcdef%wx0,ires)
  if (iproc==0) call scanfile (params%infile,'wx1',bcdef%wx1,ires)
  if (iproc==0) call scanfile (params%infile,'uy0',bcdef%uy0,ires)
  if (iproc==0) call scanfile (params%infile,'uy1',bcdef%uy1,ires)
  if (iproc==0) call scanfile (params%infile,'vy0',bcdef%vy0,ires)
  if (iproc==0) call scanfile (params%infile,'vy1',bcdef%vy1,ires)
  if (iproc==0) call scanfile (params%infile,'wy0',bcdef%wy0,ires)
  if (iproc==0) call scanfile (params%infile,'wy1',bcdef%wy1,ires)
  if (iproc==0) call scanfile (params%infile,'uz0',bcdef%uz0,ires)
  if (iproc==0) call scanfile (params%infile,'uz1',bcdef%uz1,ires)
  if (iproc==0) call scanfile (params%infile,'vz0',bcdef%vz0,ires)
  if (iproc==0) call scanfile (params%infile,'vz1',bcdef%vz1,ires)
  if (iproc==0) call scanfile (params%infile,'wz0',bcdef%wz0,ires)
  if (iproc==0) call scanfile (params%infile,'wz1',bcdef%wz1,ires)
  call mpi_bcast(bcdef%ux0,1,mpi_double_precision,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%ux1,1,mpi_double_precision,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%vx0,1,mpi_double_precision,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%vx1,1,mpi_double_precision,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%wx0,1,mpi_double_precision,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%wx1,1,mpi_double_precision,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%uy0,1,mpi_double_precision,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%uy1,1,mpi_double_precision,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%vy0,1,mpi_double_precision,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%vy1,1,mpi_double_precision,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%wy0,1,mpi_double_precision,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%wy1,1,mpi_double_precision,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%uz0,1,mpi_double_precision,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%uz1,1,mpi_double_precision,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%vz0,1,mpi_double_precision,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%vz1,1,mpi_double_precision,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%wz0,1,mpi_double_precision,0,mpi_comm_world,ierr)
  call mpi_bcast(bcdef%wz1,1,mpi_double_precision,0,mpi_comm_world,ierr)

case('segmented_s_line')
  bcdef%bc_parameters=0.d0
  if (iproc==0) call scanfile (params%infile,'bc_param1',bcdef%bc_parameters(1),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param2',bcdef%bc_parameters(2),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param3',bcdef%bc_parameters(3),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param4',bcdef%bc_parameters(4),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param5',bcdef%bc_parameters(5),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param6',bcdef%bc_parameters(6),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param7',bcdef%bc_parameters(7),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param8',bcdef%bc_parameters(8),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param9',bcdef%bc_parameters(9),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param10',bcdef%bc_parameters(10),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param11',bcdef%bc_parameters(11),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param12',bcdef%bc_parameters(12),ires)
  call mpi_bcast(bcdef%bc_parameters,14,mpi_double_precision,0,mpi_comm_world,ierr)

case('segmented_s_line_round')
  bcdef%bc_parameters=0.d0
  if (iproc==0) call scanfile (params%infile,'bc_param1',bcdef%bc_parameters(1),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param2',bcdef%bc_parameters(2),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param3',bcdef%bc_parameters(3),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param4',bcdef%bc_parameters(4),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param5',bcdef%bc_parameters(5),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param6',bcdef%bc_parameters(6),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param7',bcdef%bc_parameters(7),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param8',bcdef%bc_parameters(8),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param9',bcdef%bc_parameters(9),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param10',bcdef%bc_parameters(10),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param11',bcdef%bc_parameters(11),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param12',bcdef%bc_parameters(12),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param13',bcdef%bc_parameters(13),ires)
  call mpi_bcast(bcdef%bc_parameters,14,mpi_double_precision,0,mpi_comm_world,ierr)

case('rot_subduction')
  bcdef%bc_parameters=0.d0
  if (iproc==0) call scanfile (params%infile,'bc_param1',bcdef%bc_parameters(1),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param2',bcdef%bc_parameters(2),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param3',bcdef%bc_parameters(3),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param4',bcdef%bc_parameters(4),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param5',bcdef%bc_parameters(5),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param6',bcdef%bc_parameters(6),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param7',bcdef%bc_parameters(7),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param8',bcdef%bc_parameters(8),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param9',bcdef%bc_parameters(9),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param10',bcdef%bc_parameters(10),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param11',bcdef%bc_parameters(11),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param12',bcdef%bc_parameters(12),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param13',bcdef%bc_parameters(13),ires)
  call mpi_bcast(bcdef%bc_parameters,14,mpi_double_precision,0,mpi_comm_world,ierr)

case('rot_sub_init')
  bcdef%bc_parameters=0.d0
  if (iproc==0) call scanfile (params%infile,'bc_param1',bcdef%bc_parameters(1),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param2',bcdef%bc_parameters(2),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param3',bcdef%bc_parameters(3),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param4',bcdef%bc_parameters(4),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param5',bcdef%bc_parameters(5),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param6',bcdef%bc_parameters(6),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param7',bcdef%bc_parameters(7),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param8',bcdef%bc_parameters(8),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param9',bcdef%bc_parameters(9),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param10',bcdef%bc_parameters(10),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param11',bcdef%bc_parameters(11),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param12',bcdef%bc_parameters(12),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param13',bcdef%bc_parameters(13),ires)
  if (iproc==0) call scanfile (params%infile,'bc_param14',bcdef%bc_parameters(14),ires)
  call mpi_bcast(bcdef%bc_parameters,14,mpi_double_precision,0,mpi_comm_world,ierr)

case('iso_only')
  bcdef%bc_parameters=0.d0
  if (iproc==0) call scanfile (params%infile,'bc_param1',bcdef%bc_parameters(1),ires)
  call mpi_bcast(bcdef%bc_parameters,14,mpi_double_precision,0,mpi_comm_world,ierr)

end select

bcdef%utrans=0.d0
bcdef%vtrans=0.d0
if (iproc==0) call scanfile (params%infile,'utrans',bcdef%utrans,ires)
if (iproc==0) call scanfile (params%infile,'vtrans',bcdef%vtrans,ires)
call mpi_bcast(bcdef%utrans,1,mpi_double_precision,0,mpi_comm_world,ierr)
call mpi_bcast(bcdef%vtrans,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%npmin=8
if (iproc==0) call scanfile (params%infile,'npmin',params%npmin,ires)
call mpi_bcast(params%npmin,1,mpi_integer,0,mpi_comm_world,ierr)

params%npmax=16
if (iproc==0) call scanfile (params%infile,'npmax',params%npmax,ires)
call mpi_bcast(params%npmax,1,mpi_integer,0,mpi_comm_world,ierr)

params%fixed_cloud=.false.
if (iproc==0) then
   call scanfile (params%infile,'fixed_cloud',answer,ires)
   if (ires==1) params%fixed_cloud=(trim(answer)=='T')
end if
call mpi_bcast(params%fixed_cloud,1,mpi_logical,0,mpi_comm_world,ierr)

params%gridcloud=.false.
if (iproc==0) then
   call scanfile (params%infile,'gridcloud',answer,ires)
   if (ires==1) params%gridcloud=(trim(answer)=='T')
end if
call mpi_bcast(params%gridcloud,1,mpi_logical,0,mpi_comm_world,ierr)

params%centerptcloud=.false.
if (iproc==0) then
   call scanfile (params%infile,'centerptcloud',answer,ires)
   if (ires==1) params%centerptcloud=(trim(answer)=='T')
end if
call mpi_bcast(params%centerptcloud,1,mpi_logical,0,mpi_comm_world,ierr)

params%compaction=.false.
if (iproc==0) then
   call scanfile (params%infile,'compaction',answer,ires)
   if (ires==1) params%compaction=(trim(answer)=='T')
end if
call mpi_bcast(params%compaction,1,mpi_logical,0,mpi_comm_world,ierr)

params%clnpx=2
if (iproc==0) call scanfile (params%infile,'clnpx',params%clnpx,ires)
call mpi_bcast(params%clnpx,1,mpi_integer,0,mpi_comm_world,ierr)

params%clnpy=2
if (iproc==0) call scanfile (params%infile,'clnpy',params%clnpy,ires)
call mpi_bcast(params%clnpy,1,mpi_integer,0,mpi_comm_world,ierr)

params%clnpz=2
if (iproc==0) call scanfile (params%infile,'clnpz',params%clnpz,ires)
call mpi_bcast(params%clnpz,1,mpi_integer,0,mpi_comm_world,ierr)

params%dstrnz=9
if (iproc==0) call scanfile (params%infile,'dstrnz',params%dstrnz,ires)
call mpi_bcast(params%dstrnz,1,mpi_integer,0,mpi_comm_world,ierr)

params%griditer_main=-10
if (iproc==0) call scanfile (params%infile,'griditer',params%griditer_main,ires)
call mpi_bcast(params%griditer_main,1,mpi_integer,0,mpi_comm_world,ierr)

params%griditer_spinup=params%griditer_main
if (iproc==0) call scanfile (params%infile,'griditer_spinup',params%griditer_spinup,ires)
call mpi_bcast(params%griditer_spinup,1,mpi_integer,0,mpi_comm_world,ierr)

params%griditer=params%griditer_main
call mpi_bcast(params%griditer,1,mpi_integer,0,mpi_comm_world,ierr)

params%tol_main=1.d-3
if (iproc==0) call scanfile (params%infile,'tol',params%tol_main,ires)
call mpi_bcast(params%tol_main,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%tol_spinup=params%tol_main
if (iproc==0) call scanfile (params%infile,'tol_spinup',params%tol_spinup,ires)
call mpi_bcast(params%tol,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%tol=params%tol_main
call mpi_bcast(params%tol,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%niter_move=10
if (iproc==0) call scanfile (params%infile,'niter_move',params%niter_move,ires)
call mpi_bcast(params%niter_move,1,mpi_integer,0,mpi_comm_world,ierr)

params%ismooth=.false.
if (iproc==0) then
   call scanfile (params%infile,'ismooth',answer,ires)
   if (ires==1) params%ismooth = (trim(answer)=='T')
end if
call mpi_bcast(params%ismooth,1,mpi_logical,0,mpi_comm_world,ierr)

params%nb_iter_nl_min=0
if (iproc==0) call scanfile (params%infile,'nb_iter_nl_min',params%nb_iter_nl_min,ires)
call mpi_bcast(params%nb_iter_nl_min,1,mpi_integer,0,mpi_comm_world,ierr)

params%visualise_matrix=.false.
if (iproc==0) then
   call scanfile (params%infile,'visualise_matrix',answer,ires)
   if (ires==1) params%visualise_matrix=(trim(answer)=='T')
end if
call mpi_bcast(params%visualise_matrix,1,mpi_logical,0,mpi_comm_world,ierr)

params%renumber_nodes  = .false.
if (iproc==0) then
   call scanfile (params%infile,'renumber_nodes',answer,ires)
   if (ires==1) params%renumber_nodes=(trim(answer)=='T')
end if
call mpi_bcast(params%renumber_nodes,1,mpi_logical,0,mpi_comm_world,ierr)

do i=1,params%nboxes
   write(cm,'(i3)') i
   il=1
   if (i.lt.100) il=2
   if (il.lt.10) il=3

   boxes(i)%x0=0.d0
   if (iproc==0) call scanfile (params%infile,'box'//cm(il:3)//'x0',boxes(i)%x0,ires)
   call mpi_bcast(boxes(i)%x0,1,mpi_double_precision,0,mpi_comm_world,ierr)

   boxes(i)%x1=0.d0
   if (iproc==0) call scanfile (params%infile,'box'//cm(il:3)//'x1',boxes(i)%x1,ires)
   call mpi_bcast(boxes(i)%x1,1,mpi_double_precision,0,mpi_comm_world,ierr)

   boxes(i)%y0=0.d0
   if (iproc==0) call scanfile (params%infile,'box'//cm(il:3)//'y0',boxes(i)%y0,ires)
   call mpi_bcast(boxes(i)%y0,1,mpi_double_precision,0,mpi_comm_world,ierr)

   boxes(i)%y1=0.d0
   if (iproc==0) call scanfile (params%infile,'box'//cm(il:3)//'y1',boxes(i)%y1,ires)
   call mpi_bcast(boxes(i)%y1,1,mpi_double_precision,0,mpi_comm_world,ierr)

   boxes(i)%z0=0.d0
   if (iproc==0) call scanfile (params%infile,'box'//cm(il:3)//'z0',boxes(i)%z0,ires)
   boxes(i)%z0=boxes(i)%z0/params%vex
   call mpi_bcast(boxes(i)%z0,1,mpi_double_precision,0,mpi_comm_world,ierr)

   boxes(i)%z1=0.d0
   if (iproc==0) call scanfile (params%infile,'box'//cm(il:3)//'z1',boxes(i)%z1,ires)
   boxes(i)%z1=boxes(i)%z1/params%vex
   call mpi_bcast(boxes(i)%z1,1,mpi_double_precision,0,mpi_comm_world,ierr)

   boxes(i)%level=1
   if (iproc==0) call scanfile (params%infile,'box'//cm(il:3)//'level',boxes(i)%level,ires)
   call mpi_bcast(boxes(i)%level,1,mpi_integer,0,mpi_comm_world,ierr)
enddo

do i=1,params%nsections
   write(cm,'(i3)') i
   il=1
   if (i.lt.100) il=2
   if (il.lt.10) il=3

   sections(i)%xyz=0
   if (iproc==0) call scanfile (params%infile,'xyz_'//cm(il:3),sections(i)%xyz,ires)

   sections(i)%slice = 0.1d0
   if (iproc==0) call scanfile (params%infile,'slice_'//cm(il:3),sections(i)%slice,ires)
!   if (sections(i)%slice<0.d0 .or. sections(i)%slice>1.d0) call stop_run ('pb with slice value')

   sections(i)%flag_press = .false. 
   if (iproc==0) then
      call scanfile (params%infile,'flag_press_'//cm(il:3),answer,ires)
      if (ires==1) sections(i)%flag_press=(trim(answer)=='T')
   end if

   sections(i)%flag_spress = .false. 
   if (iproc==0) then
      call scanfile (params%infile,'flag_spress_'//cm(il:3),answer,ires)
      if (ires==1) sections(i)%flag_spress=(trim(answer)=='T')
   end if

   sections(i)%flag_e2d   = .false.
   if (iproc==0) then
      call scanfile (params%infile,'flag_e2d_'//cm(il:3),answer,ires)
      if (ires==1) sections(i)%flag_e2d=(trim(answer)=='T')
   end if

   sections(i)%flag_e3d   = .false.
   if (iproc==0) then
      call scanfile (params%infile,'flag_e3d_'//cm(il:3),answer,ires)
      if (ires==1) sections(i)%flag_e3d=(trim(answer)=='T')
   end if

   sections(i)%flag_strain   = .false.
   if (iproc==0) then
      call scanfile (params%infile,'flag_strain_'//cm(il:3),answer,ires)
      if (ires==1) sections(i)%flag_strain=(trim(answer)=='T')
   end if

   sections(i)%flag_crit  = .false.
   if (iproc==0) then
      call scanfile (params%infile,'flag_crit_'//cm(il:3),answer,ires)
      if (ires==1) sections(i)%flag_crit=(trim(answer)=='T')
   end if

   sections(i)%flag_grid  = .false.
   if (iproc==0) then
      call scanfile (params%infile,'flag_grid_'//cm(il:3),answer,ires)
      if (ires==1) sections(i)%flag_grid=(trim(answer)=='T')
   end if

   sections(i)%flag_u  = .false.
   if (iproc==0) then
      call scanfile (params%infile,'flag_u_'//cm(il:3),answer,ires)
      if (ires==1) sections(i)%flag_u=(trim(answer)=='T')
   end if
 
   sections(i)%flag_v  = .false.
   if (iproc==0) then
      call scanfile (params%infile,'flag_v_'//cm(il:3),answer,ires)
      if (ires==1) sections(i)%flag_v=(trim(answer)=='T')
   end if

   sections(i)%flag_w  = .false.
   if (iproc==0) then
      call scanfile (params%infile,'flag_w_'//cm(il:3),answer,ires)
      if (ires==1) sections(i)%flag_w=(trim(answer)=='T')
   end if

   sections(i)%flag_uvw  = .false.
   if (iproc==0) then
      call scanfile (params%infile,'flag_uvw_'//cm(il:3),answer,ires)
      if (ires==1) sections(i)%flag_uvw=(trim(answer)=='T')
   end if

   sections(i)%flag_colour  = .false.
   if (iproc==0) then
      call scanfile (params%infile,'flag_colour_'//cm(il:3),answer,ires)
      if (ires==1) sections(i)%flag_colour=(trim(answer)=='T')
   end if

   sections(i)%flag_mu  = .false.
   if (iproc==0) then
      call scanfile (params%infile,'flag_mu_'//cm(il:3),answer,ires)
      if (ires==1) sections(i)%flag_mu=(trim(answer)=='T')
   end if

   sections(i)%flag_plastic  = .false.
   if (iproc==0) then
      call scanfile (params%infile,'flag_plastic_'//cm(il:3),answer,ires)
      if (ires==1) sections(i)%flag_plastic=(trim(answer)=='T')
   end if

   sections(i)%flag_q  = .false.
   if (iproc==0) then
      call scanfile (params%infile,'flag_q_'//cm(il:3),answer,ires)
      if (ires==1) sections(i)%flag_q=(trim(answer)=='T')
   end if

   sections(i)%flag_lode  = .false.
   if (iproc==0) then
      call scanfile (params%infile,'flag_lode_'//cm(il:3),answer,ires)
      if (ires==1) sections(i)%flag_lode=(trim(answer)=='T')
   end if

   sections(i)%flag_vfield  = .false.
   if (iproc==0) then
      call scanfile (params%infile,'flag_vfield_'//cm(il:3),answer,ires)
      if (ires==1) sections(i)%flag_vfield=(trim(answer)=='T')
   end if

   sections(i)%flag_lsf  = .false.
   if (iproc==0) then
      call scanfile (params%infile,'flag_lsf_'//cm(il:3),answer,ires)
      if (ires==1) sections(i)%flag_lsf=(trim(answer)=='T')
   end if

   sections(i)%flag_temp  = .false.
   if (iproc==0) then
      call scanfile (params%infile,'flag_temp_'//cm(il:3),answer,ires)
      if (ires==1) sections(i)%flag_temp=(trim(answer)=='T')
   end if

   sections(i)%flag_velvect  = .false.
   if (iproc==0) then
      call scanfile (params%infile,'flag_velvect_'//cm(il:3),answer,ires)
      if (ires==1) sections(i)%flag_velvect=(trim(answer)=='T')
   end if

   sections(i)%scale=100.d0
   if (iproc==0) call scanfile (params%infile,'scale_'//cm(il:3),sections(i)%scale,ires)

   sections(i)%colormap = 'jet'
   if (iproc==0) call scanfile (params%infile,'colormap_'//cm(il:3),sections(i)%colormap,ires)

   sections(i)%ncolours = 256
   if (iproc==0) call scanfile (params%infile,'ncolours_'//cm(il:3),sections(i)%ncolours,ires)
end do

!=====[erosion parameters]=====================================================
params%erosion=.false.
if (iproc==0) then
   call scanfile (params%infile,'erosion',answer,ires)
   if (ires==1) params%erosion=(trim(answer)=='T')
end if
call mpi_bcast(params%erosion,1,mpi_logical,0,mpi_comm_world,ierr)

params%zerosion=0.d0
if (iproc==0) call scanfile (params%infile,'zerosion',params%zerosion,ires)
params%zerosion=params%zerosion/params%vex
call mpi_bcast(params%zerosion,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%er_start=0.d0
if (iproc==0) call scanfile (params%infile,'er_start',params%er_start,ires)
call mpi_bcast(params%er_start,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%er_end=0.d0
if (iproc==0) call scanfile (params%infile,'er_end',params%er_end,ires)
call mpi_bcast(params%er_end,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%sed_start=0.d0
if (iproc==0) call scanfile (params%infile,'sed_start',params%sed_start,ires)
call mpi_bcast(params%sed_start,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%sed_end=0.d0
if (iproc==0) call scanfile (params%infile,'sed_end',params%sed_end,ires)
call mpi_bcast(params%sed_end,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%sedimentation_type=1
if (iproc==0) call scanfile (params%infile,'sedimentation_type',params%sedimentation_type,ires)
call mpi_bcast(params%sedimentation_type,1,mpi_integer,0,mpi_comm_world,ierr)

params%zaggrade_init=0.d0
if (iproc==0) call scanfile (params%infile,'zaggrade_init',params%zaggrade_init,ires)
params%zaggrade_init=params%zaggrade_init/params%vex
call mpi_bcast(params%zaggrade_init,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%x_agg_start=0.d0
if (iproc==0) call scanfile (params%infile,'x_agg_start',params%x_agg_start,ires)
call mpi_bcast(params%x_agg_start,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%x_agg_end=1.d0
if (iproc==0) call scanfile (params%infile,'x_agg_end',params%x_agg_end,ires)
call mpi_bcast(params%x_agg_end,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%y_agg_start=0.d0
if (iproc==0) call scanfile (params%infile,'y_agg_start',params%y_agg_start,ires)
call mpi_bcast(params%y_agg_start,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%y_agg_end=1.d0
if (iproc==0) call scanfile (params%infile,'y_agg_end',params%y_agg_end,ires)
call mpi_bcast(params%y_agg_end,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%x_agg_sinus_amp=0.d0
if (iproc==0) call scanfile (params%infile,'x_agg_sinus_amp',params%x_agg_sinus_amp,ires)
params%x_agg_sinus_amp=params%x_agg_sinus_amp/params%vex
call mpi_bcast(params%x_agg_sinus_amp,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%x_agg_sinus_wavelth=0.5d0
if (iproc==0) call scanfile (params%infile,'x_agg_sinus_wavelth',params%x_agg_sinus_wavelth,ires)
call mpi_bcast(params%x_agg_sinus_wavelth,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%y_agg_sinus_amp=0.d0
if (iproc==0) call scanfile (params%infile,'y_agg_sinus_amp',params%y_agg_sinus_amp,ires)
params%y_agg_sinus_amp=params%y_agg_sinus_amp/params%vex
call mpi_bcast(params%y_agg_sinus_amp,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%y_agg_sinus_wavelth=0.5d0
if (iproc==0) call scanfile (params%infile,'y_agg_sinus_wavelth',params%y_agg_sinus_wavelth,ires)
call mpi_bcast(params%y_agg_sinus_wavelth,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%aggrade_rate=-1.d0
if (iproc==0) call scanfile (params%infile,'aggrade_rate',params%aggrade_rate,ires)
params%aggrade_rate=params%aggrade_rate/params%vex
call mpi_bcast(params%aggrade_rate,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%z_prog_init=0.d0
if (iproc==0) call scanfile (params%infile,'z_prog_init',params%z_prog_init,ires)
params%z_prog_init=params%z_prog_init/params%vex
call mpi_bcast(params%z_prog_init,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%z_prog_fin=0.d0
if (iproc==0) call scanfile (params%infile,'z_prog_fin',params%z_prog_fin,ires)
params%z_prog_fin=params%z_prog_fin/params%vex
call mpi_bcast(params%z_prog_fin,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%x_prog_start=0.d0
if (iproc==0) call scanfile (params%infile,'x_prog_start',params%x_prog_start,ires)
call mpi_bcast(params%x_prog_start,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%x_prog_end=1.d0
if (iproc==0) call scanfile (params%infile,'x_prog_end',params%x_prog_end,ires)
call mpi_bcast(params%x_prog_end,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%x_prog_length=1.d0
if (iproc==0) call scanfile (params%infile,'x_prog_length',params%x_prog_length,ires)
call mpi_bcast(params%x_prog_length,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%prog_rate_u=0.d0
if (iproc==0) call scanfile (params%infile,'prog_rate_u',params%prog_rate_u,ires)
call mpi_bcast(params%prog_rate_u,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%length_scale=1.d0
if (iproc==0) call scanfile (params%infile,'length_scale',params%length_scale,ires)
call mpi_bcast(params%length_scale,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%velocity_scale=1.d0
if (iproc==0) call scanfile (params%infile,'velocity_scale',params%velocity_scale,ires)
call mpi_bcast(params%velocity_scale,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%fluvial_erosion=2.d-1
if (iproc==0) call scanfile (params%infile,'fluvial_erosion',params%fluvial_erosion,ires)
call mpi_bcast(params%fluvial_erosion,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%diffusion_erosion=8.d0
if (iproc==0) call scanfile (params%infile,'diffusion_erosion',params%diffusion_erosion,ires)
call mpi_bcast(params%diffusion_erosion,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%baselevelx0=1
if (iproc==0) call scanfile (params%infile,'baselevelx0',params%baselevelx0,ires)
call mpi_bcast(params%baselevelx0,1,mpi_integer,0,mpi_comm_world,ierr)

params%baselevelx1=1
if (iproc==0) call scanfile (params%infile,'baselevelx1',params%baselevelx1,ires)
call mpi_bcast(params%baselevelx1,1,mpi_integer,0,mpi_comm_world,ierr)

params%baselevely0=1
if (iproc==0) call scanfile (params%infile,'baselevely0',params%baselevely0,ires)
call mpi_bcast(params%baselevely0,1,mpi_integer,0,mpi_comm_world,ierr)

params%baselevely1=1
if (iproc==0) call scanfile (params%infile,'baselevely1',params%baselevely1,ires)
call mpi_bcast(params%baselevely1,1,mpi_integer,0,mpi_comm_world,ierr)

params%compute_qpgram=.false.
if (iproc.eq.0) then
   call scanfile (params%infile,'compute_qpgram',answer,ires)
   if (ires==1) params%compute_qpgram=(trim(answer)=='T')
end if
call mpi_bcast(params%compute_qpgram,1,mpi_logical,0,mpi_comm_world,ierr)

!=====[flexure parameters]=====================================================
params%isostasy=.false.
if (iproc.eq.0) then
   call scanfile (params%infile,'isostasy',answer,ires)
   if (ires==1) params%isostasy=(trim(answer)=='T')
endif
call mpi_bcast(params%isostasy,1,mpi_logical,0,mpi_comm_world,ierr)

params%flexure=.false.
if (iproc.eq.0) then
   call scanfile (params%infile,'flexure',answer,ires)
   if (ires==1) params%flexure=(trim(answer)=='T')
endif
call mpi_bcast(params%flexure,1,mpi_logical,0,mpi_comm_world,ierr)

params%isobc=.false. 
if (iproc==0) then 
   call scanfile (params%infile,'isobc',answer,ires)  
   if (ires==1) params%isobc=(trim(answer)=='T') 
end if 
call mpi_bcast(params%isobc,1,mpi_logical,0,mpi_comm_world,ierr) 

params%elastic_plate_thickness=20.d3
if (iproc==0) call scanfile (params%infile,'elastic_plate_thickness',params%elastic_plate_thickness,ires)
call mpi_bcast(params%elastic_plate_thickness,1,mpi_double_precision,0,mpi_comm_world,ierr)

params%density_difference=3.d3
if (iproc==0) call scanfile (params%infile,'density_difference',params%density_difference,ires)
call mpi_bcast(params%density_difference,1,mpi_double_precision,0,mpi_comm_world,ierr)

!=====[nest parameters]========================================================
params%nest=.false.
if (iproc==0) then
   call scanfile (params%infile,'nest',answer,ires)  
   if (ires==1) params%nest=(trim(answer)=='T') 
end if 
call mpi_bcast(params%nest,1,mpi_logical,0,mpi_comm_world,ierr) 

if (params%nest) then
   nest%ssoutdir='SSOUT'
   if (iproc.eq.0) call scanfile (params%infile,'ssoutdir',nest%ssoutdir,ires)
   call mpi_bcast(nest%ssoutdir,5,mpi_character,0,mpi_comm_world,ierr)

   nest%lsoutfile='OUT/time_0001.bin'
   if (iproc.eq.0) call scanfile (params%infile,'lsoutfile',nest%lsoutfile,ires)
   call mpi_bcast(nest%lsoutfile,128,mpi_character,0,mpi_comm_world,ierr)

   nest%sselemx=1.d0
   if (iproc==0) call scanfile (params%infile,'sselemx',nest%sselemx,ires)
   call mpi_bcast(nest%sselemx,1,mpi_double_precision,0,mpi_comm_world,ierr)

   nest%sselemy=1.d0
   if (iproc==0) call scanfile (params%infile,'sselemy',nest%sselemy,ires)
   call mpi_bcast(nest%sselemy,1,mpi_double_precision,0,mpi_comm_world,ierr)

   nest%sselemz=1.d0
   if (iproc==0) call scanfile (params%infile,'sselemz',nest%sselemz,ires)
   call mpi_bcast(nest%sselemz,1,mpi_double_precision,0,mpi_comm_world,ierr)

   nest%xminls=0.d0
   if (iproc==0) call scanfile (params%infile,'xminls',nest%xminls,ires)
   call mpi_bcast(nest%xminls,1,mpi_double_precision,0,mpi_comm_world,ierr)

   nest%yminls=0.d0
   if (iproc==0) call scanfile (params%infile,'yminls',nest%yminls,ires)
   call mpi_bcast(nest%yminls,1,mpi_double_precision,0,mpi_comm_world,ierr)

   nest%zminls=0.d0
   if (iproc==0) call scanfile (params%infile,'zminls',nest%zminls,ires)
   call mpi_bcast(nest%zminls,1,mpi_double_precision,0,mpi_comm_world,ierr)

   nest%sselemx0=1.d0
   if (iproc==0) call scanfile (params%infile,'sselemx0',nest%sselemx0,ires)
   call mpi_bcast(nest%sselemx0,1,mpi_double_precision,0,mpi_comm_world,ierr)

   nest%sselemy0=1.d0
   if (iproc==0) call scanfile (params%infile,'sselemy0',nest%sselemy0,ires)
   call mpi_bcast(nest%sselemy0,1,mpi_double_precision,0,mpi_comm_world,ierr)

   nest%sselemz0=1.d0
   if (iproc==0) call scanfile (params%infile,'sselemz0',nest%sselemz0,ires)
   call mpi_bcast(nest%sselemz0,1,mpi_double_precision,0,mpi_comm_world,ierr)
endif

! Defined, but not broadcast or read from input file
!params%distance_exponent=-log(2.d0)/log(cos(params%anglemax))
params%distance_exponent=1.d0

! Input values are now written to stdout or log files here
if (params%debug.gt.0 .and. iproc.eq.0) then
  write(*,'(a)')       shift//'--- ADDITIONAL CONTROLLING PARAMETERS ---'
  write(*,'(a,l1)')    shift//'compute_qpgram ',params%compute_qpgram
  write(*,'(a)')       shift//'--- SPINUP PHASE ---'
  write(*,'(a,i4)')    shift//'nstep_spinup ',params%nstep_spinup
  write(*,'(a,e11.4)') shift//'dt_spinup ',params%dt_spinup
  write(*,'(a,i4)')    shift//'griditer_spinup ',params%griditer_spinup
  write(*,'(a,i4)')    shift//'nonlinear_iterations_spinup ',params%nonlinear_iterations_spinup
  write(*,'(a,e11.4)') shift//'tol_spinup ',params%tol_spinup
  write(*,'(a,l1)')    shift//'sstemp_spinup ',params%sstemp_spinup
  write(*,'(a,e11.4)') shift//'sstemp_viscosity_spinup ',params%sstemp_viscosity_spinup
  write(*,'(a,e11.4)') shift//'sstemp_penalty_spinup ',params%sstemp_penalty_spinup
  write(*,'(a,l1)')    shift//'all_surf_fixed_spinup ',params%all_surf_fixed_spinup
  do i=1,params%ns
    write(*,'(a,i4,a,i4)')    shift//'surface ',i,' material_spinup ',surface(i)%material_spinup
  enddo
  write(*,'(a,l1)')    shift//'fixed_cloud_spinup ',params%fixed_cloud_spinup
  write(*,'(a)')       shift//'--- TIMESTEPPING ---'
  write(*,'(a,e11.4)') shift//'dt_main ',params%dt_main
  write(*,'(a,e11.4)') shift//'dt ',params%dt
  write(*,'(a,i4)')    shift//'nstep ',params%nstep
  write(*,'(a,e11.4)') shift//'courant ',params%courant
  write(*,'(a,l1)')    shift//'normaladvect ',params%normaladvect
  write(*,'(a)')       shift//'--- GRID ITERATIONS ---'
  write(*,'(a,i4)')    shift//'griditer_main ',params%griditer_main
  write(*,'(a,i4)')    shift//'griditer ',params%griditer
  write(*,'(a,e11.4)') shift//'octree_refine_ratio ',params%octree_refine_ratio
  write(*,'(a)')       shift//'--- NONLINEAR ITERATIONS ---'
  write(*,'(a,i4)')    shift//'nonlinear_iterations_main ',params%nonlinear_iterations_main
  write(*,'(a,i4)')    shift//'nonlinear_iterations ',params%nonlinear_iterations
  write(*,'(a,i4)')    shift//'nb_iter_nl_min ',params%nb_iter_nl_min
  write(*,'(a,e11.4)') shift//'tol ',params%tol
  write(*,'(a,l1)')    shift//'adaptive_tol ',params%adaptive_tol
  write(*,'(a)')       shift//'--- OCTREES ---'
  write(*,'(a,i4)')    shift//'leveluniform_oct ',params%leveluniform_oct
  write(*,'(a,i4)')    shift//'levelmax_oct ',params%levelmax_oct
  write(*,'(a,e11.4)') shift//'vex ',params%vex
  write(*,'(a,l1)')    shift//'ismooth ',params%ismooth
  write(*,'(a,i12)')   shift//'noctreemax ',params%noctreemax
  write(*,'(a,e11.4)') shift//'refine_ratio ',params%refine_ratio
  write(*,'(a,i4)')    shift//'refine_criterion ',params%refine_criterion
  write(*,'(a,i4)')    shift//'initial_refine_level ',params%initial_refine_level
  write(*,'(a,l1)')    shift//'renumber_nodes ',params%renumber_nodes
  write(*,'(a)')       shift//'--- NESTED MODEL PARAMETERS ---'
  write(*,'(a,l1)')    shift//'nest ',params%nest
  if (params%nest) then
    write(*,'(a,a)')     shift//'ssoutdir ',trim(nest%ssoutdir)
    write(*,'(a,a)')     shift//'lsoutfile ',trim(nest%lsoutfile)
    write(*,'(a,e11.4)') shift//'sselemx ',nest%sselemx
    write(*,'(a,e11.4)') shift//'sselemy ',nest%sselemy
    write(*,'(a,e11.4)') shift//'sselemz ',nest%sselemz
    write(*,'(a,e11.4)') shift//'xminls ',nest%xminls
    write(*,'(a,e11.4)') shift//'yminls ',nest%yminls
    write(*,'(a,e11.4)') shift//'zminls ',nest%zminls
    write(*,'(a,e11.4)') shift//'sselemx0 ',nest%sselemx0
    write(*,'(a,e11.4)') shift//'sselemy0 ',nest%sselemy0
    write(*,'(a,e11.4)') shift//'sselemz0 ',nest%sselemz0
  endif
  write(*,'(a)')       shift//'--- BOUNDARY CONDITIONS AND VELOCITY CONSTRAINTS ---'
  write(*,'(a,l1)')    shift//'invariants_2d ',params%invariants_2d
  write(*,'(a,l1)')    shift//'damp_surface ',params%damp_surface
  write(*,'(a,e11.4)') shift//'damp_factor ',params%damp_factor
  write(*,'(a,a)')     shift//'bctype ',bcdef%bctype
  select case(trim(bcdef%bctype))
  case('basic')
    write(*,'(a,a)') shift//'bcorder ',bcdef%bcorder
    write(*,'(a,l1)') shift//'fixux0 ',bcdef%fixux0
    write(*,'(a,l1)') shift//'fixux1 ',bcdef%fixux1
    write(*,'(a,l1)') shift//'fixvx0 ',bcdef%fixvx0
    write(*,'(a,l1)') shift//'fixvx1 ',bcdef%fixvx1
    write(*,'(a,l1)') shift//'fixwx0 ',bcdef%fixwx0
    write(*,'(a,l1)') shift//'fixwx1 ',bcdef%fixwx1
    write(*,'(a,l1)') shift//'fixuy0 ',bcdef%fixuy0
    write(*,'(a,l1)') shift//'fixuy1 ',bcdef%fixuy1
    write(*,'(a,l1)') shift//'fixvy0 ',bcdef%fixvy0
    write(*,'(a,l1)') shift//'fixvy1 ',bcdef%fixvy1
    write(*,'(a,l1)') shift//'fixwy0 ',bcdef%fixwy0
    write(*,'(a,l1)') shift//'fixwy1 ',bcdef%fixwy1
    write(*,'(a,l1)') shift//'fixuz0 ',bcdef%fixuz0
    write(*,'(a,l1)') shift//'fixuz1 ',bcdef%fixuz1
    write(*,'(a,l1)') shift//'fixvz0 ',bcdef%fixvz0
    write(*,'(a,l1)') shift//'fixvz1 ',bcdef%fixvz1
    write(*,'(a,l1)') shift//'fixwz0 ',bcdef%fixwz0
    write(*,'(a,l1)') shift//'fixwz1 ',bcdef%fixwz1
    write(*,'(a,e11.4)') shift//'ux0 ',bcdef%ux0
    write(*,'(a,e11.4)') shift//'ux1 ',bcdef%ux1
    write(*,'(a,e11.4)') shift//'vx0 ',bcdef%vx0
    write(*,'(a,e11.4)') shift//'vx1 ',bcdef%vx1
    write(*,'(a,e11.4)') shift//'wx0 ',bcdef%wx0
    write(*,'(a,e11.4)') shift//'wx1 ',bcdef%wx1
    write(*,'(a,e11.4)') shift//'uy0 ',bcdef%uy0
    write(*,'(a,e11.4)') shift//'uy1 ',bcdef%uy1
    write(*,'(a,e11.4)') shift//'vy0 ',bcdef%vy0
    write(*,'(a,e11.4)') shift//'vy1 ',bcdef%vy1
    write(*,'(a,e11.4)') shift//'wy0 ',bcdef%wy0
    write(*,'(a,e11.4)') shift//'wy1 ',bcdef%wy1
    write(*,'(a,e11.4)') shift//'uz0 ',bcdef%uz0
    write(*,'(a,e11.4)') shift//'uz1 ',bcdef%uz1
    write(*,'(a,e11.4)') shift//'vz0 ',bcdef%vz0
    write(*,'(a,e11.4)') shift//'vz1 ',bcdef%vz1
    write(*,'(a,e11.4)') shift//'wz0 ',bcdef%wz0
    write(*,'(a,e11.4)') shift//'wz1 ',bcdef%wz1
  case('segmented_s_line')
    write(*,'(a)') shift//'Boundary condition parameters'
    do i=1,12
      write(*,'(a,i2,a,e11.4)') shift//'bc_parameter ',i,' ',bcdef%bc_parameters(i)
    enddo
  case('segmented_s_line_round')
    write(*,'(a)') shift//'Boundary condition parameters'
    do i=1,13
      write(*,'(a,i2,a,e11.4)') shift//'bc_parameter ',i,' ',bcdef%bc_parameters(i)
    enddo
  case('rot_subduction')
    write(*,'(a)') shift//'Boundary condition parameters'
    do i=1,13
      write(*,'(a,i2,a,e11.4)') shift//'bc_parameter ',i,' ',bcdef%bc_parameters(i)
    enddo
  case('rot_sub_init')
    write(*,'(a)') shift//'Boundary condition parameters'
    do i=1,14
      write(*,'(a,i2,a,e11.4)') shift//'bc_parameter ',i,' ',bcdef%bc_parameters(i)
    enddo
  end select
  write(*,'(a,e11.4)')   shift//'utrans ',bcdef%utrans
  write(*,'(a,e11.4)')   shift//'vtrans ',bcdef%vtrans
  write(*,'(a)')         shift//'--- PRESSURE ---'
  write(*,'(a,i4)')      shift//'smoothing_type ',params%smoothing_type
  write(*,'(a,e11.4)')   shift//'pressure0 ',params%pressure0
  write(*,'(a,e11.4)')   shift//'plastic_stress_min ',params%plastic_stress_min
  write(*,'(a)')         shift//'--- CLOUD ---'
  write(*,'(a,i4)')      shift//'npmin ',params%npmin
  write(*,'(a,i4)')      shift//'npmax ',params%npmax
  write(*,'(a,l1)')      shift//'gridcloud ',params%gridcloud
  write(*,'(a,i4)')      shift//'clnpx ',params%clnpx
  write(*,'(a,i4)')      shift//'clnpy ',params%clnpy
  write(*,'(a,i4)')      shift//'clnpz ',params%clnpz
  write(*,'(a,i4)')      shift//'dstrnz ',params%dstrnz  
  write(*,'(a,l1)')      shift//'centerptcloud ',params%centerptcloud
  write(*,'(a,l1)')      shift//'compaction ',params%compaction
  write(*,'(a,l1)')      shift//'move_cloud_at_midpoint ',params%move_cloud_at_midpoint
  write(*,'(a,l1)')      shift//'fixed_cloud ',params%fixed_cloud
  write(*,'(a)')         shift//'--- FEM + DIVFEM + MUMPS/WSMP ---'
  write(*,'(a,i4)')      shift//'matrule ',params%matrule
  write(*,'(a,i4)')      shift//'levelcut ',params%levelcut
  write(*,'(a,i4)')      shift//'levelapprox ',params%levelapprox
  write(*,'(a,e11.4)')   shift//'penalty ',params%penalty
  write(*,'(a,l1)')      shift//'excl_vol ',params%excl_vol
  write(*,'(a,l1)')      shift//'wsmp_scaling ',params%wsmp_scaling
  write(*,'(a)')         shift//'--- TEMPERATURE ---'
  write(*,'(a,l1)')      shift//'calculate_temp ',params%calculate_temp
  write(*,'(a,e11.4)')   shift//'ztemp ',params%ztemp
  write(*,'(a,e11.4)')   shift//'tempscale ',params%tempscale
  write(*,'(a,l1)')      shift//'sstemp_on_restart ',params%sstemp_on_restart
  write(*,'(a)')         shift//'--- ISOSTASY ---'
  write(*,'(a,l1)')      shift//'isostasy ',params%isostasy
  write(*,'(a,l1)')      shift//'flexure ',params%flexure
  write(*,'(a,e11.4)')   shift//'elastic_plate_thickness ',params%elastic_plate_thickness
  write(*,'(a,e11.4)')   shift//'density_difference ',params%density_difference
  write(*,'(a,l1)')      shift//'isobc ',params%isobc
  write(*,'(a)')         shift//'--- MATERIALS ---'
  write(*,'(a,l1)')      shift//'materials_on_cloud ',params%materials_on_cloud
  write(*,'(a,i4)')      shift//'material0 ',material0
  write(*,'(a,l1)')      shift//'bulkvisc ',params%bulkvisc
  write(*,'(a,l1)')      shift//'init_e2d ',params%init_e2d
  write(*,'(a,e11.4)')   shift//'e2d0 ',params%e2d0
  write(*,'(a,i4)')      shift//'dommat ',params%dommat  
  write(*,'(a,e11.4)')   shift//'domvol ',params%domvol
  do i=1,params%nmat
    write(*,'(a,i4,a)')  shift//'--- Properties for material ',i,' ---'
    write(*,'(a,e11.4)') shift//'density ',mat(i)%density
    write(*,'(a,e11.4)') shift//'viscosity ',mat(i)%viscosity
    write(*,'(a,e11.4)') shift//'penalty ',mat(i)%penalty
    write(*,'(a,e11.4)') shift//'expon ',mat(i)%expon
    write(*,'(a,e11.4)') shift//'fviscosity ',mat(i)%fviscosity
    write(*,'(a,a16)')   shift//'fvisc_weak_type ',mat(i)%fvisc_weak_type
    write(*,'(a,e11.4)') shift//'fvisc_weak_onset ',mat(i)%fvisc_weak_onset
    write(*,'(a,e11.4)') shift//'fvisc_weak_end ',mat(i)%fvisc_weak_end
    write(*,'(a,e11.4)') shift//'fvisc_weak_final ',mat(i)%fvisc_weak_final
    write(*,'(a,e11.4)') shift//'fvisc_strong_onset ',mat(i)%fvisc_strong_onset
    write(*,'(a,e11.4)') shift//'fvisc_strong_end ',mat(i)%fvisc_strong_end
    write(*,'(a,e11.4)') shift//'fvisc_strong_final ',mat(i)%fvisc_strong_final
    write(*,'(a,e11.4)') shift//'diffusivity ',mat(i)%diffusivity
    write(*,'(a,e11.4)') shift//'heat ',mat(i)%heat
    write(*,'(a,e11.4)') shift//'activationenergy ',mat(i)%activationenergy
    write(*,'(a,e11.4)') shift//'expansion ',mat(i)%expansion
    write(*,'(a,a8)')    shift//'plasticity_type ',mat(i)%plasticity_type
    write(*,'(a,a16)')   shift//'plasticity_ss_type_coh ',mat(i)%plasticity_ss_type_coh
    write(*,'(a,a16)')   shift//'plasticity_ss_type_phi ',mat(i)%plasticity_ss_type_phi    
    write(*,'(a,l1)')    shift//'compactible ',mat(i)%compactible
    write(*,'(a,e11.4)') shift//'grain_density ',mat(i)%grain_density
    write(*,'(a,e11.4)') shift//'pore_fluid_density ',mat(i)%pore_fluid_density
    write(*,'(a,e11.4)') shift//'surface_porosity ',mat(i)%surface_porosity
    write(*,'(a,e11.4)') shift//'compaction_coef ',mat(i)%compaction_coef 
    if (trim(mat(i)%plasticity_type).ne.'No') then
      write(*,'(a,i4)') shift//'Plasticity parameters for material ',i
      do j=1,14
        write(*,'(a,i2,a2,e11.4)') shift//'plasticity parameter ',j,' ',mat(i)%plasticity_parameters(j)
      enddo
    endif
    write (*,'(a,i4)') shift//'Material transitions for material ',i
    do j=1,6
      write(*,'(a,i1,a2,e11.4)') shift//'mattrans ',j,' ',mat(i)%mattrans(j)
    enddo
    do j=1,6
      write(*,'(a,i1,a2,i4)') shift//'transnum ',j,' ',mat(i)%transnum(j)
    enddo
  enddo
  write(*,'(a,e11.4)') shift//'viscositymin ',params%viscositymin
  write(*,'(a,e11.4)') shift//'viscositymax ',params%viscositymax
  write(*,'(a)')       shift//'--- SURFACES ---'
  write(*,'(a,l1)')    shift//'remove_surf_pts ',params%remove_surf_pts
  do i=1,params%ns
    write(*,'(a,i4,a)')       shift//'--- Properties for surface ',i,' ---'
    write(*,'(a,i4,a,i4)')    shift//'surface ',i,' levelt ',surface(i)%levelt
    write(*,'(a,i4,a,i4)')    shift//'surface ',i,' itype ',surface(i)%itype
    write(*,'(a,i4,a,i4)')    shift//'surface ',i,' closed ',surface(i)%closed
    write(*,'(a,i4,a,i4)')    shift//'surface ',i,' type ',surface(i)%surface_type
    write(*,'(a,i4,a,l1)')    shift//'surface ',i,' rand ',surface(i)%rand
    write(*,'(a,i4,a,e11.4)') shift//'surface ',i,' sp01 ',surface(i)%sp01
    write(*,'(a,i4,a,e11.4)') shift//'surface ',i,' sp02 ',surface(i)%sp02
    write(*,'(a,i4,a,e11.4)') shift//'surface ',i,' sp03 ',surface(i)%sp03
    write(*,'(a,i4,a,e11.4)') shift//'surface ',i,' sp04 ',surface(i)%sp04
    write(*,'(a,i4,a,e11.4)') shift//'surface ',i,' sp05 ',surface(i)%sp05
    write(*,'(a,i4,a,e11.4)') shift//'surface ',i,' sp06 ',surface(i)%sp06
    write(*,'(a,i4,a,e11.4)') shift//'surface ',i,' sp07 ',surface(i)%sp07
    write(*,'(a,i4,a,e11.4)') shift//'surface ',i,' sp08 ',surface(i)%sp08
    write(*,'(a,i4,a,e11.4)') shift//'surface ',i,' sp09 ',surface(i)%sp09
    write(*,'(a,i4,a,e11.4)') shift//'surface ',i,' sp10 ',surface(i)%sp10
    write(*,'(a,i4,a,e11.4)') shift//'surface ',i,' sp11 ',surface(i)%sp11
    write(*,'(a,i4,a,e11.4)') shift//'surface ',i,' sp12 ',surface(i)%sp12
    write(*,'(a,i4,a,e11.4)') shift//'surface ',i,' sp13 ',surface(i)%sp13
    write(*,'(a,i4,a,e11.4)') shift//'surface ',i,' sp14 ',surface(i)%sp14
    write(*,'(a,i4,a,i4)')    shift//'surface ',i,' material ',surface(i)%material
    write(*,'(a,i4,a,e11.4)') shift//'surface ',i,' activation_time ',surface(i)%activation_time
    write(*,'(a,i4,a,i4)')    shift//'surface ',i,' leveloct ',surface(i)%leveloct
    write(*,'(a,i4,a,e11.4)') shift//'surface ',i,' stretch ',surface(i)%stretch
    write(*,'(a,i4,a,e11.4)') shift//'surface ',i,' anglemax ',surface(i)%anglemax
    write(*,'(a,i4,a,i4)')    shift//'surface ',i,' criterion ',surface(i)%criterion
    write(*,'(a,i4,a,e11.4)') shift//'surface ',i,' anglemaxoctree ',surface(i)%anglemaxoctree
    write(*,'(a,i4,a,i4)')    shift//'surface ',i,' spread_surface_points ',surface(i)%spread_surface_points
    write(*,'(a,i4,a,l1)')    shift//'surface ',i,' fixed_surf_spinup ',surface(i)%fixed_surf_spinup
    write(*,'(a,i4,a,l1)')    shift//'surface ',i,' fixed_surf ',surface(i)%fixed_surf
    write(*,'(a,i4,a,l1)')    shift//'surface ',i,' surf_for_mat_props ',surface(i)%surf_for_mat_props
    write(*,'(a,i4,a,l1)')    shift//'surface ',i,' remove_after_mat_def ',surface(i)%remove_after_mat_def
  enddo
  write(*,'(a,i4)') shift//'niter_move ',params%niter_move
  write(*,'(a)')    shift//'--- REFINEMENT IN BOXES ---'
  if (params%nboxes.gt.0) then
    do i=1,params%nboxes
      write(*,'(a,i3,a)')  shift//'--- Input values for box ',i,' ---'
      write(*,'(a,e11.4)') shift//'box x0 ',boxes(i)%x0
      write(*,'(a,e11.4)') shift//'box x1 ',boxes(i)%x1
      write(*,'(a,e11.4)') shift//'box y0 ',boxes(i)%y0
      write(*,'(a,e11.4)') shift//'box y1 ',boxes(i)%y1
      write(*,'(a,e11.4)') shift//'box z0 ',boxes(i)%z0
      write(*,'(a,e11.4)') shift//'box z1 ',boxes(i)%z1
      write(*,'(a,i4)')    shift//'box level ',boxes(i)%level
    enddo
  endif
  write(*,'(a)')    shift//'--- REFINEMENT ON CUBE FACES ---'
  write(*,'(a,l1)') shift//'ref_on_faces ',params%ref_on_faces
  if (params%ref_on_faces) then
    do i=1,6
      write(*,'(a,i1,a)')  shift//'--- Refinement values for face ',i,' ---'
      write(*,'(a,i4)')    shift//'cube_faces level ',cube_faces(i)%level
      write(*,'(a,e11.4)') shift//'cube_faces b ',cube_faces(i)%b
      write(*,'(a,e11.4)') shift//'cube_faces t ',cube_faces(i)%t
      write(*,'(a,e11.4)') shift//'cube_faces l ',cube_faces(i)%l
      write(*,'(a,e11.4)') shift//'cube_faces r ',cube_faces(i)%r
    enddo
  endif
  write(*,'(a)')       shift//'--- EROSION ---'
  write(*,'(a,l1)')    shift//'erosion ',params%erosion
  write(*,'(a,e11.4)') shift//'zerosion ',params%zerosion
  write(*,'(a,e11.4)') shift//'length_scale ',params%length_scale
  write(*,'(a,e11.4)') shift//'velocity_scale ',params%velocity_scale
  write(*,'(a,e11.4)') shift//'fluvial_erosion ',params%fluvial_erosion
  write(*,'(a,e11.4)') shift//'diffusion_erosion ',params%diffusion_erosion
  write(*,'(a,i4)')    shift//'baselevelx0 ',params%baselevelx0
  write(*,'(a,i4)')    shift//'baselevelx1 ',params%baselevelx1
  write(*,'(a,i4)')    shift//'baselevely0 ',params%baselevely0
  write(*,'(a,i4)')    shift//'baselevely1 ',params%baselevely1
  write(*,'(a)')       shift//'--- SEDIMENTATION ---'
  write(*,'(a,l1)')    shift//'sedimentation ',params%sedimentation
  write(*,'(a,i4)')    shift//'sedimentation_type ',params%sedimentation_type
  write(*,'(a,e11.4)') shift//'er_start ',params%er_start
  write(*,'(a,e11.4)') shift//'er_end ',params%er_end
  write(*,'(a,e11.4)') shift//'sed_start ',params%sed_start
  write(*,'(a,e11.4)') shift//'sed_end ',params%sed_end
  write(*,'(a,e11.4)') shift//'zaggrade_init ',params%zaggrade_init
  write(*,'(a,e11.4)') shift//'x_agg_start ',params%x_agg_start
  write(*,'(a,e11.4)') shift//'x_agg_end ',params%x_agg_end
  write(*,'(a,e11.4)') shift//'y_agg_start ',params%y_agg_start
  write(*,'(a,e11.4)') shift//'y_agg_end ',params%y_agg_end
  write(*,'(a,e11.4)') shift//'x_agg_sinus_amp ',params%x_agg_sinus_amp
  write(*,'(a,e11.4)') shift//'x_agg_sinus_wavelth ',params%x_agg_sinus_wavelth
  write(*,'(a,e11.4)') shift//'y_agg_sinus_amp ',params%y_agg_sinus_amp
  write(*,'(a,e11.4)') shift//'y_agg_sinus_wavelth ',params%y_agg_sinus_wavelth
  write(*,'(a,e11.4)') shift//'aggrade_rate ',params%aggrade_rate
  write(*,'(a,e11.4)') shift//'z_prog_init ',params%z_prog_init
  write(*,'(a,e11.4)') shift//'z_prog_fin ',params%z_prog_fin
  write(*,'(a,e11.4)') shift//'x_prog_start ',params%x_prog_start
  write(*,'(a,e11.4)') shift//'x_prog_end ',params%x_prog_end
  write(*,'(a,e11.4)') shift//'x_prog_length ',params%x_prog_length
  write(*,'(a,e11.4)') shift//'prog_rate_u ',params%prog_rate_u
  write(*,'(a)')       shift//'--- MATRIX VISUALISATION ---'
  write(*,'(a,l1)')    shift//'visualise_matrix ',params%visualise_matrix
  write(*,'(a)')       shift//'--- CROSS SECTIONS ---'
  if (params%nsections.gt.0) then
    do i=1,params%nsections
      write(*,'(a,i3,a)')  shift//'--- Input values for section ',i,' ---'    
      write(*,'(a,i4)')    shift//'section xyz ',sections(i)%xyz
      write(*,'(a,e11.4)') shift//'section slice ',sections(i)%slice
      write(*,'(a,l1)')    shift//'section flag press ',sections(i)%flag_press
      write(*,'(a,l1)')    shift//'section flag spress ',sections(i)%flag_spress
      write(*,'(a,l1)')    shift//'section flag e2d ',sections(i)%flag_e2d
      write(*,'(a,l1)')    shift//'section flag e3d ',sections(i)%flag_e3d
      write(*,'(a,l1)')    shift//'section flag strain ',sections(i)%flag_strain
      write(*,'(a,l1)')    shift//'section flag lode ',sections(i)%flag_lode
      write(*,'(a,l1)')    shift//'section flag crit ',sections(i)%flag_crit
      write(*,'(a,l1)')    shift//'section flag grid ',sections(i)%flag_grid
      write(*,'(a,l1)')    shift//'section flag mu ',sections(i)%flag_mu
      write(*,'(a,l1)')    shift//'section flag u ',sections(i)%flag_u
      write(*,'(a,l1)')    shift//'section flag v ',sections(i)%flag_v  
      write(*,'(a,l1)')    shift//'section flag w ',sections(i)%flag_w 
      write(*,'(a,l1)')    shift//'section flag q ',sections(i)%flag_q
      write(*,'(a,l1)')    shift//'section flag uvw ',sections(i)%flag_uvw
      write(*,'(a,l1)')    shift//'section flag lsf ',sections(i)%flag_lsf
      write(*,'(a,l1)')    shift//'section flag vfield ',sections(i)%flag_vfield
      write(*,'(a,l1)')    shift//'section flag colour ',sections(i)%flag_colour
      write(*,'(a,l1)')    shift//'section flag plastic ',sections(i)%flag_plastic
      write(*,'(a,i3)')    shift//'section flag temp ',sections(i)%flag_temp
      write(*,'(a,l1)')    shift//'section flag velvect ',sections(i)%flag_velvect
      write(*,'(a,e11.4)') shift//'section scale ',sections(i)%scale
      write(*,'(a,a3)')    shift//'section colormap ',sections(i)%colormap
      write(*,'(a,i4)')    shift//'section ncolours ',sections(i)%ncolours
    enddo
  endif
  !write(*,'(a,e11.4)') shift//'distance_exponent ',params%distance_exponent
  write(*,'(a)')      shift//'--------------------------------------------------------------------------------'
  write(*,'(a)')      shift//'--- END OF INPUT FILE ---'
  write(*,'(a)')      shift//'--------------------------------------------------------------------------------'
endif
if (params%debug.gt.1) then
  write(threadinfo%Logunit,'(a)')         '--- ADDITIONAL CONTROLLING PARAMETERS ---'
  write(threadinfo%Logunit,'(a32,l1)')    'compute_qpgram ',params%compute_qpgram
  write(threadinfo%Logunit,'(a)')         '--- SPINUP PHASE ---'
  write(threadinfo%Logunit,'(a32,i4)')    'nstep_spinup ',params%nstep_spinup
  write(threadinfo%Logunit,'(a32,e11.4)') 'dt_spinup ',params%dt_spinup
  write(threadinfo%Logunit,'(a32,i4)')    'griditer_spinup ',params%griditer_spinup
  write(threadinfo%Logunit,'(a32,i4)')    'nonlinear_iterations_spinup ',params%nonlinear_iterations_spinup
  write(threadinfo%Logunit,'(a32,e11.4)') 'tol_spinup ',params%tol_spinup
  write(threadinfo%Logunit,'(a32,l1)')    'sstemp_spinup ',params%sstemp_spinup
  write(threadinfo%Logunit,'(a32,e11.4)') 'sstemp_viscosity_spinup ',params%sstemp_viscosity_spinup
  write(threadinfo%Logunit,'(a32,e11.4)') 'sstemp_penalty_spinup ',params%sstemp_penalty_spinup
  write(threadinfo%Logunit,'(a32,l1)')    'all_surf_fixed_spinup ',params%all_surf_fixed_spinup
  do i=1,params%ns
        write(threadinfo%Logunit,'(a32,i4,a,i4)')    'surface ',i,' material_spinup ',surface(i)%material_spinup
  enddo
  write(threadinfo%Logunit,'(a32,l1)')    'fixed_cloud_spinup ',params%fixed_cloud_spinup
  write(threadinfo%Logunit,'(a)')         '--- TIMESTEPPING ---'
  write(threadinfo%Logunit,'(a32,e11.4)') 'dt_main ',params%dt_main
  write(threadinfo%Logunit,'(a32,e11.4)') 'dt ',params%dt
  write(threadinfo%Logunit,'(a32,i4)')    'nstep ',params%nstep
  write(threadinfo%Logunit,'(a32,e11.4)') 'courant ',params%courant
  write(threadinfo%Logunit,'(a32,l1)')    'normaladvect ',params%normaladvect
  write(threadinfo%Logunit,'(a)')         '--- GRID ITERATIONS ---'
  write(threadinfo%Logunit,'(a32,i4)')    'griditer_main ',params%griditer_main
  write(threadinfo%Logunit,'(a32,i4)')    'griditer ',params%griditer
  write(threadinfo%Logunit,'(a32,e11.4)') 'octree_refine_ratio ',params%octree_refine_ratio
  write(threadinfo%Logunit,'(a)')         '--- NONLINEAR ITERATIONS ---'
  write(threadinfo%Logunit,'(a32,i4)')    'nonlinear_iterations_main ',params%nonlinear_iterations_main
  write(threadinfo%Logunit,'(a32,i4)')    'nonlinear_iterations ',params%nonlinear_iterations
  write(threadinfo%Logunit,'(a32,i4)')    'nb_iter_nl_min ',params%nb_iter_nl_min
  write(threadinfo%Logunit,'(a32,e11.4)') 'tol ',params%tol
  write(threadinfo%Logunit,'(a32,l1)')    'adaptive_tol ',params%adaptive_tol
  write(threadinfo%Logunit,'(a)')         '--- OCTREES ---'
  write(threadinfo%Logunit,'(a32,i4)')    'leveluniform_oct ',params%leveluniform_oct
  write(threadinfo%Logunit,'(a32,i4)')    'levelmax_oct ',params%levelmax_oct
  write(threadinfo%Logunit,'(a32,e11.4)') 'vex ',params%vex
  write(threadinfo%Logunit,'(a32,l1)')    'ismooth ',params%ismooth
  write(threadinfo%Logunit,'(a32,i12)')   'noctreemax ',params%noctreemax
  write(threadinfo%Logunit,'(a32,e11.4)') 'refine_ratio ',params%refine_ratio
  write(threadinfo%Logunit,'(a32,i4)')    'refine_criterion ',params%refine_criterion
  write(threadinfo%Logunit,'(a32,i4)')    'initial_refine_level ',params%initial_refine_level
  write(threadinfo%Logunit,'(a32,l1)')    'renumber_nodes ',params%renumber_nodes
  write(threadinfo%Logunit,'(a)')         '--- NESTED MODEL PARAMETERS ---'
  write(threadinfo%Logunit,'(a32,l1)')    'nest ',params%nest
  if (params%nest) then
    write(threadinfo%Logunit,'(a32,a)') 'ssoutdir ',trim(nest%ssoutdir)
    write(threadinfo%Logunit,'(a32,a)') 'lsoutfile ',trim(nest%lsoutfile)
    write(threadinfo%Logunit,'(a32,e11.4)') 'sselemx ',nest%sselemx
    write(threadinfo%Logunit,'(a32,e11.4)') 'sselemy ',nest%sselemy
    write(threadinfo%Logunit,'(a32,e11.4)') 'sselemz ',nest%sselemz
    write(threadinfo%Logunit,'(a32,e11.4)') 'xminls ',nest%xminls
    write(threadinfo%Logunit,'(a32,e11.4)') 'yminls ',nest%yminls
    write(threadinfo%Logunit,'(a32,e11.4)') 'zminls ',nest%zminls
    write(threadinfo%Logunit,'(a32,e11.4)') 'sselemx0 ',nest%sselemx0
    write(threadinfo%Logunit,'(a32,e11.4)') 'sselemy0 ',nest%sselemy0
    write(threadinfo%Logunit,'(a32,e11.4)') 'sselemz0 ',nest%sselemz0
  endif
  write(threadinfo%Logunit,'(a)')         '--- BOUNDARY CONDITIONS AND VELOCITY CONSTRAINTS ---'
  write(threadinfo%Logunit,'(a32,l1)')    'invariants_2d ',params%invariants_2d
  write(threadinfo%Logunit,'(a32,l1)')    'damp_surface ',params%damp_surface
  write(threadinfo%Logunit,'(a32,e11.4)') 'damp_factor ',params%damp_factor
  write(threadinfo%Logunit,'(a)') '--- Boundary condition parameters ---'
  write(threadinfo%Logunit,'(a32,a)') 'bctype ',bcdef%bctype
  select case(trim(bcdef%bctype))
  case('basic')
    write(threadinfo%Logunit,'(a32,a)') 'bcorder ',bcdef%bcorder
    write(threadinfo%Logunit,'(a32,l1)') 'fixux0 ',bcdef%fixux0
    write(threadinfo%Logunit,'(a32,l1)') 'fixux1 ',bcdef%fixux1
    write(threadinfo%Logunit,'(a32,l1)') 'fixvx0 ',bcdef%fixvx0
    write(threadinfo%Logunit,'(a32,l1)') 'fixvx1 ',bcdef%fixvx1
    write(threadinfo%Logunit,'(a32,l1)') 'fixwx0 ',bcdef%fixwx0
    write(threadinfo%Logunit,'(a32,l1)') 'fixwx1 ',bcdef%fixwx1
    write(threadinfo%Logunit,'(a32,l1)') 'fixuy0 ',bcdef%fixuy0
    write(threadinfo%Logunit,'(a32,l1)') 'fixuy1 ',bcdef%fixuy1
    write(threadinfo%Logunit,'(a32,l1)') 'fixvy0 ',bcdef%fixvy0
    write(threadinfo%Logunit,'(a32,l1)') 'fixvy1 ',bcdef%fixvy1
    write(threadinfo%Logunit,'(a32,l1)') 'fixwy0 ',bcdef%fixwy0
    write(threadinfo%Logunit,'(a32,l1)') 'fixwy1 ',bcdef%fixwy1
    write(threadinfo%Logunit,'(a32,l1)') 'fixuz0 ',bcdef%fixuz0
    write(threadinfo%Logunit,'(a32,l1)') 'fixuz1 ',bcdef%fixuz1
    write(threadinfo%Logunit,'(a32,l1)') 'fixvz0 ',bcdef%fixvz0
    write(threadinfo%Logunit,'(a32,l1)') 'fixvz1 ',bcdef%fixvz1
    write(threadinfo%Logunit,'(a32,l1)') 'fixwz0 ',bcdef%fixwz0
    write(threadinfo%Logunit,'(a32,l1)') 'fixwz1 ',bcdef%fixwz1
    write(threadinfo%Logunit,'(a32,e11.4)') 'ux0 ',bcdef%ux0
    write(threadinfo%Logunit,'(a32,e11.4)') 'ux1 ',bcdef%ux1
    write(threadinfo%Logunit,'(a32,e11.4)') 'vx0 ',bcdef%vx0
    write(threadinfo%Logunit,'(a32,e11.4)') 'vx1 ',bcdef%vx1
    write(threadinfo%Logunit,'(a32,e11.4)') 'wx0 ',bcdef%wx0
    write(threadinfo%Logunit,'(a32,e11.4)') 'wx1 ',bcdef%wx1
    write(threadinfo%Logunit,'(a32,e11.4)') 'uy0 ',bcdef%uy0
    write(threadinfo%Logunit,'(a32,e11.4)') 'uy1 ',bcdef%uy1
    write(threadinfo%Logunit,'(a32,e11.4)') 'vy0 ',bcdef%vy0
    write(threadinfo%Logunit,'(a32,e11.4)') 'vy1 ',bcdef%vy1
    write(threadinfo%Logunit,'(a32,e11.4)') 'wy0 ',bcdef%wy0
    write(threadinfo%Logunit,'(a32,e11.4)') 'wy1 ',bcdef%wy1
    write(threadinfo%Logunit,'(a32,e11.4)') 'uz0 ',bcdef%uz0
    write(threadinfo%Logunit,'(a32,e11.4)') 'uz1 ',bcdef%uz1
    write(threadinfo%Logunit,'(a32,e11.4)') 'vz0 ',bcdef%vz0
    write(threadinfo%Logunit,'(a32,e11.4)') 'vz1 ',bcdef%vz1
    write(threadinfo%Logunit,'(a32,e11.4)') 'wz0 ',bcdef%wz0
    write(threadinfo%Logunit,'(a32,e11.4)') 'wz1 ',bcdef%wz1
  case('segmented_s_line')
    write(threadinfo%Logunit,'(a)') 'Boundary condition parameters'
    do i=1,12
      write(threadinfo%Logunit,'(a32,i2,a,e11.4)') 'bc_parameter ',i,' ',bcdef%bc_parameters(i)
    enddo
  case('segmented_s_line_round')
    write(threadinfo%Logunit,'(a)') 'Boundary condition parameters'
    do i=1,13
      write(threadinfo%Logunit,'(a32,i2,a,e11.4)') 'bc_parameter ',i,' ',bcdef%bc_parameters(i)
    enddo
  case('rot_subduction')
    write(threadinfo%Logunit,'(a)') 'Boundary condition parameters'
    do i=1,13
      write(threadinfo%Logunit,'(a32,i2,a,e11.4)') 'bc_parameter ',i,' ',bcdef%bc_parameters(i)
    enddo
  case('rot_sub_init')
    write(threadinfo%Logunit,'(a)') 'Boundary condition parameters'
    do i=1,14
      write(threadinfo%Logunit,'(a32,i2,a,e11.4)') 'bc_parameter ',i,' ',bcdef%bc_parameters(i)
    enddo
  end select
  write(threadinfo%Logunit,'(a32,e11.4)') 'utrans ',bcdef%utrans
  write(threadinfo%Logunit,'(a32,e11.4)') 'vtrans ',bcdef%vtrans
  write(threadinfo%Logunit,'(a)')         '--- PRESSURE ---'
  write(threadinfo%Logunit,'(a32,i4)')    'smoothing_type ',params%smoothing_type
  write(threadinfo%Logunit,'(a32,e11.4)') 'pressure0 ',params%pressure0
  write(threadinfo%Logunit,'(a32,e11.4)') 'plastic_stress_min ',params%plastic_stress_min
  write(threadinfo%Logunit,'(a)')         '--- CLOUD ---'
  write(threadinfo%Logunit,'(a32,i4)')    'npmin ',params%npmin
  write(threadinfo%Logunit,'(a32,i4)')    'npmax ',params%npmax
  write(threadinfo%Logunit,'(a32,l1)')    'gridcloud ',params%gridcloud
  write(threadinfo%Logunit,'(a32,i4)')    'clnpx ',params%clnpx
  write(threadinfo%Logunit,'(a32,i4)')    'clnpy ',params%clnpy
  write(threadinfo%Logunit,'(a32,i4)')    'clnpz ',params%clnpz
  write(threadinfo%Logunit,'(a32,i4)')    'dstrnz ',params%dstrnz
  write(threadinfo%Logunit,'(a32,l1)')    'centerptcloud ',params%centerptcloud
  write(threadinfo%Logunit,'(a32,l1)')    'compaction ',params%compaction
  write(threadinfo%Logunit,'(a32,l1)')    'move_cloud_at_midpoint ',params%move_cloud_at_midpoint
  write(threadinfo%Logunit,'(a32,l1)')    'fixed_cloud ',params%fixed_cloud
  write(threadinfo%Logunit,'(a)')         '--- FEM + DIVFEM + MUMPS/WSMP ---'
  write(threadinfo%Logunit,'(a32,i4)')    'matrule ',params%matrule
  write(threadinfo%Logunit,'(a32,i4)')    'levelcut ',params%levelcut
  write(threadinfo%Logunit,'(a32,i4)')    'levelapprox ',params%levelapprox
  write(threadinfo%Logunit,'(a32,e11.4)') 'penalty ',params%penalty
  write(threadinfo%Logunit,'(a32,l1)')    'excl_vol ',params%excl_vol
  write(threadinfo%Logunit,'(a32,l1)')    'wsmp_scaling ',params%wsmp_scaling
  write(threadinfo%Logunit,'(a)')         '--- TEMPERATURE ---'
  write(threadinfo%Logunit,'(a32,l1)')    'calculate_temp ',params%calculate_temp
  write(threadinfo%Logunit,'(a32,e11.4)') 'ztemp ',params%ztemp
  write(threadinfo%Logunit,'(a32,e11.4)') 'tempscale ',params%tempscale
  write(threadinfo%Logunit,'(a32,l1)')    'sstemp_on_restart ',params%sstemp_on_restart
  write(threadinfo%Logunit,'(a)')         '--- ISOSTASY ---'
  write(threadinfo%Logunit,'(a32,l1)')    'isostasy ',params%isostasy
  write(threadinfo%Logunit,'(a32,l1)')    'flexure ',params%flexure
  write(threadinfo%Logunit,'(a32,e11.4)') 'elastic_plate_thickness ',params%elastic_plate_thickness
  write(threadinfo%Logunit,'(a32,e11.4)') 'density_difference ',params%density_difference
  write(threadinfo%Logunit,'(a32,l1)')    'isobc ',params%isobc
  write(threadinfo%Logunit,'(a)')         '--- MATERIALS ---'
  write(threadinfo%Logunit,'(a32,l1)')    'materials_on_cloud ',params%materials_on_cloud
  write(threadinfo%Logunit,'(a32,i4)')    'material0 ',material0
  write(threadinfo%Logunit,'(a32,l1)')    'bulkvisc ',params%bulkvisc
  write(threadinfo%Logunit,'(a32,l1)')    'init_e2d ',params%init_e2d
  write(threadinfo%Logunit,'(a32,e11.4)') 'e2d0 ',params%e2d0
  write(threadinfo%Logunit,'(a32,i4)')    'dommat ',params%dommat
  write(threadinfo%Logunit,'(a32,e11.4)') 'domvol ',params%domvol
  do i=1,params%nmat
    write(threadinfo%Logunit,'(a,i4,a)')    '--- Properties for material ',i,' ---'
    write(threadinfo%Logunit,'(a32,e11.4)') 'density ',mat(i)%density
    write(threadinfo%Logunit,'(a32,e11.4)') 'viscosity ',mat(i)%viscosity
    write(threadinfo%Logunit,'(a32,e11.4)') 'penalty ',mat(i)%penalty
    write(threadinfo%Logunit,'(a32,e11.4)') 'expon ',mat(i)%expon
    write(threadinfo%Logunit,'(a32,e11.4)') 'fviscosity ',mat(i)%fviscosity
    write(threadinfo%Logunit,'(a32,a16)')   'fvisc_weak_type ',mat(i)%fvisc_weak_type
    write(threadinfo%Logunit,'(a32,e11.4)') 'fvisc_weak_onset ',mat(i)%fvisc_weak_onset
    write(threadinfo%Logunit,'(a32,e11.4)') 'fvisc_weak_end ',mat(i)%fvisc_weak_end
    write(threadinfo%Logunit,'(a32,e11.4)') 'fvisc_weak_final ',mat(i)%fvisc_weak_final
    write(threadinfo%Logunit,'(a32,e11.4)') 'fvisc_strong_onset ',mat(i)%fvisc_strong_onset
    write(threadinfo%Logunit,'(a32,e11.4)') 'fvisc_strong_end ',mat(i)%fvisc_strong_end
    write(threadinfo%Logunit,'(a32,e11.4)') 'fvisc_strong_final ',mat(i)%fvisc_strong_final
    write(threadinfo%Logunit,'(a32,e11.4)') 'diffusivity ',mat(i)%diffusivity
    write(threadinfo%Logunit,'(a32,e11.4)') 'heat ',mat(i)%heat
    write(threadinfo%Logunit,'(a32,e11.4)') 'activationenergy ',mat(i)%activationenergy
    write(threadinfo%Logunit,'(a32,e11.4)') 'expansion ',mat(i)%expansion
    write(threadinfo%Logunit,'(a32,a8)')    'plasticity_type ',mat(i)%plasticity_type
    write(threadinfo%Logunit,'(a32,a16)')   'plasticity_ss_type_coh ',mat(i)%plasticity_ss_type_coh
    write(threadinfo%Logunit,'(a32,a16)')   'plasticity_ss_type_phi ',mat(i)%plasticity_ss_type_phi    
    write(threadinfo%Logunit,'(a32,l1)')    'compactible ',mat(i)%compactible
    write(threadinfo%Logunit,'(a32,e11.4)') 'grain_density ',mat(i)%grain_density
    write(threadinfo%Logunit,'(a32,e11.4)') 'pore_fluid_density ',mat(i)%pore_fluid_density
    write(threadinfo%Logunit,'(a32,e11.4)') 'surface_porosity ',mat(i)%surface_porosity
    write(threadinfo%Logunit,'(a32,e11.4)') 'compaction_coef ',mat(i)%compaction_coef    
    if (trim(mat(i)%plasticity_type).ne.'No') then
      write(threadinfo%Logunit,'(a,i4)') 'Plasticity parameters for material ',i
      do j=1,14
        write(threadinfo%Logunit,'(a32,i2,a2,e11.4)') 'plasticity parameter ',j,': ',mat(i)%plasticity_parameters(j)
      enddo
    endif
    write (threadinfo%Logunit,'(a,i4)') 'Material transitions for material ',i
    do j=1,6
      write(threadinfo%Logunit,'(a32,i1,a2,e11.4)') 'mattrans ',j,' ',mat(i)%mattrans(j)
    enddo
    do j=1,6
      write(threadinfo%Logunit,'(a32,i1,a2,i4)') 'transnum ',j,' ',mat(i)%transnum(j)
    enddo
  enddo
  write(threadinfo%Logunit,'(a32,e11.4)') 'viscositymin ',params%viscositymin
  write(threadinfo%Logunit,'(a32,e11.4)') 'viscositymax ',params%viscositymax
  write(threadinfo%Logunit,'(a)')         '--- SURFACES ---'
  write(threadinfo%Logunit,'(a32,l1)') 'remove_surf_pts ',params%remove_surf_pts
  do i=1,params%ns
    write(threadinfo%Logunit,'(a,i4,a)')         '--- Properties for surface ',i,' ---'
    write(threadinfo%Logunit,'(a32,i4,a,i4)')    'surface ',i,' levelt ',surface(i)%levelt
    write(threadinfo%Logunit,'(a32,i4,a,i4)')    'surface ',i,' itype ',surface(i)%itype
    write(threadinfo%Logunit,'(a32,i4,a,i4)')    'surface ',i,' closed ',surface(i)%closed
    write(threadinfo%Logunit,'(a32,i4,a,i4)')    'surface ',i,' type ',surface(i)%surface_type
    write(threadinfo%Logunit,'(a32,i4,a,l1)')    'surface ',i,' rand ',surface(i)%rand
    write(threadinfo%Logunit,'(a32,i4,a,e11.4)') 'surface ',i,' sp01 ',surface(i)%sp01
    write(threadinfo%Logunit,'(a32,i4,a,e11.4)') 'surface ',i,' sp02 ',surface(i)%sp02
    write(threadinfo%Logunit,'(a32,i4,a,e11.4)') 'surface ',i,' sp03 ',surface(i)%sp03
    write(threadinfo%Logunit,'(a32,i4,a,e11.4)') 'surface ',i,' sp04 ',surface(i)%sp04
    write(threadinfo%Logunit,'(a32,i4,a,e11.4)') 'surface ',i,' sp05 ',surface(i)%sp05
    write(threadinfo%Logunit,'(a32,i4,a,e11.4)') 'surface ',i,' sp06 ',surface(i)%sp06
    write(threadinfo%Logunit,'(a32,i4,a,e11.4)') 'surface ',i,' sp07 ',surface(i)%sp07
    write(threadinfo%Logunit,'(a32,i4,a,e11.4)') 'surface ',i,' sp08 ',surface(i)%sp08
    write(threadinfo%Logunit,'(a32,i4,a,e11.4)') 'surface ',i,' sp09 ',surface(i)%sp09
    write(threadinfo%Logunit,'(a32,i4,a,e11.4)') 'surface ',i,' sp10 ',surface(i)%sp10
    write(threadinfo%Logunit,'(a32,i4,a,e11.4)') 'surface ',i,' sp11 ',surface(i)%sp11
    write(threadinfo%Logunit,'(a32,i4,a,e11.4)') 'surface ',i,' sp12 ',surface(i)%sp12
    write(threadinfo%Logunit,'(a32,i4,a,e11.4)') 'surface ',i,' sp13 ',surface(i)%sp13
    write(threadinfo%Logunit,'(a32,i4,a,e11.4)') 'surface ',i,' sp14 ',surface(i)%sp14
    write(threadinfo%Logunit,'(a32,i4,a,i4)')    'surface ',i,' material ',surface(i)%material
    write(threadinfo%Logunit,'(a32,i4,a,e11.4)') 'surface ',i,' activation_time ',surface(i)%activation_time
    write(threadinfo%Logunit,'(a32,i4,a,i4)')    'surface ',i,' leveloct ',surface(i)%leveloct
    write(threadinfo%Logunit,'(a32,i4,a,e11.4)') 'surface ',i,' stretch ',surface(i)%stretch
    write(threadinfo%Logunit,'(a32,i4,a,e11.4)') 'surface ',i,' anglemax ',surface(i)%anglemax
    write(threadinfo%Logunit,'(a32,i4,a,i4)')    'surface ',i,' criterion ',surface(i)%criterion
    write(threadinfo%Logunit,'(a32,i4,a,e11.4)') 'surface ',i,' anglemaxoctree ',surface(i)%anglemaxoctree
    write(threadinfo%Logunit,'(a32,i4,a,i4)')    'surface ',i,' spread_surface_points ',surface(i)%spread_surface_points
    write(threadinfo%Logunit,'(a32,i4,a,l1)')    'surface ',i,' fixed_surf_spinup ',surface(i)%fixed_surf_spinup
    write(threadinfo%Logunit,'(a32,i4,a,l1)')    'surface ',i,' fixed_surf ',surface(i)%fixed_surf
    write(threadinfo%Logunit,'(a32,i4,a,l1)')    'surface ',i,' surf_for_mat_props ',surface(i)%surf_for_mat_props
    write(threadinfo%Logunit,'(a32,i4,a,l1)')    'surface ',i,' remove_after_mat_def ',surface(i)%remove_after_mat_def
  enddo
  write(threadinfo%Logunit,'(a32,i4)') 'niter_move ',params%niter_move
  write(threadinfo%Logunit,'(a)')      '--- REFINEMENT IN BOXES ---'
  if (params%nboxes.gt.0) then
    do i=1,params%nboxes
      write(threadinfo%Logunit,'(a,i3,a)')    '--- Input values for box ',i,' ---'
      write(threadinfo%Logunit,'(a32,e11.4)') 'box x0 ',boxes(i)%x0
      write(threadinfo%Logunit,'(a32,e11.4)') 'box x1 ',boxes(i)%x1
      write(threadinfo%Logunit,'(a32,e11.4)') 'box y0 ',boxes(i)%y0
      write(threadinfo%Logunit,'(a32,e11.4)') 'box y1 ',boxes(i)%y1
      write(threadinfo%Logunit,'(a32,e11.4)') 'box z0 ',boxes(i)%z0
      write(threadinfo%Logunit,'(a32,e11.4)') 'box z1 ',boxes(i)%z1
      write(threadinfo%Logunit,'(a32,i4)')    'box level ',boxes(i)%level
    enddo
  endif
  write(threadinfo%Logunit,'(a)') '--- REFINEMENT ON CUBE FACES ---'
  write(threadinfo%Logunit,'(a32,l1)') 'ref_on_faces ',params%ref_on_faces
  if (params%ref_on_faces) then
    do i=1,6
      write(threadinfo%Logunit,'(a,i1,a)')    '--- Refinement values for face ',i,' ---'
      write(threadinfo%Logunit,'(a32,i4)')    'cube_faces level ',cube_faces(i)%level
      write(threadinfo%Logunit,'(a32,e11.4)') 'cube_faces b ',cube_faces(i)%b
      write(threadinfo%Logunit,'(a32,e11.4)') 'cube_faces t ',cube_faces(i)%t
      write(threadinfo%Logunit,'(a32,e11.4)') 'cube_faces l ',cube_faces(i)%l
      write(threadinfo%Logunit,'(a32,e11.4)') 'cube_faces r ',cube_faces(i)%r
    enddo
  endif
  write(threadinfo%Logunit,'(a)') '--- EROSION ---'
  write(threadinfo%Logunit,'(a32,l1)')    'erosion ',params%erosion
  write(threadinfo%Logunit,'(a32,e11.4)') 'zerosion ',params%zerosion
  write(threadinfo%Logunit,'(a32,e11.4)') 'length_scale ',params%length_scale
  write(threadinfo%Logunit,'(a32,e11.4)') 'velocity_scale ',params%velocity_scale
  write(threadinfo%Logunit,'(a32,e11.4)') 'fluvial_erosion ',params%fluvial_erosion
  write(threadinfo%Logunit,'(a32,e11.4)') 'diffusion_erosion ',params%diffusion_erosion
  write(threadinfo%Logunit,'(a32,i4)')    'baselevelx0 ',params%baselevelx0
  write(threadinfo%Logunit,'(a32,i4)')    'baselevelx1 ',params%baselevelx1
  write(threadinfo%Logunit,'(a32,i4)')    'baselevely0 ',params%baselevely0
  write(threadinfo%Logunit,'(a32,i4)')    'baselevely1 ',params%baselevely1
  write(threadinfo%Logunit,'(a)') '--- SEDIMENTATION ---'
  write(threadinfo%Logunit,'(a32,l1)')    'sedimentation ',params%sedimentation 
  write(threadinfo%Logunit,'(a32,i4)')    'sedimentation_type ',params%sedimentation_type
  write(threadinfo%Logunit,'(a32,e11.4)') 'er_start ',params%er_start
  write(threadinfo%Logunit,'(a32,e11.4)') 'er_end ',params%er_end
  write(threadinfo%Logunit,'(a32,e11.4)') 'sed_start ',params%sed_start
  write(threadinfo%Logunit,'(a32,e11.4)') 'sed_end ',params%sed_end
  write(threadinfo%Logunit,'(a32,e11.4)') 'zaggrade_init ',params%zaggrade_init
  write(threadinfo%Logunit,'(a32,e11.4)') 'x_agg_start ',params%x_agg_start
  write(threadinfo%Logunit,'(a32,e11.4)') 'x_agg_end ',params%x_agg_end
  write(threadinfo%Logunit,'(a32,e11.4)') 'y_agg_start ',params%y_agg_start
  write(threadinfo%Logunit,'(a32,e11.4)') 'y_agg_end ',params%y_agg_end
  write(threadinfo%Logunit,'(a32,e11.4)') 'x_agg_sinus_amp ',params%x_agg_sinus_amp
  write(threadinfo%Logunit,'(a32,e11.4)') 'x_agg_sinus_wavelth ',params%x_agg_sinus_wavelth
  write(threadinfo%Logunit,'(a32,e11.4)') 'y_agg_sinus_amp ',params%y_agg_sinus_amp
  write(threadinfo%Logunit,'(a32,e11.4)') 'y_agg_sinus_wavelth ',params%y_agg_sinus_wavelth
  write(threadinfo%Logunit,'(a32,e11.4)') 'aggrade_rate ',params%aggrade_rate
  write(threadinfo%Logunit,'(a32,e11.4)') 'z_prog_init ',params%z_prog_init
  write(threadinfo%Logunit,'(a32,e11.4)') 'z_prog_fin ',params%z_prog_fin
  write(threadinfo%Logunit,'(a32,e11.4)') 'x_prog_start ',params%x_prog_start
  write(threadinfo%Logunit,'(a32,e11.4)') 'x_prog_end ',params%x_prog_end
  write(threadinfo%Logunit,'(a32,e11.4)') 'x_prog_length ',params%x_prog_length
  write(threadinfo%Logunit,'(a32,e11.4)') 'prog_rate_u ',params%prog_rate_u
  write(threadinfo%Logunit,'(a)') '--- MATRIX VISUALISATION ---'
  write(threadinfo%Logunit,'(a32,l1)') 'visualise_matrix ',params%visualise_matrix
  write(threadinfo%Logunit,'(a)') '--- CROSS SECTIONS ---'
  if (params%nsections.gt.0) then
    do i=1,params%nsections
      write(threadinfo%Logunit,'(a,i3,a)')    '--- Input values for section ',i,' ---'    
      write(threadinfo%Logunit,'(a32,i4)')    'section xyz ',sections(i)%xyz
      write(threadinfo%Logunit,'(a32,e11.4)') 'section slice ',sections(i)%slice
      write(threadinfo%Logunit,'(a32,l1)')    'section flag press ',sections(i)%flag_press
      write(threadinfo%Logunit,'(a32,l1)')    'section flag spress ',sections(i)%flag_spress
      write(threadinfo%Logunit,'(a32,l1)')    'section flag e2d ',sections(i)%flag_e2d
      write(threadinfo%Logunit,'(a32,l1)')    'section flag e3d ',sections(i)%flag_e3d
      write(threadinfo%Logunit,'(a32,l1)')    'section flag strain ',sections(i)%flag_strain
      write(threadinfo%Logunit,'(a32,l1)')    'section flag lode ',sections(i)%flag_lode
      write(threadinfo%Logunit,'(a32,l1)')    'section flag crit ',sections(i)%flag_crit
      write(threadinfo%Logunit,'(a32,l1)')    'section flag grid ',sections(i)%flag_grid
      write(threadinfo%Logunit,'(a32,l1)')    'section flag mu ',sections(i)%flag_mu
      write(threadinfo%Logunit,'(a32,l1)')    'section flag u ',sections(i)%flag_u
      write(threadinfo%Logunit,'(a32,l1)')    'section flag v ',sections(i)%flag_v  
      write(threadinfo%Logunit,'(a32,l1)')    'section flag w ',sections(i)%flag_w 
      write(threadinfo%Logunit,'(a32,l1)')    'section flag q ',sections(i)%flag_q
      write(threadinfo%Logunit,'(a32,l1)')    'section flag uvw ',sections(i)%flag_uvw
      write(threadinfo%Logunit,'(a32,l1)')    'section flag lsf ',sections(i)%flag_lsf
      write(threadinfo%Logunit,'(a32,l1)')    'section flag vfield ',sections(i)%flag_vfield
      write(threadinfo%Logunit,'(a32,l1)')    'section flag colour ',sections(i)%flag_colour
      write(threadinfo%Logunit,'(a32,l1)')    'section flag plastic ',sections(i)%flag_plastic
      write(threadinfo%Logunit,'(a32,i3)')    'section flag temp ',sections(i)%flag_temp
      write(threadinfo%Logunit,'(a32,l1)')    'section flag velvect ',sections(i)%flag_velvect
      write(threadinfo%Logunit,'(a32,e11.4)') 'section scale ',sections(i)%scale
      write(threadinfo%Logunit,'(a32,a3)')    'section colormap ',sections(i)%colormap
      write(threadinfo%Logunit,'(a32,i4)')    'section ncolours ',sections(i)%ncolours
    enddo
  endif
  !write(threadinfo%Logunit,'(a32,e11.4)') 'distance_exponent ',params%distance_exponent
  write(threadinfo%Logunit,'(a)') '--------------------------------------------------------------------------------'
  write(threadinfo%Logunit,'(a)') '--- END OF INPUT FILE ---'
  write(threadinfo%Logunit,'(a)') '--------------------------------------------------------------------------------'
endif

if(iproc.eq.0) call flush(8)
if(params%debug.gt.1) call flush(threadinfo%logunit)

if (iproc.eq.0) call system ('rm fort.8')

end subroutine read_input_file
!------------------------------------------------------------------------------|
!------------------------------------------------------------------------------|