higdon2d.f
上传用户:ls4004p
上传日期:2007-08-05
资源大小:2314k
文件大小:12k
源码类别:

并行计算

开发平台:

Matlab

  1. C==========================================================================
  2. C    Routinen InitBound , higx1, higxfs1, higx2, higxfs2,
  3. C                       , higz1, higzfs1, higz2, higzfs2
  4. C    07.04.1995  by Joachim Falk
  5. C    implementation of  2D-Fields
  6. C==========================================================================
  7.       subroutine initbound(lamu,mu,rho,dx,dz,
  8.      &                     tvp,tvs,bvp,bvs,lvp,lvs,rvp,rvs,
  9.      &                     nx,nz,dt,fs)
  10.       implicit none
  11.       include 'param.f'
  12.       integer fs, nx , nz, r, i
  13.       real mu(MAXCOLS,MAXROWS),lamu(MAXCOLS,MAXROWS),
  14.      &     rho(MAXCOLS,MAXROWS),
  15.      &     dx, dz,
  16.      &     tvp(MAXCOLS),tvs(MAXCOLS),bvp(MAXCOLS),bvs(MAXCOLS),
  17.      &     lvp(MAXROWS),lvs(MAXROWS),rvp(MAXROWS),rvs(MAXROWS),
  18.      &     dt,hlp, hlp2
  19.       
  20.       hlp2 = sqrt(0.5)
  21.       do r=1, nz
  22.           IF (mu(1,r).gt.1.e5) THEN 
  23.              hlp = sqrt(mu(1,r) / rho(1,r)) * dt / dx
  24.              lvp(r) = (1.-hlp) / (1.+hlp)
  25.              lvs(r) = (hlp2-hlp) / (hlp2+hlp)
  26. C             hlp = sqrt(lamu(1,r) / rho(1,r)) * dt / dx
  27. C             lvp(r) = (1.-hlp) / (1.+hlp)
  28. C             hlp = sqrt(mu(1,r) / rho(1,r)) * dt / dx
  29. C             lvs(r) = (1.-hlp) / (1.+hlp)
  30.           ELSE
  31.              hlp = sqrt(lamu(1,r) / rho(1,r)) * dt / dx
  32.              lvp(r) = (1.-hlp) / (1.+hlp)
  33.              lvs(r) = (hlp2-hlp) / (hlp2+hlp)
  34.           ENDIF
  35.           hlp = lvp(r)
  36.           lvp(r) = hlp + lvs(r)
  37.           lvs(r) = hlp * lvs(r)
  38.           IF (mu(nx,r).gt.1.e5) THEN 
  39.              hlp = sqrt(mu(nx,r) / rho(nx,r)) * dt / dx
  40.              rvp(r) = (1.-hlp) / (1.+hlp)
  41.              rvs(r) = (hlp2-hlp) / (hlp2+hlp)
  42. C             hlp = sqrt(lamu(nx,r) / rho(nx,r)) * dt / dx
  43. C             rvp(r) = (1.-hlp) / (1.+hlp)
  44. C             hlp = sqrt(mu(nx,r) / rho(nx,r)) * dt / dx
  45. C             rvs(r) = (1.-hlp) / (1.+hlp)
  46.           ELSE
  47.              hlp = sqrt(lamu(nx,r) / rho(nx,r)) * dt / dx
  48.              rvp(r) = (1.-hlp) / (1.+hlp)
  49.              rvs(r) = (hlp2-hlp) / (hlp2+hlp)
  50.           ENDIF
  51.           hlp = rvp(r)
  52.           rvp(r) = hlp + rvs(r)
  53.           rvs(r) = hlp * rvs(r)
  54.         enddo
  55.         do i = 1 , nx
  56.            IF (mu(i,nz).gt.1.e5) THEN 
  57.               hlp = sqrt(mu(i,nz) / rho(i,nz)) * dt / dz
  58.               bvp(i) = (1.-hlp) / (1.+hlp)
  59.               hlp = sqrt(mu(i,nz) / rho(i,nz)) * dt / dz
  60.               bvs(i) = (hlp2-hlp) / (hlp2+hlp)
  61. C              hlp = sqrt(lamu(i,nz) / rho(i,nz)) * dt / dz
  62. C              bvp(i) = (1.-hlp) / (1.+hlp)
  63. C              hlp = sqrt(mu(i,nz) / rho(i,nz)) * dt / dz
  64. C              bvs(i) = (1.-hlp) / (1.+hlp)
  65.            ELSE
  66.               hlp = sqrt(lamu(i,nz) / rho(i,nz)) * dt / dz
  67.               bvp(i) = (1.-hlp) / (1.+hlp)
  68.               bvs(i) = (hlp2-hlp) / (hlp2+hlp)
  69.            ENDIF
  70.            hlp = bvp(i)
  71.            bvp(i) = hlp + bvs(i)
  72.            bvs(i) = hlp * bvs(i)
  73.         enddo
  74.         if (fs.ne.1) then   
  75.           do i = 1 , nx
  76.              IF (mu(i,1).gt.1.e5) THEN 
  77.                 hlp = sqrt(mu(i,1) / rho(i,1)) * dt / dz
  78.                 tvp(i) = (1.-hlp) / (1.+hlp)
  79.                 tvs(i) = (hlp2-hlp) / (hlp2+hlp)
  80. C                hlp = sqrt(lamu(i,1) / rho(i,1)) * dt / dz
  81. C                tvp(i) = (1.-hlp) / (1.+hlp)
  82. C                hlp = sqrt(mu(i,1) / rho(i,1)) * dt / dz
  83. C                tvs(i) = (1.-hlp) / (1.+hlp)
  84.              ELSE
  85.                 hlp = sqrt(lamu(i,1) / rho(i,1)) * dt / dz
  86.                 tvp(i) = (1.-hlp) / (1.+hlp)
  87.                 tvs(i) = (hlp2-hlp) / (hlp2+hlp)
  88.              ENDIF
  89.             hlp = tvp(i)
  90.             tvp(i) = hlp + tvs(i)
  91.             tvs(i) = hlp * tvs(i)
  92.           enddo
  93.         endif
  94.       return
  95.       end
  96. C==========================================================================
  97.       subroutine HigX2(Ux,Uxo,tvp,tvs,bvp,bvs,lvp,lvs,rvp,rvs,nx,nz)
  98.       implicit none
  99.       include 'param.f'
  100.       integer in, nx, nz, r, c
  101.       real Ux(MAXCOLS,MAXROWS),Uxo(MAXCOLS,MAXROWS),
  102.      &     tvp(MAXCOLS),tvs(MAXCOLS),bvp(MAXCOLS),bvs(MAXCOLS),
  103.      &     lvp(MAXROWS),lvs(MAXROWS),rvp(MAXROWS),rvs(MAXROWS)
  104.           
  105.       do c = 2 , nx-2
  106.          Ux(c,1) = Ux(c,1) - tvp(c) * Ux(c,2) - tvs(c) * Ux(c,3)
  107.       enddo
  108.       in = nx-1                 ! Spalte nx-1 Rand rechts (2.Durchlauf)
  109.       do r = 2, nz-1            ! Schleife ueber re und li Rand (2.Durchlauf)
  110.          Ux(1,r) = Ux(1,r) - lvp(r) * Ux(2,r) - lvs(r) * Ux(3,r)
  111.          Ux(in,r) = Ux(in,r) - rvp(r)*Ux(in-1,r)-rvs(r)*Ux(in-2,r)
  112.       enddo
  113.       
  114.       do c=2, nx-2
  115.          Ux(c,nz) = Ux(c,nz) - bvp(c)*Ux(c,nz-1) - bvs(c)*Ux(c,nz-2)
  116.       enddo
  117.       return
  118.       end
  119. C==========================================================================
  120.       subroutine HigZ1(Uz,Uzo,tvp,tvs,bvp,bvs,lvp,lvs,rvp,rvs,nx,nz)
  121.       implicit none
  122.       include 'param.f'
  123.       integer in, nx, nz, r, c
  124.       real Uz(MAXCOLS,MAXROWS),Uzo(MAXCOLS,MAXROWS),
  125.      &     tvp(MAXCOLS),tvs(MAXCOLS),bvp(MAXCOLS),bvs(MAXCOLS),
  126.      &     lvp(MAXROWS),lvs(MAXROWS),rvp(MAXROWS),rvs(MAXROWS),hlp
  127.         
  128.       do c=2, nx-1   
  129.          hlp = Uz(c,1)
  130.          Uz(c,1) = 2.* Uz(c,2) - Uzo(c,3)
  131.      &        - tvp(c) * (Uzo(c,2) - Uz(c,3) - Uz(c,1))
  132.      &        - tvs(c) * (Uzo(c,1) - 2.* Uz(c,2))
  133.          Uzo(c,1) = hlp
  134.       enddo
  135.       in = nx
  136.       do r=2, nz-2              ! Rand links (erster Durchlauf)
  137.          hlp = Uz(1,r)
  138.          Uz(1,r) = 2. * Uz(2,r) - Uzo(3,r)
  139.      &        - lvp(r) * (Uzo(2,r) - Uz(3,r) - Uz(1,r))
  140.      &        - lvs(r) * (Uzo(1,r) - 2.*Uz(2,r))
  141.          Uzo(1,r) = hlp
  142.          
  143.          hlp = Uz(in,r)
  144.          Uz(in,r) = 2. * Uz(in-1,r) - Uzo(in-2,r)
  145.      &        - rvp(r) * (Uzo(in-1,r) - Uz(in-2,r) - Uz(in,r))
  146.      &        - rvs(r) * (Uzo(in,r) - 2.*Uz(in-1,r))
  147.          Uzo(in,r) = hlp
  148.       enddo
  149.       
  150.       in = nz-1
  151.       do c=2, nx-1              ! Zeile nz-1
  152.          hlp = Uz(c,in)
  153.          Uz(c,in) = 2.* Uz(c,in-1) - Uzo(c,in-2)
  154.      &        - bvp(c) * (Uzo(c,in-1) - Uz(c,in-2) - Uz(c,in))
  155.      &        - bvs(c) * (Uzo(c,in) - 2.* Uz(c,in-1))
  156.          Uzo(c,in) = hlp
  157.       enddo
  158.       return
  159.       end
  160. C==========================================================================
  161.       subroutine HigZ2(Uz,Uzo,tvp,tvs,bvp,bvs,lvp,lvs,rvp,rvs,nx,nz)
  162.       implicit none
  163.       include 'param.f'
  164.       integer in, nx, nz, r, c
  165.       real Uz(MAXCOLS,MAXROWS),Uzo(MAXCOLS,MAXROWS),
  166.      &     tvp(MAXCOLS),tvs(MAXCOLS),bvp(MAXCOLS),bvs(MAXCOLS),
  167.      &     lvp(MAXROWS),lvs(MAXROWS),rvp(MAXROWS),rvs(MAXROWS)
  168.       do c=2, nx-1              ! Zeile 1
  169.          Uz(c,1) = Uz(c,1) - tvp(c) * Uz(c,2) - tvs(c) * Uz(c,3)
  170.       enddo
  171.       in = nx
  172.       do r= 2 , nz-2   
  173.          Uz(1,r) = Uz(1,r) - lvp(r) * Uz(2,r) - lvs(r) * Uz(3,r)
  174.          Uz(in,r) = Uz(in,r)-rvp(r) * Uz(in-1,r)-rvs(r)*Uz(in-2,r)
  175.       enddo
  176.       in = nz-1
  177.       do c=2, nx-1              ! Zeile nz-1
  178.          Uz(c,in) = Uz(c,in)-bvp(c)*Uz(c,in-1)-bvs(c)*Uz(c,in-2)
  179.       enddo
  180.       return
  181.       end
  182. C============================================================================
  183.       subroutine HigX1(Ux,Uxo,tvp,tvs,bvp,bvs,lvp,lvs,rvp,rvs,nx,nz)
  184.       implicit none
  185.       include 'param.f'
  186.       integer in, nx, nz, r, c
  187.       real Ux(MAXCOLS,MAXROWS),Uxo(MAXCOLS,MAXROWS),
  188.      &     tvp(MAXCOLS),tvs(MAXCOLS),bvp(MAXCOLS),bvs(MAXCOLS),
  189.      &     lvp(MAXROWS),lvs(MAXROWS),rvp(MAXROWS),rvs(MAXROWS),hlp
  190.           
  191.           do c=2, nx-2
  192.              hlp = Ux(c,1)
  193.              Ux(c,1) = 2.* Ux(c,2) - Uxo(c,3)
  194.      &             - tvp(c) * (Uxo(c,2) - Ux(c,3) - Ux(c,1))
  195.      &             - tvs(c) * (Uxo(c,1) - 2.*Ux(c,2))
  196.              Uxo(c,1) = hlp
  197.           enddo
  198.                                                                    
  199.           in = nx-1
  200.           do r=2 , nz-1
  201.             hlp = Ux(1,r)
  202.             Ux(1,r) = 2.* Ux(2,r) - Uxo(3,r)
  203.      &             - lvp(r) * (Uxo(2,r) - Ux(3,r) - Ux(1,r))
  204.      &             - lvs(r) * (Uxo(1,r) - 2.* Ux(2,r))
  205.             Uxo(1,r) = hlp
  206.             hlp = Ux(in,r)
  207.             Ux(in,r) = 2.* Ux(in-1,r) - Uxo(in-2,r)
  208.      &             - rvp(r)  * (Uxo(in-1,r) - Ux(in-2,r) - Ux(in,r))
  209.      &             - rvs(r)  * (Uxo(in,r) - 2.* Ux(in-1,r))
  210.             Uxo(in,r) = hlp
  211.           enddo
  212.           
  213.           do c=2, nx-2          !  Rand unten (erster Durchlauf)
  214.              hlp = Ux(c,nz)
  215.              Ux(c,nz) = 2.* Ux(c,nz-1) - Uxo(c,nz-2)
  216.      &             - bvp(c) * (Uxo(c,nz-1) - Ux(c,nz-2) - Ux(c,nz))
  217.      &             - bvs(c) * (Uxo(c,nz) - 2.*Ux(c,nz-1))
  218.              Uxo(c,nz) = hlp
  219.           enddo
  220.         return  
  221.         end
  222. C=========================================================================
  223.       subroutine HigfsX1(Ux,Uxo,bvp,bvs,lvp,lvs,rvp,rvs,nx,nz)
  224.       implicit none
  225.       include 'param.f'
  226.       integer in, nx, nz, r, c
  227.       real Ux(MAXCOLS,MAXROWS),Uxo(MAXCOLS,MAXROWS),
  228.      &     bvp(MAXCOLS),bvs(MAXCOLS),
  229.      &     lvp(MAXROWS),lvs(MAXROWS),rvp(MAXROWS),rvs(MAXROWS),hlp
  230.          
  231.          in = nx-1
  232.          do r=1 , nz-1
  233.             hlp = Ux(1,r)
  234.             Ux(1,r) = 2.* Ux(2,r) - Uxo(3,r)
  235.      &             - lvp(r) * (Uxo(2,r) - Ux(3,r) - Ux(1,r))
  236.      &             - lvs(r) * (Uxo(1,r) - 2.* Ux(2,r))
  237.             Uxo(1,r) = hlp
  238.             
  239.             hlp = Ux(in,r)
  240.             Ux(in,r) = 2.* Ux(in-1,r) - Uxo(in-2,r)
  241.      &             - rvp(r)  * (Uxo(in-1,r) - Ux(in-2,r) - Ux(in,r))
  242.      &             - rvs(r)  * (Uxo(in,r) - 2.* Ux(in-1,r))
  243.             Uxo(in,r) = hlp
  244.          enddo
  245.           
  246.           in = nz
  247.           do c=2, nx-2 !  Rand unten (erster Durchlauf)
  248.              hlp = Ux(c,in)
  249.              Ux(c,in) = 2.* Ux(c,in-1) - Uxo(c,in-2)
  250.      &             - bvp(c) * (Uxo(c,in-1) - Ux(c,in-2) - Ux(c,in))
  251.      &             - bvs(c) * (Uxo(c,in) - 2.*Ux(c,in-1))
  252.              Uxo(c,in) = hlp
  253.           enddo
  254.         return  
  255.         end
  256. C============================================================================
  257.       subroutine HigfsX2(Ux,Uxo,bvp,bvs,lvp,lvs,rvp,rvs,nx,nz)
  258.       implicit none
  259.       include 'param.f'
  260.       integer in, nx, nz, r, c
  261.       real Ux(MAXCOLS,MAXROWS),Uxo(MAXCOLS,MAXROWS),
  262.      &     bvp(MAXCOLS),bvs(MAXCOLS),
  263.      &     lvp(MAXROWS),lvs(MAXROWS),rvp(MAXROWS),rvs(MAXROWS)
  264.          
  265.       in = nx-1
  266.       do r= 1 , nz-1            ! Schleife ueber re und li Rand (2.Durchlauf)
  267.          Ux(1,r)  = Ux(1,r) - lvp(r) * Ux(2,r) - lvs(r) * Ux(3,r)
  268.          Ux(in,r) = Ux(in,r)- rvp(r)*Ux(in-1,r) - rvs(r)*Ux(in-2,r)
  269.       enddo
  270.       do c=2, nx-2
  271.          Ux(c,nz) = Ux(c,nz)-bvp(c)*Ux(c,nz-1) - bvs(c)*Ux(c,nz-2)
  272.       enddo
  273.       return
  274.       end
  275. C============================================================================
  276.       subroutine HigfsZ1(Uz,Uzo,bvp,bvs,lvp,lvs,rvp,rvs,nx,nz)
  277.       implicit none
  278.       include 'param.f'
  279.       integer in, nx, nz, r, c
  280.       real Uz(MAXCOLS,MAXROWS),Uzo(MAXCOLS,MAXROWS),
  281.      &     bvp(MAXCOLS),bvs(MAXCOLS),
  282.      &     lvp(MAXROWS),lvs(MAXROWS),rvp(MAXROWS),rvs(MAXROWS),hlp
  283.       do r=1 , nz-2  
  284.          hlp = Uz(1,r)
  285.          Uz(1,r) = 2.0 * Uz(2,r) - Uzo(3,r)
  286.      &        - lvp(r) * (Uzo(2,r) - Uz(3,r) - Uz(1,r))
  287.      &        - lvs(r) * (Uzo(1,r) - 2.0 * Uz(2,r) )
  288.          Uzo(1,r) = hlp
  289.          hlp = Uz(nx,r)
  290.          Uz(nx,r) = 2.0 * Uz(nx-1,r) - Uzo(nx-2,r)
  291.      &        - rvp(r) * (Uzo(nx-1,r) - Uz(nx-2,r) - Uz(nx,r))
  292.      &        - rvs(r) * (Uzo(nx,r) - 2.0 * Uz(nx-1,r) )
  293.          Uzo(nx,r) = hlp
  294.       enddo
  295.       in = nz-1
  296.       do c=2, nx-1 
  297.          hlp = Uz(c,in)
  298.          Uz(c,in) = 2.0 * Uz(c,in-1) - Uzo(c,in-2)
  299.      &        - bvp(c) * (Uzo(c,in-1) - Uz(c,in-2) - Uz(c,in))
  300.      &        - bvs(c) * (Uzo(c,in) - 2.0 * Uz(c,in-1) )
  301.          Uzo(c,in) = hlp
  302.       enddo
  303.       return
  304.       end
  305. C============================================================================
  306.       subroutine HigfsZ2(Uz,Uzo,bvp,bvs,lvp,lvs,rvp,rvs,nx,nz)
  307.       implicit none
  308.       include 'param.f'
  309.       integer in, nx, nz, r, c
  310.       real Uz(MAXCOLS,MAXROWS),Uzo(MAXCOLS,MAXROWS),
  311.      &     bvp(MAXCOLS),bvs(MAXCOLS),
  312.      &     lvp(MAXROWS),lvs(MAXROWS),rvp(MAXROWS),rvs(MAXROWS)
  313.          
  314.       do r= 1 , nz-2   
  315.          Uz(1,r) = Uz(1,r) - lvp(r) * Uz(2,r) - lvs(r) * Uz(3,r)
  316.          Uz(nx,r) = Uz(nx,r) - rvp(r)*Uz(nx-1,r) - rvs(r)*Uz(nx-2,r)
  317.       enddo
  318.       in = nz-1
  319.       do c=2, nx-1 
  320.          Uz(c,in) = Uz(c,in) - bvp(c)*Uz(c,in-1) - bvs(c)*Uz(c,in-2)
  321.       enddo
  322.       return
  323.       end
  324. C============================================================================