예제 #1
0
	def marshall(self,prefix,md,fid):    # {{{

		yts=md.constants.yts

		WriteData(fid,prefix,'object',self,'fieldname','spcthickness','format','DoubleMat','mattype',1)
		WriteData(fid,prefix,'object',self,'fieldname','thickening_rate','format','DoubleMat','mattype',1,'scale',1./yts)
		WriteData(fid,prefix,'object',self,'fieldname','stabilization','format','Integer')
예제 #2
0
 def marshall(self, prefix, md, fid):  # {{{
     WriteData(fid, prefix, 'name', 'md.friction.law', 'data', 2, 'format',
               'Integer')
     WriteData(fid, prefix, 'class', 'friction', 'object', self,
               'fieldname', 'C', 'format', 'DoubleMat', 'mattype', 1)
     WriteData(fid, prefix, 'class', 'friction', 'object', self,
               'fieldname', 'm', 'format', 'DoubleMat', 'mattype', 2)
예제 #3
0
 def marshall(self, prefix, md, fid):  # {{{
     WriteData(fid, prefix, 'object', self, 'fieldname', 'g', 'format',
               'Double')
     WriteData(fid, prefix, 'object', self, 'fieldname', 'yts', 'format',
               'Double')
     WriteData(fid, prefix, 'object', self, 'fieldname',
               'referencetemperature', 'format', 'Double')
예제 #4
0
 def marshall(self, prefix, md, fid):  # {{{
     WriteData(fid, prefix, 'name', 'md.friction.law', 'data', 1, 'format',
               'Integer')
     WriteData(fid, prefix, 'object', self, 'fieldname', 'coefficient',
               'format', 'DoubleMat', 'mattype', 1)
     WriteData(fid, prefix, 'object', self, 'fieldname', 'p', 'format',
               'DoubleMat', 'mattype', 2)
     WriteData(fid, prefix, 'object', self, 'fieldname', 'q', 'format',
               'DoubleMat', 'mattype', 2)
예제 #5
0
    def marshall(self, prefix, md, fid):  # {{{

        WriteData(fid, prefix, 'object', self, 'fieldname', 'mantle_viscosity',
                  'format', 'DoubleMat', 'mattype', 1)
        WriteData(fid, prefix, 'object', self, 'fieldname',
                  'lithosphere_thickness', 'format', 'DoubleMat', 'mattype', 1,
                  'scale', 10.**3.)
        WriteData(fid, prefix, 'object', self, 'fieldname',
                  'cross_section_shape', 'format', 'Integer')
예제 #6
0
 def marshall(self, prefix, md, fid):  # {{{
     WriteData(fid, prefix, 'name', 'md.friction.law', 'data', 7, 'format',
               'Integer')
     WriteData(fid, prefix, 'object', self, 'fieldname', 'coefficient',
               'format', 'DoubleMat', 'mattype', 1, 'timeserieslength',
               md.mesh.numberofvertices + 1, 'yts', md.constants.yts)
     WriteData(fid, prefix, 'object', self, 'fieldname',
               'coefficientcoulomb', 'format', 'DoubleMat', 'mattype', 1)
     WriteData(fid, prefix, 'object', self, 'fieldname', 'p', 'format',
               'DoubleMat', 'mattype', 2)
     WriteData(fid, prefix, 'object', self, 'fieldname', 'q', 'format',
               'DoubleMat', 'mattype', 2)
예제 #7
0
    def marshall(self, prefix, md, fid):  # {{{

        yts = md.constants.yts

        WriteData(fid, prefix, 'object', self, 'fieldname', 'stabilization',
                  'format', 'Integer')
        WriteData(fid, prefix, 'object', self, 'fieldname', 'spclevelset',
                  'format', 'DoubleMat', 'mattype', 1, 'timeserieslength',
                  md.mesh.numberofvertices + 1, 'yts', md.constants.yts)
        WriteData(fid, prefix, 'object', self, 'fieldname', 'reinit_frequency',
                  'format', 'Integer')
        WriteData(fid, prefix, 'object', self, 'fieldname', 'calving_max',
                  'format', 'Double', 'scale', 1. / yts)
예제 #8
0
    def marshall(self, prefix, md, fid):  # {{{

        yts = md.constants.yts

        WriteData(fid, prefix, 'name', 'md.calving.law', 'data', 1, 'format',
                  'Integer')
        WriteData(fid, prefix, 'object', self, 'fieldname', 'calvingrate',
                  'format', 'DoubleMat', 'mattype', 1, 'timeserieslength',
                  md.mesh.numberofvertices + 1, 'yts', md.constants.yts,
                  'scale', 1. / yts)
        WriteData(fid, prefix, 'object', self, 'fieldname', 'meltingrate',
                  'format', 'DoubleMat', 'mattype', 1, 'timeserieslength',
                  md.mesh.numberofvertices + 1, 'yts', md.constants.yts,
                  'scale', 1. / yts)
예제 #9
0
    def marshall(self, prefix, md, fid):  # {{{

        #before marshalling, we need to create the segments out of the profilename:
        self.segments = MeshProfileIntersection(md.mesh.elements, md.mesh.x,
                                                md.mesh.y, self.profilename)[0]

        #ok, marshall name and segments:
        WriteData(fid, prefix, 'data', self.name, 'name',
                  'md.massfluxatgate.name', 'format', 'String')
        WriteData(fid, prefix, 'data', self.definitionstring, 'name',
                  'md.massfluxatgate.definitionstring', 'format', 'String')
        WriteData(fid, prefix, 'data', self.segments, 'name',
                  'md.massfluxatgate.segments', 'format', 'DoubleMat',
                  'mattype', 1)
