wx_yxZLpy1y 发表于 2020-10-16 10:59:51

求大神解答,什么问题

      subroutine single_step(itimestep, dt, ntotal, hsml, mass, x, vx,
   &         u, s,rho, p, t, tdsdt, dx, dvx, du, ds, drho,itype, av)

c----------------------------------------------------------------------
c   Subroutine to determine the right hand side of a differential
c   equation in a single step for performing time integration

c   In this routine and its subroutines the SPH algorithms are performed.
c   itimestep: Current timestep number                           
c   dt       : Timestep                                          
c   ntotal   :Number of particles                              
c   hsml   :Smoothing Length                                 
c   mass   :Particle masses                                 
c   x      :Particle position                                 
c   vx       :Particle velocity                                 
c   u      :Particle internal energy                        
c   s      :Particle entropy (not used here)                  
c   rho      :Density                                       
c   p      :Pressure                                       
c   t      :Temperature                                 
c   tdsdt    :Production of viscous entropy t*ds/dt            
c   dx       :dx = vx = dx/dt                                 
c   dvx      :dvx = dvx/dt, force per unit mass               
c   du       :du= du/dt                                    
c   ds       :ds= ds/dt                                       
c   drho   :drho =drho/dt                                 
c   itype    :Type of particle                                 
c   av       :Monaghan average velocity                        

      implicit none
      include 'param.inc'

      integer itimestep, ntotal, itype(maxn)   
      double precision dt, hsml(maxn), mass(maxn), x(dim,maxn),
   &       vx(dim,maxn), u(maxn), s(maxn), rho(maxn), p(maxn),
   &       t(maxn), tdsdt(maxn), dx(dim,maxn), dvx(dim,maxn),
   &       du(maxn), ds(maxn), drho(maxn), av(dim, maxn)            
      integer i, d, nvirt, niac, pair_i(max_interaction),
   &      pair_j(max_interaction), ns(maxn)
      double precision w(max_interaction), dwdx(dim,max_interaction),
   &       indvxdt(dim,maxn),exdvxdt(dim,maxn),ardvxdt(dim,maxn),
   &       avdudt(maxn), ahdudt(maxn), c(maxn), eta(maxn)            

      doi=1,ntotal
      avdudt(i) = 0.
      ahdudt(i) = 0.
c       dod=1,dim
          indvxdt(d,i) = 0.
          ardvxdt(d,i) = 0.
          exdvxdt(d,i) = 0.
c      enddo
      enddo

c---Positions of virtual (boundary) particles:

      nvirt = 0
      if (virtual_part) then
      call virt_part(itimestep, ntotal,nvirt,hsml,mass,x,vx,
   &       rho,u,p,itype)
      endif
   
c---Interaction parameters, calculating neighboring particles
c   and optimzing smoothing length

      if (nnps.eq.1) then
      call direct_find(itimestep, ntotal+nvirt,hsml,x,niac,pair_i,
   &       pair_j,w,dwdx,ns)
      else if (nnps.eq.2) then
      call link_list(itimestep, ntotal+nvirt,hsml(1),x,niac,pair_i,
   &       pair_j,w,dwdx,ns)
      else if (nnps.eq.3) then
      call tree_search(itimestep, ntotal+nvirt,hsml,x,niac,pair_i,
   &       pair_j,w,dwdx,ns)
      endif         
                        
c---Density approximation or change rate
      
      if (summation_density) then      
      call sum_density(ntotal+nvirt,hsml,mass,niac,pair_i,pair_j,w,
   &       itype,rho)         
      else            
      call con_density(ntotal+nvirt,mass,niac,pair_i,pair_j,
   &       dwdx,vx, itype,x,rho, drho)         
      endif

c---Dynamic viscosity:

      if (visc) call viscosity(ntotal+nvirt,itype,x,rho,eta)
      
c---Internal forces:

      call int_force(itimestep,dt,ntotal+nvirt,hsml,mass,vx,niac,rho,
   &   eta, pair_i,pair_j,dwdx,u,itype,x,t,c,p,indvxdt,tdsdt,du)
                  
c---Artificial viscosity:

      if (visc_artificial) call art_visc(ntotal+nvirt,hsml,
   &      mass,x,vx,niac,rho,c,pair_i,pair_j,w,dwdx,ardvxdt,avdudt)
      
c---External forces:

      if (ex_force) call ext_force(ntotal+nvirt,mass,x,niac,
   &                   pair_i,pair_j,itype, hsml, exdvxdt)


c   Calculating the neighboring particles and undating HSML
      
      if (sle.ne.0) call h_upgrade(dt,ntotal, mass, vx, rho, niac,
   &                   pair_i, pair_j, dwdx, hsml)

      if (heat_artificial) call art_heat(ntotal+nvirt,hsml,
   &         mass,x,vx,niac,rho,u, c,pair_i,pair_j,w,dwdx,ahdudt)
   
c   Calculating average velocity of each partile for avoiding penetration

      if (average_velocity) call av_vel(ntotal,mass,niac,pair_i,
   &                           pair_j, w, vx, rho, av)

c---Convert velocity, force, and energy to f and dfdt

      do i=1,ntotal
c      do d=1,dim
c          dvx(d,i) = indvxdt(d,i) + exdvxdt(d,i) + ardvxdt(d,i)
c      enddo
      du(i) = du(i) + avdudt(i) + ahdudt(i)
      enddo

      if (mod(itimestep,print_step).eq.0) then      
          write(*,*)
          write(*,*) '**** Information for particle ****',
   &                      moni_particle         
          write(*,101)'internal a ','artifical a=',
   &                         'external a ','total a '   
          write(*,100)indvxdt(1,moni_particle),ardvxdt(1,moni_particle),
   &                exdvxdt(1,moni_particle),dvx(1,moni_particle)   
      endif
101   format(1x,4(2x,a12))      
100   format(1x,4(2x,e12.6))      

      end

li913 发表于 2020-10-16 11:22:33

缺少文件 param.inc

fcode 发表于 2020-10-17 09:45:08

找不到函数 tree_search
页: [1]
查看完整版本: 求大神解答,什么问题