new_minimizer Subroutine

public subroutine new_minimizer(sf, varsize_in, dt_initial, MinType_in, dW_allowed_in, DoCheckDistance, DoCheckAxis, outputIter, nlogScreen, logIter)

Uses

  • proc~~new_minimizer~~UsesGraph proc~new_minimizer new_minimizer module~modgvec_mhd3d_evalfunc MODgvec_MHD3D_evalFunc proc~new_minimizer->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

Initialization method for a minimizer

Arguments

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

allocatable minimizer object

integer, intent(in) :: varsize_in(:)

size of the dofs

real(kind=wp), intent(in) :: dt_initial

initial stepsize for the minimization

integer, intent(in) :: MinType_in

gradient descent = 0, accelerated gradient descent = 10

real(kind=wp), intent(in) :: dW_allowed_in

for minimizer, accept step if dW

logical, intent(in) :: DoCheckDistance

TRUE: check distance between solutions of two log output states

logical, intent(in) :: DoCheckAxis

TRUE: check axis position

integer, intent(in) :: outputIter

number of iterations after which output files are written

integer, intent(in) :: nlogScreen

number of log outputs after a screen output is written

integer, intent(in) :: logIter

number of iterations after which a screen log is written


Calls

proc~~new_minimizer~~CallsGraph proc~new_minimizer new_minimizer proc~sol_var_mhd3d_copy t_sol_var_MHD3D%sol_var_MHD3D_copy proc~new_minimizer->proc~sol_var_mhd3d_copy proc~sol_var_mhd3d_init t_sol_var_MHD3D%sol_var_MHD3D_init proc~new_minimizer->proc~sol_var_mhd3d_init tau tau proc~new_minimizer->tau velocity velocity proc~new_minimizer->velocity proc~sol_var_mhd3d_copy->proc~sol_var_mhd3d_init none~set_to t_sol_var_MHD3D%set_to proc~sol_var_mhd3d_init->none~set_to proc~sol_var_mhd3d_test sol_var_MHD3D_test proc~sol_var_mhd3d_init->proc~sol_var_mhd3d_test 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 proc~sol_var_mhd3d_test->proc~sol_var_mhd3d_copy proc~sol_var_mhd3d_test->none~set_to proc~sol_var_mhd3d_axby t_sol_var_MHD3D%sol_var_MHD3D_AXBY proc~sol_var_mhd3d_test->proc~sol_var_mhd3d_axby proc~sol_var_mhd3d_norm_2 t_sol_var_MHD3D%sol_var_MHD3D_norm_2 proc~sol_var_mhd3d_test->proc~sol_var_mhd3d_norm_2

Called by

proc~~new_minimizer~~CalledByGraph proc~new_minimizer new_minimizer proc~initmhd3d t_functional_mhd3d%InitMHD3D proc~initmhd3d->proc~new_minimizer proc~init Init proc~init->proc~initmhd3d proc~rungvec rungvec proc~rungvec->proc~initmhd3d program~gvec_post GVEC_POST program~gvec_post->proc~initmhd3d proc~start_rungvec start_rungvec proc~start_rungvec->proc~rungvec program~gvec GVEC program~gvec->proc~rungvec