예제 #10
0
    def marshall(self, prefix, md, fid):  # {{{

        yts = md.constants.yts

        WriteData(fid, prefix, 'object', self, 'fieldname', 'spcthickness',
                  'format', 'DoubleMat', 'mattype', 1, 'timeserieslength',
                  md.mesh.numberofvertices + 1, 'yts', md.constants.yts)
        WriteData(fid, prefix, 'object', self, 'fieldname', 'isfreesurface',
                  'format', 'Boolean')
        WriteData(fid, prefix, 'object', self, 'fieldname', 'min_thickness',
                  'format', 'Double')
        WriteData(fid, prefix, 'data', self.hydrostatic_adjustment, 'format',
                  'String', 'name', 'md.masstransport.hydrostatic_adjustment')
        WriteData(fid, prefix, 'object', self, 'fieldname', 'stabilization',
                  'format', 'Integer')
        WriteData(fid, prefix, 'object', self, 'fieldname', 'vertex_pairing',
                  'format', 'DoubleMat', 'mattype', 3)
        WriteData(fid, prefix, 'object', self, 'fieldname', 'penalty_factor',
                  'format', 'Double')

        #process requested outputs
        outputs = self.requested_outputs
        indices = [i for i, x in enumerate(outputs) if x == 'default']
        if len(indices) > 0:
            outputscopy = outputs[0:max(0, indices[0] -
                                        1)] + self.defaultoutputs(
                                            md) + outputs[indices[0] + 1:]
            outputs = outputscopy
        WriteData(fid, prefix, 'data', outputs, 'name',
                  'md.masstransport.requested_outputs', 'format',
                  'StringArray')
예제 #11
0
    def marshall(self, prefix, md, fid):  # {{{

        yts = md.constants.yts

        WriteData(fid, prefix, 'name', 'md.basalforcings.model', 'data', 1,
                  'format', 'Integer')
        WriteData(fid, prefix, 'object', self, 'fieldname',
                  'groundedice_melting_rate', 'format', 'DoubleMat', 'mattype',
                  1, 'scale', 1. / yts, 'timeserieslength',
                  md.mesh.numberofvertices + 1, 'yts', md.constants.yts)
        WriteData(fid, prefix, 'object', self, 'fieldname',
                  'floatingice_melting_rate', 'format', 'DoubleMat', 'mattype',
                  1, 'scale', 1. / yts, 'timeserieslength',
                  md.mesh.numberofvertices + 1, 'yts', md.constants.yts)
        WriteData(fid, prefix, 'object', self, 'fieldname', 'geothermalflux',
                  'format', 'DoubleMat', 'mattype', 1, 'timeserieslength',
                  md.mesh.numberofvertices + 1, 'yts', md.constants.yts)
예제 #12
0
    def marshall(self, prefix, md, fid):  # {{{

        yts = md.constants.yts
        if yts != 365.2422 * 24. * 3600.:
            print 'WARNING: value of yts for MISMIP+ runs different from ISSM default!'

        floatingice_melting_rate = np.zeros((md.mesh.numberofvertices))
        floatingice_melting_rate = md.basalforcings.meltrate_factor * np.tanh(
            (md.geometry.base - md.geometry.bed) /
            md.basalforcings.threshold_thickness) * np.amax(
                md.basalforcings.upperdepth_melt - md.geometry.base, 0)

        WriteData(fid, prefix, 'name', 'md.basalforcings.model', 'data', 3,
                  'format', 'Integer')
        WriteData(fid, prefix, 'data', floatingice_melting_rate, 'format',
                  'DoubleMat', 'name',
                  'md.basalforcings.floatingice_melting_rate', 'mattype', 1,
                  'scale', 1. / yts, 'timeserieslength',
                  md.mesh.numberofvertices + 1, 'yts', md.constants.yts)
        WriteData(fid, prefix, 'object', self, 'fieldname',
                  'groundedice_melting_rate', 'format', 'DoubleMat', 'name',
                  'md.basalforcings.groundedice_melting_rate', 'mattype', 1,
                  'scale', 1. / yts, 'timeserieslength',
                  md.mesh.numberofvertices + 1, 'yts', md.constants.yts)
        WriteData(fid, prefix, 'object', self, 'fieldname', 'geothermalflux',
                  'name', 'md.basalforcings.geothermalflux', 'format',
                  'DoubleMat', 'mattype', 1, 'timeserieslength',
                  md.mesh.numberofvertices + 1, 'yts', md.constants.yts)
        WriteData(fid, prefix, 'object', self, 'fieldname', 'meltrate_factor',
                  'format', 'Double', 'scale', 1. / yts)
        WriteData(fid, prefix, 'object', self, 'fieldname',
                  'threshold_thickness', 'format', 'Double')
        WriteData(fid, prefix, 'object', self, 'fieldname', 'upperdepth_melt',
                  'format', 'Double')
예제 #13
0
    def marshall(self, prefix, md, fid):  # {{{

        yts = md.constants.yts

        WriteData(fid, prefix, 'name', 'md.smb.model', 'data', 6, 'format',
                  'Integer')
        WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname',
                  'href', 'format', 'DoubleMat', 'mattype', 1,
                  'timeserieslength', md.mesh.numberofvertices + 1, 'yts',
                  md.constants.yts)
        WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname',
                  'smbref', 'format', 'DoubleMat', 'mattype', 1, 'scale',
                  1. / yts, 'timeserieslength', md.mesh.numberofvertices + 1,
                  'yts', md.constants.yts)
        WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname',
                  'b_pos', 'format', 'DoubleMat', 'mattype', 1, 'scale',
                  1. / yts, 'timeserieslength', md.mesh.numberofvertices + 1,
                  'yts', md.constants.yts)
        WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname',
                  'b_neg', 'format', 'DoubleMat', 'mattype', 1, 'scale',
                  1. / yts, 'timeserieslength', md.mesh.numberofvertices + 1,
                  'yts', md.constants.yts)

        #process requested outputs
        outputs = self.requested_outputs
        indices = [i for i, x in enumerate(outputs) if x == 'default']
        if len(indices) > 0:
            outputscopy = outputs[0:max(0, indices[0] -
                                        1)] + self.defaultoutputs(
                                            md) + outputs[indices[0] + 1:]
            outputs = outputscopy
        WriteData(fid, prefix, 'data', outputs, 'name',
                  'md.smb.requested_outputs', 'format', 'StringArray')
