Changeset 24173
- Timestamp:
- 09/27/19 16:44:53 (5 years ago)
- Location:
- issm/trunk-jpl/src/m
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/m/classes/qmu.m
r24168 r24173 66 66 end 67 67 end 68 if ~isempty(md.qmu.vpartition) ,69 if numel(md.qmu.vpartition)~=md.mesh.numberofvertices 68 if ~isempty(md.qmu.vpartition) & ~any(isnan(md.qmu.vpartition)), 69 if numel(md.qmu.vpartition)~=md.mesh.numberofvertices 70 70 md = checkmessage(md,['user supplied vertex partition for qmu analysis should have size md.mesh.numberofvertices x 1']); 71 71 end … … 77 77 end 78 78 end 79 if ~isempty(md.qmu.epartition) ,79 if ~isempty(md.qmu.epartition) & ~any(isnan(md.qmu.epartition)), 80 80 if numel(md.qmu.epartition)~=md.mesh.numberofelements, 81 81 md = checkmessage(md,['user supplied element partition for qmu analysis should have size md.mesh.numberofelements x 1']); … … 88 88 end 89 89 end 90 if isempty(md.qmu.vpartition) & isempty(md.qmu.epartition), 91 md = checkmessage(md,['for qmu analysis, at least one of element and partitioning vectors need to be supplied!']); 92 end 90 if isempty(md.qmu.vpartition) | any(isnan(md.qmu.vpartition)) | isempty(md.qmu.epartition) | any(isnan(md.qmu.epartition)), 91 md = checkmessage(md,['for qmu analysis, both an element and partitioning vectors need to be supplied with no nan values! One can be defaulted to all zeros.']); 92 end 93 93 94 end % }}} 94 95 function disp(self) % {{{ -
issm/trunk-jpl/src/m/classes/qmu.py
r24162 r24173 25 25 self.params = OrderedStruct() 26 26 self.results = OrderedDict() 27 self.partition = float('NaN') 27 self.vpartition = float('NaN') 28 self.epartition = float('NaN') 28 29 self.numberofpartitions = 0 29 30 self.numberofresponses = 0 … … 107 108 s+=" %-*s: [%ix%i] '%s'\n" % (maxlen+1,fname,a,b,type(getattr(result,fname))) 108 109 109 s+="%s\n" % fielddisplay(self,'partition','user provided mesh partitioning, defaults to metis if not specified') 110 s+="%s\n" % fielddisplay(self,'vpartition','user provided mesh partitioning (vertex based)') 111 s+="%s\n" % fielddisplay(self,'epartition','user provided mesh partitioning (element based)') 110 112 s+="%s\n" % fielddisplay(self,'numberofpartitions','number of partitions for semi-discrete qmu') 111 113 s+="%s\n" % fielddisplay(self,'variabledescriptors','') … … 152 154 md.checkmessage('in parallel library mode, the requirement is for md.cluster.np = md.qmu.params.processors_per_evaluation * number_of_slaves, where number_of_slaves will automatically be determined by Dakota. Modify md.cluster.np accordingly') 153 155 154 if np.size(md.qmu.partition) > 0: 155 if (np.size(md.qmu.partition)!=md.mesh.numberofvertices and np.size(md.qmu.partition) != md.mesh.numberofelements) or np.size(md.qmu.partition,1) != 1: 156 md.checkmessage("user supplied partition for qmu analysis should have size (md.mesh.numberofvertices x 1) or (md.mesh.numberofelements x 1)") 157 if not min(md.qmu.partition.flatten())==0: 158 md.checkmessage("partition vector not indexed from 0 on") 159 if max(md.qmu.partition.flatten())>=md.qmu.numberofpartitions: 160 md.checkmessage("for qmu analysis, partitioning vector cannot go over npart, number of partition areas") 156 if np.size(md.qmu.vpartition) > 0: 157 if np.size(md.qmu.vpartition)!=md.mesh.numberofvertices: 158 md.checkmessage("user supplied vertex partition for qmu analysis should have size (md.mesh.numberofvertices x 1)") 159 if not min(md.qmu.vpartition.flatten())==0: 160 md.checkmessage("vertex partition vector not indexed from 0 on") 161 if max(md.qmu.vpartition.flatten())>=md.qmu.numberofpartitions: 162 md.checkmessage("for qmu analysis, vertex partitioning vector cannot go over npart, number of partition areas") 163 164 if np.size(md.qmu.epartition) > 0: 165 if np.size(md.qmu.epartition) != md.mesh.numberofelements: 166 md.checkmessage("user supplied element partition for qmu analysis should have size (md.mesh.numberofelements x 1)") 167 if not min(md.qmu.epartition.flatten())==0: 168 md.checkmessage("elememtn partition vector not indexed from 0 on") 169 if max(md.qmu.epartition.flatten())>=md.qmu.numberofpartitions: 170 md.checkmessage("for qmu analysis, element partitioning vector cannot go over npart, number of partition areas") 171 172 if np.size(md.qmu.vpartition) == 0 or np.any(np.isnan(md.qmu.vpartition)) or np.size(md.qmu.epartition) == 0 or np.any(np.isnan(md.qmu.epartition)): 173 md.checkmessage("for qmu analysis, both an element and partitioning vectors need to be supplied with no nan values! One can be defaulted to all zeros.") 161 174 162 175 return md … … 167 180 WriteData(fid,prefix,'data',False,'name','md.qmu.mass_flux_segments_present','format','Boolean'); 168 181 return 169 WriteData(fid,prefix,'object',self,'fieldname','partition','format','DoubleMat','mattype',2) 182 WriteData(fid,prefix,'object',self,'fieldname','vpartition','format','DoubleMat','mattype',2) 183 WriteData(fid,prefix,'object',self,'fieldname','epartition','format','DoubleMat','mattype',2) 170 184 WriteData(fid,prefix,'object',self,'fieldname','numberofpartitions','format','Integer') 171 185 WriteData(fid,prefix,'object',self,'fieldname','numberofresponses','format','Integer') -
issm/trunk-jpl/src/m/partition/partitioner.m
r24161 r24173 9 9 % section: 1 by defaults(1=bisection, 2=quadrisection, 3=octasection) 10 10 % recomputeadjacency: 'on' by default (set to 'off' to compute existing one) 11 % type: 'node' or 'element' partition vector (default to 'node') 11 12 % Output: md.qmu.partition recover the partition vector 12 13 % … … 24 25 options=addfielddefault(options,'section',1); 25 26 options=addfielddefault(options,'recomputeadjacency','on'); 27 options=addfielddefault(options,'type','node'); 26 28 27 29 %get package: … … 29 31 npart=getfieldvalue(options,'npart'); 30 32 recomputeadjacency=getfieldvalue(options,'recomputeadjacency'); 33 vectortype=getfieldvalue(options,'type'); 31 34 32 35 if(dimension(md.mesh)==3), … … 53 56 if strcmpi(package,'chaco'), 54 57 55 % default method (from chaco.m) 56 method=[1 1 0 0 1 1 50 0 .001 7654321]'; 57 method(1)=3; % global method (3=inertial (geometric)) 58 method(3)=0; % vertex weights (0=off, 1=on) 58 if strcmpi(vectortype,'element') 59 error(['partitioner error message: package ' package ' does not allow element partitions.']); 60 else 59 61 60 %specify bisection 61 method(6)=getfieldvalue(options,'section');% ndims (1=bisection, 2=quadrisection, 3=octasection) 62 % default method (from chaco.m) 63 method=[1 1 0 0 1 1 50 0 .001 7654321]'; 64 method(1)=3; % global method (3=inertial (geometric)) 65 method(3)=0; % vertex weights (0=off, 1=on) 62 66 63 %are we using weights? 64 if strcmpi(getfieldvalue(options,'weighting'),'on'), 65 weights=floor(md.qmu.vertex_weight/min(md.qmu.vertex_weight)); 66 method(3)=1; 67 else 68 weights=[]; 69 end 67 %specify bisection 68 method(6)=getfieldvalue(options,'section');% ndims (1=bisection, 2=quadrisection, 3=octasection) 70 69 71 % partition into nparts 72 if isa(md.mesh,'mesh2d'), 73 part=Chaco(md.qmu.adjacency,weights,[],md.mesh.x, md.mesh.y,zeros(md.mesh.numberofvertices,1),method,npart,[])'+1; %index partitions from 1 up. like metis. 74 else 75 part=Chaco(md.qmu.adjacency,weights,[],md.mesh.x, md.mesh.y,md.mesh.z,method,npart,[])'+1; %index partitions from 1 up. like metis. 70 %are we using weights? 71 if strcmpi(getfieldvalue(options,'weighting'),'on'), 72 weights=floor(md.qmu.vertex_weight/min(md.qmu.vertex_weight)); 73 method(3)=1; 74 else 75 weights=[]; 76 end 77 78 % partition into nparts 79 if isa(md.mesh,'mesh2d'), 80 part=Chaco(md.qmu.adjacency,weights,[],md.mesh.x, md.mesh.y,zeros(md.mesh.numberofvertices,1),method,npart,[])'+1; %index partitions from 1 up. like metis. 81 else 82 part=Chaco(md.qmu.adjacency,weights,[],md.mesh.x, md.mesh.y,md.mesh.z,method,npart,[])'+1; %index partitions from 1 up. like metis. 83 end 84 76 85 end 77 86 78 87 elseif strcmpi(package,'scotch'), 79 88 80 %are we using weights? 81 if strcmpi(getfieldvalue(options,'weighting'),'on'), 82 weights=floor(md.qmu.vertex_weight/min(md.qmu.vertex_weight)); 89 if strcmpi(vectortype,'element') 90 error(['partitioner error message: package ' package ' does not allow element partitions.']); 83 91 else 84 weights=[]; 92 %are we using weights? 93 if strcmpi(getfieldvalue(options,'weighting'),'on'), 94 weights=floor(md.qmu.vertex_weight/min(md.qmu.vertex_weight)); 95 else 96 weights=[]; 97 end 98 maptab=Scotch(md.qmu.adjacency,[],weights,[],'cmplt',[npart]); 99 100 part=maptab(:,2)+1;%index partitions from 1 up. like metis. 85 101 end 86 maptab=Scotch(md.qmu.adjacency,[],weights,[],'cmplt',[npart]);87 88 part=maptab(:,2)+1;%index partitions from 1 up. like metis.89 102 90 103 elseif strcmpi(package,'linear'), 91 104 92 if npart==md.mesh.numberofelements | md.qmu.numberofpartitions==md.mesh.numberofelements105 if strcmpi(vectortype,'element') 93 106 part=1:1:md.mesh.numberofelements; 94 107 disp('Linear partitioner requesting partitions on elements'); … … 99 112 elseif strcmpi(package,'metis'), 100 113 101 [element_partitioning,part]=MeshPartition(md,md.qmu.numberofpartitions); 114 if strcmpi(vectortype,'element') 115 error(['partitioner error message: package ' package ' does not allow element partitions.']); 116 else 117 [element_partitioning,part]=MeshPartition(md,md.qmu.numberofpartitions); 118 end 102 119 103 120 else … … 112 129 md3d.qmu.adjacency=md.qmu.adjacency; 113 130 md=md3d; 114 part=project3d(md,'vector',part','type','node'); 131 if strcmpi(vectortype,'element') 132 part=project3d(md,'vector',part','type','element'); 133 else 134 part=project3d(md,'vector',part','type','node'); 135 end 115 136 end 116 137 … … 118 139 part=part'; 119 140 end 120 md.qmu.partition=part; 141 142 if strcmpi(vectortype,'element') 143 md.qmu.epartition=part; 144 if isempty(md.qmu.vpartition) | (prod(size(md.qmu.vpartition))==1 & isnan(md.qmu.vpartition)) 145 md.qmu.vpartition=zeros(md.mesh.numberofvertices,1); 146 end 147 else 148 md.qmu.vpartition=part; 149 if isempty(md.qmu.epartition) | (prod(size(md.qmu.epartition))==1 & isnan(md.qmu.epartition)) 150 md.qmu.epartition=zeros(md.mesh.numberofelements,1); 151 end 152 end -
issm/trunk-jpl/src/m/partition/partitioner.py
r24161 r24173 21 21 section: 1 by defaults(1=bisection, 2=quadrisection, 3=octasection) 22 22 recomputeadjacency: 'on' by default (set to 'off' to compute existing one) 23 type: 'node' or 'element' partition vector (default to 'node') 23 24 Output: md.qmu.partition recover the partition vector 24 25 … … 36 37 options.addfielddefault('section',1) 37 38 options.addfielddefault('recomputeadjacency','on') 39 options.addfielddefault('type','node') 38 40 39 41 #get package: … … 41 43 npart=options.getfieldvalue('npart') 42 44 recomputeadjacency=options.getfieldvalue('recomputeadjacency') 45 vectortype=options.getfieldvalue('type') 46 47 if m.strcmpi(vectortype,'element') and not m.strcmpi(package,'linear'): 48 raise RuntimeError('partitioner error message: package '+str(package)+' does not allow element partitions.') 43 49 44 50 if(md.mesh.dimension()==3): … … 121 127 md3d.qmu.adjacency=md.qmu.adjacency 122 128 md=md3d 123 part=project3d(md,'vector',np.squeeze(part),'type','node') 129 if m.strcmpi(vectortype,'element'): 130 part=project3d(md,'vector',np.squeeze(part),'type','element') 131 else: 132 part=project3d(md,'vector',np.squeeze(part),'type','node') 124 133 125 134 part=part.reshape(-1,1) 126 md.qmu.partition=part 135 136 if m.strcmpi(vectortype,'element'): 137 md.qmu.epartition=part 138 if np.size(md.qmu.vpartition) == 0 or (np.size(md.qmu.vpartition) == 1 and np.isnan(md.qmu.vpartition)): 139 md.qmu.vpartition=np.zeros((md.mesh.numberofvertices,1)) 140 141 else: 142 md.qmu.vpartition=part 143 if np.size(md.qmu.epartition) == 0 or (np.size(md.qmu.epartition) == 1 and np.isnan(md.qmu.epartition)): 144 md.qmu.epartition=np.zeros((md.mesh.numberofelements,1)) 127 145 128 146 return md -
issm/trunk-jpl/src/m/qmu/importancefactors.m
r13646 r24173 44 44 factors=importancefactors; 45 45 return; 46 elseif count==max(md.qmu.epartition+1) 47 %distribute importance factor 48 factors=importancefactors(md.qmu.epartition'+1); %md.qmu.partition was created to index "c" style 46 49 else 47 50 %distribute importance factor 48 factors=importancefactors(md.qmu. partition'+1); %md.qmu.partition was created to index "c" style51 factors=importancefactors(md.qmu.vpartition'+1); %md.qmu.partition was created to index "c" style 49 52 end 50 53 -
issm/trunk-jpl/src/m/qmu/importancefactors.py
r23095 r24173 43 43 factors=importancefactors 44 44 return factors 45 elif count==np.max(md.qmu.epartition+1): 46 #distribute importance factor 47 factors=importancefactors[(md.qmu.epartition.conj().T).flatten().astype(int)] 48 #md.qmu.partition was created to index "c" style 45 49 else: 46 50 #distribute importance factor 47 factors=importancefactors[(md.qmu. partition.conj().T).flatten().astype(int)]51 factors=importancefactors[(md.qmu.vpartition.conj().T).flatten().astype(int)] 48 52 #md.qmu.partition was created to index "c" style 49 53
Note:
See TracChangeset
for help on using the changeset viewer.