write an input solution (X1,X2,LA) to an ascii .dat file
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(t_sol_var_MHD3D), | intent(in) | :: | dofs_in | |||
| integer, | intent(in) | :: | fileID |
SUBROUTINE WriteStateToASCII(dofs_in,fileID) ! MODULES USE MODgvec_Globals,ONLY:Unit_stdOut,PI,TWOPI,GETFREEUNIT USE MODgvec_Output_Vars, ONLY:ProjectName,OutputLevel USE MODgvec_MHD3D_Vars, ONLY:X1_base,X2_base,LA_base,sgrid,which_hmap USE MODgvec_MHD3D_vars, ONLY: Phi_profile, chi_profile, pres_profile, iota_profile USE MODgvec_MPI, ONLY:par_Reduce USE MODgvec_sol_var_MHD3D, ONLY:t_sol_var_MHD3D USE MODgvec_MHD3D_evalFunc, ONLY: EvalTotals IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- ! INPUT VARIABLES CLASS(t_sol_var_MHD3D), INTENT(IN ) :: dofs_in INTEGER , INTENT(IN ) :: fileID !----------------------------------------------------------------------------------------------------------------------------------- ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES CHARACTER(LEN=255) :: fileString INTEGER :: ioUnit,iMode,is REAL(wp) :: vol,surfAvg,a_minor,r_major !=================================================================================================================================== __PERFON("output_state") SWRITE(FileString,'(A,"_State_",I4.4,"_",I8.8,".dat")')TRIM(ProjectName),outputLevel,fileID SWRITE(UNIT_stdOut,'(A)',ADVANCE='NO')' WRITE SOLUTION VARIABLE TO FILE "'//TRIM(FileString)//'" ...' !compute volume& poloidal surface average -> pi*aMinor^2=surfavg, surfavg*2*Pi*RMajor=volume CALL EvalTotals(dofs_in,vol,surfAvg) IF(MPIroot)THEN a_Minor = SQRT(surfAvg/PI) r_Major = vol/(TWOPI*surfAvg) __PERFON("write_state") WRITE(UNIT_stdOut,'(A)',ADVANCE='NO') ' ...' ioUnit=GETFREEUNIT() OPEN(UNIT = ioUnit ,& FILE = TRIM(FileString) ,& STATUS = 'REPLACE' ,& ACCESS = 'SEQUENTIAL' ) WRITE(ioUnit,'(A)')'## MHD3D Solution... outputLevel and fileID:' WRITE(ioUnit,'(I4.4,",",I8.8)')outputLevel,fileID WRITE(ioUnit,'(A)')'## grid: nElems, gridType #################################################################################' WRITE(ioUnit,'(*(I8,:,","))')sgrid%nElems,sgrid%grid_type WRITE(ioUnit,'(A)')'## grid: sp(0:nElems)' WRITE(ioUnit,'(*(E23.15,:,","))')X1_base%s%grid%sp(:) WRITE(ioUnit,'(A)')'## global: nfp,degGP,mn_nyq(2),hmap #######################################################################' WRITE(ioUnit,'(*(I8,:,","))')X1_base%f%nfp,X1_base%s%degGP,X1_base%f%mn_nyq,which_hmap WRITE(ioUnit,'(A)')'## X1_base: s%nbase,s%deg,s%continuity,f%modes,f%sin_cos,f%excl_mn_zero ###################################' WRITE(ioUnit,'(*(I8,:,","))')X1_base%s%nbase,X1_base%s%deg,X1_base%s%continuity,X1_base%f%modes,X1_base%f%sin_cos & ,MERGE(1,0,X1_base%f%exclude_mn_zero) WRITE(ioUnit,'(A)')'## X2_base: s%nbase,s%deg,s%continuity,f%modes,f%sin_cos,f%excl_mn_zero ###################################' WRITE(ioUnit,'(*(I8,:,","))')X2_base%s%nbase,X2_base%s%deg,X2_base%s%continuity,X2_base%f%modes,X2_base%f%sin_cos & ,MERGE(1,0,X2_base%f%exclude_mn_zero) WRITE(ioUnit,'(A)')'## LA_base: s%nbase,s%deg,s%continuity,f%modes,f%sin_cos,f%excl_mn_zero ###################################' WRITE(ioUnit,'(*(I8,:,","))')LA_base%s%nbase,LA_base%s%deg,LA_base%s%continuity,LA_base%f%modes,LA_base%f%sin_cos & ,MERGE(1,0,LA_base%f%exclude_mn_zero) WRITE(ioUnit,'(A)')'## X1: m,n,X1(1:nbase,iMode) ##############################################################################' DO iMode=1,X1_base%f%modes WRITE(ioUnit,'(2(I8,","),*(E23.15,:,","))')X1_base%f%Xmn(:,iMode),dofs_in%X1(:,iMode) END DO WRITE(ioUnit,'(A)')'## X2: m,n,X2(1:nbase,iMode) ##############################################################################' DO iMode=1,X2_base%f%modes WRITE(ioUnit,'(2(I8,","),*(E23.15,:,","))')X2_base%f%Xmn(:,iMode),dofs_in%X2(:,iMode) END DO WRITE(ioUnit,'(A)')'## LA: m,n,LA(1:nbase,iMode) ##############################################################################' DO iMode=1,LA_base%f%modes WRITE(ioUnit,'(2(I8,","),*(E23.15,:,","))')LA_base%f%Xmn(:,iMode),dofs_in%LA(:,iMode) END DO WRITE(ioUnit,'(A)')'## at X1_base IP point positions (size nBase): spos,phi,chi,iota,pressure ################################' ASSOCIATE(s_IP => X1_base%s%s_IP, & nBase => X1_base%s%nBase ) !write Profiles at Greville interpolation points s_IP(1:nBase) DO is=1,nBase WRITE(ioUnit,'(*(E23.15,:,","))')s_IP(is),Phi_profile%eval_at_rho(s_IP(is)), & chi_profile%eval_at_rho(s_IP(is)), & iota_profile%eval_at_rho(s_IP(is)),& pres_profile%eval_at_rho(s_IP(is)) END DO END ASSOCIATE WRITE(ioUnit,'(A)')'## a_minor,r_major,volume ################################################################################' WRITE(ioUnit,'(*(E23.15,:,","))')a_Minor,r_Major,vol CLOSE(ioUnit) WRITE(UNIT_stdOut,'(A)')'...DONE.' __PERFOFF("write_state") END IF !MPIroot __PERFOFF("output_state") END SUBROUTINE WriteStateToASCII