예제 #14
0
파일: esa.py 프로젝트: lidaan/issm_python
    def marshall(self, prefix, md, fid):  # {{{
        WriteData(fid, prefix, 'object', self, 'fieldname', 'deltathickness',
                  'format', 'DoubleMat', 'mattype', 2)
        WriteData(fid, prefix, 'object', self, 'fieldname', 'love_h', 'format',
                  'DoubleMat', 'mattype', 1)
        WriteData(fid, prefix, 'object', self, 'fieldname', 'love_l', 'format',
                  'DoubleMat', 'mattype', 1)
        WriteData(fid, prefix, 'object', self, 'fieldname', 'degacc', 'format',
                  'Double')
        WriteData(fid, prefix, 'object', self, 'fieldname', 'transitions',
                  'format', 'MatArray')

        #process requested outputs
        outputs = self.requested_outputs
        indices = [i for i, x in enumerate(outputs) if x == 'default']
        if len(indices) > 0:
            outputscopy = outputs[0:max(0, indices[0] -
                                        1)] + self.defaultoutputs(
                                            md) + outputs[indices[0] + 1:]
            outputs = outputscopy
        WriteData(fid, prefix, 'data', outputs, 'name',
                  'md.esa.requested_outputs', 'format', 'StringArray')
예제 #15
0
파일: mask.py 프로젝트: lidaan/issm_python
 def marshall(self, prefix, md, fid):  # {{{
     WriteData(fid, prefix, 'object', self, 'fieldname',
               'groundedice_levelset', 'format', 'DoubleMat', 'mattype', 1)
     WriteData(fid, prefix, 'object', self, 'fieldname', 'ice_levelset',
               'format', 'DoubleMat', 'mattype', 1)
예제 #16
0
    def marshall(self, prefix, md, fid):  # {{{

        WriteData(fid, prefix, 'object', self, 'fieldname', 'isdamage',
                  'format', 'Boolean')
        if self.isdamage:
            WriteData(fid, prefix, 'object', self, 'fieldname', 'D', 'format',
                      'DoubleMat', 'mattype', 1)
            WriteData(fid, prefix, 'object', self, 'fieldname', 'law',
                      'format', 'Integer')
            WriteData(fid, prefix, 'object', self, 'fieldname', 'spcdamage',
                      'format', 'DoubleMat', 'mattype', 1, 'timeserieslength',
                      md.mesh.numberofvertices + 1, 'yts', md.constants.yts)
            WriteData(fid, prefix, 'object', self, 'fieldname', 'max_damage',
                      'format', 'Double')
            WriteData(fid, prefix, 'object', self, 'fieldname',
                      'stabilization', 'format', 'Integer')
            WriteData(fid, prefix, 'object', self, 'fieldname', 'maxiter',
                      'format', 'Integer')
            WriteData(fid, prefix, 'name', 'md.damage.elementinterp', 'data',
                      self.elementinterp, 'format', 'String')
            WriteData(fid, prefix, 'object', self, 'fieldname',
                      'stress_threshold', 'format', 'Double')
            WriteData(fid, prefix, 'object', self, 'fieldname', 'kappa',
                      'format', 'Double')
            WriteData(fid, prefix, 'object', self, 'fieldname', 'c1', 'format',
                      'Double')
            WriteData(fid, prefix, 'object', self, 'fieldname', 'c2', 'format',
                      'Double')
            WriteData(fid, prefix, 'object', self, 'fieldname', 'c3', 'format',
                      'Double')
            WriteData(fid, prefix, 'object', self, 'fieldname', 'c4', 'format',
                      'Double')
            WriteData(fid, prefix, 'object', self, 'fieldname', 'healing',
                      'format', 'Double')
            WriteData(fid, prefix, 'object', self, 'fieldname', 'equiv_stress',
                      'format', 'Integer')

        #process requested outputs
        outputs = self.requested_outputs
        indices = [i for i, x in enumerate(outputs) if x == 'default']
        if len(indices) > 0:
            outputscopy = outputs[0:max(0, indices[0] -
                                        1)] + self.defaultoutputs(
                                            md) + outputs[indices[0] + 1:]
            outputs = outputscopy
        if self.isdamage:
            WriteData(fid, prefix, 'data', outputs, 'name',
                      'md.damage.requested_outputs', 'format', 'StringArray')
예제 #17
0
    def marshall(self, prefix, md, fid):  # {{{

        yts = md.constants.yts

        WriteData(fid, prefix, 'object', self, 'fieldname', 'vx', 'format',
                  'DoubleMat', 'mattype', 1, 'scale', 1. / yts)
        WriteData(fid, prefix, 'object', self, 'fieldname', 'vy', 'format',
                  'DoubleMat', 'mattype', 1, 'scale', 1. / yts)
        WriteData(fid, prefix, 'object', self, 'fieldname', 'vz', 'format',
                  'DoubleMat', 'mattype', 1, 'scale', 1. / yts)
        WriteData(fid, prefix, 'object', self, 'fieldname', 'pressure',
                  'format', 'DoubleMat', 'mattype', 1)
        WriteData(fid, prefix, 'object', self, 'fieldname', 'temperature',
                  'format', 'DoubleMat', 'mattype', 1)
        WriteData(fid, prefix, 'object', self, 'fieldname', 'waterfraction',
                  'format', 'DoubleMat', 'mattype', 1)
        WriteData(fid, prefix, 'object', self, 'fieldname', 'sediment_head',
                  'format', 'DoubleMat', 'mattype', 1)
        WriteData(fid, prefix, 'object', self, 'fieldname', 'epl_head',
                  'format', 'DoubleMat', 'mattype', 1)
        WriteData(fid, prefix, 'object', self, 'fieldname', 'epl_thickness',
                  'format', 'DoubleMat', 'mattype', 1)
        WriteData(fid, prefix, 'object', self, 'fieldname', 'watercolumn',
                  'format', 'DoubleMat', 'mattype', 1)

        if md.thermal.isenthalpy:
            tpmp = md.materials.meltingpoint - md.materials.beta * md.initialization.pressure
            pos = np.nonzero(md.initialization.waterfraction > 0.)[0]
            enthalpy = md.materials.heatcapacity * (
                md.initialization.temperature -
                md.constants.referencetemperature)
            enthalpy[pos] = md.materials.heatcapacity * (
                tpmp[pos].reshape(-1, ) - md.constants.referencetemperature
            ) + md.materials.latentheat * md.initialization.waterfraction[
                pos].reshape(-1, )
            WriteData(fid, prefix, 'data', enthalpy, 'format', 'DoubleMat',
                      'mattype', 1, 'name', 'md.initialization.enthalpy')
