Initialize Module
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(t_functional_mhd3d), | intent(inout) | :: | sf |
SUBROUTINE InitSolutionMHD3D(sf) ! MODULES USE MODgvec_MHD3D_Vars , ONLY: which_init,init_LA,boundary_perturb,boundary_perturb_depth,boundary_perturb_type USE MODgvec_Restart_vars , ONLY: doRestart,RestartFile USE MODgvec_Restart , ONLY: RestartFromState USE MODgvec_Restart , ONLY: WriteState USE MODgvec_MHD3D_EvalFunc , ONLY: InitProfilesGP,EvalEnergy,EvalForce USE MODgvec_Analyze , ONLY: Analyze USE MODgvec_ReadInTools , ONLY: GETLOGICAL USE MODgvec_MPI , ONLY: par_Bcast,par_barrier IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- ! INPUT VARIABLES CLASS(t_functional_mhd3d), INTENT(INOUT) :: sf !----------------------------------------------------------------------------------------------------------------------------------- ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES INTEGER :: JacCheck !=================================================================================================================================== CALL par_barrier(beforeScreenOut=" INITIALIZE SOLUTION...",afterScreenOut=" ...") CALL enter_subregion("init-solution") ASSOCIATE(vars=>sf%minimizer%vars) IF(MPIroot) THEN IF(doRestart)THEN WRITE(UNIT_stdOut,'(4X,A)')'... restarting from file ... ' CALL RestartFromState(RestartFile,vars%dofs(0)) CALL InitSolution(vars%dofs(0),-1) ! (re-)apply BC and init LA (if init_LA is true) ELSE CALL InitSolution(vars%dofs(0),which_init) END IF IF(boundary_perturb)THEN CALL AddBoundaryPerturbation(vars%dofs(0),boundary_perturb_depth,boundary_perturb_type) END IF !boundary_perturb END IF !MPIroot CALL par_Bcast(vars%dofs(0)%X1,0) CALL par_Bcast(vars%dofs(0)%X2,0) CALL exit_subregion("init-solution") IF(init_LA) THEN CALL Init_LA_From_Solution(vars%dofs(0)) !BCast inside ELSE CALL par_Bcast(vars%dofs(0)%LA,0) END IF CALL vars%dofs(-1)%set_to(vars%dofs(0)) CALL vars%dofs(-2)%set_to(vars%dofs(0)) CALL vars%dofs(-3)%set_to(vars%dofs(0)) JacCheck=2 CALL InitProfilesGP() !evaluate profiles once at Gauss Points (on MPIroot + BCast) CALL enter_subregion("check-solution") vars%dofs(0)%W_MHD3D=EvalEnergy(vars%dofs(0),.TRUE.,JacCheck) IF(JacCheck.LE.-1)THEN CALL Analyze(0, vars%dofs(0), vars%force(0)) SELECT CASE(JacCheck) CASE(-1) CALL abort(__STAMP__,& "JACOBIAN WITH SIGN CHANGE FOUND AFTER INITIALIZATION!", & TypeInfo="InitializationError") CASE(-2) CALL abort(__STAMP__,& "RELATIVE JACOBIAN TOO SMALL AFTER INITIALIZATION!", & TypeInfo="InitializationError") CASE(-3) CALL abort(__STAMP__,& "ALL JACOBIANS NEGATIVE AFTER INITIALIZATION! (LEFT-HANDED COORDINATES)", & TypeInfo="InitializationError") END SELECT END IF CALL WriteState(vars%dofs(0),0) CALL EvalForce(vars%dofs(0),.FALSE.,JacCheck, vars%force(0)) SWRITE(UNIT_stdOut,'(8x,A,3E11.4)')'|Force|= ',SQRT(vars%force(0)%norm_2()) CALL Analyze(0, vars%dofs(0), vars%force(0)) END ASSOCIATE !vars CALL exit_subregion("check-solution") CALL par_barrier(afterScreenOut=" ...DONE") SWRITE(UNIT_stdOut,fmt_sep) END SUBROUTINE InitSolutionMHD3D