read an input solution and initialize U(0) (X1,X2,LA) of size X1/X2/LA_base , from an ascii .dat file if size of grid/X1/X2/LA not equal X1/X2/X3_base interpolate readin solution to the current base of Uin
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| character(len=255), | intent(in) | :: | fileString | |||
| class(t_sol_var_MHD3D), | intent(inout) | :: | U_r |
SUBROUTINE RestartFromState(fileString,U_r) ! MODULES USE MODgvec_Globals,ONLY:Unit_stdOut,GETFREEUNIT USE MODgvec_Output_Vars, ONLY:OutputLevel USE MODgvec_MHD3D_Vars, ONLY:X1_base,X2_base,LA_base,sgrid,hmap USE MODgvec_sol_var_MHD3D, ONLY:t_sol_var_MHD3D USE MODgvec_sgrid, ONLY: t_sgrid USE MODgvec_base, ONLY: t_base, base_new USE MODgvec_readState_Vars, ONLY:sgrid_r,X1_base_r,X2_base_r,LA_base_r,X1_r,X2_r,LA_r,outputLevel_r USE MODgvec_readState, ONLY: ReadState,Finalize_ReadState IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- ! INPUT VARIABLES CHARACTER(LEN=255) , INTENT(IN ) :: fileString !----------------------------------------------------------------------------------------------------------------------------------- ! OUTPUT VARIABLES CLASS(t_sol_var_MHD3D), INTENT(INOUT) :: U_r !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES LOGICAL :: sameGrid LOGICAL :: sameX1 ,sameX2 ,sameLA, changed !=================================================================================================================================== IF(.NOT.MPIroot) RETURN WRITE(UNIT_stdOut,'(A)')'RESTARTING FROM FILE ...' CALL ReadState(FileString,hmap_in=hmap) !update outputlevel WRITE(UNIT_stdOut,'(A,I4.4,A)')' outputLevel of restartFile: ',outputLevel_r outputLevel=outputLevel_r +1 CALL sgrid%compare(sgrid_r,sameGrid) CALL X1_base%compare(X1_base_r,sameX1) CALL X2_base%compare(X2_base_r,sameX2) CALL LA_base%compare(LA_base_r,sameLA) changed=.NOT.(sameX1.AND.sameX2.AND.sameLA) IF(changed)THEN WRITE(UNIT_stdOut,'(A,4(A,L1))') ' ... restart from other configuration: \n',' sameGrid= ',sameGrid, ', sameX1= ',sameX1,', sameX2= ',sameX2,', sameLA= ',sameLA ELSE WRITE(UNIT_stdOut,'(A)') ' ... restart from same configuration ... ' END IF CALL X1_base%change_base(X1_base_r,X1_r,U_r%X1) CALL X2_base%change_base(X2_base_r,X2_r,U_r%X2) CALL LA_base%change_base(LA_base_r,LA_r,U_r%LA) CALL Finalize_ReadState() WRITE(UNIT_stdOut,'(A)')'...DONE.' END SUBROUTINE RestartFromState