예제 #18
0
    def marshall(self, prefix, md, fid):  # {{{

        yts = md.constants.yts

        WriteData(fid, prefix, 'name', 'md.smb.model', 'data', 4, 'format',
                  'Integer')

        WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname',
                  'isdelta18o', 'format', 'Boolean')
        WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname',
                  'ismungsm', 'format', 'Boolean')
        WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname',
                  'desfac', 'format', 'Double')
        WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname',
                  's0p', 'format', 'DoubleMat', 'mattype', 1)
        WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname',
                  's0t', 'format', 'DoubleMat', 'mattype', 1)
        WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname',
                  'rlaps', 'format', 'Double')
        WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname',
                  'rlapslgm', 'format', 'Double')

        if (self.isdelta18o == 0 and self.ismungsm == 0):
            WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname',
                      'monthlytemperatures', 'format', 'DoubleMat', 'mattype',
                      1, 'timeserieslength', md.mesh.numberofvertices + 1,
                      'yts', md.constants.yts)
            WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname',
                      'precipitation', 'format', 'DoubleMat', 'mattype', 1,
                      'scale', 1. / yts, 'timeserieslength',
                      md.mesh.numberofvertices + 1, 'yts', md.constants.yts)
        elif self.isdelta18o:
            WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname',
                      'temperatures_presentday', 'format', 'DoubleMat',
                      'mattype', 1, 'timeserieslength',
                      md.mesh.numberofvertices + 1, 'yts', md.constants.yts)
            WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname',
                      'temperatures_lgm', 'format', 'DoubleMat', 'mattype', 1,
                      'timeserieslength', md.mesh.numberofvertices + 1, 'yts',
                      md.constants.yts)
            WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname',
                      'precipitations_presentday', 'format', 'DoubleMat',
                      'mattype', 1, 'scale', 1. / yts, 'timeserieslength',
                      md.mesh.numberofvertices + 1, 'yts', md.constants.yts)
            WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname',
                      'precipitations_lgm', 'format', 'DoubleMat', 'mattype',
                      1, 'scale', 1. / yts, 'timeserieslength',
                      md.mesh.numberofvertices + 1, 'yts', md.constants.yts)
            WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname',
                      'delta18o_surface', 'format', 'DoubleMat', 'mattype', 1,
                      'timeserieslength', 2, 'yts', md.constants.yts)
            WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname',
                      'delta18o', 'format', 'DoubleMat', 'mattype', 1,
                      'timeserieslength', 2, 'yts', md.constants.yts)
            WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname',
                      'Tdiff', 'format', 'DoubleMat', 'mattype', 1,
                      'timeserieslength', 2, 'yts', md.constants.yts)
            WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname',
                      'sealev', 'format', 'DoubleMat', 'mattype', 1,
                      'timeserieslength', 2, 'yts', md.constants.yts)
        elif self.ismungsm:
            WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname',
                      'temperatures_presentday', 'format', 'DoubleMat',
                      'mattype', 1, 'timeserieslength',
                      md.mesh.numberofvertices + 1, 'yts', md.constants.yts)
            WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname',
                      'temperatures_lgm', 'format', 'DoubleMat', 'mattype', 1,
                      'timeserieslength', md.mesh.numberofvertices + 1, 'yts',
                      md.constants.yts)
            WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname',
                      'precipitations_presentday', 'format', 'DoubleMat',
                      'mattype', 1, 'scale', 1. / yts, 'timeserieslength',
                      md.mesh.numberofvertices + 1, 'yts', md.constants.yts)
            WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname',
                      'precipitations_lgm', 'format', 'DoubleMat', 'mattype',
                      1, 'scale', 1. / yts, 'timeserieslength',
                      md.mesh.numberofvertices + 1, 'yts', md.constants.yts)
            WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname',
                      'Pfac', 'format', 'DoubleMat', 'mattype', 1,
                      'timeserieslength', 2, 'yts', md.constants.yts)
            WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname',
                      'Tdiff', 'format', 'DoubleMat', 'mattype', 1,
                      'timeserieslength', 2, 'yts', md.constants.yts)
            WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname',
                      'sealev', 'format', 'DoubleMat', 'mattype', 1,
                      'timeserieslength', 2, 'yts', md.constants.yts)

        #process requested outputs
        outputs = self.requested_outputs
        indices = [i for i, x in enumerate(outputs) if x == 'default']
        if len(indices) > 0:
            outputscopy = outputs[0:max(0, indices[0] -
                                        1)] + self.defaultoutputs(
                                            md) + outputs[indices[0] + 1:]
            outputs = outputscopy
        WriteData(fid, prefix, 'data', outputs, 'name',
                  'md.smb.requested_outputs', 'format', 'StringArray')
