有没有办法显示我的代码的最后一部分?最后代码行的输出没有出现
Is there a way to display the last part of my code ? The output of the last code lines doesn't appear
我正在尝试使用 gfortran 编译器执行代码。
为了编译,我使用:
gfortran -O3 hecese_seq.f90
为了执行,我使用:
./a.out
代码如下:
compteur_tempo=0
do while (.not.fin)
compteur_tempo=compteur_tempo+1
duree = duree+dt
do pas=1,2
tab0(:,:) =tab(:,:)
!----------- CE/SE
if(pas.eq.1)then
do i=1,cpt,2
flux(i)= tab0(i,3)*grad_x_u(i)
sm(i)= dt/(dx)*flux(i) + dt**2/(4.0d0*dx)*grad_t_f(i) + dx/4.0*grad_x_u(i)
enddo
do i=2,cpt-1,2
tab(i,2)= 0.5d0*( tab0(i+1,2)+tab0(i-1,2)+sm(i-1)-sm(i+1)) !-------Coord paires
enddo
else
do i=2,cpt,2
flux(i)= tab0(i,3)*grad_x_u(i)
sm(i)= dt/(dx)*flux(i) + dt**2/(4.0d0*dx)*grad_t_f(i) + dx/4.0*grad_x_u(i)
enddo
do i=3,cpt-1,2
tab(i,2)= 0.5d0*( tab0(i+1,2)+tab0(i-1,2)+sm(i-1)-sm(i+1)) !-------Coord impaires
enddo
endif
!-------------- Traitement des interfaces - continuité du flux par la conductivité thermique
do j=2,nb_element
i = p_element(j)
tab(i,2)=(tab(i-1,7)*tab(i-1,2)+tab(i+1,7)*tab(i+1,2))/(tab(i-1,7)+tab(i+1,7))
enddo
!-------------- Conditions cyclique sur la température
tab(1,2)= 0.5d0*( tab0(2,2)+tab0(cpt-1,2)+sm(cpt-1)-sm(2))!2*dt/dx*(flux(1))-sm(2)-sm(1)+tab(2,2)!tab(2,2)!2000/T_ref!
tab(cpt,2)=tab(1,2)!(-2*dt/dx)*flux(cpt)+sm(cpt-1)+sm(cpt)+tabi(cpt-1,2)!2000/T_ref!
goto 113
!---------------Resolution par Newton raphson - Actuellement inutilisé, je le laisse au cas où
error=0.0d0
test1=.true.
itermax =10
rhs(:)=tab(:,2)
iter =0
eps=1.0d-10
DeltaT=1.0d-10
sh(:)=0
f1(:)=0
f2(:)=0
delt(:)=0
do while((test1).and.(iter.le.itermax))
iter = iter+1
Call GRAD
do j=pas+1,cpt-1,2
sh(j)=tab(j,7)*tab(j,8)*grad_x_u(j)
fluxnr(j) = -(tab(j,2)+(dt/2)*sh(j)-rhs(j))
Delt(j)=fluxnr(j)
tab(j,2) =tab(j,2)+delt(j)
enddo
error=0.0d0
do j=2,cpt-1!,2!1,nb_element!
error = max(error, abs(delt(j)))
enddo
if(iter.eq.itermax)then
write(6,*)'itermax'
endif
test1=abs(error).ge.eps!.or.dabs(error).eq.0.0d0
enddo
!---------------Resolution des gradients
113 continue
CALL GRAD
do i=pas+1,cpt-1,2
grad_x_f(i)= tab(i,3)*(tab(i+1,2)-2.0*tab(i,2)+tab(i-1,2))/(dx**2)!(Différence centrée deuxième ordre (dérivée seconde de la Temp)
grad_t_u(i) = -grad_x_f(i)+tab(i,7)*grad_x_u(i)*tab(i,8)/2!(Terme source ajouté ici seulement - Légère influence sur les interfaces)
grad_t_f(i) = grad_x_f(i)*tab(i,3)/(cfl*dx)!(Terme en dx/dt remplacé par tab(i,3)/(cfl*dx))
enddo
!------ Conditions cyclique - Gradients
grad_x_f(cpt)=grad_x_f(cpt-1)
grad_x_f(1)=grad_x_f(cpt)
grad_t_u(cpt)=grad_t_u(cpt-1)
grad_t_u(1)=grad_t_u(cpt)
grad_t_f(cpt)=grad_t_f(cpt-1)
grad_t_f(1)=grad_t_f(cpt)
!------ Gradients moyennés sur l'interface (histoire de limiter les discontinuités)
do j=2,nb_element
i = p_element(j)
grad_x_f(i)=(grad_x_f(i+1)+grad_x_f(i-1))/2
grad_t_u(i)=(grad_t_u(i+1)+grad_t_u(i-1))/2
grad_t_f(i)=(grad_t_f(i+1)+grad_t_f(i-1))/2
enddo
enddo
!-------------- Test de la fonte de l'electrolite
test = .false.
i_ca_el = p_element(num)
i_el_an = p_element(num+1)
i=i_ca_el
do while(((i.lt.i_el_an-1).and.(.not.test)))
test=tab(i,2).le.(T_fonte)!20000)! Choix entre température d'équilibre ou température de fonte
i = i+1
enddo
if(i.ge.i_el_an-1)convergence =.true.
if(convergence) then
write(6,*)'Convergence',i, i_ca_el,i_el_an-1, duree*time_ref
else
write(6,'(''Non Convergence'', 3i5,3f18.12)'),i, i_ca_el,i_el_an-1,tab(i,2)*t_ref,duree*time_ref
endif
if(.not.stock)then
if( convergence.and.(duree.lt.duree_totale))then
open(10,file='test'//char(ww+48)//'.dat', status='unknown')
do i=1,cpt
write(10,*)tab(i,1)*l_ref,tab(i,2)*t_ref
enddo
close(10)
stock=.true.
stop
endif
endif
fin=duree.ge.duree_totale
pas_stockage = pas_stockage+dt
if(pas_stockage.ge.intervalle_stockage)then
do i=1,nb_probe
write(w_output(i),*)duree*time_ref, tab(probe_indice(i),2)*t_ref
enddo
pas_stockage =0.0d0
endif
enddo
!execution time
CALL CPU_TIME(TIME_END)
call system_clock(count=t2, count_rate=ir)
write(*,*)" duree = ",duree,duree*time_ref
write(*,*)"compteur temporel ",compteur_tempo
write(*,*)"cpt ",cpt
write(*,*)" temps d’excecution du programme",TIME_END-TIME_START
temps=real(t2 - t1 ,kind =8)/real(ir,kind =8)
write (*,*) "temps d’exe du programme:",temps
do i=1,nb_probe
close(w_output(i))
enddo
对于测试收敛的部分,还可以,但是我没有得到我想要显示的执行时间。我觉得最后一部分没有被执行。 (可能是由于用于测试收敛的“停止”)。
对于执行,我得到:
Non Convergence 222 184 303 699.993372185986 0.340103428568
Non Convergence 222 184 303 699.993948217854 0.340103999997
Non Convergence 222 184 303 699.994524248306 0.340104571426
Non Convergence 222 184 303 699.995100277341 0.340105142854
Non Convergence 222 184 303 699.995676304960 0.340105714283
Non Convergence 222 184 303 699.996252331162 0.340106285711
Non Convergence 222 184 303 699.996828355948 0.340106857140
Non Convergence 222 184 303 699.997404379318 0.340107428568
Non Convergence 222 184 303 699.997980401271 0.340107999997
Non Convergence 222 184 303 699.998556421807 0.340108571426
Non Convergence 222 184 303 699.999132440928 0.340109142854
Non Convergence 222 184 303 699.999708458632 0.340109714283
Non Convergence 222 184 303 700.000284474919 0.340110285711
Non Convergence 222 184 303 700.000860489791 0.340110857140
Non Convergence 222 184 303 700.001436503245 0.340111428568
Non Convergence 222 184 303 700.002012515283 0.340111999997
Non Convergence 222 184 303 700.002588525905 0.340112571426
Non Convergence 222 184 303 700.003164535111 0.340113142854
Non Convergence 222 184 303 700.003740542900 0.340113714283
Non Convergence 222 184 303 700.004316549273 0.340114285711
Non Convergence 222 184 303 700.004892554230 0.340114857140
Non Convergence 222 184 303 700.005468557770 0.340115428568
Non Convergence 222 184 303 700.006044559894 0.340115999997
Non Convergence 222 184 303 700.006620560601 0.340116571426
Non Convergence 222 184 303 700.007196559892 0.340117142854
Convergence 303 184 303 0.34011771428275706
Note: The following floating-point exceptions are signalling: IEEE_UNDERFLOW_FLAG IEEE_DENORMAL
我给你展示了执行的一小部分(有很多值所以不需要全部展示)。
我的问题是执行时间已经执行,无法显示。我是这个网站的新手,所以我希望你能帮助我。
你的结构基本上是
do
!do something
if (convergence) STOP
end do
这意味着程序在收敛时完全停止,您永远无法通过循环。
为了能够在循环后继续执行,您只想退出循环。
do
!do something
if (convergence) EXIT
end do
!further statements
我正在尝试使用 gfortran 编译器执行代码。 为了编译,我使用:
gfortran -O3 hecese_seq.f90
为了执行,我使用:
./a.out
代码如下:
compteur_tempo=0
do while (.not.fin)
compteur_tempo=compteur_tempo+1
duree = duree+dt
do pas=1,2
tab0(:,:) =tab(:,:)
!----------- CE/SE
if(pas.eq.1)then
do i=1,cpt,2
flux(i)= tab0(i,3)*grad_x_u(i)
sm(i)= dt/(dx)*flux(i) + dt**2/(4.0d0*dx)*grad_t_f(i) + dx/4.0*grad_x_u(i)
enddo
do i=2,cpt-1,2
tab(i,2)= 0.5d0*( tab0(i+1,2)+tab0(i-1,2)+sm(i-1)-sm(i+1)) !-------Coord paires
enddo
else
do i=2,cpt,2
flux(i)= tab0(i,3)*grad_x_u(i)
sm(i)= dt/(dx)*flux(i) + dt**2/(4.0d0*dx)*grad_t_f(i) + dx/4.0*grad_x_u(i)
enddo
do i=3,cpt-1,2
tab(i,2)= 0.5d0*( tab0(i+1,2)+tab0(i-1,2)+sm(i-1)-sm(i+1)) !-------Coord impaires
enddo
endif
!-------------- Traitement des interfaces - continuité du flux par la conductivité thermique
do j=2,nb_element
i = p_element(j)
tab(i,2)=(tab(i-1,7)*tab(i-1,2)+tab(i+1,7)*tab(i+1,2))/(tab(i-1,7)+tab(i+1,7))
enddo
!-------------- Conditions cyclique sur la température
tab(1,2)= 0.5d0*( tab0(2,2)+tab0(cpt-1,2)+sm(cpt-1)-sm(2))!2*dt/dx*(flux(1))-sm(2)-sm(1)+tab(2,2)!tab(2,2)!2000/T_ref!
tab(cpt,2)=tab(1,2)!(-2*dt/dx)*flux(cpt)+sm(cpt-1)+sm(cpt)+tabi(cpt-1,2)!2000/T_ref!
goto 113
!---------------Resolution par Newton raphson - Actuellement inutilisé, je le laisse au cas où
error=0.0d0
test1=.true.
itermax =10
rhs(:)=tab(:,2)
iter =0
eps=1.0d-10
DeltaT=1.0d-10
sh(:)=0
f1(:)=0
f2(:)=0
delt(:)=0
do while((test1).and.(iter.le.itermax))
iter = iter+1
Call GRAD
do j=pas+1,cpt-1,2
sh(j)=tab(j,7)*tab(j,8)*grad_x_u(j)
fluxnr(j) = -(tab(j,2)+(dt/2)*sh(j)-rhs(j))
Delt(j)=fluxnr(j)
tab(j,2) =tab(j,2)+delt(j)
enddo
error=0.0d0
do j=2,cpt-1!,2!1,nb_element!
error = max(error, abs(delt(j)))
enddo
if(iter.eq.itermax)then
write(6,*)'itermax'
endif
test1=abs(error).ge.eps!.or.dabs(error).eq.0.0d0
enddo
!---------------Resolution des gradients
113 continue
CALL GRAD
do i=pas+1,cpt-1,2
grad_x_f(i)= tab(i,3)*(tab(i+1,2)-2.0*tab(i,2)+tab(i-1,2))/(dx**2)!(Différence centrée deuxième ordre (dérivée seconde de la Temp)
grad_t_u(i) = -grad_x_f(i)+tab(i,7)*grad_x_u(i)*tab(i,8)/2!(Terme source ajouté ici seulement - Légère influence sur les interfaces)
grad_t_f(i) = grad_x_f(i)*tab(i,3)/(cfl*dx)!(Terme en dx/dt remplacé par tab(i,3)/(cfl*dx))
enddo
!------ Conditions cyclique - Gradients
grad_x_f(cpt)=grad_x_f(cpt-1)
grad_x_f(1)=grad_x_f(cpt)
grad_t_u(cpt)=grad_t_u(cpt-1)
grad_t_u(1)=grad_t_u(cpt)
grad_t_f(cpt)=grad_t_f(cpt-1)
grad_t_f(1)=grad_t_f(cpt)
!------ Gradients moyennés sur l'interface (histoire de limiter les discontinuités)
do j=2,nb_element
i = p_element(j)
grad_x_f(i)=(grad_x_f(i+1)+grad_x_f(i-1))/2
grad_t_u(i)=(grad_t_u(i+1)+grad_t_u(i-1))/2
grad_t_f(i)=(grad_t_f(i+1)+grad_t_f(i-1))/2
enddo
enddo
!-------------- Test de la fonte de l'electrolite
test = .false.
i_ca_el = p_element(num)
i_el_an = p_element(num+1)
i=i_ca_el
do while(((i.lt.i_el_an-1).and.(.not.test)))
test=tab(i,2).le.(T_fonte)!20000)! Choix entre température d'équilibre ou température de fonte
i = i+1
enddo
if(i.ge.i_el_an-1)convergence =.true.
if(convergence) then
write(6,*)'Convergence',i, i_ca_el,i_el_an-1, duree*time_ref
else
write(6,'(''Non Convergence'', 3i5,3f18.12)'),i, i_ca_el,i_el_an-1,tab(i,2)*t_ref,duree*time_ref
endif
if(.not.stock)then
if( convergence.and.(duree.lt.duree_totale))then
open(10,file='test'//char(ww+48)//'.dat', status='unknown')
do i=1,cpt
write(10,*)tab(i,1)*l_ref,tab(i,2)*t_ref
enddo
close(10)
stock=.true.
stop
endif
endif
fin=duree.ge.duree_totale
pas_stockage = pas_stockage+dt
if(pas_stockage.ge.intervalle_stockage)then
do i=1,nb_probe
write(w_output(i),*)duree*time_ref, tab(probe_indice(i),2)*t_ref
enddo
pas_stockage =0.0d0
endif
enddo
!execution time
CALL CPU_TIME(TIME_END)
call system_clock(count=t2, count_rate=ir)
write(*,*)" duree = ",duree,duree*time_ref
write(*,*)"compteur temporel ",compteur_tempo
write(*,*)"cpt ",cpt
write(*,*)" temps d’excecution du programme",TIME_END-TIME_START
temps=real(t2 - t1 ,kind =8)/real(ir,kind =8)
write (*,*) "temps d’exe du programme:",temps
do i=1,nb_probe
close(w_output(i))
enddo
对于测试收敛的部分,还可以,但是我没有得到我想要显示的执行时间。我觉得最后一部分没有被执行。 (可能是由于用于测试收敛的“停止”)。
对于执行,我得到:
Non Convergence 222 184 303 699.993372185986 0.340103428568
Non Convergence 222 184 303 699.993948217854 0.340103999997
Non Convergence 222 184 303 699.994524248306 0.340104571426
Non Convergence 222 184 303 699.995100277341 0.340105142854
Non Convergence 222 184 303 699.995676304960 0.340105714283
Non Convergence 222 184 303 699.996252331162 0.340106285711
Non Convergence 222 184 303 699.996828355948 0.340106857140
Non Convergence 222 184 303 699.997404379318 0.340107428568
Non Convergence 222 184 303 699.997980401271 0.340107999997
Non Convergence 222 184 303 699.998556421807 0.340108571426
Non Convergence 222 184 303 699.999132440928 0.340109142854
Non Convergence 222 184 303 699.999708458632 0.340109714283
Non Convergence 222 184 303 700.000284474919 0.340110285711
Non Convergence 222 184 303 700.000860489791 0.340110857140
Non Convergence 222 184 303 700.001436503245 0.340111428568
Non Convergence 222 184 303 700.002012515283 0.340111999997
Non Convergence 222 184 303 700.002588525905 0.340112571426
Non Convergence 222 184 303 700.003164535111 0.340113142854
Non Convergence 222 184 303 700.003740542900 0.340113714283
Non Convergence 222 184 303 700.004316549273 0.340114285711
Non Convergence 222 184 303 700.004892554230 0.340114857140
Non Convergence 222 184 303 700.005468557770 0.340115428568
Non Convergence 222 184 303 700.006044559894 0.340115999997
Non Convergence 222 184 303 700.006620560601 0.340116571426
Non Convergence 222 184 303 700.007196559892 0.340117142854
Convergence 303 184 303 0.34011771428275706
Note: The following floating-point exceptions are signalling: IEEE_UNDERFLOW_FLAG IEEE_DENORMAL
我给你展示了执行的一小部分(有很多值所以不需要全部展示)。
我的问题是执行时间已经执行,无法显示。我是这个网站的新手,所以我希望你能帮助我。
你的结构基本上是
do
!do something
if (convergence) STOP
end do
这意味着程序在收敛时完全停止,您永远无法通过循环。
为了能够在循环后继续执行,您只想退出循环。
do
!do something
if (convergence) EXIT
end do
!further statements