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"
53 int *responses = NULL;
61 IssmDouble* basis = xNew<IssmDouble>(numnodes);
62 IssmDouble* dbasis = xNew<IssmDouble>(2*numnodes);
76 for(
int ig=gauss->
begin();ig<gauss->end();ig++){
87 for(
int resp=0;resp<num_responses;resp++){
90 switch(responses[resp]){
92 for(i=0;i<numnodes;i++) pe->
values[i]+=(surfaceobs-surface)*weight*Jdet*gauss->
weight*basis[i];
107 xDelete<int>(responses);
108 xDelete<IssmDouble>(xyz_list);
109 xDelete<IssmDouble>(basis);
110 xDelete<IssmDouble>(dbasis);
116 _error_(
"not implemented yet");
131 int *responses = NULL;
132 int num_responses,resp;
137 for(resp=0;resp<num_responses;resp++)
switch(responses[resp]){
147 switch(control_type){
154 xDelete<int>(responses);
167 IssmDouble* basis = xNew<IssmDouble>(numvertices);
168 IssmDouble* ge = xNewZeroInit<IssmDouble>(numvertices);
169 int* vertexpidlist = xNew<int>(numvertices);
177 for(
int ig=gauss->
begin();ig<gauss->end();ig++){
186 for(
int i=0;i<numvertices;i++){
187 ge[i]+= -Jdet*gauss->
weight*basis[i]*lambda;
188 _assert_(!xIsNan<IssmDouble>(ge[i]));
194 xDelete<IssmDouble>(ge);
195 xDelete<IssmDouble>(xyz_list);
196 xDelete<IssmDouble>(basis);
197 xDelete<int>(vertexpidlist);
204 IssmDouble dlambda[2],ds[2],slopex,slopey,slope,omega,Jdet,velobs;
211 IssmDouble* basis = xNew<IssmDouble>(numvertices);
212 IssmDouble* ge = xNewZeroInit<IssmDouble>(numvertices);
213 int* vertexpidlist = xNew<int>(numvertices);
226 for(
int ig=gauss->
begin();ig<gauss->end();ig++){
239 slope = sqrt(slopex*slopex + slopey*slopey);
243 for(
int i=0;i<numvertices;i++){
244 ge[i]+= - Jdet*gauss->
weight*basis[i]*velobs/slope*(ds[0]*dlambda[0] + ds[1]*dlambda[1]);
245 _assert_(!xIsNan<IssmDouble>(ge[i]));
251 xDelete<IssmDouble>(ge);
252 xDelete<IssmDouble>(xyz_list);
253 xDelete<IssmDouble>(basis);
254 xDelete<int>(vertexpidlist);
268 IssmDouble* dbasis = xNew<IssmDouble>(2*numvertices);
269 IssmDouble* ge = xNewZeroInit<IssmDouble>(numvertices);
270 int* vertexpidlist = xNew<int>(numvertices);
280 for(
int ig=gauss->
begin();ig<gauss->end();ig++){
291 for(
int i=0;i<numvertices;i++){
292 ge[i]+=-weight*Jdet*gauss->
weight*2*(dk[0]*dk[0] + dk[1]*dk[1])*(dbasis[0*numvertices+i]*dk[0]+dbasis[1*numvertices+i]*dk[1]);
293 _assert_(!xIsNan<IssmDouble>(ge[i]));
299 xDelete<IssmDouble>(xyz_list);
300 xDelete<IssmDouble>(dbasis);
301 xDelete<IssmDouble>(ge);
302 xDelete<int>(vertexpidlist);
317 IssmDouble* basis = xNew<IssmDouble>(numvertices);
318 IssmDouble* ge = xNewZeroInit<IssmDouble>(numvertices);
319 int* vertexpidlist = xNew<int>(numvertices);
330 for(
int ig=gauss->
begin();ig<gauss->end();ig++){
342 for(
int i=0;i<numvertices;i++){
343 ge[i]+=-weight*Jdet*gauss->
weight*(omega - omega0)*basis[i];
344 _assert_(!xIsNan<IssmDouble>(ge[i]));
350 xDelete<IssmDouble>(xyz_list);
351 xDelete<IssmDouble>(basis);
352 xDelete<IssmDouble>(ge);
353 xDelete<int>(vertexpidlist);