예제 #19
0
 def marshall(self, prefix, md, fid):  # {{{
     WriteData(fid, prefix, 'name', 'md.mesh.domain_type', 'data',
               'Domain' + self.domaintype(), 'format', 'String')
     WriteData(fid, prefix, 'name', 'md.mesh.domain_dimension', 'data',
               self.dimension(), 'format', 'Integer')
     WriteData(fid, prefix, 'name', 'md.mesh.elementtype', 'data',
               self.elementtype(), 'format', 'String')
     WriteData(fid, prefix, 'object', self, 'fieldname', 'x', 'format',
               'DoubleMat', 'mattype', 1)
     WriteData(fid, prefix, 'object', self, 'fieldname', 'y', 'format',
               'DoubleMat', 'mattype', 1)
     WriteData(fid, prefix, 'object', self, 'fieldname', 'z', 'format',
               'DoubleMat', 'mattype', 1)
     WriteData(fid, prefix, 'object', self, 'fieldname', 'lat', 'format',
               'DoubleMat', 'mattype', 1)
     WriteData(fid, prefix, 'object', self, 'fieldname', 'long', 'format',
               'DoubleMat', 'mattype', 1)
     WriteData(fid, prefix, 'object', self, 'fieldname', 'r', 'format',
               'DoubleMat', 'mattype', 1)
     WriteData(fid, prefix, 'name', 'md.mesh.z', 'data',
               np.zeros(md.mesh.numberofvertices), 'format', 'DoubleMat',
               'mattype', 1)
     WriteData(fid, prefix, 'object', self, 'fieldname', 'elements',
               'format', 'DoubleMat', 'mattype', 2)
     WriteData(fid, prefix, 'object', self, 'fieldname', 'numberofelements',
               'format', 'Integer')
     WriteData(fid, prefix, 'object', self, 'fieldname', 'numberofvertices',
               'format', 'Integer')
     WriteData(fid, prefix, 'object', self, 'fieldname',
               'average_vertex_connectivity', 'format', 'Integer')
     WriteData(fid, prefix, 'object', self, 'fieldname', 'vertexonboundary',
               'format', 'DoubleMat', 'mattype', 1)
예제 #20
0
    def marshall(self, prefix, md, fid):  # {{{
        WriteData(fid, prefix, 'object', self, 'fieldname', 'isautodiff',
                  'format', 'Boolean')
        WriteData(fid, prefix, 'object', self, 'fieldname', 'driver', 'format',
                  'String')

        #early return
        if not self.isautodiff:
            WriteData(fid, prefix, 'data', False, 'name',
                      'md.autodiff.mass_flux_segments_present', 'format',
                      'Boolean')
            WriteData(fid, prefix, 'data', False, 'name', 'md.autodiff.keep',
                      'format', 'Boolean')
            return

        #buffer sizes {{{
        WriteData(fid, prefix, 'object', self, 'fieldname', 'obufsize',
                  'format', 'Double')
        WriteData(fid, prefix, 'object', self, 'fieldname', 'lbufsize',
                  'format', 'Double')
        WriteData(fid, prefix, 'object', self, 'fieldname', 'cbufsize',
                  'format', 'Double')
        WriteData(fid, prefix, 'object', self, 'fieldname', 'tbufsize',
                  'format', 'Double')
        WriteData(fid, prefix, 'object', self, 'fieldname', 'gcTriggerRatio',
                  'format', 'Double')
        WriteData(fid, prefix, 'object', self, 'fieldname', 'gcTriggerMaxSize',
                  'format', 'Double')
        #}}}
        #process dependent variables {{{
        num_dependent_objects = len(self.dependents)
        WriteData(fid, prefix, 'data', num_dependent_objects, 'name',
                  'md.autodiff.num_dependent_objects', 'format', 'Integer')

        if num_dependent_objects:
            names = []
            types = np.zeros(num_dependent_objects)
            indices = np.zeros(num_dependent_objects)

            for i, dep in enumerate(self.dependents):
                names.append(dep.name)
                types[i] = dep.typetoscalar()
                indices[i] = dep.index

            WriteData(fid, prefix, 'data', names, 'name',
                      'md.autodiff.dependent_object_names', 'format',
                      'StringArray')
            WriteData(fid, prefix, 'data', types, 'name',
                      'md.autodiff.dependent_object_types', 'format', 'IntMat',
                      'mattype', 3)
            WriteData(fid, prefix, 'data', indices, 'name',
                      'md.autodiff.dependent_object_indices', 'format',
                      'IntMat', 'mattype', 3)
        #}}}
        #process independent variables {{{
        num_independent_objects = len(self.independents)
        WriteData(fid, prefix, 'data', num_independent_objects, 'name',
                  'md.autodiff.num_independent_objects', 'format', 'Integer')

        if num_independent_objects:
            names = [None] * num_independent_objects
            types = np.zeros(num_independent_objects)

            for i, indep in enumerate(self.independents):
                names[i] = indep.name
                types[i] = indep.typetoscalar()

            WriteData(fid, prefix, 'data', names, 'name',
                      'md.autodiff.independent_object_names', 'format',
                      'StringArray')
            WriteData(fid, prefix, 'data', types, 'name',
                      'md.autodiff.independent_object_types', 'format',
                      'IntMat', 'mattype', 3)
        #}}}
        #if driver is fos_forward, build index:  {{{
        if strcmpi(self.driver, 'fos_forward'):
            index = 0

            for indep in self.independents:
                if not np.isnan(indep.fos_forward_index):
                    index += indep.fos_forward_index
                    break
                else:
                    if strcmpi(indep.type, 'scalar'):
                        index += 1
                    else:
                        index += indep.nods

            index -= 1  #get c-index numbering going
            WriteData(fid, prefix, 'data', index, 'name',
                      'md.autodiff.fos_forward_index', 'format', 'Integer')
        #}}}
        #if driver is fos_reverse, build index:  {{{
        if strcmpi(self.driver, 'fos_reverse'):
            index = 0

            for dep in self.dependents:
                if not np.isnan(dep.fos_reverse_index):
                    index += dep.fos_reverse_index
                    break
                else:
                    if strcmpi(dep.type, 'scalar'):
                        index += 1
                    else:
                        index += dep.nods

            index -= 1  #get c-index numbering going
            WriteData(fid, prefix, 'data', index, 'name',
                      'md.autodiff.fos_reverse_index', 'format', 'Integer')
        #}}}
        #if driver is fov_forward, build indices:  {{{
        if strcmpi(self.driver, 'fov_forward'):
            indices = 0

            for indep in self.independents:
                if indep.fos_forward_index:
                    indices += indep.fov_forward_indices
                    break
                else:
                    if strcmpi(indep.type, 'scalar'):
                        indices += 1
                    else:
                        indices += indep.nods

            indices -= 1  #get c-indices numbering going
            WriteData(fid, prefix, 'data', indices, 'name',
                      'md.autodiff.fov_forward_indices', 'format', 'IntMat',
                      'mattype', 3)
        #}}}
        #deal with mass fluxes:  {{{
        mass_flux_segments = [
            dep.segments for dep in self.dependents
            if strcmpi(dep.name, 'MassFlux')
        ]

        if mass_flux_segments:
            WriteData(fid, prefix, 'data', mass_flux_segments, 'name',
                      'md.autodiff.mass_flux_segments', 'format', 'MatArray')
            flag = True
        else:
            flag = False
        WriteData(fid, prefix, 'data', flag, 'name',
                  'md.autodiff.mass_flux_segments_present', 'format',
                  'Boolean')
        #}}}
        #deal with trace keep on: {{{
        keep = False

        #From ADOLC userdoc:
        # The optional integer argument keep of trace on determines whether the numerical values of all active variables are
        # recorded in a buffered temporary array or file called the taylor stack. This option takes effect if keep = 1 and
        # prepares the scene for an immediately following gradient evaluation by a call to a routine implementing the reverse
        # mode as described in the Section 4 and Section 5.
        #

        if len(self.driver) <= 3:
            keep = False  #there is no "_reverse" string within the driver string:
        else:
            if strncmpi(self.driver[3:], '_reverse', 8):
                keep = True
            else:
                keep = False
        WriteData(fid, prefix, 'data', keep, 'name', 'md.autodiff.keep',
                  'format', 'Boolean')
        #}}}

        return
