Log the current minimizer and functional state
NOTE: Writes to a csv file named in the style of logMinimizer_*
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(t_minimizer_mhd3d), | intent(inout) | :: | sf | |||
| logical, | intent(in) | :: | quiet |
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