示例#1
0
  def stateVariables(self,m,feval=True):
    self.tag(m)

    Fork(time=4,ipn=self.ipn,nodes=self.nodes)
    for iexp in range(self.nexp):
      stag = '-%03d'%iexp
      ss   = self.ss[iexp] 
      rr   = self.rr[iexp]
      wav  = self.dS[iexp]
      datT  = self.dR[iexp]
      vel  = m 
      swfl = 'tmp/swfl-'+self.mtag+stag
      mdatT = 'tmp/mdatT-'+self.mtag+stag
      mdat = 'tmp/mdat-'+self.mtag+stag
      dat  = 'tmp/dat-'+self.mtag+stag
      corr = self.sdir+'corr-'+self.mtag+stag

      Ldat = aweop2d(vel,self.par,ss,rr,'',custom=self.customfd)
      Ldat.FORW(wav,mdatT)

      if not feval: 
        Lswfl = aweop2d(vel,self.par,ss,'','',
                        custom=self.customfd)
        Lswfl.FORW(wav,swfl)


      Flow(mdat,mdatT,'transp')
      Flow(dat ,datT,'transp')
      lcorr = Lcorr(dat,self.nlag,self.s3,
                    self.par['ot'],self.par['dt'],self.par['nt'],
                    self.par['ot'],self.par['dt'],int(self.par['nt']))
      lcorr.FORW(mdat,corr)

      Iterate()
    Join()
示例#2
0
  def adjointStateVariables(self,m,feval=False):
    self.tag(m)
    zero = 'tmp/zero'+self.mtag
    Flow(zero,'tmp/dat-'+self.mtag+'-000','math output="0"')
    
    Fork(time=4,ipn=self.ipn,nodes=self.nodes)
    for iexp in range(self.nexp):
      stag = '-%03d'%iexp
      ss   = self.ss[iexp] 
      rr   = self.rr[iexp]
      wav  = self.dS[iexp]
      datT  = self.dR[iexp]
      vel  = m 
      swfl = 'tmp/swfl-'+self.mtag+stag
      awfl = 'tmp/awfl-'+self.mtag+stag
      dat  = 'tmp/dat-'+self.mtag+stag
      pcorr = 'tmp/pcorr-'+self.mtag+stag
      corr = self.sdir+'corr-'+self.mtag+stag

      iofd = 'tmp/iofd-'+self.mtag+stag  # 1/denomitator norm
      nof  = 'tmp/nof-'+self.mtag+stag  # - of

      nadjtsrcT = 'tmp/nadjtsrcT-'+self.mtag+stag
      dadjtsrcT = 'tmp/dadjtsrcT-'+self.mtag+stag
      adjsrc = 'tmp/adjtsrc-'+self.mtag+stag
      
      grds = 'tmp/grd-'+self.mtag+stag
  
      lcorr = Lcorr(dat,self.nlag,self.s3,
                    self.par['ot'],self.par['dt'],self.par['nt'],
                    self.par['ot'],self.par['dt'],self.par['nt'])

      lcorr.ADJT(nadjtsrcT,pcorr)
      lcorr.ADJT(dadjtsrcT,corr)
      

      Flow(adjsrc,[dadjtsrcT,nadjtsrcT,nof,iofd,zero],
        '''
        axplusy afile=${SOURCES[2]} y=${SOURCES[1]}  | 
        axplusy afile=${SOURCES[3]} y=${SOURCES[4]}  | 
        transp 
        ''')

      Lrwfl = aweop2d(vel,self.par,'',rr,'',
                        custom=self.customfd)
      Lrwfl.ADJT(awfl,adjsrc)

      Flow(grds,[swfl,awfl],
        '''
        nderiv axis=3 order=2 |add mode=p ${SOURCES[1]} |stack axis=3 
        ''')

      Iterate()
    Join()
    Flow('tmp/partial-grad'+self.mtag,
          map(lambda x:'tmp/grd-'+self.mtag+'-%03d'%x,range(self.nexp)),
          'add ${SOURCES[1:-1]}')
