2 #include "../toolkits/toolkits.h"
3 #include "../classes/classes.h"
4 #include "../shared/shared.h"
5 #include "../modules/modules.h"
6 #include "../classes/Inputs2/DatasetInput2.h"
59 basalelement = element;
62 if(!element->
IsOnBase())
return NULL;
73 int *responses = NULL;
81 IssmDouble* basis = xNew<IssmDouble>(numnodes);
82 IssmDouble* dbasis = xNew<IssmDouble>(2*numnodes);
96 for(
int ig=gauss->
begin();ig<gauss->end();ig++){
108 for(
int resp=0;resp<num_responses;resp++){
111 switch(responses[resp]){
113 for(i=0;i<numnodes;i++) pe->
values[i]+=(thicknessobs-thickness)*weight*Jdet*gauss->
weight*basis[i];
116 for(i=0;i<numnodes;i++) pe->
values[i]+= - weight*dH[0]*dbasis[0*numnodes+i]*Jdet*gauss->
weight;
117 for(i=0;i<numnodes;i++) pe->
values[i]+= - weight*dH[1]*dbasis[1*numnodes+i]*Jdet*gauss->
weight;
122 vel = sqrt(vx*vx+vy*vy);
125 for(i=0;i<numnodes;i++) pe->
values[i]+= - weight*(dH[0]*vx+dH[1]*vy)*(dbasis[0*numnodes+i]*vx+dbasis[1*numnodes+i]*vy)*Jdet*gauss->
weight;
130 vel = sqrt(vx*vx+vy*vy);
133 for(i=0;i<numnodes;i++) pe->
values[i]+= - weight*(dH[0]*(-vy)+dH[1]*vx)*(dbasis[0*numnodes+i]*(-vy)+dbasis[1*numnodes+i]*vx)*Jdet*gauss->
weight;
137 for(i=0;i<numnodes;i++) pe->
values[i]+= - weight*2*thickness*Jdet*gauss->
weight*basis[i];
147 xDelete<int>(responses);
148 xDelete<IssmDouble>(xyz_list);
149 xDelete<IssmDouble>(basis);
150 xDelete<IssmDouble>(dbasis);
156 _error_(
"not implemented yet");
171 int *responses = NULL;
172 int num_responses,resp;
177 if(control_type!=
VxEnum &&
185 for(resp=0;resp<num_responses;resp++)
switch(responses[resp]){
195 switch(control_type){
204 xDelete<int>(responses);
213 IssmDouble* ge = xNewZeroInit<IssmDouble>(numvertices);
214 IssmDouble* lambda = xNew<IssmDouble>(numvertices);
215 int* vertexpidlist = xNew<int>(numvertices);
229 for(
int i=0;i<numvertices;i++){
230 for(
int j=0;j<numvertices;j++){
234 _assert_(!xIsNan<IssmDouble>(ge[i]));
239 xDelete<IssmDouble>(ge);
240 xDelete<IssmDouble>(lambda);
241 xDelete<int>(vertexpidlist);
250 IssmDouble* ge = xNewZeroInit<IssmDouble>(numvertices);
251 IssmDouble* lambda = xNew<IssmDouble>(numvertices);
252 int* vertexpidlist = xNew<int>(numvertices);
257 for(
int i=0;i<numvertices;i++){
259 _assert_(!xIsNan<IssmDouble>(ge[i]));
264 xDelete<IssmDouble>(ge);
265 xDelete<IssmDouble>(lambda);
266 xDelete<int>(vertexpidlist);
278 IssmDouble* basis = xNew<IssmDouble>(numvertices);
279 IssmDouble* ge = xNewZeroInit<IssmDouble>(numvertices);
280 int* vertexpidlist = xNew<int>(numvertices);
290 for(
int ig=gauss->
begin();ig<gauss->end();ig++){
301 for(
int i=0;i<numvertices;i++){
302 ge[i]+=thickness*Dlambda[0]*Jdet*gauss->
weight*basis[i];
303 _assert_(!xIsNan<IssmDouble>(ge[i]));
309 xDelete<IssmDouble>(xyz_list);
310 xDelete<IssmDouble>(basis);
311 xDelete<IssmDouble>(ge);
312 xDelete<int>(vertexpidlist);
325 IssmDouble* basis = xNew<IssmDouble>(numvertices);
326 IssmDouble* ge = xNewZeroInit<IssmDouble>(numvertices);
327 int* vertexpidlist = xNew<int>(numvertices);
337 for(
int ig=gauss->
begin();ig<gauss->end();ig++){
348 for(
int i=0;i<numvertices;i++){
349 ge[i]+=thickness*Dlambda[1]*Jdet*gauss->
weight*basis[i];
350 _assert_(!xIsNan<IssmDouble>(ge[i]));
356 xDelete<IssmDouble>(xyz_list);
357 xDelete<IssmDouble>(basis);
358 xDelete<IssmDouble>(ge);
359 xDelete<int>(vertexpidlist);