rungvec Subroutine

public subroutine rungvec(Parameterfile, RestartFile_in)

Uses

  • proc~~rungvec~~UsesGraph proc~rungvec rungvec module~modgvec_analyze MODgvec_Analyze proc~rungvec->module~modgvec_analyze module~modgvec_globals MODgvec_Globals proc~rungvec->module~modgvec_globals module~modgvec_output MODgvec_Output proc~rungvec->module~modgvec_output module~modgvec_readintools MODgvec_ReadInTools proc~rungvec->module~modgvec_readintools module~modgvec_restart MODgvec_Restart proc~rungvec->module~modgvec_restart module~modgvec_analyze->module~modgvec_globals iso_fortran_env iso_fortran_env module~modgvec_globals->iso_fortran_env module~modgvec_readintools->module~modgvec_globals module~modgvec_restart->module~modgvec_globals

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: Parameterfile

input parameters of GVEC

character(len=*), intent(in), optional :: RestartFile_in

if present, a restart will be executed


Calls

proc~~rungvec~~CallsGraph proc~rungvec rungvec fillstrings fillstrings proc~rungvec->fillstrings finalizeanalyze finalizeanalyze proc~rungvec->finalizeanalyze finalizeoutput finalizeoutput proc~rungvec->finalizeoutput finalizerestart finalizerestart proc~rungvec->finalizerestart getint getint proc~rungvec->getint getlogical getlogical proc~rungvec->getlogical ignoredstrings ignoredstrings proc~rungvec->ignoredstrings initanalyze initanalyze proc~rungvec->initanalyze initoutput initoutput proc~rungvec->initoutput initrestart initrestart proc~rungvec->initrestart interface~enter_subregion enter_subregion proc~rungvec->interface~enter_subregion interface~exit_subregion exit_subregion proc~rungvec->interface~exit_subregion interface~getfreeunit GETFREEUNIT proc~rungvec->interface~getfreeunit interface~gettime GetTime proc~rungvec->interface~gettime interface~reset_subregion reset_subregion proc~rungvec->interface~reset_subregion proc~finalizereadin FinalizeReadIn proc~rungvec->proc~finalizereadin proc~initmhd3d t_functional_mhd3d%InitMHD3D proc~rungvec->proc~initmhd3d proc~initsolutionmhd3d t_functional_mhd3d%InitSolutionMHD3D proc~rungvec->proc~initsolutionmhd3d proc~minimizemhd3d t_functional_mhd3d%MinimizeMHD3D proc~rungvec->proc~minimizemhd3d interface~enter_subregion->interface~enter_subregion interface~exit_subregion->interface~exit_subregion interface~getfreeunit->interface~getfreeunit interface~gettime->interface~gettime interface~reset_subregion->interface~reset_subregion interface~ignoredstrings IgnoredStrings proc~finalizereadin->interface~ignoredstrings proc~initmhd3d->getint proc~initmhd3d->getlogical proc~initmhd3d->interface~enter_subregion proc~initmhd3d->interface~exit_subregion antiderivative antiderivative proc~initmhd3d->antiderivative boundaryfromfile_new boundaryfromfile_new proc~initmhd3d->boundaryfromfile_new getintarray getintarray proc~initmhd3d->getintarray getreal getreal proc~initmhd3d->getreal getstr getstr proc~initmhd3d->getstr initvmec initvmec proc~initmhd3d->initvmec interface~par_bcast par_Bcast proc~initmhd3d->interface~par_bcast proc~base_new Base_new proc~initmhd3d->proc~base_new proc~bff_convert_to_modes t_boundaryFromFile%bff_convert_to_modes proc~initmhd3d->proc~bff_convert_to_modes proc~get_imode get_iMode proc~initmhd3d->proc~get_imode proc~getrealallocarray GETREALALLOCARRAY proc~initmhd3d->proc~getrealallocarray proc~hmap_new hmap_new proc~initmhd3d->proc~hmap_new proc~hmap_new_auxvar hmap_new_auxvar proc~initmhd3d->proc~hmap_new_auxvar proc~initializemhd3d_evalfunc InitializeMHD3D_evalFunc proc~initmhd3d->proc~initializemhd3d_evalfunc proc~initprofile InitProfile proc~initmhd3d->proc~initprofile proc~new_minimizer new_minimizer proc~initmhd3d->proc~new_minimizer proc~par_barrier par_Barrier proc~initmhd3d->proc~par_barrier proc~sgrid_init t_sGrid%sGrid_init proc~initmhd3d->proc~sgrid_init proc~initsolutionmhd3d->interface~enter_subregion proc~initsolutionmhd3d->interface~exit_subregion analyze analyze proc~initsolutionmhd3d->analyze proc~initsolutionmhd3d->interface~par_bcast interface~writestate WriteState proc~initsolutionmhd3d->interface~writestate none~set_to t_sol_var_MHD3D%set_to proc~initsolutionmhd3d->none~set_to proc~addboundaryperturbation AddBoundaryPerturbation proc~initsolutionmhd3d->proc~addboundaryperturbation proc~evalenergy EvalEnergy proc~initsolutionmhd3d->proc~evalenergy proc~evalforce EvalForce proc~initsolutionmhd3d->proc~evalforce proc~init_la_from_solution Init_LA_from_Solution proc~initsolutionmhd3d->proc~init_la_from_solution proc~initprofilesgp InitProfilesGP proc~initsolutionmhd3d->proc~initprofilesgp proc~initsolution InitSolution proc~initsolutionmhd3d->proc~initsolution proc~initsolutionmhd3d->proc~par_barrier proc~sol_var_mhd3d_norm_2 t_sol_var_MHD3D%sol_var_MHD3D_norm_2 proc~initsolutionmhd3d->proc~sol_var_mhd3d_norm_2 restartfromstate restartfromstate proc~initsolutionmhd3d->restartfromstate proc~minimizemhd3d->interface~enter_subregion proc~minimizemhd3d->interface~exit_subregion proc~minimizemhd3d_descent t_minimizer_mhd3d%MinimizeMHD3D_descent proc~minimizemhd3d->proc~minimizemhd3d_descent interface~ignoredstrings->interface~ignoredstrings 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~writestatetoascii WriteStateToASCII interface~writestate->proc~writestatetoascii 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~sbase_applybctodof_lgm t_sBase%sBase_applyBCtoDOF_LGM proc~addboundaryperturbation->proc~sbase_applybctodof_lgm proc~sbase_initdof t_sBase%sBase_initDOF proc~addboundaryperturbation->proc~sbase_initdof proc~base_test Base_test proc~base_new->proc~base_test proc~sbase_new sBase_new proc~base_new->proc~sbase_new proc~fbase_change_base t_fBase%fBase_change_base proc~bff_convert_to_modes->proc~fbase_change_base proc~fbase_evaldof_xn t_fBase%fBase_evalDOF_xn proc~bff_convert_to_modes->proc~fbase_evaldof_xn proc~fbase_initdof t_fBase%fBase_initDOF proc~bff_convert_to_modes->proc~fbase_initdof interface~par_allreduce par_AllReduce proc~evalenergy->interface~par_allreduce proc~evalaux EvalAux proc~evalenergy->proc~evalaux 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~evalforce->proc~evalaux 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~get_imode->getreal proc~remove_blanks remove_blanks proc~get_imode->proc~remove_blanks interface~findstr FindStr proc~getrealallocarray->interface~findstr proc~converttoproposalstr ConvertToProposalStr proc~getrealallocarray->proc~converttoproposalstr proc~count_sep count_sep proc~getrealallocarray->proc~count_sep proc~hmap_new->interface~enter_subregion proc~hmap_new->interface~exit_subregion proc~init_la_from_solution->interface~enter_subregion proc~init_la_from_solution->interface~exit_subregion proc~init_la_from_solution->interface~gettime proc~init_la_from_solution->interface~par_bcast proc~init_la_from_solution->proc~hmap_new_auxvar interface~par_reduce par_Reduce proc~init_la_from_solution->interface~par_reduce interface~progressbar ProgressBar proc~init_la_from_solution->interface~progressbar proc~lambda_solve Lambda_solve proc~init_la_from_solution->proc~lambda_solve proc~rprofile_eval_at_rho c_rProfile%rProfile_eval_at_rho proc~init_la_from_solution->proc~rprofile_eval_at_rho proc~init_la_from_solution->proc~sbase_applybctodof_lgm proc~init_la_from_solution->proc~sbase_initdof proc~initializemhd3d_evalfunc->interface~enter_subregion proc~initializemhd3d_evalfunc->interface~exit_subregion init init proc~initializemhd3d_evalfunc->init proc~initprofile->interface~enter_subregion proc~initprofile->interface~exit_subregion proc~initprofile->getreal proc~initprofile->getstr proc~initprofile->proc~getrealallocarray getrealarray getrealarray proc~initprofile->getrealarray interface~interpolate_cubic_spline interpolate_cubic_spline proc~initprofile->interface~interpolate_cubic_spline proc~initprofilesgp->interface~par_bcast proc~initprofilesgp->proc~rprofile_eval_at_rho proc~initaverageaxis InitAverageAxis proc~initsolution->proc~initaverageaxis proc~initsolution->proc~sbase_applybctodof_lgm proc~initsolution->proc~sbase_initdof vmec_evalsplmode vmec_evalsplmode proc~initsolution->vmec_evalsplmode proc~minimizemhd3d_descent->analyze proc~minimizemhd3d_descent->interface~writestate proc~minimizemhd3d_descent->none~set_to proc~minimizemhd3d_descent->proc~evalenergy proc~minimizemhd3d_descent->proc~evalforce norm_2 norm_2 proc~minimizemhd3d_descent->norm_2 proc~logging_mhd3d t_minimizer_mhd3d%Logging_MHD3D proc~minimizemhd3d_descent->proc~logging_mhd3d proc~minimizemhd3d_resetdescent t_minimizer_mhd3d%MinimizeMHD3d_ResetDescent proc~minimizemhd3d_descent->proc~minimizemhd3d_resetdescent proc~sol_var_mhd3d_axby t_sol_var_MHD3D%sol_var_MHD3D_AXBY proc~minimizemhd3d_descent->proc~sol_var_mhd3d_axby proc~startlogging_mhd3d t_minimizer_mhd3d%StartLogging_MHD3D proc~minimizemhd3d_descent->proc~startlogging_mhd3d tau tau proc~minimizemhd3d_descent->tau velocity velocity proc~minimizemhd3d_descent->velocity writesfloutfile writesfloutfile proc~minimizemhd3d_descent->writesfloutfile 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 proc~new_minimizer->tau proc~new_minimizer->velocity proc~sgrid_test sGrid_test proc~sgrid_init->proc~sgrid_test interface~findstr->interface~findstr interface~interpolate_cubic_spline->interface~interpolate_cubic_spline 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_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~par_reduce_array1d par_Reduce_array1D interface~par_reduce->proc~par_reduce_array1d proc~par_reduce_array2d par_Reduce_array2D interface~par_reduce->proc~par_reduce_array2d proc~par_reduce_scalar par_Reduce_scalar interface~par_reduce->proc~par_reduce_scalar proc~par_reduce_scalar_int par_Reduce_scalar_int interface~par_reduce->proc~par_reduce_scalar_int interface~progressbar->interface~progressbar 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~base_test->proc~sbase_initdof proc~base_evaldof t_base%base_evalDOF proc~base_test->proc~base_evaldof 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 proc~converttoproposalstr->proc~remove_blanks proc~evalaux->interface~par_allreduce eval_all eval_all proc~evalaux->eval_all proc~evalaux->proc~base_evaldof proc~base_evaldof_all t_base%base_evalDOF_all proc~evalaux->proc~base_evaldof_all proc~fbase_compare t_fBase%fBase_compare proc~fbase_change_base->proc~fbase_compare dgemv dgemv proc~fbase_evaldof_xn->dgemv proc~fbase_eval_xn t_fBase%fBase_eval_xn proc~fbase_evaldof_xn->proc~fbase_eval_xn proc~fbase_initdof->proc~fbase_projectiptodof_tens proc~fbase_projectxntodof t_fBase%fBase_projectxntoDOF proc~fbase_initdof->proc~fbase_projectxntodof dgemm dgemm proc~fbase_projectiptodof_tens->dgemm proc~initaverageaxis->proc~fbase_initdof proc~fbase_evaldof_ip_tens t_fBase%fBase_evalDOF_IP_tens proc~initaverageaxis->proc~fbase_evaldof_ip_tens proc~lambda_solve->proc~fbase_evaldof_ip_tens proc~hmap_eval_gij_aux c_hmap%hmap_eval_gij_aux proc~lambda_solve->proc~hmap_eval_gij_aux proc~hmap_eval_jh_aux c_hmap%hmap_eval_Jh_aux proc~lambda_solve->proc~hmap_eval_jh_aux proc~lambda_setup_and_solve Lambda_setup_and_solve proc~lambda_solve->proc~lambda_setup_and_solve proc~sbase_evaldof_s t_sBase%sBase_evalDOF_s proc~lambda_solve->proc~sbase_evaldof_s proc~logging_mhd3d->none~set_to checkdistance checkdistance proc~logging_mhd3d->checkdistance checkpos checkpos proc~logging_mhd3d->checkpos vnorm vnorm proc~logging_mhd3d->vnorm proc~minimizemhd3d_resetdescent->none~set_to proc~minimizemhd3d_resetdescent->proc~evalenergy proc~minimizemhd3d_resetdescent->proc~evalforce proc~minimizemhd3d_resetdescent->proc~sol_var_mhd3d_norm_2 proc~minimizemhd3d_resetdescent->proc~evalaux proc~minimizemhd3d_resetdescent->tau eval_at_rho2 eval_at_rho2 proc~rprofile_eval_at_rho->eval_at_rho2 proc~rho2_derivative rho2_derivative proc~rprofile_eval_at_rho->proc~rho2_derivative proc~rprofile_drho2 c_rProfile%rProfile_drho2 proc~rprofile_eval_at_rho->proc~rprofile_drho2 proc~rprofile_drho3 c_rProfile%rProfile_drho3 proc~rprofile_eval_at_rho->proc~rprofile_drho3 proc~rprofile_drho4 c_rProfile%rProfile_drho4 proc~rprofile_eval_at_rho->proc~rprofile_drho4 proc~solve SOLVE proc~sbase_applybctodof_lgm->proc~solve compute_interpolant compute_interpolant proc~sbase_initdof->compute_interpolant proc~sbase_init t_sBase%sBase_init proc~sbase_new->proc~sbase_init proc~sgrid_test->proc~sgrid_init proc~sgrid_compare t_sGrid%sGrid_compare proc~sgrid_test->proc~sgrid_compare proc~sgrid_find_elem t_sGrid%sGrid_find_elem proc~sgrid_test->proc~sgrid_find_elem proc~sol_var_mhd3d_copy->proc~sol_var_mhd3d_init 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~startlogging_mhd3d->interface~getfreeunit proc~startlogging_mhd3d->checkpos proc~startlogging_mhd3d->vnorm proc~writestatetoascii->interface~getfreeunit proc~writestatetoascii->proc~rprofile_eval_at_rho proc~evaltotals EvalTotals proc~writestatetoascii->proc~evaltotals proc~base_evaldof->proc~fbase_evaldof_ip_tens proc~base_evaldof_all->proc~fbase_evaldof_ip_tens proc~evaltotals->interface~par_reduce proc~evaltotals->proc~evalaux proc~fbase_evaldof_ip_tens->proc~fbase_evaldof_xn proc~fbase_evaldof_ip_tens->dgemm proc~fbase_projectxntodof->dgemv proc~fbase_projectxntodof->proc~fbase_eval_xn eval_gij eval_gij proc~hmap_eval_gij_aux->eval_gij eval_Jh eval_Jh proc~hmap_eval_jh_aux->eval_Jh proc~lambda_setup_and_solve->proc~fbase_projectiptodof_tens proc~lambda_setup_and_solve->proc~solve proc~poly_derivative_prefactor poly_derivative_prefactor proc~rho2_derivative->proc~poly_derivative_prefactor proc~rprofile_drho2->eval_at_rho2 proc~rprofile_drho2->proc~rho2_derivative proc~rprofile_drho3->eval_at_rho2 proc~rprofile_drho3->proc~rho2_derivative proc~rprofile_drho4->eval_at_rho2 proc~rprofile_drho4->proc~rho2_derivative 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~sbase_eval t_sBase%sBase_eval proc~sbase_evaldof_s->proc~sbase_eval proc~sbase_evaldof_base t_sBase%sBase_evalDOF_base proc~sbase_evaldof_s->proc~sbase_evaldof_base proc~sbase_init->init proc~sbase_init->add_element proc~sbase_init->factorize barycentricweights barycentricweights proc~sbase_init->barycentricweights dmatip dmatip proc~sbase_init->dmatip eval_basis eval_basis proc~sbase_init->eval_basis eval_basis_and_n_derivs eval_basis_and_n_derivs proc~sbase_init->eval_basis_and_n_derivs eval_deriv eval_deriv proc~sbase_init->eval_deriv get_interp_points get_interp_points proc~sbase_init->get_interp_points initializevandermonde initializevandermonde proc~sbase_init->initializevandermonde legendregaussnodesandweights legendregaussnodesandweights proc~sbase_init->legendregaussnodesandweights mthpolynomialderivativematrix mthpolynomialderivativematrix proc~sbase_init->mthpolynomialderivativematrix proc~getlu getLU proc~sbase_init->proc~getlu proc~inv INV proc~sbase_init->proc~inv proc~sbase_alloc sBase_alloc proc~sbase_init->proc~sbase_alloc proc~sbase_test sBase_test proc~sbase_init->proc~sbase_test proc~sll_s_bsplines_new sll_s_bsplines_new proc~sbase_init->proc~sll_s_bsplines_new proc~sll_s_spline_matrix_new sll_s_spline_matrix_new proc~sbase_init->proc~sll_s_spline_matrix_new proc~solvemat SOLVEMAT proc~sbase_init->proc~solvemat xiip xiip proc~sbase_init->xiip proc~sol_var_mhd3d_test->none~set_to proc~sol_var_mhd3d_test->proc~sol_var_mhd3d_norm_2 proc~sol_var_mhd3d_test->proc~sol_var_mhd3d_axby proc~sol_var_mhd3d_test->proc~sol_var_mhd3d_copy dgetrf dgetrf proc~solve->dgetrf dgetrs dgetrs proc~solve->dgetrs proc~getlu->dgetrf proc~inv->dgetrf dgetri dgetri proc~inv->dgetri proc~sbase_alloc->dmatip proc~sbase_alloc->xiip wbaryip wbaryip proc~sbase_alloc->wbaryip proc~sbase_eval->proc~sgrid_find_elem proc~sbase_eval->eval_basis proc~sbase_eval->eval_basis_and_n_derivs lagrangeinterpolationpolys lagrangeinterpolationpolys proc~sbase_eval->lagrangeinterpolationpolys proc~sbase_test->proc~sbase_applybctodof_lgm proc~sbase_test->proc~sbase_initdof proc~sbase_test->proc~sbase_new proc~sbase_test->proc~sbase_evaldof_s proc~sbase_test->proc~sbase_eval proc~sbase_test->proc~sbase_evaldof_base proc~sbase_change_base t_sBase%sBase_change_base proc~sbase_test->proc~sbase_change_base proc~sbase_compare t_sBase%sBase_compare proc~sbase_test->proc~sbase_compare proc~sbase_evaldof_gp t_sBase%sBase_evalDOF_GP proc~sbase_test->proc~sbase_evaldof_gp proc~sll_s_bsplines_new->init 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 proc~sll_s_spline_matrix_new->init proc~sll_s_spline_matrix_new->proc~sll_s_error_handler proc~solvemat->dgetrf proc~solvemat->dgetrs proc~sbase_change_base->proc~sbase_initdof proc~sbase_change_base->proc~sbase_compare eval eval proc~sbase_change_base->eval evalDOF_base evalDOF_base proc~sbase_change_base->evalDOF_base proc~sbase_compare->proc~sgrid_compare