예제 #21
0
    def marshall(self, prefix, md, fid):  # {{{

        yts = md.constants.yts

        WriteData(fid, prefix, 'name', 'md.inversion.type', 'data', 0,
                  'format', 'Integer')
        WriteData(fid, prefix, 'object', self, 'fieldname', 'iscontrol',
                  'format', 'Boolean')
        WriteData(fid, prefix, 'object', self, 'fieldname',
                  'incomplete_adjoint', 'format', 'Boolean')
        if not self.iscontrol:
            return
        WriteData(fid, prefix, 'object', self, 'fieldname', 'nsteps', 'format',
                  'Integer')
        WriteData(fid, prefix, 'object', self, 'fieldname', 'maxiter_per_step',
                  'format', 'DoubleMat', 'mattype', 3)
        WriteData(fid, prefix, 'object', self, 'fieldname',
                  'cost_functions_coefficients', 'format', 'DoubleMat',
                  'mattype', 1)
        WriteData(fid, prefix, 'object', self, 'fieldname', 'gradient_scaling',
                  'format', 'DoubleMat', 'mattype', 3)
        WriteData(fid, prefix, 'object', self, 'fieldname',
                  'cost_function_threshold', 'format', 'Double')
        WriteData(fid, prefix, 'object', self, 'fieldname', 'min_parameters',
                  'format', 'DoubleMat', 'mattype', 3)
        WriteData(fid, prefix, 'object', self, 'fieldname', 'max_parameters',
                  'format', 'DoubleMat', 'mattype', 3)
        WriteData(fid, prefix, 'object', self, 'fieldname', 'step_threshold',
                  'format', 'DoubleMat', 'mattype', 3)
        WriteData(fid, prefix, 'object', self, 'fieldname', 'vx_obs', 'format',
                  'DoubleMat', 'mattype', 1, 'scale', 1. / yts)
        WriteData(fid, prefix, 'object', self, 'fieldname', 'vy_obs', 'format',
                  'DoubleMat', 'mattype', 1, 'scale', 1. / yts)
        WriteData(fid, prefix, 'object', self, 'fieldname', 'vz_obs', 'format',
                  'DoubleMat', 'mattype', 1, 'scale', 1. / yts)
        WriteData(fid, prefix, 'object', self, 'fieldname', 'thickness_obs',
                  'format', 'DoubleMat', 'mattype', 1)
        WriteData(fid, prefix, 'object', self, 'fieldname', 'surface_obs',
                  'format', 'DoubleMat', 'mattype', 1)

        #process control parameters
        num_control_parameters = len(self.control_parameters)
        WriteData(fid, prefix, 'object', self, 'fieldname',
                  'control_parameters', 'format', 'StringArray')
        WriteData(fid, prefix, 'data', num_control_parameters, 'name',
                  'md.inversion.num_control_parameters', 'format', 'Integer')

        #process cost functions
        num_cost_functions = np.size(self.cost_functions)
        data = marshallcostfunctions(self.cost_functions)
        WriteData(fid, prefix, 'data', data, 'name',
                  'md.inversion.cost_functions', 'format', 'StringArray')
        WriteData(fid, prefix, 'data', num_cost_functions, 'name',
                  'md.inversion.num_cost_functions', 'format', 'Integer')
