MinimizeMHD3d_ResetDescent Subroutine

public subroutine MinimizeMHD3d_ResetDescent(sf)

Uses

  • proc~~minimizemhd3d_resetdescent~~UsesGraph proc~minimizemhd3d_resetdescent t_minimizer_mhd3d%MinimizeMHD3d_ResetDescent module~modgvec_mhd3d_evalfunc MODgvec_MHD3D_evalFunc proc~minimizemhd3d_resetdescent->module~modgvec_mhd3d_evalfunc module~modgvec_globals MODgvec_Globals module~modgvec_mhd3d_evalfunc->module~modgvec_globals module~sll_m_spline_matrix sll_m_spline_matrix module~modgvec_mhd3d_evalfunc->module~sll_m_spline_matrix module~sll_m_spline_matrix_banded sll_m_spline_matrix_banded module~modgvec_mhd3d_evalfunc->module~sll_m_spline_matrix_banded iso_fortran_env iso_fortran_env module~modgvec_globals->iso_fortran_env module~sll_m_spline_matrix->module~sll_m_spline_matrix_banded module~sll_m_errors sll_m_errors module~sll_m_spline_matrix->module~sll_m_errors module~sll_m_spline_matrix_base sll_m_spline_matrix_base module~sll_m_spline_matrix->module~sll_m_spline_matrix_base module~sll_m_spline_matrix_dense sll_m_spline_matrix_dense module~sll_m_spline_matrix->module~sll_m_spline_matrix_dense module~sll_m_working_precision sll_m_working_precision module~sll_m_spline_matrix->module~sll_m_working_precision module~sll_m_spline_matrix_banded->iso_fortran_env module~sll_m_assert sll_m_assert module~sll_m_spline_matrix_banded->module~sll_m_assert module~sll_m_spline_matrix_banded->module~sll_m_errors module~sll_m_spline_matrix_banded->module~sll_m_spline_matrix_base module~sll_m_spline_matrix_banded->module~sll_m_working_precision module~sll_m_errors->iso_fortran_env module~sll_m_spline_matrix_base->module~sll_m_working_precision module~sll_m_spline_matrix_dense->iso_fortran_env module~sll_m_spline_matrix_dense->module~sll_m_assert module~sll_m_spline_matrix_dense->module~sll_m_errors module~sll_m_spline_matrix_dense->module~sll_m_spline_matrix_base module~sll_m_spline_matrix_dense->module~sll_m_working_precision

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 Bound

t_minimizer_mhd3d

Arguments

Type IntentOptional Attributes Name
class(t_minimizer_mhd3d), intent(inout) :: sf

minimizer


Calls

