Changeset 13966
- Timestamp:
- 11/15/12 13:56:25 (12 years ago)
- Location:
- issm/trunk-jpl/src/m
- Files:
-
- 1 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/m/classes/model/model.py
r13857 r13966 31 31 from inversion import inversion 32 32 from qmu import qmu 33 from results import results 33 34 from radaroverlay import radaroverlay 34 35 from miscellaneous import miscellaneous 35 36 from private import private 36 from collections import OrderedDict37 37 from EnumDefinitions import * 38 38 from ismumps import * … … 87 87 self.qmu = qmu() 88 88 89 self.results = OrderedDict()89 self.results = results() 90 90 self.radaroverlay = radaroverlay() 91 91 self.miscellaneous = miscellaneous() … … 410 410 #Results fields 411 411 if md1.results: 412 md2.results=OrderedDict() 413 for solutionfield in md1.results.iterkeys(): 414 #get time step 415 for i in m1.results[solutionfield].iterkeys(): 416 #get subfields 417 for solutionsubfield,field in m1.results[solutionfield][i].iteritems(): 418 if numpy.size(field)==numberofvertices1: 419 md2.results[solutionfield][i][solutionsubfield]=field[pos_node] 420 elif numpy.size(field)==numberofelements1: 421 md2.results[solutionfield][i][solutionsubfield]=field[pos_elem] 412 md2.results=results() 413 for solutionfield,field in md1.results.__dict__.iteritems(): 414 if isinstance(field,list): 415 setattr(md2.results,solutionfield,[]) 416 #get time step 417 for i,fieldi in enumerate(field): 418 if isinstance(fieldi,results) and fieldi: 419 getattr(md2.results,solutionfield).append(results()) 420 fieldr=getattr(md2.results,solutionfield)[i] 421 #get subfields 422 for solutionsubfield,subfield in fieldi.__dict__.iteritems(): 423 if numpy.size(subfield)==numberofvertices1: 424 setattr(fieldr,solutionsubfield,subfield[pos_node]) 425 elif numpy.size(subfield)==numberofelements1: 426 setattr(fieldr,solutionsubfield,subfield[pos_elem]) 427 else: 428 setattr(fieldr,solutionsubfield,subfield) 422 429 else: 423 md2.results[solutionfield][i][solutionsubfield]=field 430 getattr(md2.results,solutionfield).append(None) 431 elif isinstance(field,results): 432 setattr(md2.results,solutionfield,results()) 433 if isinstance(field,results) and field: 434 fieldr=getattr(md2.results,solutionfield) 435 #get subfields 436 for solutionsubfield,subfield in field.__dict__.iteritems(): 437 if numpy.size(subfield)==numberofvertices1: 438 setattr(fieldr,solutionsubfield,subfield[pos_node]) 439 elif numpy.size(subfield)==numberofelements1: 440 setattr(fieldr,solutionsubfield,subfield[pos_elem]) 441 else: 442 setattr(fieldr,solutionsubfield,subfield) 424 443 425 444 #Keep track of pos_node and pos_elem -
issm/trunk-jpl/src/m/solve/MatlabProcessPatch.py
r13023 r13966 8 8 9 9 #loop over steps 10 for structurei in structure .itervalues():10 for structurei in structure: 11 11 12 12 #return if there is no field Patch 13 if 'Patch' not in structurei:13 if not hasattr(structurei,'Patch'): 14 14 continue 15 15 -
issm/trunk-jpl/src/m/solve/loadresultsfromdisk.py
r13116 r13966 1 1 import os 2 from collections import OrderedDict2 from results import * 3 3 from parseresultsfromdisk import * 4 4 from EnumToString import EnumToString 5 from MatlabFuncs import * 5 6 6 7 def loadresultsfromdisk(md,filename): … … 23 24 24 25 #initialize md.results if not a structure yet 25 if not isinstance(md.results, dict):26 md.results= OrderedDict()26 if not isinstance(md.results,results): 27 md.results=results() 27 28 28 29 #load results onto model 29 structure=parseresultsfromdisk(filename, ~md.settings.io_gather)30 structure=parseresultsfromdisk(filename,not md.settings.io_gather) 30 31 if not len(structure): 31 32 raise RuntimeError("No result found in binary file '%s'. Check for solution crash." % filename) 32 md.results[structure[1]['SolutionType']]=structure;33 setattr(md.results,structure[0].SolutionType,structure) 33 34 34 35 #recover solution_type from results 35 md.private.solution=structure[ 1]['SolutionType']36 md.private.solution=structure[0].SolutionType 36 37 37 38 #read log files onto fields 38 39 if os.path.exists(md.miscellaneous.name+'.errlog'): 39 40 with open(md.miscellaneous.name+'.errlog','r') as f: 40 md.results[structure[1]['SolutionType']]['errlog']=[line[:-1] for line in f]41 setattr(getattr(md.results,structure[0].SolutionType)[0],'errlog',[line[:-1] for line in f]) 41 42 else: 42 md.results[structure[1]['SolutionType']]['errlog']=[]43 setattr(getattr(md.results,structure[0].SolutionType)[0],'errlog',[]) 43 44 44 45 if os.path.exists(md.miscellaneous.name+'.outlog'): 45 46 with open(md.miscellaneous.name+'.outlog','r') as f: 46 md.results[structure[1]['SolutionType']]['outlog']=[line[:-1] for line in f]47 setattr(getattr(md.results,structure[0].SolutionType)[0],'outlog',[line[:-1] for line in f]) 47 48 else: 48 md.results[structure[1]['SolutionType']]['outlog']=[]49 setattr(getattr(md.results,structure[0].SolutionType)[0],'outlog',[]) 49 50 50 if len( md.results[structure[1]['SolutionType']]['errlog']):51 if len(getattr(md.results,structure[0].SolutionType)[0].errlog): 51 52 print ("loadresultsfromcluster info message: error during solution. Check your errlog and outlog model fields.") 53 54 #if only one solution, extract it from list for user friendliness 55 if len(structure) == 1 and not strcmp(structure[0].SolutionType,'TransientSolution'): 56 setattr(md.results,structure[0].SolutionType,structure[0]) 52 57 53 58 #post processes qmu results if necessary -
issm/trunk-jpl/src/m/solve/parseresultsfromdisk.py
r13462 r13966 2 2 import numpy 3 3 from collections import OrderedDict 4 import results as resultsclass 4 5 from MatlabFuncs import * 5 6 from MatlabProcessPatch import * … … 37 38 raise IOError("loadresultsfromdisk error message: could not open '%s' for binary reading." % filename) 38 39 39 results= OrderedDict()40 results=[] 40 41 41 42 #Read fields until the end of the file. 42 43 result=ReadData(fid) 43 44 while result: 45 if result['step'] > len(results): 46 for i in xrange(len(results),result['step']-1): 47 results.append(None) 48 results.append(resultsclass.results()) 44 49 #Get time and step 45 if result['step'] not in results: 46 results[result['step']]=OrderedDict() 47 results[result['step']]['step']=result['step'] 48 results[result['step']]['time']=result['time'] 50 setattr(results[result['step']-1],'step',result['step']) 51 setattr(results[result['step']-1],'time',result['time']) 49 52 50 53 #Add result 51 if result['step'] in results and \ 52 result['fieldname'] in results[result['step']] and \ 53 not strcmp(result['fieldname'],'SolutionType'): 54 results[result['step']][result['fieldname']]=numpy.vstack((results[result['step']][result['fieldname']],result['field'])) 55 else: 56 results[result['step']][result['fieldname']]=result['field'] 54 if hasattr(results[result['step']-1],result['fieldname']) and not strcmp(result['fieldname'],'SolutionType'): 55 setattr(results[result['step']-1],result['fieldname'],numpy.vstack((getattr(results[result['step']-1],result['fieldname']),result['field']))) 56 else: 57 setattr(results[result['step']-1],result['fieldname'],result['field']) 57 58 58 59 #read next result … … 78 79 raise IOError("loadresultsfromdisk error message: could not open '%s' for binary reading." % filename) 79 80 80 results= OrderedDict()81 results=[] 81 82 82 83 #if we have done split I/O, ie, we have results that are fragmented across patches, … … 86 87 87 88 #Get time and step 88 if result['step'] not in results: 89 results[result['step']]=OrderedDict() 90 results[result['step']]['step']=result['step'] 91 results[result['step']]['time']=result['time'] 89 if result['step'] > len(results): 90 for i in xrange(len(results),result['step']-1): 91 results.append(None) 92 results.append(resultsclass.results()) 93 setattr(results[result['step']-1],'step',result['step']) 94 setattr(results[result['step']-1],'time',result['time']) 92 95 93 96 #Add result 94 97 if strcmpi(result['fieldname'],'Patch'): 95 results[result['step']][result['fieldname']]=[0,result['N']]96 else: 97 results[result['step']][result['fieldname']]=float('NaN')98 setattr(results[result['step']-1],result['fieldname'],[0,result['N']]) 99 else: 100 setattr(results[result['step']-1],result['fieldname'],float('NaN')) 98 101 99 102 #read next result … … 107 110 #Add result 108 111 if strcmpi(result['fieldname'],'Patch'): 109 patchdimensions= results[result['step']][result['fieldname']]110 results[result['step']][result['fieldname']]=[patchdimensions[0]+result['M'],result['N']]112 patchdimensions=getattr(results[result['step']-1],result['fieldname']) 113 setattr(results[result['step']-1],result['fieldname'],[patchdimensions[0]+result['M'],result['N']]) 111 114 112 115 #read next result … … 116 119 for result in results.itervalues(): 117 120 if 'Patch' in result: 118 result['Patch']=numpy.zeros(shape=(result['Patch'][0],result['Patch'][1]),dtype=float)119 result['counter']=0#use to index into the patch121 setattr(result,'Patch',numpy.zeros((result['Patch'][0],result['Patch'][1]))) 122 setattr(result,'counter',0) #use to index into the patch 120 123 121 124 #third pass, this time to read the real information … … 125 128 126 129 #Get time and step 127 if result['step'] not in results: 128 results[result['step']]=OrderedDict() 129 results[result['step']]['step']=result['step'] 130 results[result['step']]['time']=result['time'] 130 if result['step']> len(results): 131 for i in xrange(len(results),result['step']-1): 132 results.append(None) 133 results.append(resultsclass.results()) 134 setattr(results[result['step']-1],'step',result['step']) 135 setattr(results[result['step']-1],'time',result['time']) 131 136 132 137 #Add result 133 138 if strcmpi(result['fieldname'],'Patch'): 134 counter=results[result['step'] ]['counter']139 counter=results[result['step']-1].counter 135 140 counter2=counter+result['field'].shape[0]-1 136 results[result['step']][result['fieldname']][counter:counter2,:]=result['field'] 137 141 getattr(results[result['step']-1],result['fieldname'])[counter:counter2,:]=result['field'] 138 142 #increment counter: 139 results[result['step'] ]['counter']=counter2+1140 else: 141 results[result['step']][result['fieldname']]=result['field']143 results[result['step']-1].counter=counter2+1 144 else: 145 setattr(results[result['step']-1],result['fieldname'],result['field']) 142 146 143 147 #read next result … … 188 192 189 193 except struct.error as e: 190 result= OrderedDict()194 result=None 191 195 192 196 return result … … 230 234 231 235 except struct.error as e: 232 result= OrderedDict()236 result=None 233 237 234 238 return result
Note:
See TracChangeset
for help on using the changeset viewer.