source: issm/oecreview/Archive/19101-20495/ISSM-20294-20295.diff@ 20498

Last change on this file since 20498 was 20498, checked in by Mathieu Morlighem, 9 years ago

CHG: done with Archive/19101-20495

File size: 6.9 KB
RevLine 
[20498]1Index: ../trunk-jpl/src/m/classes/maskpsl.js
2===================================================================
3--- ../trunk-jpl/src/m/classes/maskpsl.js (revision 0)
4+++ ../trunk-jpl/src/m/classes/maskpsl.js (revision 20295)
5@@ -0,0 +1,89 @@
6+//MASKPSL class definition
7+//
8+// Usage:
9+// maskpsl= new maskpsl();
10+
11+function maskpsl () {
12+ //properties
13+ // {{{
14+ this.groundedice_levelset = NaN;
15+ this.ice_levelset = NaN;
16+ this.land_levelset = NaN;
17+ this.ocean_levelset = NaN;
18+ //}}}
19+ //methods
20+ this.setdefaultparameters = function (){ //{{{
21+ } // }}}
22+ this.disp = function () { //{{{
23+ console.log(sprintf(" mask:"));
24+
25+ fielddisplay(this,"groundedice_levelset","is ice grounded ? grounded ice if > 0, grounding line position if = 0, floating ice if < 0");
26+ fielddisplay(this,"ice_levelset","presence of ice if < 0, icefront position if = 0, no ice if > 0");
27+ fielddisplay(this,"ocean_levelset","is the vertex on the ocean? yes if = 1, no if = 0");
28+ fielddisplay(this,"land_levelset","is the vertex on land? yes if = 1, no if = 0");
29+ } //}}}
30+ this.classname = function () { //{{{
31+ return "maskpsl";
32+ } //}}}
33+ this.checkconsistency = function(md,solution,analyses){ //{{{
34+
35+ checkfield(md,'fieldname','mask.groundedice_levelset','size',[md.mesh.numberofvertices, 1]);
36+ checkfield(md,'fieldname','mask.ice_levelset' ,'size',[md.mesh.numberofvertices, 1]);
37+ checkfield(md,'fieldname','mask.ocean_levelset' ,'size',[md.mesh.numberofvertices, 1]);
38+ checkfield(md,'fieldname','mask.land_levelset' ,'size',[md.mesh.numberofvertices, 1]);
39+
40+ var isice=NewArrayFill(md.mesh.numberofvertices,0);
41+ for(var i=0;i<md.mesh.numberofvertices;i++)if(md.mask.ice_levelset[i]<=0)isice[i]=1;
42+ if (ArraySum(isice)==0){
43+ console.log('no ice present in the domain');
44+ }
45+ if (ArrayMax(md.mask.ice_levelset)<0){
46+ console.log('no ice front provided');
47+ }
48+
49+ var icefront=NewArrayFill(md.mesh.numberofelements,0);
50+ for(var i=0;i<md.mesh.numberofelements;i++){
51+ for(var j=0;j<md.mesh.elements[0].length;j++){
52+ icefront[i]+=(md.mask.ice_levelset[md.mesh.elements[i][j]-1]==0);
53+ }
54+ }
55+ if ((ArrayMax(icefront)==3 & (md.mesh.elementtype() == 'Tria')) | (ArrayMax(icefront)==6 & md.mesh.elementtype() == 'Penta')){
56+ if (md.mesh.elementtype()=='Tria'){
57+ var pos=ArrayFindEqual(icefront,3); numberemptyelements=pos.length;
58+ }
59+ else if (md.mesh.elementtype() == 'Penta'){
60+ var pos=ArrayFindEqual(icefront,6); numberemptyelements=pos.length;
61+ }
62+ throw Error(sprintf(" %i have all nodes on ice front, change md.mask.ice_levelset to fix it",numberemptyelements));
63+ }
64+ } // }}}
65+ this.marshall=function(md,fid) { //{{{
66+ WriteData(fid,'object',this,'class','mask','fieldname','groundedice_levelset','format','DoubleMat','mattype',1);
67+ WriteData(fid,'object',this,'class','mask','fieldname','ice_levelset','format','DoubleMat','mattype',1);
68+ WriteData(fid,'object',this,'class','mask','fieldname','ocean_levelset','format','DoubleMat','mattype',1);
69+ WriteData(fid,'object',this,'class','mask','fieldname','land_levelset','format','DoubleMat','mattype',1);
70+
71+ // get mask of vertices of elements with ice
72+ var isice= NewArrayFill(md.mesh.numberofvertices,0);
73+ for(var i=0;i<md.mesh.numberofvertices;i++)if(md.mask.ice_levelset[i]<=0)isice[i]=1;
74+
75+ var vlist = NewArrayFill(md.mesh.numberofvertices,0);
76+ var pos=[];
77+ for(var i=0;i<md.mesh.numberofelements;i++){
78+ var sum=0;
79+ for(var j=0;j<md.mesh.elements[0].length;j++){
80+ sum+=isice[md.mesh.elements[i][j]-1];
81+ }
82+ if(sum>0)pos.push(i);
83+ }
84+ for(var i=0;i<pos.length;i++){
85+ for(var j=0;j<md.mesh.elements[0].length;j++){
86+ vlist[md.mesh.elements[pos[i]][j]-1]=1;
87+ }
88+ }
89+ WriteData(fid,'data',vlist,'enum',IceMaskNodeActivationEnum(),'format','DoubleMat','mattype',1);
90+ }//}}}
91+ this.fix=function() { //{{{
92+ }//}}}
93+
94+}
95Index: ../trunk-jpl/src/m/classes/outputdefinition.m
96===================================================================
97--- ../trunk-jpl/src/m/classes/outputdefinition.m (revision 20294)
98+++ ../trunk-jpl/src/m/classes/outputdefinition.m (revision 20295)
99@@ -49,7 +49,8 @@
100 WriteData(fid,'data',enums,'enum',OutputdefinitionListEnum(),'format','DoubleMat','mattype',1);
101 end % }}}
102 function savemodeljs(self,fid,modelname) % {{{
103-
104+
105+ fprintf(fid,'%s.outputdefinition.definitions=[];\n',modelname);
106 if ~isempty(self.definitions),
107 error('outputdefinition savemodeljs error message: not supported yet!');
108 end
109Index: ../trunk-jpl/src/m/classes/maskpsl.m
110===================================================================
111--- ../trunk-jpl/src/m/classes/maskpsl.m (revision 20294)
112+++ ../trunk-jpl/src/m/classes/maskpsl.m (revision 20295)
113@@ -82,6 +82,7 @@
114 end % }}}
115 function savemodeljs(self,fid,modelname) % {{{
116
117+ fprintf(fid,'%s.mask=new maskpsl();\n',modelname);
118 writejs1Darray(fid,[modelname '.mask.groundedice_levelset'],self.groundedice_levelset);
119 writejs1Darray(fid,[modelname '.mask.ice_levelset'],self.ice_levelset);
120 writejs1Darray(fid,[modelname '.mask.ocean_levelset'],self.ocean_levelset);
121Index: ../trunk-jpl/src/m/classes/clusters/generic.js
122===================================================================
123--- ../trunk-jpl/src/m/classes/clusters/generic.js (revision 20294)
124+++ ../trunk-jpl/src/m/classes/clusters/generic.js (revision 20295)
125@@ -73,19 +73,19 @@
126 var solutionlength = new Uint32Array(1);
127 solutionlength[0] = solutionbuffer.byteLength;
128
129- var binbuffer = new Uint16Array(fid.buffer);
130+ var binbuffer = new Uint16Array(fid.rawbuffer());
131+
132 var binlength = new Uint32Array(1);
133 binlength[0] = binbuffer.byteLength;
134
135 var data = new Blob([runtimenamelength,runtimenamebuffer,namelength,namebuffer,toolkitslength,toolkitsbuffer,solutionlength,solutionbuffer,binlength,binbuffer]);
136- //console.log(fid.buffer);
137- if (typeof(download) != "undefined") download(fid.buffer);
138+ if (typeof(download) != "undefined") download(fid.rawbuffer());
139 oReq.send(data);
140
141 return;
142
143 } //}}}
144- this.ab2str = function(buf) {
145+ this.ab2str = function(buf) { //{{{
146 return String.fromCharCode.apply(null, new Uint16Array(buf));
147 }
148 this.str2ab = function(str) {
149@@ -94,5 +94,5 @@
150 buf[i] = str.charCodeAt(i);
151 }
152 return buf;
153- }
154+ } //}}}
155 }
156Index: ../trunk-jpl/src/m/Makefile.am
157===================================================================
158--- ../trunk-jpl/src/m/Makefile.am (revision 20294)
159+++ ../trunk-jpl/src/m/Makefile.am (revision 20295)
160@@ -99,6 +99,7 @@
161 ${ISSM_DIR}/src/m/classes/initialization.js \
162 ${ISSM_DIR}/src/m/classes/inversion.js \
163 ${ISSM_DIR}/src/m/classes/mask.js \
164+ ${ISSM_DIR}/src/m/classes/maskpsl.js \
165 ${ISSM_DIR}/src/m/classes/masstransport.js \
166 ${ISSM_DIR}/src/m/classes/matice.js \
167 ${ISSM_DIR}/src/m/classes/mesh2d.js \
Note: See TracBrowser for help on using the repository browser.