diff --git a/src/build_system_wsmp.f90 b/src/build_system_wsmp.f90 index 4ea10b8a6cdecaa3d91524ab19d09613902fa803..bf4bd167a117fda9b836f79fe54365194d223102 100644 --- a/src/build_system_wsmp.f90 +++ b/src/build_system_wsmp.f90 @@ -189,14 +189,16 @@ do ileaves=1,osolve%nleaves endif enddo enddo - if (idof1 == 3) then - if (kfix((osolve%icon(k1,ileaves)-1)*ndof+idof1) < 1) then - iloc=ifind_loc_wsmp(i1loc,i1,ja,ia,n_iproc,nz_loc) - elem_dz=(osolve%z(osolve%icon(5,ileaves))-osolve%z(osolve%icon(1,ileaves)))*params%vex - if (k1 < 5) then - avals(iloc)=avals(iloc)-(params%dt*(-weightel(ileaves)))/(2.d0*elem_dz) - else - avals(iloc)=avals(iloc)+(params%dt*(-weightel(ileaves)))/(2.d0*elem_dz) + if (params%damp_surface) then + if (idof1 == 3) then + if (kfix((osolve%icon(k1,ileaves)-1)*ndof+idof1) < 1) then + iloc=ifind_loc_wsmp(i1loc,i1,ja,ia,n_iproc,nz_loc) + elem_dz=(osolve%z(osolve%icon(5,ileaves))-osolve%z(osolve%icon(1,ileaves)))*params%vex + if (k1 < 5) then + avals(iloc)=avals(iloc)-(params%dt*(-weightel(ileaves)))/(2.d0*elem_dz) + else + avals(iloc)=avals(iloc)+(params%dt*(-weightel(ileaves)))/(2.d0*elem_dz) + endif endif endif endif diff --git a/src/module_definitions.f90 b/src/module_definitions.f90 index 7411c7acf87d325115b3966021e4dbd3a58b09d6..e2fd8ffa6b892f742c64b42475ffc78e1e241fa4 100644 --- a/src/module_definitions.f90 +++ b/src/module_definitions.f90 @@ -224,6 +224,7 @@ module definitions logical invariants_2d logical ismooth logical nest + logical damp_surface integer nmpi integer matrule integer levelcut diff --git a/src/read_input_file.f90 b/src/read_input_file.f90 index a672aed94aaa5d464e187d71f207a13c41f9eab5..2860fa7440d283b206c3237bdc4a4d2bb40cafc3 100644 --- a/src/read_input_file.f90 +++ b/src/read_input_file.f90 @@ -468,6 +468,13 @@ params%dt=0.5d0 if (iproc==0) call scanfile (params%infile,'dt',params%dt,ires) 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) + params%damp_surface = (trim(answer)=='T') +end if +call mpi_bcast(params%damp_surface,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) @@ -935,6 +942,7 @@ if (params%debug.gt.0 .and. iproc.eq.0) then write(*,'(a,i4)') shift//'nonlinear_iterations ',params%nonlinear_iterations write(*,'(a,i4)') shift//'initial_refine_level ',params%initial_refine_level write(*,'(a,e11.4)') shift//'dt ',params%dt + write(*,'(a,l1)') shift//'damp_surface ',params%damp_surface write(*,'(a,e11.4)') shift//'penalty ',params%penalty write(*,'(a,e11.4)') shift//'tempscale ',params%tempscale write(*,'(a,e11.4)') shift//'refine_ratio ',params%refine_ratio @@ -1105,6 +1113,7 @@ if (params%debug.gt.1) then write(threadinfo%Logunit,'(a32,i4)') 'nonlinear_iterations ',params%nonlinear_iterations write(threadinfo%Logunit,'(a32,i4)') 'initial_refine_level ',params%initial_refine_level write(threadinfo%Logunit,'(a32,e11.4)') 'dt ',params%dt + write(threadinfo%Logunit,'(a32,l1)') 'damp_surface ',params%damp_surface write(threadinfo%Logunit,'(a32,e11.4)') 'penalty ',params%penalty write(threadinfo%Logunit,'(a32,e11.4)') 'tempscale ',params%tempscale write(threadinfo%Logunit,'(a32,e11.4)') 'refine_ratio ',params%refine_ratio