Called by

proc~~rungvec~~CalledByGraph proc~rungvec rungvec proc~start_rungvec start_rungvec proc~start_rungvec->proc~rungvec program~gvec GVEC program~gvec->proc~rungvec

Source Code

SUBROUTINE rungvec(parameterFile,restartfile_in)
USE_MPI
USE MODgvec_Globals
USE MODgvec_Analyze    ,ONLY : InitAnalyze,FinalizeAnalyze
USE MODgvec_Output     ,ONLY : InitOutput,FinalizeOutput
USE MODgvec_Restart    ,ONLY : InitRestart,FinalizeRestart
USE MODgvec_ReadInTools,ONLY : FillStrings,GETLOGICAL,GETINT,IgnoredStrings,FinalizeReadIn
!$ USE omp_lib
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
!INPUT VARIABLES
  CHARACTER(LEN=*),INTENT(IN)             :: Parameterfile  !! input parameters of GVEC
  CHARACTER(LEN=*),INTENT(IN),OPTIONAL    :: RestartFile_in  !! if present, a restart will be executed
!-----------------------------------------------------------------------------------------------------------------------------------
!local variables
INTEGER                 :: TimeArray(8)
CHARACTER(LEN=255)      :: testfile
REAL(wp)                :: StartTimeTotal,EndTimeTotal,StartTime,EndTime
!===================================================================================================================================
  __PERFINIT
  __PERFON('main')
  CALL reset_subregion()

  StartTimeTotal=GetTime()
  SWRITE(Unit_stdOut,fmt_sep)
  CALL DATE_AND_TIME(values=TimeArray) ! get System time
  SWRITE(UNIT_stdOut,'(A,I4.2,"-",I2.2,"-",I2.2,1X,I2.2,":",I2.2,":",I2.2)') &
    '%%% Sys date : ',timeArray(1:3),timeArray(5:7)

  !header
  SWRITE(Unit_stdOut,fmt_sep)
  SWRITE(Unit_stdOut,'(18(("*",A128,2X,"*",:,"\n")))')&
 '  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '&