proc~~minimizemhd3d_resetdescent~~CallsGraph proc~minimizemhd3d_resetdescent t_minimizer_mhd3d%MinimizeMHD3d_ResetDescent none~set_to t_sol_var_MHD3D%set_to proc~minimizemhd3d_resetdescent->none~set_to proc~evalaux EvalAux proc~minimizemhd3d_resetdescent->proc~evalaux proc~evalenergy EvalEnergy proc~minimizemhd3d_resetdescent->proc~evalenergy proc~evalforce EvalForce proc~minimizemhd3d_resetdescent->proc~evalforce proc~sol_var_mhd3d_norm_2 t_sol_var_MHD3D%sol_var_MHD3D_norm_2 proc~minimizemhd3d_resetdescent->proc~sol_var_mhd3d_norm_2 tau tau proc~minimizemhd3d_resetdescent->tau proc~sol_var_mhd3d_set_to_scalar t_sol_var_MHD3D%sol_var_MHD3D_set_to_scalar none~set_to->proc~sol_var_mhd3d_set_to_scalar proc~sol_var_mhd3d_set_to_solvar t_sol_var_MHD3D%sol_var_MHD3D_set_to_solvar none~set_to->proc~sol_var_mhd3d_set_to_solvar eval_all eval_all proc~evalaux->eval_all interface~par_allreduce par_AllReduce proc~evalaux->interface~par_allreduce proc~base_evaldof t_base%base_evalDOF proc~evalaux->proc~base_evaldof proc~base_evaldof_all t_base%base_evalDOF_all proc~evalaux->proc~base_evaldof_all proc~evalenergy->proc~evalaux proc~evalenergy->interface~par_allreduce proc~evalforce->proc~evalaux interface~par_bcast par_Bcast proc~evalforce->interface~par_bcast interface~par_ibcast par_IBcast proc~evalforce->interface~par_ibcast interface~par_ireduce par_IReduce proc~evalforce->interface~par_ireduce par_wait par_wait proc~evalforce->par_wait proc~applybc_fstrong ApplyBC_Fstrong proc~evalforce->proc~applybc_fstrong proc~applyprecond ApplyPrecond proc~evalforce->proc~applyprecond proc~buildprecond BuildPrecond proc~evalforce->proc~buildprecond proc~fbase_projectiptodof_tens t_fBase%fBase_projectIPtoDOF_tens proc~evalforce->proc~fbase_projectiptodof_tens proc~sbase_applybctorhs t_sBase%sBase_applyBCtoRHS proc~evalforce->proc~sbase_applybctorhs solve_inplace solve_inplace proc~evalforce->solve_inplace proc~par_allreduce_array1d par_AllReduce_array1D interface~par_allreduce->proc~par_allreduce_array1d proc~par_allreduce_array2d par_AllReduce_array2D interface~par_allreduce->proc~par_allreduce_array2d proc~par_allreduce_scalar par_AllReduce_scalar interface~par_allreduce->proc~par_allreduce_scalar proc~par_allreduce_scalar_int par_AllReduce_scalar_int interface~par_allreduce->proc~par_allreduce_scalar_int proc~par_bcast_array1d par_Bcast_array1D interface~par_bcast->proc~par_bcast_array1d proc~par_bcast_array1d_int par_Bcast_array1D_int interface~par_bcast->proc~par_bcast_array1d_int proc~par_bcast_array1d_str par_Bcast_array1D_str interface~par_bcast->proc~par_bcast_array1d_str proc~par_bcast_array2d par_Bcast_array2D interface~par_bcast->proc~par_bcast_array2d proc~par_bcast_scalar par_Bcast_scalar interface~par_bcast->proc~par_bcast_scalar proc~par_bcast_scalar_int par_Bcast_scalar_int interface~par_bcast->proc~par_bcast_scalar_int proc~par_bcast_scalar_str par_Bcast_scalar_str interface~par_bcast->proc~par_bcast_scalar_str proc~par_ibcast_array1d par_IBcast_array1D interface~par_ibcast->proc~par_ibcast_array1d proc~par_ibcast_array2d par_IBcast_array2D interface~par_ibcast->proc~par_ibcast_array2d proc~par_ireduce_array1d par_IReduce_array1D interface~par_ireduce->proc~par_ireduce_array1d proc~par_ireduce_array2d par_IReduce_array2D interface~par_ireduce->proc~par_ireduce_array2d proc~sbase_applybctodof_lgm t_sBase%sBase_applyBCtoDOF_LGM proc~applybc_fstrong->proc~sbase_applybctodof_lgm proc~s_spline_matrix_banded__solve_inplace sll_t_spline_matrix_banded%s_spline_matrix_banded__solve_inplace proc~applyprecond->proc~s_spline_matrix_banded__solve_inplace proc~fbase_evaldof_ip_tens t_fBase%fBase_evalDOF_IP_tens proc~base_evaldof->proc~fbase_evaldof_ip_tens proc~base_evaldof_all->proc~fbase_evaldof_ip_tens proc~buildprecond->interface~par_allreduce add_element add_element proc~buildprecond->add_element factorize factorize proc~buildprecond->factorize get_element get_element proc~buildprecond->get_element reset reset proc~buildprecond->reset set_element set_element proc~buildprecond->set_element dgemm dgemm proc~fbase_projectiptodof_tens->dgemm proc~fbase_evaldof_ip_tens->dgemm proc~fbase_evaldof_xn t_fBase%fBase_evalDOF_xn proc~fbase_evaldof_ip_tens->proc~fbase_evaldof_xn dgbtrs dgbtrs proc~s_spline_matrix_banded__solve_inplace->dgbtrs proc~sll_s_error_handler sll_s_error_handler proc~s_spline_matrix_banded__solve_inplace->proc~sll_s_error_handler proc~solve SOLVE proc~sbase_applybctodof_lgm->proc~solve dgemv dgemv proc~fbase_evaldof_xn->dgemv proc~fbase_eval_xn t_fBase%fBase_eval_xn proc~fbase_evaldof_xn->proc~fbase_eval_xn interface~c_abort~2 c_abort proc~sll_s_error_handler->interface~c_abort~2 proc~errout errout proc~sll_s_error_handler->proc~errout dgetrf dgetrf proc~solve->dgetrf dgetrs dgetrs proc~solve->dgetrs

Called by

proc~~minimizemhd3d_resetdescent~~CalledByGraph proc~minimizemhd3d_resetdescent t_minimizer_mhd3d%MinimizeMHD3d_ResetDescent proc~minimizemhd3d_descent t_minimizer_mhd3d%MinimizeMHD3D_descent proc~minimizemhd3d_descent->proc~minimizemhd3d_resetdescent proc~minimizemhd3d t_functional_mhd3d%MinimizeMHD3D proc~minimizemhd3d->proc~minimizemhd3d_descent proc~minimize minimize proc~minimize->proc~minimizemhd3d proc~rungvec rungvec proc~rungvec->proc~minimizemhd3d proc~start_rungvec start_rungvec proc~start_rungvec->proc~rungvec program~gvec GVEC program~gvec->proc~rungvec

Source Code

    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