예제 #22
0
 def marshall(self, prefix, md, fid):  # {{{
     WriteData(fid, prefix, 'name', 'md.mesh.domain_type', 'data',
               "Domain" + self.domaintype(), 'format', 'String')
     WriteData(fid, prefix, 'name', 'md.mesh.domain_dimension', 'data',
               self.dimension(), 'format', 'Integer')
     WriteData(fid, prefix, 'name', 'md.mesh.elementtype', 'data',
               self.elementtype(), 'format', 'String')
     WriteData(fid, prefix, 'object', self, 'class', 'mesh', 'fieldname',
               'x', 'format', 'DoubleMat', 'mattype', 1)
     WriteData(fid, prefix, 'object', self, 'class', 'mesh', 'fieldname',
               'y', 'format', 'DoubleMat', 'mattype', 1)
     WriteData(fid, prefix, 'object', self, 'class', 'mesh', 'fieldname',
               'z', 'format', 'DoubleMat', 'mattype', 1)
     WriteData(fid, prefix, 'object', self, 'class', 'mesh', 'fieldname',
               'elements', 'format', 'DoubleMat', 'mattype', 2)
     WriteData(fid, prefix, 'object', self, 'class', 'mesh', 'fieldname',
               'numberoflayers', 'format', 'Integer')
     WriteData(fid, prefix, 'object', self, 'class', 'mesh', 'fieldname',
               'numberofelements', 'format', 'Integer')
     WriteData(fid, prefix, 'object', self, 'class', 'mesh', 'fieldname',
               'numberofvertices', 'format', 'Integer')
     WriteData(fid, prefix, 'object', self, 'class', 'mesh', 'fieldname',
               'vertexonbase', 'format', 'BooleanMat', 'mattype', 1)
     WriteData(fid, prefix, 'object', self, 'class', 'mesh', 'fieldname',
               'vertexonsurface', 'format', 'BooleanMat', 'mattype', 1)
     WriteData(fid, prefix, 'object', self, 'class', 'mesh', 'fieldname',
               'lowerelements', 'format', 'DoubleMat', 'mattype', 2)
     WriteData(fid, prefix, 'object', self, 'class', 'mesh', 'fieldname',
               'upperelements', 'format', 'DoubleMat', 'mattype', 2)
     WriteData(fid, prefix, 'object', self, 'class', 'mesh', 'fieldname',
               'average_vertex_connectivity', 'format', 'Integer')
     WriteData(fid, prefix, 'object', self, 'class', 'mesh', 'fieldname',
               'elements2d', 'format', 'DoubleMat', 'mattype', 3)
     WriteData(fid, prefix, 'object', self, 'class', 'mesh', 'fieldname',
               'numberofvertices2d', 'format', 'Integer')
     WriteData(fid, prefix, 'object', self, 'class', 'mesh', 'fieldname',
               'numberofelements2d', 'format', 'Integer')
예제 #23
0
 def marshall(self,prefix,md,fid):    # {{{
     WriteData(fid,prefix,'object',self,'fieldname','level_max','format','Integer')
     WriteData(fid,prefix,'object',self,'fieldname','region_level_1','format','Double')
     WriteData(fid,prefix,'object',self,'fieldname','region_level_max','format','Double')
예제 #24
0
    def marshall(self, prefix, md, fid):  # {{{
        WriteData(fid, prefix, 'name', 'md.materials.type', 'data', 3,
                  'format', 'Integer')
        WriteData(fid, prefix, 'object', self, 'class', 'materials',
                  'fieldname', 'rho_ice', 'format', 'Double')
        WriteData(fid, prefix, 'object', self, 'class', 'materials',
                  'fieldname', 'rho_water', 'format', 'Double')
        WriteData(fid, prefix, 'object', self, 'class', 'materials',
                  'fieldname', 'rho_freshwater', 'format', 'Double')
        WriteData(fid, prefix, 'object', self, 'class', 'materials',
                  'fieldname', 'mu_water', 'format', 'Double')
        WriteData(fid, prefix, 'object', self, 'class', 'materials',
                  'fieldname', 'heatcapacity', 'format', 'Double')
        WriteData(fid, prefix, 'object', self, 'class', 'materials',
                  'fieldname', 'latentheat', 'format', 'Double')
        WriteData(fid, prefix, 'object', self, 'class', 'materials',
                  'fieldname', 'thermalconductivity', 'format', 'Double')
        WriteData(fid, prefix, 'object', self, 'class', 'materials',
                  'fieldname', 'temperateiceconductivity', 'format', 'Double')
        WriteData(fid, prefix, 'object', self, 'class', 'materials',
                  'fieldname', 'meltingpoint', 'format', 'Double')
        WriteData(fid, prefix, 'object', self, 'class', 'materials',
                  'fieldname', 'beta', 'format', 'Double')
        WriteData(fid, prefix, 'object', self, 'class', 'materials',
                  'fieldname', 'mixed_layer_capacity', 'format', 'Double')
        WriteData(fid, prefix, 'object', self, 'class', 'materials',
                  'fieldname', 'thermal_exchange_velocity', 'format', 'Double')
        WriteData(fid, prefix, 'object', self, 'class', 'materials',
                  'fieldname', 'rheology_B', 'format', 'DoubleMat', 'mattype',
                  1, 'timeserieslength', md.mesh.numberofvertices + 1, 'yts',
                  md.constants.yts)
        WriteData(fid, prefix, 'object', self, 'class', 'materials',
                  'fieldname', 'rheology_n', 'format', 'DoubleMat', 'mattype',
                  2)
        WriteData(fid, prefix, 'data', self.rheology_law, 'name',
                  'md.materials.rheology_law', 'format', 'String')

        WriteData(fid, prefix, 'object', self, 'class', 'materials',
                  'fieldname', 'lithosphere_shear_modulus', 'format', 'Double')
        WriteData(fid, prefix, 'object', self, 'class', 'materials',
                  'fieldname', 'lithosphere_density', 'format', 'Double',
                  'scale', 10.**3.)
        WriteData(fid, prefix, 'object', self, 'class', 'materials',
                  'fieldname', 'mantle_shear_modulus', 'format', 'Double')
        WriteData(fid, prefix, 'object', self, 'class', 'materials',
                  'fieldname', 'mantle_density', 'format', 'Double', 'scale',
                  10.**3.)
        WriteData(fid, prefix, 'object', self, 'class', 'materials',
                  'fieldname', 'earth_density', 'format', 'Double')
