示例#1
0
    def build_modelfilestring(self):    
        # initialise a list containing info for model file
        modelfilestring = []
        # number of periods
        period=np.unique(np.around(1./self.Data.frequencies,2))
        period = list(period[period>0.])
        modelfilestring.append('%5i'%len(period))
        # add frequency string
        modelfilestring.append(p2d.create_multiple_line_string(period,
                                                               5,'%10.2f'))
        # add string giving number of cells:
        modelfilestring.append(''.join(['%5i'%i for i in [len(self.meshlocations_x),
                                                         len(self.meshlocations_z)+self.n_airlayers,
                                                         self.n_airlayers+1]]))

        # add strings giving horizontal and vertical mesh steps
        

        meshz = list(self.meshblockthicknesses_zair)+list(self.meshblockthicknesses_z)
        for meshstep in [self.meshblockwidths_x,meshz]:
            modelfilestring.append\
            (p2d.create_multiple_line_string(meshstep,
                                             10,'%5.2f'))

        
        # add resistivity map
        rmap = ('0'*len(self.resistivity_map[0])+'\n')*self.n_airlayers
        rmap += '\n'.join([''.join(i) for i in self.resistivity_map])
        modelfilestring.append(rmap)
        
        # add number of resistivity domains (+1 to include air)
        modelfilestring.append('%5i'%(len(self.resistivity_dict.keys())+1))
        
        # add dictionary contents, assuming rvertical = rmax, slant and dip zero
        # first, air layer, properties always the same
        modelfilestring.append('0   0     -1.00      0.00      0.00      0.00      0.00      0.00')
        # second, dictionary contents
        for key in self.resistivity_dict.keys():
            rlist = self.resistivity_dict[key]
            rlist.insert(2,rlist[1])
            rlist += [0.,0.]
            if rlist[1]/rlist[0] == 1:
                aniso = '   0'
            else:
                aniso = '   1'
            modelfilestring.append(''.join([key,aniso]+['%10.2f'%i for i in rlist]))
        
        # append bathymetry index, at this stage only 0 allowed:
        modelfilestring.append('%5i'%0)
        
        # append number of calculation points (stations):
        modelfilestring.append('%5i'%len(self.stationblocknums))
        
        # append rotation
        modelfilestring.append('%10.2f'%self.rotation)
    
        # append station blocknums
        modelfilestring.append(p2d.create_multiple_line_string(self.stationblocknums,
                                                               5,'  %03i'))
        self.modelfilestring = '\n'.join(modelfilestring)
示例#2
0
文件: pek2d.py 项目: DSO89/DSO
    def build_modelfilestring(self):
        # initialise a list containing info for model file
        modelfilestring = []
        # add header info
        modelfilestring.append('NEW')
        modelfilestring.append('    1')
        modelfilestring.append('     1.000')

        # add string giving number of cells:
        modelfilestring.append(''.join([
            '%5i' % i for i in [
                len(self.meshlocations_x),
                len(self.meshlocations_z) +
                self.n_airlayers, self.n_airlayers + 1
            ]
        ]))

        # add strings giving horizontal and vertical mesh steps
        meshz = list(self.meshblockthicknesses_zair) + list(
            self.meshblockthicknesses_z)
        for meshstep in [self.meshblockwidths_x, meshz]:
            modelfilestring.append\
            (p2d.create_multiple_line_string(meshstep,
                                             10,'%10.3f'))

        # add resistivity map
        rmap = ('%5i' % 0 * len(self.resistivity[0]) + '\n') * self.n_airlayers
        rmap += '\n'.join([''.join('%5i'%ii for ii in i) for i in \
        np.arange(1,np.size(self.resistivity[:,:,0])+1).reshape(np.shape(self.resistivity)[:2])])
        modelfilestring.append(rmap)

        # add number of resistivity domains (+1 to include air)
        modelfilestring.append('%5i' %
                               (np.size(self.resistivity[:, :, 0]) + 1))

        # add dictionary contents, assuming rvertical = rmax, slant and dip zero
        # first, air layer, properties always the same
        modelfilestring.append(
            '    0   0     -1.00      0.00      0.00      0.00      0.00      0.00 0 0 0 0 0 0'
        )
        # second, dictionary contents
        no = 1
        for j in range(len(self.resistivity)):
            for i in range(len(self.resistivity[j])):
                # initialise a list containing resx,resy,strike
                rlist = list(self.resistivity[j, i])
                # insert resz (assumed to be same as resy)
                rlist.insert(2, rlist[1])
                # insert dip and slant (assumed zero)
                rlist += [0., 0.]
                #                if rlist[1]/rlist[0] == 1.:
                #                    aniso = '   0'
                #                    invert_key = ' 1 1 1 0 0 0'
                #                else:
                aniso = '   1'
                invert_key = ' 1 1 1 1 1 0'
                modelfilestring.append(
                    ''.join(['%5i' % no, aniso] +
                            ['%10.2f' % i for i in rlist] + [invert_key]))
                no += 1
        # append bathymetry index, at this stage only 0 allowed:
        modelfilestring.append('%5i' % 0)

        # append number of calculation points (stations):
        modelfilestring.append('%5i' % len(self.stationblocknums))

        # append rotation
        modelfilestring.append('%10.2f' % self.rotation)

        # append station blocknums
        modelfilestring.append(
            p2d.create_multiple_line_string(self.stationblocknums, 5,
                                            '  %03i'))

        modelfilestring.append('%5i' % 0)
        self.modelfilestring = '\n'.join(modelfilestring) + '\n'