示例#3
0
  def adjointStateVariables(self,m,feval=False):
    self.tag(m)
    zero = 'tmp/zero'+self.mtag
    Flow(zero,'tmp/dat-'+self.mtag+'-000','math output="0"')
    
    Fork(time=4,ipn=self.ipn,nodes=self.nodes)
    for iexp in range(self.nexp):
      stag = '-%03d'%iexp
      ss   = self.ss[iexp] 
      rr   = self.rr[iexp]
      wav  = self.dS[iexp]
      datT  = self.dR[iexp]
      vel  = m 
      swfl = 'tmp/swfl-'+self.mtag+stag
      awfl = 'tmp/awfl-'+self.mtag+stag
      dat  = 'tmp/dat-'+self.mtag+stag
      pcorr = 'tmp/pcorr-'+self.mtag+stag
      corr = self.sdir+'corr-'+self.mtag+stag


      nadjtsrcT = 'tmp/nadjtsrcT-'+self.mtag+stag
      dadjtsrcT = 'tmp/dadjtsrcT-'+self.mtag+stag
      adjsrc = 'tmp/adjtsrc-'+self.mtag+stag
      
      grds = 'tmp/grd-'+self.mtag+stag
  
      lcorr = Lcorr(dat,self.nlag,self.s3,
                    self.par['ot'],self.par['dt'],self.par['nt'],
                    self.par['ot'],self.par['dt'],self.par['nt'])

      lcorr.ADJT(nadjtsrcT,pcorr)
      lcorr.ADJT(dadjtsrcT,corr)
      

      Flow(adjsrc,[dadjtsrcT,nadjtsrcT,self.nof,self.ndofd,zero],
        '''
        axplusy afile=${SOURCES[2]} y=${SOURCES[1]}  | 
        axplusy afile=${SOURCES[3]} y=${SOURCES[4]} |
        transp 
        ''')

      Lrwfl = aweop2d(vel,self.par,'',rr,'',
                        custom=self.customfd)
      Lrwfl.ADJT(awfl,adjsrc)

      Flow(grds,[swfl,awfl],
        '''
        nderiv axis=3 order=2 |add mode=p ${SOURCES[1]} |
        stack axis=3 >${SOURCES[0]}_tmp && 
        nderiv axis=3 order=2 <$SOURCE | math output="input^2"|
        stack axis=3 |math output="sqrt(input)"|
        smooth rect1=10 rect2=10 repeat=4 >${SOURCES[0]}_tmp2 &&
        math n=${SOURCES[0]}_tmp d=${SOURCES[0]}_tmp2 output="x1*n/d" >$TARGET&&
        rm  ${SOURCES[0]}_tmp ${SOURCES[0]}_tmp2
        ''',stdout=-1)

      Iterate()
    Join()
    Flow('tmp/partial-grad'+self.mtag,
          map(lambda x:'tmp/grd-'+self.mtag+'-%03d'%x,range(self.nexp)),
          'add ${SOURCES[1:-1]}')
示例#4
0
  def adjointStateVariables(self,m,feval=False):
    self.tag(m)

    Fork(time=4,ipn=self.ipn,nodes=self.nodes)
    for iexp in range(self.nexp):
      stag = '-%03d'%iexp
      ss   = self.ss[iexp] 
      rr   = self.rr[iexp]
      wav  = self.dS[iexp]
      datT  = self.dR[iexp]
      vel  = m 
      swfl = 'tmp/swfl-'+self.mtag+stag
      awfl = 'tmp/awfl-'+self.mtag+stag
      dat  = 'tmp/dat-'+self.mtag+stag
      pcorr = 'tmp/pcorr-'+self.mtag+stag
      corr = self.sdir+'corr-'+self.mtag+stag

      of = 'tmp/of-'+self.mtag+stag  # denomitator norm
      nof = 'tmp/nof-'+self.mtag+stag
    
      ofn  = 'tmp/ofn-'+self.mtag+stag  # numerator norm
      nofd  = 'tmp/nofd-'+self.mtag+stag  # numerator norm
      ofd  = 'tmp/ofd-'+self.mtag+stag  # denomitator norm
      dnofd  = 'tmp/dnofd-'+self.mtag+stag  # denomitator norm
      zero = ofn+'-zero'

      nadjtsrcT = 'tmp/nadjtsrcT-'+self.mtag+stag
      dadjtsrcT = 'tmp/dadjtsrcT-'+self.mtag+stag
      adjsrc = 'tmp/adjtsrc-'+self.mtag+stag
      Flow(nof,of,'scale rscale=-1')
      Flow(dnofd,ofd,'math output="-1/input"')
      
      
      grds = 'tmp/grd-'+self.mtag+stag
  
      lcorr = Lcorr(dat,self.nlag,self.s3,
                    self.par['ot'],self.par['dt'],self.par['nt'],
                    self.par['ot'],self.par['dt'],1+int(self.par['nt']))

      lcorr.ADJT(nadjtsrcT,pcorr)
      lcorr.ADJT(dadjtsrcT,corr)
      
      Flow(zero,dadjtsrcT,'math output="0"')

      #Flow(adjsrc,[dadjtsrcT,nadjtsrcT,nof,dnofd,zero],
      #  '''
      #  axplusy afile=${SOURCES[2]} y=${SOURCES[1]}  | 
      #  axplusy afile=${SOURCES[3]} y=${SOURCES[4]}  |
      #  transp |
      #  math output="input" 
      #  ''')

      Flow(adjsrc,[nadjtsrcT],
        '''
        transp 
        ''')

      Lrwfl = aweop2d(vel,self.par,'',rr,'',
                        custom=self.customfd)
      Lrwfl.ADJT(awfl,adjsrc)

      Flow(grds,[swfl,awfl],
        'nderiv axis=3 order=2 |add mode=p ${SOURCES[1]} |stack axis=3 ')

      Iterate()
    Join()
    Flow('tmp/partial-grad'+self.mtag,
          map(lambda x:'tmp/grd-'+self.mtag+'-%03d'%x,range(self.nexp)),
          'add ${SOURCES[1:-1]}')