Reset the minimizer state
Called during the first iteration or after resetting the minimizer, e.g. due to detJ<0. Overwrites the degrees of freedom (dofs(-2:-1)) with the initial state (dofs(0)). For the accelerated gradient descent also the history (e.g. tau) is reset.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(t_minimizer_mhd3d), | intent(inout) | :: | sf |
minimizer |
SUBROUTINE MinimizeMHD3d_ResetDescent(sf) ! MODULES USE MODgvec_MHD3D_EvalFunc, ONLY: EvalAux, EvalForce, EvalEnergy !------------------------------------------------------------------------------------------------------------------------------- ! INPUT VARIABLES CLASS(t_minimizer_mhd3d), INTENT(INOUT) :: sf !! minimizer !------------------------------------------------------------------------------------------------------------------------------- ! OUTPUT VARIABLES !------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES !=============================================================================================================================== ASSOCIATE(vars=>sf%vars) vars%JacCheck=1 !abort if detJ<0 CALL EvalAux(vars%dofs(0), vars%JacCheck) vars%dofs(0)%W_MHD3D= EvalEnergy(vars%dofs(0),.FALSE.,vars%JacCheck) vars%W_MHD3D_0 = vars%dofs(0)%W_MHD3D CALL EvalForce( vars%dofs(0),.FALSE.,vars%JacCheck,vars%force(0)) vars%Fnorm0 = SQRT(vars%force(0)%norm_2()) vars%Fnorm = vars%Fnorm0 vars%Fnorm_old = 1.1_wp*vars%Fnorm0 CALL vars%dofs(-1)%set_to(vars%dofs(0)) !last state CALL vars%dofs(-2)%set_to(vars%dofs(0)) !state at last logging interval !for hirshman method SELECT TYPE(vars) TYPE IS(t_accelerated_gradient_descent_vars) CALL vars%velocity(-1)%set_to(0.0_wp) CALL vars%velocity( 0)%set_to(0.0_wp) vars%tau(1:vars%ndamp)=0.15_wp/vars%dt vars%tau_bar = 0.075_wp END SELECT vars%min_dt_out=1.0e+30_wp vars%max_dt_out=0.0_wp vars%min_dW_out=1.0e+30_wp vars%max_dW_out=-1.0e+30_wp vars%sum_dW_out=0.0_wp vars%nSkip_dW =0 IF(vars%restart_iter) vars%restart_iter=.FALSE. END ASSOCIATE !vars END SUBROUTINE MinimizeMHD3d_ResetDescent