示例#3
0
    def build_modelfilestring(self):    
        # initialise a list containing info for model file
        modelfilestring = []
        # add header info
        modelfilestring.append('NEW')
        modelfilestring.append('    1')
        modelfilestring.append('     1.000')     

        # add string giving number of cells:
        modelfilestring.append(''.join(['%5i'%i for i in [len(self.meshlocations_x),
                                                         len(self.meshlocations_z)+self.n_airlayers,
                                                             self.n_airlayers+1]]))

        # add strings giving horizontal and vertical mesh steps
        meshz = list(self.meshblockthicknesses_zair)+list(self.meshblockthicknesses_z)
        for meshstep in [self.meshblockwidths_x,meshz]:
            modelfilestring.append\
            (p2d.create_multiple_line_string(meshstep,
                                             10,'%10.3f'))

        
        # add resistivity map
        rmap = ('%5i'%0*len(self.resistivity[0])+'\n')*self.n_airlayers
        rmap += '\n'.join([''.join('%5i'%ii for ii in i) for i in \
        np.arange(1,np.size(self.resistivity[:,:,0])+1).reshape(np.shape(self.resistivity)[:2])])
        modelfilestring.append(rmap)
        
        # add number of resistivity domains (+1 to include air)
        modelfilestring.append('%5i'%(np.size(self.resistivity[:,:,0])+1))
        
        # add dictionary contents, assuming rvertical = rmax, slant and dip zero
        # first, air layer, properties always the same
        modelfilestring.append('    0   0     -1.00      0.00      0.00      0.00      0.00      0.00 0 0 0 0 0 0')
        # second, dictionary contents
        no = 1
        for j in range(len(self.resistivity)):
            for i in range(len(self.resistivity[j])):
                # initialise a list containing resx,resy,strike
                rlist = list(self.resistivity[j,i])
                # insert resz (assumed to be same as resy)
                rlist.insert(2,rlist[1])
                # insert dip and slant (assumed zero)
                rlist += [0.,0.]
#                if rlist[1]/rlist[0] == 1.:
#                    aniso = '   0'
#                    invert_key = ' 1 1 1 0 0 0'
#                else:
                aniso = '   1'
                invert_key = ' 1 1 1 1 1 0'
                modelfilestring.append(''.join(['%5i'%no,aniso]+['%10.2f'%i for i in rlist]+[invert_key]))
                no += 1
        # append bathymetry index, at this stage only 0 allowed:
        modelfilestring.append('%5i'%0)
        
        # append number of calculation points (stations):
        modelfilestring.append('%5i'%len(self.stationblocknums))
        
        # append rotation
        modelfilestring.append('%10.2f'%self.rotation)
    
        # append station blocknums
        modelfilestring.append(p2d.create_multiple_line_string(self.stationblocknums,
                                                               5,'  %03i'))
                                                               
        modelfilestring.append('%5i'%0)
        self.modelfilestring = '\n'.join(modelfilestring)+'\n'