,' - - - - - - - - - - - - GGGGGGGGGGGGGGG - VVVVVVVV  - - - -  VVVVVVVV - EEEEEEEEEEEEEEEEEEEEEE  - - - - CCCCCCCCCCCCCCC - -  '&
,'  - - - - - - - - - - GGGG::::::::::::G - V::::::V  - - - -  V::::::V - E::::::::::::::::::::E  - - - CCCC::::::::::::C - - - '&
,' - - - - - - - - - GGG:::::::::::::::G - V::::::V  - - - -  V::::::V - E::::::::::::::::::::E  - - CCC:::::::::::::::C - - -  '&
,'  - - - - - - -  GG:::::GGGGGGGG::::G - V::::::V  - - - -  V::::::V - EEE:::::EEEEEEEEE::::E  -  CC:::::CCCCCCCC::::C - - - - '&
,' - - - - - - - GG:::::GG  - - GGGGGG -  V:::::V  - - - -  V:::::V  - - E:::::E - - - EEEEEE  - CC:::::CC - -  CCCCCC - - - -  '&
,'  - - - - - - G:::::GG  - - - - - - - - V:::::V - - - - V:::::V - - - E:::::E - - - - - - - - C:::::CC  - - - - - - - - - - - '&
,' - - - - - - G:::::G - - - - - - - - -  V:::::V  - -  V:::::V  - - - E:::::EEEEEEEEEEE - - - C:::::C - - - - - - - - - - - -  '&
,'  - - - - - G:::::G -  GGGGGGGGGG - - - V:::::V - - V:::::V - - - - E:::::::::::::::E - - - C:::::C - - - - - - - - - - - - - '&
,' - - - - - G:::::G -  G::::::::G - - -  V:::::V   V:::::V  - - - - E:::::::::::::::E - - - C:::::C - - - - - - - - - - - - -  '&
,'  - - - - G:::::G -  GGGGG::::G - - - - V:::::V V:::::V - - - - - E:::::EEEEEEEEEEE - - - C:::::C - - - - - - - - - - - - - - '&
,' - - - - G:::::G - - -  G::::G - - - -  V:::::V:::::V  - - - - - E:::::E - - - - - - - - C:::::C - - - - - - - - - - - - - -  '&
,'  - - -  G:::::G  - -  G::::G - - - - - V:::::::::V - - - - - - E:::::E - - - EEEEEE  -  C:::::C  - -  CCCCCC - - - - - - - - '&
,' - - - - G::::::GGGGGGG::::G - - - - -  V:::::::V  - - - - - EEE:::::EEEEEEEEE::::E  - - C::::::CCCCCCC::::C - - - - - - - -  '&
,'  - - - - G:::::::::::::::G - - - - - - V:::::V - - - - - - E::::::::::::::::::::E  - - - C:::::::::::::::C - - - - - - - - - '&
,' - - - - - GG::::GGGG::::G - - - - - -  V:::V  - - - - - - E::::::::::::::::::::E  - - - - CC::::::::::::C - - - - - - - - -  '&
,'  - - - - -  GGGG  GGGGGG - - - - - - - VVV - - - - - - - EEEEEEEEEEEEEEEEEEEEEE  - - - - -  CCCCCCCCCCCC - - - - - - - - - - '&
,' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  '
  SWRITE(Unit_stdOut,fmt_sep)
  !.only executes if compiled with OpenMP
