Changeset 13261
- Timestamp:
- 09/05/12 07:38:13 (13 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/Container/Observations.cpp
r13216 r13261 36 36 } 37 37 /*}}}*/ 38 /*FUNCTION Observations::Observations(Issm Double* observations_list,IssmDouble* x,IssmDouble* y,int n,Options* options){{{*/39 Observations::Observations(Issm Double* observations_list,IssmDouble* x,IssmDouble* y,int n,Options* options){38 /*FUNCTION Observations::Observations(IssmPDouble* observations_list,IssmPDouble* x,IssmPDouble* y,int n,Options* options){{{*/ 39 Observations::Observations(IssmPDouble* observations_list,IssmPDouble* x,IssmPDouble* y,int n,Options* options){ 40 40 41 41 /*Intermediaries*/ 42 42 int i,j,maxdepth,level,counter,index; 43 43 int xi,yi; 44 Issm Double xmin,xmax,ymin,ymax;45 Issm Double offset,minlength,minspacing,mintrimming,maxtrimming;44 IssmPDouble xmin,xmax,ymin,ymax; 45 IssmPDouble offset,minlength,minspacing,mintrimming,maxtrimming; 46 46 Observation *observation = NULL; 47 47 … … 66 66 options->Get(&minlength,"boxlength"); 67 67 if(minlength<=0)_error_("boxlength should be a positive number"); 68 maxdepth=reCast<int,Issm Double>(log(max(xmax-xmin,ymax-ymin)/minlength +1)/log(2.0));68 maxdepth=reCast<int,IssmPDouble>(log(max(xmax-xmin,ymax-ymin)/minlength +1)/log(2.0)); 69 69 } 70 70 else{ 71 71 maxdepth = 30; 72 minlength=max(xmax-xmin,ymax-ymin)/Issm Double((1L<<maxdepth)-1);72 minlength=max(xmax-xmin,ymax-ymin)/IssmPDouble((1L<<maxdepth)-1); 73 73 } 74 74 … … 118 118 /*Methods*/ 119 119 /*FUNCTION Observations::ClosestObservation{{{*/ 120 void Observations::ClosestObservation(Issm Double *px,IssmDouble *py,IssmDouble *pobs,IssmDouble x_interp,IssmDouble y_interp,IssmDouble radius){120 void Observations::ClosestObservation(IssmPDouble *px,IssmPDouble *py,IssmPDouble *pobs,IssmPDouble x_interp,IssmPDouble y_interp,IssmPDouble radius){ 121 121 122 122 /*Output and Intermediaries*/ 123 123 bool stop; 124 124 int nobs,i,index; 125 Issm Doubleh2,hmin2,radius2;125 IssmPDouble h2,hmin2,radius2; 126 126 int *indices = NULL; 127 127 Observation *observation = NULL; … … 166 166 167 167 }/*}}}*/ 168 /*FUNCTION Observations::ObservationList(Issm Double **px,IssmDouble **py,IssmDouble **pobs,int* pnobs,IssmDouble x_interp,IssmDouble y_interp,IssmDouble radius,int maxdata){{{*/169 void Observations::ObservationList(Issm Double **px,IssmDouble **py,IssmDouble **pobs,int* pnobs,IssmDouble x_interp,IssmDouble y_interp,IssmDouble radius,int maxdata){168 /*FUNCTION Observations::ObservationList(IssmPDouble **px,IssmPDouble **py,IssmPDouble **pobs,int* pnobs,IssmPDouble x_interp,IssmPDouble y_interp,IssmPDouble radius,int maxdata){{{*/ 169 void Observations::ObservationList(IssmPDouble **px,IssmPDouble **py,IssmPDouble **pobs,int* pnobs,IssmPDouble x_interp,IssmPDouble y_interp,IssmPDouble radius,int maxdata){ 170 170 171 171 /*Output and Intermediaries*/ 172 172 bool stop; 173 173 int nobs,tempnobs,i,j,k,n,counter; 174 Issm Doubleh2,radius2;174 IssmPDouble h2,radius2; 175 175 int *indices = NULL; 176 176 int *tempindices = NULL; 177 Issm Double*dists = NULL;178 Issm Double*x = NULL;179 Issm Double*y = NULL;180 Issm Double*obs = NULL;177 IssmPDouble *dists = NULL; 178 IssmPDouble *x = NULL; 179 IssmPDouble *y = NULL; 180 IssmPDouble *obs = NULL; 181 181 Observation *observation = NULL; 182 182 … … 191 191 if(tempnobs){ 192 192 indices = xNew<int>(tempnobs); 193 dists = xNew<Issm Double>(tempnobs);193 dists = xNew<IssmPDouble>(tempnobs); 194 194 } 195 195 nobs = 0; … … 226 226 } 227 227 } 228 xDelete<Issm Double>(dists);228 xDelete<IssmPDouble>(dists); 229 229 xDelete<int>(tempindices); 230 230 231 231 if(nobs){ 232 232 /*Allocate vectors*/ 233 x = xNew<Issm Double>(nobs);234 y = xNew<Issm Double>(nobs);235 obs = xNew<Issm Double>(nobs);233 x = xNew<IssmPDouble>(nobs); 234 y = xNew<IssmPDouble>(nobs); 235 obs = xNew<IssmPDouble>(nobs); 236 236 237 237 /*Loop over all observations and fill in x, y and obs*/ … … 249 249 *pnobs=nobs; 250 250 }/*}}}*/ 251 /*FUNCTION Observations::ObservationList(Issm Double **px,IssmDouble **py,IssmDouble **pobs,int* pnobs){{{*/252 void Observations::ObservationList(Issm Double **px,IssmDouble **py,IssmDouble **pobs,int* pnobs){251 /*FUNCTION Observations::ObservationList(IssmPDouble **px,IssmPDouble **py,IssmPDouble **pobs,int* pnobs){{{*/ 252 void Observations::ObservationList(IssmPDouble **px,IssmPDouble **py,IssmPDouble **pobs,int* pnobs){ 253 253 254 254 /*Output and Intermediaries*/ 255 255 int nobs; 256 Issm Double*x = NULL;257 Issm Double*y = NULL;258 Issm Double*obs = NULL;256 IssmPDouble *x = NULL; 257 IssmPDouble *y = NULL; 258 IssmPDouble *obs = NULL; 259 259 Observation *observation = NULL; 260 260 … … 262 262 263 263 if(nobs){ 264 x = xNew<Issm Double>(nobs);265 y = xNew<Issm Double>(nobs);266 obs = xNew<Issm Double>(nobs);264 x = xNew<IssmPDouble>(nobs); 265 y = xNew<IssmPDouble>(nobs); 266 obs = xNew<IssmPDouble>(nobs); 267 267 for(int i=0;i<this->Size();i++){ 268 268 observation=(Observation*)this->GetObjectByOffset(i); … … 278 278 }/*}}}*/ 279 279 /*FUNCTION Observations::InterpolationIDW{{{*/ 280 void Observations::InterpolationIDW(Issm Double *pprediction,IssmDouble x_interp,IssmDouble y_interp,IssmDouble radius,int mindata,int maxdata,IssmDouble power){280 void Observations::InterpolationIDW(IssmPDouble *pprediction,IssmPDouble x_interp,IssmPDouble y_interp,IssmPDouble radius,int mindata,int maxdata,IssmPDouble power){ 281 281 282 282 /*Intermediaries*/ 283 int i,n_obs;284 Issm Double prediction;285 Issm Double numerator,denominator,h,weight;286 Issm Double *x = NULL;287 Issm Double *y = NULL;288 Issm Double *obs = NULL;283 int i,n_obs; 284 IssmPDouble prediction; 285 IssmPDouble numerator,denominator,h,weight; 286 IssmPDouble *x = NULL; 287 IssmPDouble *y = NULL; 288 IssmPDouble *obs = NULL; 289 289 290 290 /*Some checks*/ … … 322 322 /*clean-up*/ 323 323 *pprediction = prediction; 324 xDelete<Issm Double>(x);325 xDelete<Issm Double>(y);326 xDelete<Issm Double>(obs);324 xDelete<IssmPDouble>(x); 325 xDelete<IssmPDouble>(y); 326 xDelete<IssmPDouble>(obs); 327 327 }/*}}}*/ 328 328 /*FUNCTION Observations::InterpolationKriging{{{*/ 329 void Observations::InterpolationKriging(Issm Double *pprediction,IssmDouble *perror,IssmDouble x_interp,IssmDouble y_interp,IssmDouble radius,int mindata,int maxdata,Variogram* variogram){329 void Observations::InterpolationKriging(IssmPDouble *pprediction,IssmPDouble *perror,IssmPDouble x_interp,IssmPDouble y_interp,IssmPDouble radius,int mindata,int maxdata,Variogram* variogram){ 330 330 331 331 /*Intermediaries*/ 332 332 int i,j,n_obs; 333 Issm Doubleprediction,error;334 Issm Doublenumerator,denominator,ratio;335 Issm Double*x = NULL;336 Issm Double*y = NULL;337 Issm Double*obs = NULL;338 Issm Double*Gamma = NULL;339 Issm Double*GinvG0 = NULL;340 Issm Double*Ginv1 = NULL;341 Issm Double*GinvZ = NULL;342 Issm Double*gamma0 = NULL;343 Issm Double*ones = NULL;333 IssmPDouble prediction,error; 334 IssmPDouble numerator,denominator,ratio; 335 IssmPDouble *x = NULL; 336 IssmPDouble *y = NULL; 337 IssmPDouble *obs = NULL; 338 IssmPDouble *Gamma = NULL; 339 IssmPDouble *GinvG0 = NULL; 340 IssmPDouble *Ginv1 = NULL; 341 IssmPDouble *GinvZ = NULL; 342 IssmPDouble *gamma0 = NULL; 343 IssmPDouble *ones = NULL; 344 344 345 345 /*Some checks*/ … … 361 361 362 362 /*Allocate intermediary matrix and vectors*/ 363 Gamma = xNew<Issm Double>(n_obs*n_obs);364 gamma0 = xNew<Issm Double>(n_obs);365 ones = xNew<Issm Double>(n_obs);363 Gamma = xNew<IssmPDouble>(n_obs*n_obs); 364 gamma0 = xNew<IssmPDouble>(n_obs); 365 ones = xNew<IssmPDouble>(n_obs); 366 366 367 367 /*First: Create semivariogram matrix for observations*/ … … 402 402 *pprediction = prediction; 403 403 *perror = error; 404 xDelete<Issm Double>(x);405 xDelete<Issm Double>(y);406 xDelete<Issm Double>(obs);407 xDelete<Issm Double>(Gamma);408 xDelete<Issm Double>(gamma0);409 xDelete<Issm Double>(ones);410 xDelete<Issm Double>(GinvG0);411 xDelete<Issm Double>(Ginv1);412 xDelete<Issm Double>(GinvZ);404 xDelete<IssmPDouble>(x); 405 xDelete<IssmPDouble>(y); 406 xDelete<IssmPDouble>(obs); 407 xDelete<IssmPDouble>(Gamma); 408 xDelete<IssmPDouble>(gamma0); 409 xDelete<IssmPDouble>(ones); 410 xDelete<IssmPDouble>(GinvG0); 411 xDelete<IssmPDouble>(Ginv1); 412 xDelete<IssmPDouble>(GinvZ); 413 413 414 414 }/*}}}*/ 415 415 /*FUNCTION Observations::InterpolationNearestNeighbor{{{*/ 416 void Observations::InterpolationNearestNeighbor(Issm Double *pprediction,IssmDouble x_interp,IssmDouble y_interp,IssmDouble radius){416 void Observations::InterpolationNearestNeighbor(IssmPDouble *pprediction,IssmPDouble x_interp,IssmPDouble y_interp,IssmPDouble radius){ 417 417 418 418 /*Intermediaries*/ 419 Issm Doublex,y,obs;419 IssmPDouble x,y,obs; 420 420 421 421 /*Get clostest observation*/ … … 426 426 }/*}}}*/ 427 427 /*FUNCTION Observations::QuadtreeColoring{{{*/ 428 void Observations::QuadtreeColoring(Issm Double* A,IssmDouble *x,IssmDouble *y,int n){428 void Observations::QuadtreeColoring(IssmPDouble* A,IssmPDouble *x,IssmPDouble *y,int n){ 429 429 430 430 int xi,yi,level; … … 433 433 this->quadtree->IntergerCoordinates(&xi,&yi,x[i],y[i]); 434 434 this->quadtree->QuadtreeDepth(&level,xi,yi); 435 A[i]=(Issm Double)level;435 A[i]=(IssmPDouble)level; 436 436 } 437 437 438 438 }/*}}}*/ 439 439 /*FUNCTION Observations::Variomap{{{*/ 440 void Observations::Variomap(Issm Double* gamma,IssmDouble *x,int n){440 void Observations::Variomap(IssmPDouble* gamma,IssmPDouble *x,int n){ 441 441 442 442 /*Output and Intermediaries*/ 443 443 int i,j,k; 444 Issm Doubledistance;444 IssmPDouble distance; 445 445 Observation *observation1 = NULL; 446 446 Observation *observation2 = NULL; 447 447 448 Issm Double *counter = xNew<IssmDouble>(n);448 IssmPDouble *counter = xNew<IssmPDouble>(n); 449 449 for(j=0;j<n;j++) counter[j] = 0.0; 450 450 for(j=0;j<n;j++) gamma[j] = 0.0; … … 475 475 476 476 /*Assign output pointer*/ 477 xDelete<Issm Double>(counter);478 }/*}}}*/ 477 xDelete<IssmPDouble>(counter); 478 }/*}}}*/ -
issm/trunk-jpl/src/c/modules/Solverx/Solverx.h
r13216 r13261 24 24 25 25 void SolverxSeq(SeqVec<IssmDouble>** puf,SeqMat<IssmDouble>* Kff, SeqVec<IssmDouble>* pf,Parameters* parameters); 26 void SolverxSeq(IssmPDouble **pX, IssmPDouble *A, IssmPDouble *B,int n); 26 27 void SolverxSeq(IssmPDouble *X, IssmPDouble *A, IssmPDouble *B,int n); 27 28 -
issm/trunk-jpl/src/c/modules/Solverx/SolverxSeq.cpp
r13216 r13261 52 52 53 53 }/*}}}*/ 54 void SolverxSeq(IssmPDouble **pX, IssmPDouble *A, IssmPDouble *B,int n){ /*{{{*/ 55 56 /*Allocate output*/ 57 double* X = xNew<double>(n); 58 59 /*Solve*/ 60 SolverxSeq(X,A,B,n); 61 62 /*Assign output pointer*/ 63 *pX=X; 64 } 65 /*}}}*/ 66 54 67 #ifdef _HAVE_ADOLC_ 55 56 int EDF_for_solverx(int n, IssmPDouble *x, int m, IssmPDouble *y) { 68 int EDF_for_solverx(int n, IssmPDouble *x, int m, IssmPDouble *y){/*{{{*/ 57 69 if(m*(m+1)!=n)_error_("Stiffness matrix should be square!"); 58 70 SolverxSeq(y,x, x+m*m, m); 59 71 return 0; 60 } 61 62 void SolverxSeq(IssmDouble *X,IssmDouble *A,IssmDouble *B,int n, Parameters* parameters){//{{{ 72 }/*}}}*/ 73 void SolverxSeq(IssmDouble *X,IssmDouble *A,IssmDouble *B,int n, Parameters* parameters){/*{{{*/ 63 74 // pack inputs to conform to the EDF-prescribed interface 64 IssmDouble* adoubleEDFin=xNew<IssmDouble>(n*(n+1)); // packed inputs, i.e. matrix and right hand side65 for(int i=0; i<n*n;i++)adoubleEDFin[i] =A[i]; // pack matrix66 for(int i=0; i<n; i++)adoubleEDFin[i+n*n]=B[i]; // pack the right hand side75 IssmDouble* adoubleEDFin=xNew<IssmDouble>(n*(n+1)); // packed inputs, i.e. matrix and right hand side 76 for(int i=0; i<n*n;i++)adoubleEDFin[i] =A[i]; // pack matrix 77 for(int i=0; i<n; i++)adoubleEDFin[i+n*n]=B[i]; // pack the right hand side 67 78 IssmPDouble* pdoubleEDFin=xNew<IssmPDouble>(n*(n+1)); // provide space to transfer inputs during call_ext_fct 68 IssmPDouble* pdoubleEDFout=xNew<IssmPDouble>(n); // provide space to transfer outputs during call_ext_fct79 IssmPDouble* pdoubleEDFout=xNew<IssmPDouble>(n); // provide space to transfer outputs during call_ext_fct 69 80 // call the wrapped solver through the registry entry we retrieve from parameters 70 81 call_ext_fct(dynamic_cast<GenericParam<Adolc_edf> * >(parameters->FindParamObject(AdolcParamEnum))->GetParameterValue().myEDF_for_solverx_p, … … 77 88 /*}}}*/ 78 89 #endif 79 void SolverxSeq(IssmPDouble * X, IssmPDouble * A, IssmPDouble * B,int n){ //{{{80 90 void SolverxSeq(IssmPDouble *X, IssmPDouble *A, IssmPDouble *B,int n){ /*{{{*/ 91 #ifdef _HAVE_GSL_ 81 92 /*GSL Matrices and vectors: */ 82 93 int s; … … 109 120 gsl_permutation_free(p); 110 121 gsl_vector_free(x); 111 122 #endif 112 123 } 113 124 /*}}}*/
Note:
See TracChangeset
for help on using the changeset viewer.