首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法显示我代码的最后一部分?最后几行代码的输出不会出现

有没有办法显示我代码的最后一部分?最后几行代码的输出不会出现
EN

Stack Overflow用户
提问于 2021-05-26 17:15:46
回答 1查看 49关注 0票数 0

我正在尝试使用gfortran编译器执行一段代码。为了编译,我使用:

代码语言:javascript
复制
gfortran -O3 hecese_seq.f90

为了执行,我使用:

代码语言:javascript
复制
./a.out

代码如下:

代码语言:javascript
复制
  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

对于测试收敛的部分,这是可以的,但我没有得到我想要显示的执行时间。我觉得最后一部分没有被执行。(可能是由于用于测试收敛的"Stop“)。

对于执行,我得到:

代码语言:javascript
复制
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

我向您展示了执行的一小部分(有很多值,所以不需要全部显示)。

我的问题是当它已经实现时,我不能显示执行时间。我是新来这个网站的,所以我希望你能帮助我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-26 17:50:21

你的结构基本上是

代码语言:javascript
复制
do

  !do something

  if (convergence) STOP

end do

这意味着程序在收敛时完全停止,你永远不会越过循环。

为了能够在循环后继续执行,您只需退出循环即可。

代码语言:javascript
复制
do

  !do something

  if (convergence) EXIT

end do

!further statements
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67701958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档