主题:很奇怪的变量值自己变现象
!****************************************************************************
!
! FUNCTION: withinplasmaApply ( dlg, id, callbacktype )
!
! PURPOSE: Dialog box callback for APPLY button
!
! COMMENTS:
!
!****************************************************************************
SUBROUTINE withinplasmaApply( dlg, control_name, callbacktype )
!DEC$ ATTRIBUTES DEFAULT :: withinplasmaApply
USE Boundary
USE user32
USE iflogm
USE kernel32
USE shell32,ONLY : shellexecute
IMPLICIT NONE
INCLUDE 'resource.fd'
TYPE (dialog) dlg
INTEGER(kind=4) :: control_name, callbacktype, local_callbacktype
INTEGER(kind=4) :: open_flag
LOGICAL(kind=4) :: alive, opened
!----------------------定义计算参数----------------------
CHARACTER(64) :: delta !步长,Δx
CHARACTER(64) :: omigap,muc,omigab !等离子体参数
CHARACTER(64) :: alpha,theta,phi,thetaout,phiout !入射角和出射角
CHARACTER(64) :: TimeStop,time_est !时间步参数
CHARACTER(64) :: tao,t0 !高斯脉冲参数
!----------------------定义临时参数----------------------
INTEGER(kind=4) :: tmp
INTEGER(kind=4) :: retint
LOGICAL(kind=4) :: retlog
INTEGER(kind=4) :: namelen, strlen
CHARACTER :: charTmp
CHARACTER(10) :: Version
CHARACTER(256) :: mesg
CHARACTER(256) :: mesg_title = '提示'C
CHARACTER(256) :: string
CHARACTER(256) :: path, dir
!--------------------------------------------------------------
local_callbacktype = callbacktype !防止编译器提示参数未引用
SELECT CASE (control_name)
CASE (IDC_BREAD)
call ReadFileData(path, namelen, strlen, open_flag)
IF(open_flag /= 0)THEN
retlog = DlgSet(dlg, IDC_EREAD, path)
!------设定当前工作路径------
retlog = SetCurrentDirectory(path(1:strlen-namelen))
retlog = DlgSet(dlg, IDC_EPATH, path(1:strlen-namelen))
OPEN(8,file=path( 1 : strlen - 1 ))
READ(8,*)Version
IF(Version /= 'Version2.1')THEN
mesg="该文件版本错误,请重新选择文件!"C
retint = MessageBox(GetForegroundWindow(),mesg, mesg_title, MB_OK.OR.MB_ICONEXCLAMATION)
RETURN
ENDIF
READ(8,*)delta
READ(8,*)Imin,Imax,Jmin,Jmax,Kmin,Kmax
READ(8,*)Itmin,Itmax,Jtmin,Jtmax,Ktmin,Ktmax
CLOSE(8)
Icmin=Itmin-5
Icmax=Itmax+5
Jcmin=Jtmin-5
Jcmax=Jtmax+5
Kcmin=Ktmin-5
Kcmax=Ktmax+5
Iomin=Itmin-10
Iomax=Itmax+10
Jomin=Jtmin-10
Jomax=Jtmax+10
Komin=Ktmin-10
Komax=Ktmax+10
!------时间步估算------
tmp=(Icmax-Icmin)**2+(Jcmax-Jcmin)**2+(Kcmax-Kcmin)**2
tmp=ANINT(6.0*sqrt(REAL(tmp))/0.5)
WRITE(string,*)tmp
retlog = DlgSet(dlg, IDC_EESTI, trim(adjustl(string)))
!------显示剖分步长-------
retlog = DlgSet(dlg, IDC_EDELTA, trim(adjustl(delta)))
END IF
RETURN
CASE (IDC_BOBJINF)
!CALL ChangeBoundaryDlg
RETURN
CASE ( IDC_BDRAW )
retint = ShellExecute(dlg%hwnd, "open", ".\\draw.exe", NULL, NULL, SW_SHOW )
RETURN
CASE (IDC_BREADPARA)
retlog = GetCurrentDirectory(256, dir)
CALL ReadParameters(dlg,path,open_flag)
IF(open_flag/=0)THEN
strLen = Index( path , char(0) )
open(8,file=path( 1 : strLen - 1 ))
read(8,*)charTmp
read(8,*)charTmp
read(8,*)alpha,theta,phi
read(8,*)charTmp
read(8,*)charTmp
read(8,*)tao,t0
read(8,*)charTmp
read(8,*)charTmp
read(8,*)omigap,omigab,muc
read(8,*)charTmp
read(8,*)charTmp
read(8,*)thetaout,phiout
read(8,*)charTmp
read(8,*)charTmp
read(8,*)TimeStop
close(8)
retlog = SetCurrentDirectory(dir)
!---------更新对话框中的各项参数-----
!----------高斯脉冲参数---------
retlog = DLGSET (dlg, IDC_ETAO, trim(adjustl(tao)))
retlog = DLGSET (dlg, IDC_ETZERO, trim(adjustl(t0)))
!----------观察角度-------------
retlog = DLGSET (dlg, IDC_ETHETAOUT, trim(adjustl(thetaout)))
retlog = DLGSET (dlg, IDC_EPHIOUT, trim(adjustl(phiout)))
!----------入射角度----------------
retlog = DLGSET (dlg, IDC_EALPHA, trim(adjustl(alpha)))
retlog = DLGSET (dlg, IDC_ETHETA, trim(adjustl(theta)))
retlog = DLGSET (dlg, IDC_EPHI, trim(adjustl(phi)))
!----------等离子体参数---------------
retlog = DLGSET (dlg, IDC_EMUC, trim(adjustl(muc)))
retlog = DLGSET (dlg, IDC_EOMIGAP, trim(adjustl(omigap)))
retlog = DLGSET (dlg, IDC_EOMIGAB, trim(adjustl(omigab)))
!----------其余参数----------
retlog = DLGSET (dlg, IDC_ESETSTEP, trim(adjustl(timestop)))
ENDIF
RETURN
CASE (IDC_BWRIPARA)
retlog = GetCurrentDirectory(256, dir)
CALL SaveParameters(dlg,path)
strLen = Index( path , CHAR(0) )
OPEN(8,file=path( 1 : strLen - 1 ))
!----------入射角度----------------
retlog = DLGGET (dlg, IDC_EALPHA, alpha)
retlog = DLGGET (dlg, IDC_ETHETA, theta)
retlog = DLGGET (dlg, IDC_EPHI, phi)
WRITE(8,*)"----------入射角度参数----------"
WRITE(8,'(1X,A5,3X,A5,3X,A3)')"alpha","theta","phi"
WRITE(8,'(1X,A5,3X,A5,3X,A3)')trim(adjustl(alpha)),trim(adjustl(theta)),trim(adjustl(phi))
!----------高斯脉冲参数---------
retlog = DLGGET (dlg, IDC_ETAO, tao)
retlog = DLGGET (dlg, IDC_ETZERO, t0)
WRITE(8,*)"----------高斯脉冲参数----------"
WRITE(8,'(1X,A3,3X,A2)')"tao","t0"
WRITE(8,'(1X,A3,3X,A4)')trim(adjustl(tao)),trim(adjustl(t0))
!----------等离子体参数---------------
retlog = DLGGET (dlg, IDC_EOMIGAP, omigap)
retlog = DLGGET (dlg, IDC_EOMIGAB, omigab)
retlog = DLGGET (dlg, IDC_EMUC, muc)
WRITE(8,*)"----------等离子体参数----------"
WRITE(8,'(1X,A6,3X,A6,3X,A3)')"omigap","omigab","muc"
WRITE(8,'(1X,A16,3X,A16,3X,A16)')trim(adjustl(omigap)),trim(adjustl(omigab)),trim(adjustl(muc))
!----------观察角度参数-------------
retlog = DLGGET (dlg, IDC_ETHETAOUT, thetaout)
retlog = DLGGET (dlg, IDC_EPHIOUT, phiout)
WRITE(8,*)"----------观察角度参数----------"
WRITE(8,'(1X,A8,3X,A6)')"thetaout","phiout"
WRITE(8,'(1X,A8,3X,A6)')trim(adjustl(thetaout)),trim(adjustl(phiout))
!----------时间步参数----------
retlog = DLGGET (dlg, IDC_ESETSTEP, TimeStop)
WRITE(8,*)"----------时间步参数----------"
WRITE(8,'(1X,A8)')"TimeStop"
WRITE(8,'(1X,A8)')trim(adjustl(TimeStop))
CLOSE(8)
retlog = SetCurrentDirectory(dir)
retlog = MessageBox(dlg%hwnd,'数据保存成功!'C, '提示'C,MB_OK)
RETURN
CASE (IDC_BEGINCAL)
OPEN(8,file='parameters.txt')
!----------边界条件----------------
WRITE(8,*)"**********连接边界**********"
WRITE(8,*)Icmin,Icmax,Jcmin,Jcmax,Kcmin,Kcmax
WRITE(8,*)"**********输出边界**********"
WRITE(8,*)Iomin,Iomax,Jomin,Jomax,Komin,Komax
!----------入射角度----------------
retlog = DLGGET (dlg, IDC_EALPHA, alpha)
retlog = DLGGET (dlg, IDC_ETHETA, theta)
retlog = DLGGET (dlg, IDC_EPHI, phi)
WRITE(8,*)"**********入射角度参数**********"
WRITE(8,'(1X,A5,3X,A5,3X,A3)')"alpha","theta","phi"
WRITE(8,'(1X,A5,3X,A5,3X,A3)')trim(adjustl(alpha)),trim(adjustl(theta)),trim(adjustl(phi))
!----------高斯脉冲参数---------
retlog = DLGGET (dlg, IDC_ETAO, tao)
retlog = DLGGET (dlg, IDC_ETZERO, t0)
WRITE(8,*)"**********高斯脉冲参数**********"
WRITE(8,'(1X,A3,3X,A2)')"tao","t0"
WRITE(8,'(1X,A3,3X,A4)')trim(adjustl(tao)),trim(adjustl(t0))
!----------等离子体参数---------------
retlog = DLGGET (dlg, IDC_EOMIGAP, omigap)
retlog = DLGGET (dlg, IDC_EOMIGAB, omigab)
retlog = DLGGET (dlg, IDC_EMUC, muc)
WRITE(8,*)"**********等离子体参数**********"
WRITE(8,'(1X,A6,3X,A6,3X,A3)')"omigap","omigab","muc"
WRITE(8,'(1X,A16,3X,A16,3X,A16)')trim(adjustl(omigap)),trim(adjustl(omigab)),trim(adjustl(muc))
!----------观察角度参数-------------
retlog = DLGGET (dlg, IDC_ETHETAOUT, thetaout)
retlog = DLGGET (dlg, IDC_EPHIOUT, phiout)
WRITE(8,*)"**********观察角度参数**********"
WRITE(8,'(1X,A8,3X,A6)')"thetaout","phiout"
WRITE(8,'(1X,A8,3X,A6)')trim(adjustl(thetaout)),trim(adjustl(phiout))
!----------时间步参数----------
retlog = DLGGET (dlg, IDC_ESETSTEP, TimeStop)
WRITE(8,*)"**********时间步参数**********"
WRITE(8,'(1X,A8)')"TimeStop"
WRITE(8,'(1X,A8)')trim(adjustl(TimeStop))
CLOSE(8)
!CALL CalProgressDlg
RETURN
CASE (IDM_EXIT)
CALL PostQuitMessage(0)
ENDSELECT
END SUBROUTINE withinplasmaApply
!
! FUNCTION: withinplasmaApply ( dlg, id, callbacktype )
!
! PURPOSE: Dialog box callback for APPLY button
!
! COMMENTS:
!
!****************************************************************************
SUBROUTINE withinplasmaApply( dlg, control_name, callbacktype )
!DEC$ ATTRIBUTES DEFAULT :: withinplasmaApply
USE Boundary
USE user32
USE iflogm
USE kernel32
USE shell32,ONLY : shellexecute
IMPLICIT NONE
INCLUDE 'resource.fd'
TYPE (dialog) dlg
INTEGER(kind=4) :: control_name, callbacktype, local_callbacktype
INTEGER(kind=4) :: open_flag
LOGICAL(kind=4) :: alive, opened
!----------------------定义计算参数----------------------
CHARACTER(64) :: delta !步长,Δx
CHARACTER(64) :: omigap,muc,omigab !等离子体参数
CHARACTER(64) :: alpha,theta,phi,thetaout,phiout !入射角和出射角
CHARACTER(64) :: TimeStop,time_est !时间步参数
CHARACTER(64) :: tao,t0 !高斯脉冲参数
!----------------------定义临时参数----------------------
INTEGER(kind=4) :: tmp
INTEGER(kind=4) :: retint
LOGICAL(kind=4) :: retlog
INTEGER(kind=4) :: namelen, strlen
CHARACTER :: charTmp
CHARACTER(10) :: Version
CHARACTER(256) :: mesg
CHARACTER(256) :: mesg_title = '提示'C
CHARACTER(256) :: string
CHARACTER(256) :: path, dir
!--------------------------------------------------------------
local_callbacktype = callbacktype !防止编译器提示参数未引用
SELECT CASE (control_name)
CASE (IDC_BREAD)
call ReadFileData(path, namelen, strlen, open_flag)
IF(open_flag /= 0)THEN
retlog = DlgSet(dlg, IDC_EREAD, path)
!------设定当前工作路径------
retlog = SetCurrentDirectory(path(1:strlen-namelen))
retlog = DlgSet(dlg, IDC_EPATH, path(1:strlen-namelen))
OPEN(8,file=path( 1 : strlen - 1 ))
READ(8,*)Version
IF(Version /= 'Version2.1')THEN
mesg="该文件版本错误,请重新选择文件!"C
retint = MessageBox(GetForegroundWindow(),mesg, mesg_title, MB_OK.OR.MB_ICONEXCLAMATION)
RETURN
ENDIF
READ(8,*)delta
READ(8,*)Imin,Imax,Jmin,Jmax,Kmin,Kmax
READ(8,*)Itmin,Itmax,Jtmin,Jtmax,Ktmin,Ktmax
CLOSE(8)
Icmin=Itmin-5
Icmax=Itmax+5
Jcmin=Jtmin-5
Jcmax=Jtmax+5
Kcmin=Ktmin-5
Kcmax=Ktmax+5
Iomin=Itmin-10
Iomax=Itmax+10
Jomin=Jtmin-10
Jomax=Jtmax+10
Komin=Ktmin-10
Komax=Ktmax+10
!------时间步估算------
tmp=(Icmax-Icmin)**2+(Jcmax-Jcmin)**2+(Kcmax-Kcmin)**2
tmp=ANINT(6.0*sqrt(REAL(tmp))/0.5)
WRITE(string,*)tmp
retlog = DlgSet(dlg, IDC_EESTI, trim(adjustl(string)))
!------显示剖分步长-------
retlog = DlgSet(dlg, IDC_EDELTA, trim(adjustl(delta)))
END IF
RETURN
CASE (IDC_BOBJINF)
!CALL ChangeBoundaryDlg
RETURN
CASE ( IDC_BDRAW )
retint = ShellExecute(dlg%hwnd, "open", ".\\draw.exe", NULL, NULL, SW_SHOW )
RETURN
CASE (IDC_BREADPARA)
retlog = GetCurrentDirectory(256, dir)
CALL ReadParameters(dlg,path,open_flag)
IF(open_flag/=0)THEN
strLen = Index( path , char(0) )
open(8,file=path( 1 : strLen - 1 ))
read(8,*)charTmp
read(8,*)charTmp
read(8,*)alpha,theta,phi
read(8,*)charTmp
read(8,*)charTmp
read(8,*)tao,t0
read(8,*)charTmp
read(8,*)charTmp
read(8,*)omigap,omigab,muc
read(8,*)charTmp
read(8,*)charTmp
read(8,*)thetaout,phiout
read(8,*)charTmp
read(8,*)charTmp
read(8,*)TimeStop
close(8)
retlog = SetCurrentDirectory(dir)
!---------更新对话框中的各项参数-----
!----------高斯脉冲参数---------
retlog = DLGSET (dlg, IDC_ETAO, trim(adjustl(tao)))
retlog = DLGSET (dlg, IDC_ETZERO, trim(adjustl(t0)))
!----------观察角度-------------
retlog = DLGSET (dlg, IDC_ETHETAOUT, trim(adjustl(thetaout)))
retlog = DLGSET (dlg, IDC_EPHIOUT, trim(adjustl(phiout)))
!----------入射角度----------------
retlog = DLGSET (dlg, IDC_EALPHA, trim(adjustl(alpha)))
retlog = DLGSET (dlg, IDC_ETHETA, trim(adjustl(theta)))
retlog = DLGSET (dlg, IDC_EPHI, trim(adjustl(phi)))
!----------等离子体参数---------------
retlog = DLGSET (dlg, IDC_EMUC, trim(adjustl(muc)))
retlog = DLGSET (dlg, IDC_EOMIGAP, trim(adjustl(omigap)))
retlog = DLGSET (dlg, IDC_EOMIGAB, trim(adjustl(omigab)))
!----------其余参数----------
retlog = DLGSET (dlg, IDC_ESETSTEP, trim(adjustl(timestop)))
ENDIF
RETURN
CASE (IDC_BWRIPARA)
retlog = GetCurrentDirectory(256, dir)
CALL SaveParameters(dlg,path)
strLen = Index( path , CHAR(0) )
OPEN(8,file=path( 1 : strLen - 1 ))
!----------入射角度----------------
retlog = DLGGET (dlg, IDC_EALPHA, alpha)
retlog = DLGGET (dlg, IDC_ETHETA, theta)
retlog = DLGGET (dlg, IDC_EPHI, phi)
WRITE(8,*)"----------入射角度参数----------"
WRITE(8,'(1X,A5,3X,A5,3X,A3)')"alpha","theta","phi"
WRITE(8,'(1X,A5,3X,A5,3X,A3)')trim(adjustl(alpha)),trim(adjustl(theta)),trim(adjustl(phi))
!----------高斯脉冲参数---------
retlog = DLGGET (dlg, IDC_ETAO, tao)
retlog = DLGGET (dlg, IDC_ETZERO, t0)
WRITE(8,*)"----------高斯脉冲参数----------"
WRITE(8,'(1X,A3,3X,A2)')"tao","t0"
WRITE(8,'(1X,A3,3X,A4)')trim(adjustl(tao)),trim(adjustl(t0))
!----------等离子体参数---------------
retlog = DLGGET (dlg, IDC_EOMIGAP, omigap)
retlog = DLGGET (dlg, IDC_EOMIGAB, omigab)
retlog = DLGGET (dlg, IDC_EMUC, muc)
WRITE(8,*)"----------等离子体参数----------"
WRITE(8,'(1X,A6,3X,A6,3X,A3)')"omigap","omigab","muc"
WRITE(8,'(1X,A16,3X,A16,3X,A16)')trim(adjustl(omigap)),trim(adjustl(omigab)),trim(adjustl(muc))
!----------观察角度参数-------------
retlog = DLGGET (dlg, IDC_ETHETAOUT, thetaout)
retlog = DLGGET (dlg, IDC_EPHIOUT, phiout)
WRITE(8,*)"----------观察角度参数----------"
WRITE(8,'(1X,A8,3X,A6)')"thetaout","phiout"
WRITE(8,'(1X,A8,3X,A6)')trim(adjustl(thetaout)),trim(adjustl(phiout))
!----------时间步参数----------
retlog = DLGGET (dlg, IDC_ESETSTEP, TimeStop)
WRITE(8,*)"----------时间步参数----------"
WRITE(8,'(1X,A8)')"TimeStop"
WRITE(8,'(1X,A8)')trim(adjustl(TimeStop))
CLOSE(8)
retlog = SetCurrentDirectory(dir)
retlog = MessageBox(dlg%hwnd,'数据保存成功!'C, '提示'C,MB_OK)
RETURN
CASE (IDC_BEGINCAL)
OPEN(8,file='parameters.txt')
!----------边界条件----------------
WRITE(8,*)"**********连接边界**********"
WRITE(8,*)Icmin,Icmax,Jcmin,Jcmax,Kcmin,Kcmax
WRITE(8,*)"**********输出边界**********"
WRITE(8,*)Iomin,Iomax,Jomin,Jomax,Komin,Komax
!----------入射角度----------------
retlog = DLGGET (dlg, IDC_EALPHA, alpha)
retlog = DLGGET (dlg, IDC_ETHETA, theta)
retlog = DLGGET (dlg, IDC_EPHI, phi)
WRITE(8,*)"**********入射角度参数**********"
WRITE(8,'(1X,A5,3X,A5,3X,A3)')"alpha","theta","phi"
WRITE(8,'(1X,A5,3X,A5,3X,A3)')trim(adjustl(alpha)),trim(adjustl(theta)),trim(adjustl(phi))
!----------高斯脉冲参数---------
retlog = DLGGET (dlg, IDC_ETAO, tao)
retlog = DLGGET (dlg, IDC_ETZERO, t0)
WRITE(8,*)"**********高斯脉冲参数**********"
WRITE(8,'(1X,A3,3X,A2)')"tao","t0"
WRITE(8,'(1X,A3,3X,A4)')trim(adjustl(tao)),trim(adjustl(t0))
!----------等离子体参数---------------
retlog = DLGGET (dlg, IDC_EOMIGAP, omigap)
retlog = DLGGET (dlg, IDC_EOMIGAB, omigab)
retlog = DLGGET (dlg, IDC_EMUC, muc)
WRITE(8,*)"**********等离子体参数**********"
WRITE(8,'(1X,A6,3X,A6,3X,A3)')"omigap","omigab","muc"
WRITE(8,'(1X,A16,3X,A16,3X,A16)')trim(adjustl(omigap)),trim(adjustl(omigab)),trim(adjustl(muc))
!----------观察角度参数-------------
retlog = DLGGET (dlg, IDC_ETHETAOUT, thetaout)
retlog = DLGGET (dlg, IDC_EPHIOUT, phiout)
WRITE(8,*)"**********观察角度参数**********"
WRITE(8,'(1X,A8,3X,A6)')"thetaout","phiout"
WRITE(8,'(1X,A8,3X,A6)')trim(adjustl(thetaout)),trim(adjustl(phiout))
!----------时间步参数----------
retlog = DLGGET (dlg, IDC_ESETSTEP, TimeStop)
WRITE(8,*)"**********时间步参数**********"
WRITE(8,'(1X,A8)')"TimeStop"
WRITE(8,'(1X,A8)')trim(adjustl(TimeStop))
CLOSE(8)
!CALL CalProgressDlg
RETURN
CASE (IDM_EXIT)
CALL PostQuitMessage(0)
ENDSELECT
END SUBROUTINE withinplasmaApply