Source Code

    SUBROUTINE new_minimizer(&
            sf, varsize_in, dt_initial, MinType_in, dW_allowed_in,& ! Minimizer
            DoCheckDistance, DoCheckAxis,& !what to log
            outputIter, nlogScreen, logIter& !when to log
        )
        !-----------------------------------------------------------------------------------------------------------------------------------
        ! MODULES
        USE MODgvec_MHD3D_evalFunc, ONLY: EvalForce
        !-----------------------------------------------------------------------------------------------------------------------------------
        ! INPUT VARIABLES
        INTEGER , INTENT(IN) :: varsize_in(:) !! size of the dofs
        REAL(wp), INTENT(IN) :: dt_initial !! initial stepsize for the minimization
        REAL(wp), INTENT(IN) :: dW_allowed_in !! for minimizer, accept step if dW<dW_allowed*W_MHD(iter=0)
        INTEGER, INTENT(IN)  :: MinType_in !! gradient descent = 0, accelerated gradient descent = 10
        LOGICAL, INTENT(IN)  :: DoCheckDistance !! TRUE: check distance between solutions of two log output states
        LOGICAL, INTENT(IN)  :: DoCheckAxis !! TRUE: check axis position
        INTEGER, INTENT(IN)  :: outputIter !! number of iterations after which output files are written
        INTEGER, INTENT(IN)  :: nlogScreen !! number of log outputs after a screen output is written
        INTEGER, INTENT(IN)  :: logIter !! number of iterations after which a screen log is written
        !-----------------------------------------------------------------------------------------------------------------------------------
        ! OUTPUT VARIABLES
        TYPE(t_minimizer_mhd3d),ALLOCATABLE, INTENT(INOUT) :: sf !! allocatable minimizer object
        !-----------------------------------------------------------------------------------------------------------------------------------
        ! LOCAL VARIABLES
        INTEGER :: i !! iteration variable
        !===================================================================================================================================
        ALLOCATE(sf)

        sf%MinType = MinType_in
        IF(MinType_in.EQ.0)THEN
            ALLOCATE(t_gradient_descent_vars :: sf%vars)
            sf%vars%MinimizerType="Gradient-Descent"
        ELSEIF(MinType_in.EQ.10)THEN
            ALLOCATE(t_accelerated_gradient_descent_vars :: sf%vars)
            sf%vars%MinimizerType="Accelerated Gradient-Descent"
        ELSE
            CALL abort(__STAMP__,&
                       "requested MinimizeType does not exist, expecting 0 or 10",intinfo=MinType_in,&
                       TypeInfo="InvalidParameterError")
        END IF
        ASSOCIATE(vars=>sf%vars)
            vars%dt = dt_initial
            vars%dW_allowed = dW_allowed_in

            ALLOCATE(vars%dofs(-3:1))
            CALL vars%dofs(1)%init(varsize_in)
            DO i=-3,0
                CALL vars%dofs(i)%copy(vars%dofs(1))
            END DO
            ALLOCATE(vars%force(-1:0))
            DO i=-1,0
                CALL vars%force(i)%copy(vars%dofs(1))
            END DO

            ALLOCATE(vars%temp_dofs(-1:1))
            DO i=-1,1
                CALL vars%temp_dofs(i)%copy(vars%dofs(1))
            END DO

            ! variables for the accelerated Gradient descent
            SELECT TYPE(vars)
            TYPE IS(t_accelerated_gradient_descent_vars)
                ALLOCATE(vars%velocity(-1:1))
                DO i=-1,1
                    CALL vars%velocity(i)%copy(vars%dofs(1))
                END DO
                vars%tau_bar = 0.075_wp
                vars%ndamp = 10
                ALLOCATE(vars%tau(vars%ndamp))
                vars%tau=0.0_wp
                vars%Vnorm = 0.0_wp
            END SELECT !Type
            vars%JacCheck = 1

            vars%nstepDecreased = 0
            vars%nSkip_Jac = 0
            vars%t_pseudo = 0
            vars%lastOutputIter = 0
            vars%iter = 0
            vars%logiter_ramp = 1
            vars%logscreen = 1
            vars%nSkip_dw = 0
            vars%JacCheck = 1



            vars%restart_iter = .TRUE.
            vars%logger_is_initialized = .FALSE.

            vars%DoCheckDistance = DoCheckDistance
            vars%DoCheckAxis = DoCheckAxis

            vars%outputIter = outputIter
            vars%nlogScreen = nlogScreen
            vars%logIter = logIter

            vars%Fnorm = 10.0_wp
            vars%Fnorm0 = 10.0_wp
            vars%W_MHD3D_0 = 0.0_wp
            vars%deltaW = 0.0_wp
        END ASSOCIATE !vars
        sf%initialized = .TRUE.
    END SUBROUTINE new_minimizer