예제 #25
0
 def marshall(self, prefix, md, fid):  # {{{
     WriteData(fid, prefix, 'object', self, 'fieldname', 'isSIA', 'format',
               'Boolean')
     WriteData(fid, prefix, 'object', self, 'fieldname', 'isSSA', 'format',
               'Boolean')
     WriteData(fid, prefix, 'object', self, 'fieldname', 'isL1L2', 'format',
               'Boolean')
     WriteData(fid, prefix, 'object', self, 'fieldname', 'isHO', 'format',
               'Boolean')
     WriteData(fid, prefix, 'object', self, 'fieldname', 'isFS', 'format',
               'Boolean')
     WriteData(fid, prefix, 'object', self, 'fieldname', 'fe_SSA', 'data',
               self.fe_SSA, 'format', 'String')
     WriteData(fid, prefix, 'object', self, 'fieldname', 'fe_HO', 'data',
               self.fe_HO, 'format', 'String')
     WriteData(fid, prefix, 'object', self, 'fieldname', 'fe_FS', 'data',
               self.fe_FS, 'format', 'String')
     WriteData(fid, prefix, 'object', self, 'fieldname',
               'augmented_lagrangian_r', 'format', 'Double')
     WriteData(fid, prefix, 'object', self, 'fieldname',
               'augmented_lagrangian_rhop', 'format', 'Double')
     WriteData(fid, prefix, 'object', self, 'fieldname',
               'augmented_lagrangian_rlambda', 'format', 'Double')
     WriteData(fid, prefix, 'object', self, 'fieldname',
               'augmented_lagrangian_rholambda', 'format', 'Double')
     WriteData(fid, prefix, 'object', self, 'fieldname', 'XTH_theta',
               'data', self.XTH_theta, 'format', 'Double')
     WriteData(fid, prefix, 'object', self, 'fieldname', 'borderSSA',
               'format', 'DoubleMat', 'mattype', 1)
     WriteData(fid, prefix, 'object', self, 'fieldname', 'borderHO',
               'format', 'DoubleMat', 'mattype', 1)
     WriteData(fid, prefix, 'object', self, 'fieldname', 'borderFS',
               'format', 'DoubleMat', 'mattype', 1)
     #convert approximations to enums
     WriteData(fid, prefix, 'data', self.vertex_equation, 'name',
               'md.flowequation.vertex_equation', 'format', 'DoubleMat',
               'mattype', 1)
     WriteData(fid, prefix, 'data', self.element_equation, 'name',
               'md.flowequation.element_equation', 'format', 'DoubleMat',
               'mattype', 2)
예제 #26
0
	def marshall(self,prefix,md,fid): #{{{ 
		WriteData(fid,prefix,'name','md.hydrology.model','data',1,'format','Integer')
		WriteData(fid,prefix,'object',self,'fieldname','water_compressibility','format','Double')
		WriteData(fid,prefix,'object',self,'fieldname','isefficientlayer','format','Boolean')
		WriteData(fid,prefix,'object',self,'fieldname','penalty_factor','format','Double')
		WriteData(fid,prefix,'object',self,'fieldname','penalty_lock','format','Integer')
		WriteData(fid,prefix,'object',self,'fieldname','rel_tol','format','Double')
		WriteData(fid,prefix,'object',self,'fieldname','max_iter','format','Integer')
		WriteData(fid,prefix,'object',self,'fieldname','sedimentlimit_flag','format','Integer')
		WriteData(fid,prefix,'object',self,'fieldname','transfer_flag','format','Integer')
		if self.sedimentlimit_flag==1:
			WriteData(fid,prefix,'object',self,'fieldname','sedimentlimit','format','Double')

		if self.transfer_flag==1:
			WriteData(fid,prefix,'object',self,'fieldname','leakage_factor','format','Double')

		WriteData(fid,prefix,'object',self,'fieldname','basal_moulin_input','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
		WriteData(fid,prefix,'object',self,'fieldname','spcsediment_head','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
		WriteData(fid,prefix,'object',self,'fieldname','sediment_compressibility','format','Double')
		WriteData(fid,prefix,'object',self,'fieldname','sediment_porosity','format','Double')			
		WriteData(fid,prefix,'object',self,'fieldname','sediment_thickness','format','Double')
		WriteData(fid,prefix,'object',self,'fieldname','sediment_transmitivity','format','DoubleMat','mattype',1)		

		if self.isefficientlayer==1:	
			WriteData(fid,prefix,'object',self,'fieldname','spcepl_head','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)	
			WriteData(fid,prefix,'object',self,'fieldname','mask_eplactive_node','format','DoubleMat','mattype',1)
			WriteData(fid,prefix,'object',self,'fieldname','epl_compressibility','format','Double')			
			WriteData(fid,prefix,'object',self,'fieldname','epl_porosity','format','Double')			
			WriteData(fid,prefix,'object',self,'fieldname','epl_max_thickness','format','Double')
			WriteData(fid,prefix,'object',self,'fieldname','epl_initial_thickness','format','Double')			
			WriteData(fid,prefix,'object',self,'fieldname','epl_colapse_thickness','format','Double')
			WriteData(fid,prefix,'object',self,'fieldname','epl_thick_comp','format','Integer')			
			WriteData(fid,prefix,'object',self,'fieldname','epl_conductivity','format','Double')
			WriteData(fid,prefix,'object',self,'fieldname','eplflip_lock','format','Integer')