Logging_MHD3D Subroutine

public subroutine Logging_MHD3D(sf, quiet)

Uses

    • MODgvec_MHD3D_visu
  • proc~~logging_mhd3d~~UsesGraph proc~logging_mhd3d t_minimizer_mhd3d%Logging_MHD3D MODgvec_MHD3D_visu MODgvec_MHD3D_visu proc~logging_mhd3d->MODgvec_MHD3D_visu

Log the current minimizer and functional state

NOTE: Writes to a csv file named in the style of logMinimizer_*

Type Bound

t_minimizer_mhd3d

Arguments

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

Calls

proc~~logging_mhd3d~~CallsGraph proc~logging_mhd3d t_minimizer_mhd3d%Logging_MHD3D checkdistance checkdistance proc~logging_mhd3d->checkdistance checkpos checkpos proc~logging_mhd3d->checkpos none~set_to t_sol_var_MHD3D%set_to proc~logging_mhd3d->none~set_to vnorm vnorm proc~logging_mhd3d->vnorm 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

Called by

proc~~logging_mhd3d~~CalledByGraph proc~logging_mhd3d t_minimizer_mhd3d%Logging_MHD3D proc~minimizemhd3d_descent t_minimizer_mhd3d%MinimizeMHD3D_descent proc~minimizemhd3d_descent->proc~logging_mhd3d 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 Logging_MHD3D(sf, quiet)
        ! MODULES
        USE MODgvec_MHD3D_visu, ONLY: checkDistance
        USE MODgvec_MHD3D_visu, ONLY: checkPos
        IMPLICIT NONE
        !-------------------------------------------------------------------------------------------------------------------------------
        ! INPUT VARIABLES
        CLASS(t_minimizer_mhd3d), INTENT(INOUT) :: sf
        LOGICAL, INTENT(IN) :: quiet !! True: no screen output
        !-------------------------------------------------------------------------------------------------------------------------------
        ! OUTPUT VARIABLES
        !-------------------------------------------------------------------------------------------------------------------------------
        ! LOCAL VARIABLES
        INTEGER             :: TimeArray(8),runtime_ms,iLogDat
        REAL(wp)            :: Pos(2,2),maxDist,avgDist,W_MHD3D
        INTEGER,PARAMETER   :: nLogDat=25
        REAL(wp)            :: LogDat(1:nLogDat)
        !=================================================================================================================================
        IF(.NOT.MPIroot) RETURN
        __PERFON('log_output')
        ASSOCIATE(vars=>sf%vars)
            CALL DATE_AND_TIME(values=TimeArray) ! get System time
            W_MHD3D=vars%dofs(0)%W_MHD3D
            IF(.NOT.quiet)THEN
                WRITE(UNIT_stdOut,'(80("%"))')
                WRITE(UNIT_stdOut,'(A,I4.2,"-",I2.2,"-",I2.2,1X,I2.2,":",I2.2,":",I2.2)') &
                                '%% Sys date : ',timeArray(1:3),timeArray(5:7)
                WRITE(UNIT_stdOut,'(A,I8,A,2I8,A,E11.4,A,2E11.4,A,E21.14,A,3E12.4)') &
                                '%% #ITERATIONS= ',vars%iter,', #skippedIter (Jac/dW)= ',vars%nSkip_Jac,vars%nSkip_dW, &
                        '\n%% t_pseudo= ',vars%t_pseudo,', min/max dt= ',vars%min_dt_out,vars%max_dt_out, &
                        '\n%% W_MHD3D= ',W_MHD3D,', min/max/sum deltaW= ' , vars%min_dW_out,vars%max_dW_out,vars%sum_dW_out
                WRITE(UNIT_stdOut,'(A,3E21.14)') &
                            '%% dU = |Force|= ',vars%Fnorm(1:3)
                !------------------------------------
            END IF!.NOT.quiet

            iLogDat=0
            runtime_ms=MAX(0,SUM((timeArray(5:8)-vars%StartTimearray(5:8))*(/360000,6000,100,1/)))
            LogDat(ilogDat+1:iLogDat+11)=(/REAL(vars%iter,wp),REAL(runtime_ms,wp)/100.0_wp, &
                                            vars%min_dt_out,vars%max_dt_out,&
                                            W_MHD3D,vars%min_dW_out,vars%max_dW_out,vars%sum_dW_out, &
                                            vars%Fnorm(1:3)/)
            iLogDat=11
            SELECT TYPE(vars)
            TYPE IS (t_accelerated_gradient_descent_vars)
                IF(.NOT.quiet)THEN
                WRITE(UNIT_stdOut,'(A,E11.4,A,3E11.4)') &
                        '%% accel.GD: tau= ',vars%tau_bar,' |vel|= ',vars%Vnorm(1:3)
                END IF!.NOT.quiet
                LogDat(ilogDat+1:iLogDat+4)=(/vars%tau_bar,vars%Vnorm(1:3)/)
                iLogDat=iLogDat+4
            END SELECT
            IF(vars%doCheckDistance) THEN
                CALL CheckDistance(vars%dofs(0),vars%dofs(-2),maxDist,avgDist)
                CALL vars%dofs(-2)%set_to(vars%dofs(0))
                IF(.NOT.quiet)THEN
                WRITE(UNIT_stdOut,'(A,2E11.4)') &
                '               %% Dist to last log (max/avg) : ',maxDist,avgDist
                END IF!.NOT.quiet
                LogDat(iLogDat+1:iLogDat+2)=(/maxDist,avgDist/)
                iLogDat=iLogDat+2
            END IF!doCheckDistance
            IF(vars%doCheckAxis) THEN
                CALL CheckPos(vars%dofs(0),0.0_wp,2,Pos)
                IF(.NOT.quiet)THEN
                SWRITE(UNIT_stdOut,'(2(A,2E22.14))') &
                    '%% axis position (X1,X2,zeta=0     ): ',Pos(1:2,1), &
                '\n%% axis position (X1,X2,zeta=pi/nfp): ',Pos(1:2,2)
                END IF!.NOT.quiet
                LogDat(iLogDat+1:iLogDat+4)=RESHAPE(Pos,(/4/))
                iLogDat=iLogDat+4
            END IF !doCheckAxis

            IF(.NOT.quiet)THEN
                WRITE(UNIT_stdOut,'(40(" -"))')
            END IF!.NOT.quiet
            WRITE(vars%logUnit,'(*(e23.15,:,","))') logDat(1:iLogDat)
        END ASSOCIATE !vars
        __PERFOFF('log_output')
    END SUBROUTINE Logging_MHD3D