Changeset 4011
- Timestamp:
- 06/03/10 10:16:36 (15 years ago)
- Location:
- issm/trunk/src/c/objects/Elements
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/objects/Elements/Beam.cpp
r4004 r4011 23 23 this->parameters=NULL; 24 24 return; 25 }26 /*}}}*/27 /*FUNCTION Beam::Beam(int id, Hook* hnodes, Hook* hmatice, Hook* hmatpar, Parameters* beam_parameters, ElementProperties* properties){{{1*/28 Beam::Beam(int beam_id,Hook* beam_hnodes, Hook* beam_hmatice, Hook* beam_hmatpar, Parameters* beam_parameters, Inputs* beam_inputs):29 hnodes(beam_hnodes),30 hmatice(beam_hmatice),31 hmatpar(beam_hmatpar)32 {33 34 /*all the initialization has been done by the initializer, just fill in the id: */35 this->id=beam_id;36 if(beam_inputs){37 this->inputs=(Inputs*)beam_inputs->Copy();38 }39 else{40 this->inputs=new Inputs();41 }42 /*point parameters: */43 this->parameters=beam_parameters;44 }45 /*}}}*/46 /*FUNCTION Beam::Beam(int id, int i, IoModel* iomodel){{{1*/47 Beam::Beam(int beam_id, int index,IoModel* iomodel){48 49 int i;50 51 /*beam constructor input: */52 int beam_matice_id;53 int beam_matpar_id;54 int beam_node_ids[2];55 double nodeinputs[2];56 57 /*id: */58 this->id=beam_id;59 60 /*hooks: */61 ISSMASSERT(iomodel->uppernodes);62 beam_matice_id=index+1; //refers to the corresponding material property card63 beam_matpar_id=iomodel->numberofvertices2d*(iomodel->numlayers-1)+1;//refers to the corresponding matpar property card64 beam_node_ids[0]=index+1;65 beam_node_ids[1]=(int)iomodel->uppernodes[index]; //grid that lays right on top66 67 this->hnodes.Init(beam_node_ids,2);68 this->hmatice.Init(&beam_matice_id,1);69 this->hmatpar.Init(&beam_matpar_id,1);70 71 //intialize inputs, and add as many inputs per element as requested:72 this->inputs=new Inputs();73 74 if (iomodel->thickness) {75 nodeinputs[0]=iomodel->thickness[index];76 nodeinputs[1]=iomodel->thickness[(int)(iomodel->uppernodes[index]-1)];77 this->inputs->AddInput(new BeamVertexInput(ThicknessEnum,nodeinputs));78 }79 if (iomodel->surface) {80 nodeinputs[0]=iomodel->surface[index];81 nodeinputs[1]=iomodel->surface[(int)(iomodel->uppernodes[index]-1)];82 this->inputs->AddInput(new BeamVertexInput(SurfaceEnum,nodeinputs));83 }84 if (iomodel->bed) {85 nodeinputs[0]=iomodel->bed[index];86 nodeinputs[1]=iomodel->bed[(int)(iomodel->uppernodes[index]-1)];87 this->inputs->AddInput(new BeamVertexInput(BedEnum,nodeinputs));88 }89 if (iomodel->drag_coefficient) {90 nodeinputs[0]=iomodel->drag_coefficient[index];91 nodeinputs[1]=iomodel->drag_coefficient[(int)(iomodel->uppernodes[index]-1)];92 this->inputs->AddInput(new BeamVertexInput(DragCoefficientEnum,nodeinputs));93 }94 95 if (iomodel->vx) {96 nodeinputs[0]=iomodel->vx[index];97 nodeinputs[1]=iomodel->vx[(int)(iomodel->uppernodes[index]-1)];98 this->inputs->AddInput(new BeamVertexInput(VxEnum,nodeinputs));99 }100 if (iomodel->vy) {101 nodeinputs[0]=iomodel->vy[index];102 nodeinputs[1]=iomodel->vy[(int)(iomodel->uppernodes[index]-1)];103 this->inputs->AddInput(new BeamVertexInput(VyEnum,nodeinputs));104 }105 if (iomodel->vz) {106 nodeinputs[0]=iomodel->vz[index];107 nodeinputs[1]=iomodel->vz[(int)(iomodel->uppernodes[index]-1)];108 this->inputs->AddInput(new BeamVertexInput(VzEnum,nodeinputs));109 }110 if (iomodel->vx_obs) {111 nodeinputs[0]=iomodel->vx_obs[index];112 nodeinputs[1]=iomodel->vx_obs[(int)(iomodel->uppernodes[index]-1)];113 this->inputs->AddInput(new BeamVertexInput(VxObsEnum,nodeinputs));114 }115 if (iomodel->vy_obs) {116 nodeinputs[0]=iomodel->vy_obs[index];117 nodeinputs[1]=iomodel->vy_obs[(int)(iomodel->uppernodes[index]-1)];118 this->inputs->AddInput(new BeamVertexInput(VyObsEnum,nodeinputs));119 }120 if (iomodel->vz_obs) {121 nodeinputs[0]=iomodel->vz_obs[index];122 nodeinputs[1]=iomodel->vz_obs[(int)(iomodel->uppernodes[index]-1)];123 this->inputs->AddInput(new BeamVertexInput(VzObsEnum,nodeinputs));124 }125 if (iomodel->weights) {126 nodeinputs[0]=iomodel->weights[index];127 nodeinputs[1]=iomodel->weights[(int)(iomodel->uppernodes[index]-1)];128 this->inputs->AddInput(new BeamVertexInput(WeightsEnum,nodeinputs));129 }130 if (iomodel->gridonbed) this->inputs->AddInput(new BoolInput(ElementOnBedEnum,(IssmBool)iomodel->gridonbed[index]));131 132 /*default vx,vy and vz: */133 if (!iomodel->vx && iomodel->vx_obs) {134 nodeinputs[0]=iomodel->vx_obs[index];135 nodeinputs[1]=iomodel->vx_obs[(int)(iomodel->uppernodes[index]-1)];136 this->inputs->AddInput(new BeamVertexInput(VxEnum,nodeinputs));137 this->inputs->AddInput(new BeamVertexInput(VxOldEnum,nodeinputs));138 }139 if (!iomodel->vy && iomodel->vy_obs) {140 nodeinputs[0]=iomodel->vy_obs[index];141 nodeinputs[1]=iomodel->vy_obs[(int)(iomodel->uppernodes[index]-1)];142 this->inputs->AddInput(new BeamVertexInput(VyEnum,nodeinputs));143 this->inputs->AddInput(new BeamVertexInput(VyOldEnum,nodeinputs));144 }145 if (!iomodel->vz && iomodel->vz_obs) {146 nodeinputs[0]=iomodel->vz_obs[index];147 nodeinputs[1]=iomodel->vz_obs[(int)(iomodel->uppernodes[index]-1)];148 this->inputs->AddInput(new BeamVertexInput(VzEnum,nodeinputs));149 this->inputs->AddInput(new BeamVertexInput(VzOldEnum,nodeinputs));150 }151 152 //this->parameters: we still can't point to it, it may not even exist. Configure will handle this.153 this->parameters=NULL;154 155 25 } 156 26 /*}}}*/ -
issm/trunk/src/c/objects/Elements/Beam.h
r4004 r4011 36 36 /*constructors, destructors: {{{1*/ 37 37 Beam(); 38 Beam(int beam_id,Hook* beam_hnodes, Hook* beam_hmatice, Hook* beam_hmatpar, Parameters* beam_parameters, Inputs* beam_inputs);39 Beam(int beam_id,int i, IoModel* iomodel);40 38 ~Beam(); 41 39 /*}}}*/ -
issm/trunk/src/c/objects/Elements/Penta.cpp
r4003 r4011 85 85 Penta::Update(IoModel* iomodel,int analysis_counter){ 86 86 87 /*Intermediaries*/ 87 88 IssmInt i; 88 89 int penta_node_ids[6]; 90 int penta_vertex_ids[6]; 89 91 double nodeinputs[6]; 90 92 93 /*Checks if debuging*/ 94 /*{{{2*/ 95 ISSMASSERT(iomodel->elements); 96 /*}}}*/ 97 98 /*Recover vertices ids needed to initialize inputs*/ 99 for(i=0;i<6;i++){ 100 penta_vertex_ids[i]=(int)iomodel->elements[6*index+i]; //ids for vertices are in the elements array from Matlab 101 } 102 103 /*Recover nodes ids needed to initialize the node hook.*/ 104 for(i=0;i<6;i++){ //go recover node ids, needed to initialize the node hook. 105 penta_node_ids[i]=(int)iomodel->elements[6*index+i]; //ids for vertices are in the elements array from Matlab 106 } 107 91 108 /*hooks: */ 92 for(i=0;i<6;i++){ //go recover node ids, needed to initialize the node hook.93 penta_node_ids[i]=(int)*(iomodel->elements+6*index+i); //ids for vertices are in the elements array from Matlab94 }95 96 109 this->SettHookNodes(penta_node_ids,analysis_counter); this->nodes=NULL; //set hook to nodes, for this analysis type 97 110 … … 99 112 this->inputs=new Inputs(); 100 113 if (iomodel->thickness) { 101 for(i=0;i<6;i++)nodeinputs[i]=iomodel->thickness[penta_ node_ids[i]-1];114 for(i=0;i<6;i++)nodeinputs[i]=iomodel->thickness[penta_vertex_ids[i]-1]; 102 115 this->inputs->AddInput(new PentaVertexInput(ThicknessEnum,nodeinputs)); 103 116 } 104 117 if (iomodel->surface) { 105 for(i=0;i<6;i++)nodeinputs[i]=iomodel->surface[penta_ node_ids[i]-1];118 for(i=0;i<6;i++)nodeinputs[i]=iomodel->surface[penta_vertex_ids[i]-1]; 106 119 this->inputs->AddInput(new PentaVertexInput(SurfaceEnum,nodeinputs)); 107 120 } 108 121 if (iomodel->bed) { 109 for(i=0;i<6;i++)nodeinputs[i]=iomodel->bed[penta_ node_ids[i]-1];122 for(i=0;i<6;i++)nodeinputs[i]=iomodel->bed[penta_vertex_ids[i]-1]; 110 123 this->inputs->AddInput(new PentaVertexInput(BedEnum,nodeinputs)); 111 124 } 112 125 if (iomodel->drag_coefficient) { 113 for(i=0;i<6;i++)nodeinputs[i]=iomodel->drag_coefficient[penta_ node_ids[i]-1];126 for(i=0;i<6;i++)nodeinputs[i]=iomodel->drag_coefficient[penta_vertex_ids[i]-1]; 114 127 this->inputs->AddInput(new PentaVertexInput(DragCoefficientEnum,nodeinputs)); 115 128 … … 120 133 } 121 134 if (iomodel->melting_rate) { 122 for(i=0;i<6;i++)nodeinputs[i]=iomodel->melting_rate[penta_ node_ids[i]-1]/iomodel->yts;135 for(i=0;i<6;i++)nodeinputs[i]=iomodel->melting_rate[penta_vertex_ids[i]-1]/iomodel->yts; 123 136 this->inputs->AddInput(new PentaVertexInput(MeltingRateEnum,nodeinputs)); 124 137 } 125 138 if (iomodel->accumulation_rate) { 126 for(i=0;i<6;i++)nodeinputs[i]=iomodel->accumulation_rate[penta_ node_ids[i]-1]/iomodel->yts;139 for(i=0;i<6;i++)nodeinputs[i]=iomodel->accumulation_rate[penta_vertex_ids[i]-1]/iomodel->yts; 127 140 this->inputs->AddInput(new PentaVertexInput(AccumulationRateEnum,nodeinputs)); 128 141 } 129 142 if (iomodel->geothermalflux) { 130 for(i=0;i<6;i++)nodeinputs[i]=iomodel->geothermalflux[penta_ node_ids[i]-1];143 for(i=0;i<6;i++)nodeinputs[i]=iomodel->geothermalflux[penta_vertex_ids[i]-1]; 131 144 this->inputs->AddInput(new PentaVertexInput(GeothermalFluxEnum,nodeinputs)); 132 145 } 133 146 if (iomodel->pressure) { 134 for(i=0;i<6;i++)nodeinputs[i]=iomodel->pressure[penta_ node_ids[i]-1];147 for(i=0;i<6;i++)nodeinputs[i]=iomodel->pressure[penta_vertex_ids[i]-1]; 135 148 this->inputs->AddInput(new PentaVertexInput(PressureEnum,nodeinputs)); 136 149 } 137 150 if (iomodel->temperature) { 138 for(i=0;i<6;i++)nodeinputs[i]=iomodel->temperature[penta_ node_ids[i]-1];151 for(i=0;i<6;i++)nodeinputs[i]=iomodel->temperature[penta_vertex_ids[i]-1]; 139 152 this->inputs->AddInput(new PentaVertexInput(TemperatureEnum,nodeinputs)); 140 153 } 141 154 if (iomodel->dhdt) { 142 for(i=0;i<6;i++)nodeinputs[i]=iomodel->dhdt[penta_ node_ids[i]-1];155 for(i=0;i<6;i++)nodeinputs[i]=iomodel->dhdt[penta_vertex_ids[i]-1]; 143 156 this->inputs->AddInput(new PentaVertexInput(DhDtEnum,nodeinputs)); 144 157 } 145 158 /*vx,vy and vz: */ 146 159 if (iomodel->vx) { 147 for(i=0;i<6;i++)nodeinputs[i]=iomodel->vx[penta_ node_ids[i]-1]/iomodel->yts;160 for(i=0;i<6;i++)nodeinputs[i]=iomodel->vx[penta_vertex_ids[i]-1]/iomodel->yts; 148 161 this->inputs->AddInput(new PentaVertexInput(VxEnum,nodeinputs)); 149 162 this->inputs->AddInput(new PentaVertexInput(VxOldEnum,nodeinputs)); 150 163 } 151 164 if (iomodel->vy) { 152 for(i=0;i<6;i++)nodeinputs[i]=iomodel->vy[penta_ node_ids[i]-1]/iomodel->yts;165 for(i=0;i<6;i++)nodeinputs[i]=iomodel->vy[penta_vertex_ids[i]-1]/iomodel->yts; 153 166 this->inputs->AddInput(new PentaVertexInput(VyEnum,nodeinputs)); 154 167 this->inputs->AddInput(new PentaVertexInput(VyOldEnum,nodeinputs)); 155 168 } 156 169 if (iomodel->vz) { 157 for(i=0;i<6;i++)nodeinputs[i]=iomodel->vz[penta_ node_ids[i]-1]/iomodel->yts;170 for(i=0;i<6;i++)nodeinputs[i]=iomodel->vz[penta_vertex_ids[i]-1]/iomodel->yts; 158 171 this->inputs->AddInput(new PentaVertexInput(VzEnum,nodeinputs)); 159 172 this->inputs->AddInput(new PentaVertexInput(VzOldEnum,nodeinputs)); 160 173 } 161 174 if (iomodel->vx_obs) { 162 for(i=0;i<6;i++)nodeinputs[i]=iomodel->vx_obs[penta_ node_ids[i]-1]/iomodel->yts;175 for(i=0;i<6;i++)nodeinputs[i]=iomodel->vx_obs[penta_vertex_ids[i]-1]/iomodel->yts; 163 176 this->inputs->AddInput(new PentaVertexInput(VxObsEnum,nodeinputs)); 164 177 } 165 178 if (iomodel->vy_obs) { 166 for(i=0;i<6;i++)nodeinputs[i]=iomodel->vy_obs[penta_ node_ids[i]-1]/iomodel->yts;179 for(i=0;i<6;i++)nodeinputs[i]=iomodel->vy_obs[penta_vertex_ids[i]-1]/iomodel->yts; 167 180 this->inputs->AddInput(new PentaVertexInput(VyObsEnum,nodeinputs)); 168 181 } 169 182 if (iomodel->vz_obs) { 170 for(i=0;i<6;i++)nodeinputs[i]=iomodel->vz_obs[penta_ node_ids[i]-1]/iomodel->yts;183 for(i=0;i<6;i++)nodeinputs[i]=iomodel->vz_obs[penta_vertex_ids[i]-1]/iomodel->yts; 171 184 this->inputs->AddInput(new PentaVertexInput(VzObsEnum,nodeinputs)); 172 185 } 173 186 if (iomodel->weights) { 174 for(i=0;i<6;i++)nodeinputs[i]=iomodel->weights[penta_ node_ids[i]-1];187 for(i=0;i<6;i++)nodeinputs[i]=iomodel->weights[penta_vertex_ids[i]-1]; 175 188 this->inputs->AddInput(new PentaVertexInput(WeightsEnum,nodeinputs)); 176 189 } … … 178 191 /*default vx,vy and vz: either observation or 0 */ 179 192 if (!iomodel->vx){ 180 if (iomodel->vx_obs) for(i=0;i<6;i++)nodeinputs[i]=iomodel->vx_obs[penta_ node_ids[i]-1]/iomodel->yts;193 if (iomodel->vx_obs) for(i=0;i<6;i++)nodeinputs[i]=iomodel->vx_obs[penta_vertex_ids[i]-1]/iomodel->yts; 181 194 else for(i=0;i<6;i++)nodeinputs[i]=0; 182 195 this->inputs->AddInput(new PentaVertexInput(VxEnum,nodeinputs)); … … 184 197 } 185 198 if (!iomodel->vy){ 186 if (iomodel->vy_obs) for(i=0;i<6;i++)nodeinputs[i]=iomodel->vy_obs[penta_ node_ids[i]-1]/iomodel->yts;199 if (iomodel->vy_obs) for(i=0;i<6;i++)nodeinputs[i]=iomodel->vy_obs[penta_vertex_ids[i]-1]/iomodel->yts; 187 200 else for(i=0;i<6;i++)nodeinputs[i]=0; 188 201 this->inputs->AddInput(new PentaVertexInput(VyEnum,nodeinputs)); … … 190 203 } 191 204 if (!iomodel->vz){ 192 if (iomodel->vz_obs) for(i=0;i<6;i++)nodeinputs[i]=iomodel->vz_obs[penta_ node_ids[i]-1]/iomodel->yts;205 if (iomodel->vz_obs) for(i=0;i<6;i++)nodeinputs[i]=iomodel->vz_obs[penta_vertex_ids[i]-1]/iomodel->yts; 193 206 else for(i=0;i<6;i++)nodeinputs[i]=0; 194 207 this->inputs->AddInput(new PentaVertexInput(VzEnum,nodeinputs)); -
issm/trunk/src/c/objects/Elements/Sing.cpp
r4004 r4011 23 23 this->parameters=NULL; 24 24 return; 25 }26 /*}}}*/27 /*FUNCTION Sing::Sing(int sing_id,Hook* sing_hnodes, Hook* sing_hmatice, Hook* sing_hmatpar, Hook* sing_hnumpar, Inputs* sing_inputs) {{{1*/28 Sing::Sing(int sing_id,Hook* sing_hnodes, Hook* sing_hmatice, Hook* sing_hmatpar, Parameters* sing_parameters,Inputs* sing_inputs):29 hnodes(sing_hnodes),30 hmatice(sing_hmatice),31 hmatpar(sing_hmatpar)32 {33 34 /*all the initialization has been done by the initializer, just fill in the id: */35 this->id=sing_id;36 if(sing_inputs){37 this->inputs=(Inputs*)sing_inputs->Copy();38 }39 else{40 this->inputs=new Inputs();41 }42 /*point parameters: */43 this->parameters=sing_parameters;44 }45 /*}}}*/46 /*FUNCTION Sing::Sing(int sing_id, int i, IoModel* iomodel) {{{1*/47 Sing::Sing(int sing_id, int i, IoModel* iomodel){48 49 int sing_matice_id;50 int sing_matpar_id;51 52 int sing_g;53 double sing_h;54 double sing_k;55 56 /*id: */57 this->id=sing_id;58 59 /*hooks: */60 sing_matice_id=i+1; //refers to the corresponding material property card61 sing_matpar_id=iomodel->numberofvertices+1;//refers to the corresponding matpar property card62 sing_g=i+1;63 64 this->hnodes.Init(&sing_g,1);65 this->hmatice.Init(&sing_matice_id,1);66 this->hmatpar.Init(&sing_matpar_id,1);67 68 //intialize inputs, and add as many inputs per element as requested:69 this->inputs=new Inputs();70 71 if (iomodel->thickness) this->inputs->AddInput(new SingVertexInput(ThicknessEnum,iomodel->thickness[i]));72 if (iomodel->drag_coefficient) this->inputs->AddInput(new SingVertexInput(DragCoefficientEnum,iomodel->drag_coefficient[i]));73 if (iomodel->vx) this->inputs->AddInput(new SingVertexInput(VxEnum,iomodel->vx[i]));74 if (iomodel->vy) this->inputs->AddInput(new SingVertexInput(VyEnum,iomodel->vy[i]));75 if (iomodel->vz) this->inputs->AddInput(new SingVertexInput(VzEnum,iomodel->vz[i]));76 if (iomodel->vx_obs) this->inputs->AddInput(new SingVertexInput(VxObsEnum,iomodel->vx_obs[i]));77 if (iomodel->vy_obs) this->inputs->AddInput(new SingVertexInput(VyObsEnum,iomodel->vy_obs[i]));78 if (iomodel->vz_obs) this->inputs->AddInput(new SingVertexInput(VzObsEnum,iomodel->vz_obs[i]));79 if (iomodel->weights) this->inputs->AddInput(new SingVertexInput(WeightsEnum,iomodel->weights[i]));80 if (!iomodel->vx && iomodel->vx_obs){81 this->inputs->AddInput(new SingVertexInput(VxEnum,iomodel->vx_obs[i]));82 this->inputs->AddInput(new SingVertexInput(VxOldEnum,iomodel->vx_obs[i]));83 }84 if (!iomodel->vy && iomodel->vy_obs){85 this->inputs->AddInput(new SingVertexInput(VyEnum,iomodel->vy_obs[i]));86 this->inputs->AddInput(new SingVertexInput(VyOldEnum,iomodel->vy_obs[i]));87 }88 if (!iomodel->vz && iomodel->vz_obs){89 this->inputs->AddInput(new SingVertexInput(VzEnum,iomodel->vz_obs[i]));90 this->inputs->AddInput(new SingVertexInput(VzOldEnum,iomodel->vz_obs[i]));91 }92 93 //this->parameters: we still can't point to it, it may not even exist. Configure will handle this.94 this->parameters=NULL;95 96 25 } 97 26 /*}}}*/ -
issm/trunk/src/c/objects/Elements/Sing.h
r4004 r4011 36 36 /*constructors, destructors: {{{1*/ 37 37 Sing(); 38 Sing(int sing_id,Hook* sing_hnodes, Hook* sing_hmatice, Hook* sing_hmatpar, Parameters* sing_parameters,Inputs* sing_inputs);39 Sing(int sing_id, int i, IoModel* iomodel);40 38 ~Sing(); 41 39 /*}}}*/ -
issm/trunk/src/c/objects/Elements/Tria.cpp
r4003 r4011 68 68 Tria::Update(IoModel* iomodel,int analysis_counter,int analysis_type){ //i is the element index 69 69 70 /*Intermediaries*/ 70 71 int i; 71 72 int tria_node_ids[3]; 73 int tria_vertex_ids[3]; 72 74 double nodeinputs[3]; 73 75 74 /*hooks: */ 75 //go recover node ids, needed to initialize the node hook. 76 /*Checks if debuging*/ 77 /*{{{2*/ 78 ISSMASSERT(iomodel->elements); 79 /*}}}*/ 80 81 /*Recover vertices ids needed to initialize inputs*/ 82 for(i=0;i<3;i++){ 83 tria_vertex_ids[i]=(int)iomodel->elements[3*index+i]; //ids for vertices are in the elements array from Matlab 84 } 85 86 /*Recover nodes ids needed to initialize the node hook.*/ 76 87 if (iomodel->analysis_type==Prognostic2AnalysisEnum || iomodel->analysis_type==Balancedthickness2AnalysisEnum){ 77 88 /*Discontinuous Galerkin*/ 78 tria_node_ids[0]= 3*index+1;79 tria_node_ids[1]= 3*index+2;80 tria_node_ids[2]= 3*index+3;89 tria_node_ids[0]=iomodel->nodecounter+3*index+1; 90 tria_node_ids[1]=iomodel->nodecounter+3*index+2; 91 tria_node_ids[2]=iomodel->nodecounter+3*index+3; 81 92 } 82 93 else{ 83 94 /*Continuous Galerkin*/ 84 ISSMASSERT(iomodel->elements);85 95 for(i=0;i<3;i++){ 86 tria_node_ids[i]= (int)*(iomodel->elements+3*index+i); //ids for vertices are in the elements array from Matlab96 tria_node_ids[i]=iomodel->nodecounter+(int)*(iomodel->elements+3*index+i); //ids for vertices are in the elements array from Matlab 87 97 } 88 98 } 89 99 100 /*hooks: */ 90 101 this->SetHookNodes(tria_node_ids,analysis_counter); this->nodes=NULL; //set hook to nodes, for this analysis type 91 92 / /intialize inputs, and add as many inputs per element as requested:102 103 /*intialize inputs, and add as many inputs per element as requested:*/ 93 104 this->inputs=new Inputs(); 94 105 95 106 if (iomodel->thickness) { 96 for(i=0;i<3;i++)nodeinputs[i]=iomodel->thickness[tria_ node_ids[i]-1];107 for(i=0;i<3;i++)nodeinputs[i]=iomodel->thickness[tria_vertex_ids[i]-1]; 97 108 this->inputs->AddInput(new TriaVertexInput(ThicknessEnum,nodeinputs)); 98 109 } 99 110 if (iomodel->surface) { 100 for(i=0;i<3;i++)nodeinputs[i]=iomodel->surface[tria_ node_ids[i]-1];111 for(i=0;i<3;i++)nodeinputs[i]=iomodel->surface[tria_vertex_ids[i]-1]; 101 112 this->inputs->AddInput(new TriaVertexInput(SurfaceEnum,nodeinputs)); 102 113 } 103 114 if (iomodel->bed) { 104 for(i=0;i<3;i++)nodeinputs[i]=iomodel->bed[tria_ node_ids[i]-1];115 for(i=0;i<3;i++)nodeinputs[i]=iomodel->bed[tria_vertex_ids[i]-1]; 105 116 this->inputs->AddInput(new TriaVertexInput(BedEnum,nodeinputs)); 106 117 } 107 118 if (iomodel->drag_coefficient) { 108 for(i=0;i<3;i++)nodeinputs[i]=iomodel->drag_coefficient[tria_ node_ids[i]-1];119 for(i=0;i<3;i++)nodeinputs[i]=iomodel->drag_coefficient[tria_vertex_ids[i]-1]; 109 120 this->inputs->AddInput(new TriaVertexInput(DragCoefficientEnum,nodeinputs)); 110 121 … … 114 125 } 115 126 if (iomodel->melting_rate) { 116 for(i=0;i<3;i++)nodeinputs[i]=iomodel->melting_rate[tria_ node_ids[i]-1]/iomodel->yts;127 for(i=0;i<3;i++)nodeinputs[i]=iomodel->melting_rate[tria_vertex_ids[i]-1]/iomodel->yts; 117 128 this->inputs->AddInput(new TriaVertexInput(MeltingRateEnum,nodeinputs)); 118 129 } 119 130 if (iomodel->accumulation_rate) { 120 for(i=0;i<3;i++)nodeinputs[i]=iomodel->accumulation_rate[tria_ node_ids[i]-1]/iomodel->yts;131 for(i=0;i<3;i++)nodeinputs[i]=iomodel->accumulation_rate[tria_vertex_ids[i]-1]/iomodel->yts; 121 132 this->inputs->AddInput(new TriaVertexInput(AccumulationRateEnum,nodeinputs)); 122 133 } 123 134 if (iomodel->geothermalflux) { 124 for(i=0;i<3;i++)nodeinputs[i]=iomodel->geothermalflux[tria_ node_ids[i]-1];135 for(i=0;i<3;i++)nodeinputs[i]=iomodel->geothermalflux[tria_vertex_ids[i]-1]; 125 136 this->inputs->AddInput(new TriaVertexInput(GeothermalFluxEnum,nodeinputs)); 126 137 } 127 138 if (iomodel->dhdt) { 128 for(i=0;i<3;i++)nodeinputs[i]=iomodel->dhdt[tria_ node_ids[i]-1];139 for(i=0;i<3;i++)nodeinputs[i]=iomodel->dhdt[tria_vertex_ids[i]-1]; 129 140 this->inputs->AddInput(new TriaVertexInput(DhDtEnum,nodeinputs)); 130 141 } 131 142 if (iomodel->pressure) { 132 for(i=0;i<3;i++)nodeinputs[i]=iomodel->pressure[tria_ node_ids[i]-1];143 for(i=0;i<3;i++)nodeinputs[i]=iomodel->pressure[tria_vertex_ids[i]-1]; 133 144 this->inputs->AddInput(new TriaVertexInput(PressureEnum,nodeinputs)); 134 145 } 135 146 if (iomodel->temperature) { 136 for(i=0;i<3;i++)nodeinputs[i]=iomodel->temperature[tria_ node_ids[i]-1];147 for(i=0;i<3;i++)nodeinputs[i]=iomodel->temperature[tria_vertex_ids[i]-1]; 137 148 this->inputs->AddInput(new TriaVertexInput(TemperatureEnum,nodeinputs)); 138 149 } 139 150 /*vx,vy and vz: */ 140 151 if (iomodel->vx) { 141 for(i=0;i<3;i++)nodeinputs[i]=iomodel->vx[tria_ node_ids[i]-1]/iomodel->yts;152 for(i=0;i<3;i++)nodeinputs[i]=iomodel->vx[tria_vertex_ids[i]-1]/iomodel->yts; 142 153 this->inputs->AddInput(new TriaVertexInput(VxEnum,nodeinputs)); 143 154 this->inputs->AddInput(new TriaVertexInput(VxOldEnum,nodeinputs)); 144 155 } 145 156 if (iomodel->vy) { 146 for(i=0;i<3;i++)nodeinputs[i]=iomodel->vy[tria_ node_ids[i]-1]/iomodel->yts;157 for(i=0;i<3;i++)nodeinputs[i]=iomodel->vy[tria_vertex_ids[i]-1]/iomodel->yts; 147 158 this->inputs->AddInput(new TriaVertexInput(VyEnum,nodeinputs)); 148 159 this->inputs->AddInput(new TriaVertexInput(VyOldEnum,nodeinputs)); 149 160 } 150 161 if (iomodel->vz) { 151 for(i=0;i<3;i++)nodeinputs[i]=iomodel->vz[tria_ node_ids[i]-1]/iomodel->yts;162 for(i=0;i<3;i++)nodeinputs[i]=iomodel->vz[tria_vertex_ids[i]-1]/iomodel->yts; 152 163 this->inputs->AddInput(new TriaVertexInput(VzEnum,nodeinputs)); 153 164 this->inputs->AddInput(new TriaVertexInput(VzOldEnum,nodeinputs)); 154 165 } 155 166 if (iomodel->vx_obs) { 156 for(i=0;i<3;i++)nodeinputs[i]=iomodel->vx_obs[tria_ node_ids[i]-1]/iomodel->yts;167 for(i=0;i<3;i++)nodeinputs[i]=iomodel->vx_obs[tria_vertex_ids[i]-1]/iomodel->yts; 157 168 this->inputs->AddInput(new TriaVertexInput(VxObsEnum,nodeinputs)); 158 169 } 159 170 if (iomodel->vy_obs) { 160 for(i=0;i<3;i++)nodeinputs[i]=iomodel->vy_obs[tria_ node_ids[i]-1]/iomodel->yts;171 for(i=0;i<3;i++)nodeinputs[i]=iomodel->vy_obs[tria_vertex_ids[i]-1]/iomodel->yts; 161 172 this->inputs->AddInput(new TriaVertexInput(VyObsEnum,nodeinputs)); 162 173 } 163 174 if (iomodel->vz_obs) { 164 for(i=0;i<3;i++)nodeinputs[i]=iomodel->vz_obs[tria_ node_ids[i]-1]/iomodel->yts;175 for(i=0;i<3;i++)nodeinputs[i]=iomodel->vz_obs[tria_vertex_ids[i]-1]/iomodel->yts; 165 176 this->inputs->AddInput(new TriaVertexInput(VzObsEnum,nodeinputs)); 166 177 } 167 178 if (iomodel->weights) { 168 for(i=0;i<3;i++)nodeinputs[i]=iomodel->weights[tria_ node_ids[i]-1];179 for(i=0;i<3;i++)nodeinputs[i]=iomodel->weights[tria_vertex_ids[i]-1]; 169 180 this->inputs->AddInput(new TriaVertexInput(WeightsEnum,nodeinputs)); 170 181 } … … 172 183 /*default vx,vy and vz: either observation or 0 */ 173 184 if(!iomodel->vx){ 174 if (iomodel->vx_obs) for(i=0;i<3;i++)nodeinputs[i]=iomodel->vx_obs[tria_ node_ids[i]-1]/iomodel->yts;185 if (iomodel->vx_obs) for(i=0;i<3;i++)nodeinputs[i]=iomodel->vx_obs[tria_vertex_ids[i]-1]/iomodel->yts; 175 186 else for(i=0;i<3;i++)nodeinputs[i]=0; 176 187 this->inputs->AddInput(new TriaVertexInput(VxEnum,nodeinputs)); … … 178 189 } 179 190 if(!iomodel->vy){ 180 if (iomodel->vy_obs) for(i=0;i<3;i++)nodeinputs[i]=iomodel->vy_obs[tria_ node_ids[i]-1]/iomodel->yts;191 if (iomodel->vy_obs) for(i=0;i<3;i++)nodeinputs[i]=iomodel->vy_obs[tria_vertex_ids[i]-1]/iomodel->yts; 181 192 else for(i=0;i<3;i++)nodeinputs[i]=0; 182 193 this->inputs->AddInput(new TriaVertexInput(VyEnum,nodeinputs)); … … 184 195 } 185 196 if(!iomodel->vz){ 186 if (iomodel->vz_obs) for(i=0;i<3;i++)nodeinputs[i]=iomodel->vz_obs[tria_ node_ids[i]-1]/iomodel->yts;197 if (iomodel->vz_obs) for(i=0;i<3;i++)nodeinputs[i]=iomodel->vz_obs[tria_vertex_ids[i]-1]/iomodel->yts; 187 198 else for(i=0;i<3;i++)nodeinputs[i]=0; 188 199 this->inputs->AddInput(new TriaVertexInput(VzEnum,nodeinputs));
Note:
See TracChangeset
for help on using the changeset viewer.