!$ SWRITE(UNIT_stdOut,'(A,I6)')'   Number of OpenMP threads : ',OMP_GET_MAX_THREADS()
!$ SWRITE(Unit_stdOut,'(132("="))')
  !.only executes if compiled with MPI
# if MPI
  SWRITE(UNIT_stdOut,'(A,I6)')'   Number of MPI tasks : ',nRanks
  SWRITE(Unit_stdOut,fmt_sep)
# endif
#include  "configuration-cmake.F90"
  SWRITE(Unit_stdOut,fmt_sep)
  CALL FillStrings(ParameterFile) !< readin parameterfile, done on MPI root + Bcast

  testdbg =GETLOGICAL('testdbg',Proposal=.FALSE.)
  testlevel=GETINT('testlevel',Proposal=-1)
  IF(testlevel.GT.0)THEN
    testUnit=GETFREEUNIT()
    WRITE(testFile,'(A,I4.4,A)')"tests_",myRank,".out"
    OPEN(UNIT     = testUnit    ,&
         FILE     = testfile    ,&
         STATUS   = 'REPLACE'   ,&
         ACCESS   = 'SEQUENTIAL' )
  END IF

  CALL enter_subregion("initialize")
  !initialization phase
  dorestart=.FALSE.
  IF(PRESENT(RestartFile_in)) THEN
    dorestart=(LEN(TRIM(RestartFile_in)).GT.0)
  END IF
  IF(dorestart) CALL InitRestart(RestartFile_in)
  CALL InitOutput()
  CALL InitAnalyze()
  ALLOCATE(t_functional_mhd3d :: functional)
  CALL functional%init()

  CALL IgnoredStrings()

  CALL functional%InitSolution()
  StartTime=GetTime()
  SWRITE(Unit_stdOut,'(A,F8.2,A)') ' INITIALIZATION FINISHED! [',StartTime-StartTimeTotal,' sec ]'
  SWRITE(Unit_stdOut,fmt_sep)

  CALL exit_subregion("initialize")

  CALL functional%minimize()
  EndTime=GetTime()
  SWRITE(Unit_stdOut,'(A,2(F8.2,A))') ' FUNCTIONAL MINIMISATION FINISHED! [',EndTime-StartTime,' sec ], corresponding to [', &
       (EndTime-StartTime)/REAL(functional%minimizer%vars%iter,wp)*1.e3_wp,' msec/iteration ]'
  IF(ALLOCATED(functional))THEN
    CALL functional%free()
    DEALLOCATE(functional)
  END IF
  CALL enter_subregion("finalize")
  CALL FinalizeAnalyze()
  CALL FinalizeOutput()
  IF(dorestart) CALL FinalizeRestart()
  CALL FinalizeReadIn()
  ! do something
  IF(testlevel.GT.0)THEN
    SWRITE(UNIT_stdout,*)
    SWRITE(UNIT_stdOut,'(A)')"** TESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTEST **"
    SWRITE(UNIT_stdout,*)
    n_warnings_occured=n_warnings_occured +nFailedMsg
    IF(nFailedMsg.GT.0)THEN
      SWRITE(UNIT_stdOut,'(A)')"!!!!!!!   SOME TEST(S) FAILED, see tests.out !!!!!!!!!!!!!"
    ELSE
      SWRITE(UNIT_stdOut,'(A)')"   ...   ALL IMPLEMENTED TESTS SUCCESSFULL ..."
    END IF !nFailedMsg
    SWRITE(UNIT_stdout,*)
    SWRITE(UNIT_stdOut,'(A)')"** TESTESTESTESTESTESTESTESTESTESTESTESTESTESTESTEST **"
    SWRITE(UNIT_stdout,*)
    CLOSE(testUnit)
  END IF !testlevel
  CALL exit_subregion("finalize")
  EndTimeTotal=GetTime()
  SWRITE(Unit_stdOut,fmt_sep)
  CALL DATE_AND_TIME(values=TimeArray) ! get System time
  SWRITE(UNIT_stdOut,'(A,I4.2,"-",I2.2,"-",I2.2,1X,I2.2,":",I2.2,":",I2.2)') &
    '%%% Sys date : ',timeArray(1:3),timeArray(5:7)
  SWRITE(Unit_stdOut,fmt_sep)
  IF(n_warnings_occured.EQ.0)THEN
    SWRITE(Unit_stdOut,'(A,F8.2,A)') ' GVEC SUCESSFULLY FINISHED! [',EndTimeTotal-StartTimeTotal,' sec ]'
  ELSE
    SWRITE(Unit_stdOut,'(A,F8.2,A,I8,A)') ' GVEC FINISHED! [',EndTimeTotal-StartTimeTotal,' sec ], WITH ' , n_warnings_occured , ' WARNINGS!!!!'
  END IF
  SWRITE(Unit_stdOut,fmt_sep)
  __PERFOFF('main')
  IF(MPIRoot) THEN
  __PERFOUT('main')
  END IF
END SUBROUTINE rungvec