Changeset 27717
- Timestamp:
- 05/03/23 05:48:11 (23 months ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
r27579 r27717 209 209 if(iomodel->domaintype!=Domain2DhorizontalEnum && !element->IsOnBase()) continue; 210 210 for(int kk=0;kk<K;kk++){ 211 element->DatasetInputAdd(BasalforcingsIsmip6TfEnum,array3d[kk],inputs,iomodel,Ms[kk],Ns[kk],1,BasalforcingsIsmip6TfEnum, 7,kk);211 element->DatasetInputAdd(BasalforcingsIsmip6TfEnum,array3d[kk],inputs,iomodel,Ms[kk],Ns[kk],1,BasalforcingsIsmip6TfEnum,kk); 212 212 } 213 213 } -
issm/trunk-jpl/src/c/classes/Elements/Element.cpp
r27688 r27717 2147 2147 else _error_("not currently supported type of M and N attempted"); 2148 2148 }/*}}}*/ 2149 void Element::DatasetInputAdd(int enum_type,IssmDouble* vector,Inputs* inputs,IoModel* iomodel,int M,int N,int vector_type,int input_enum,int code,intinput_id){/*{{{*/2149 void Element::DatasetInputAdd(int enum_type,IssmDouble* vector,Inputs* inputs,IoModel* iomodel,int M,int N,int vector_type,int input_enum,int input_id){/*{{{*/ 2150 2150 /*enum_type: the name of the DatasetInput (eg Outputdefinition1) 2151 2151 * vector: information being stored (eg observations) 2152 2152 * vector_type: is if by element or by vertex 2153 2153 * input_enum: is the name of the vector being stored 2154 * code: what type of data is in the vector (booleans, ints, doubles)2155 2154 */ 2156 2155 … … 2211 2210 /*Are we in transient or static? */ 2212 2211 if(M==iomodel->numberofelements){ 2213 if (code==5){ //boolean 2214 _error_("not implemented"); 2215 //datasetinput->AddInput(new BoolInput(input_enum,reCast<bool>(vector[this->Sid()])),input_id); 2216 } 2217 else if (code==6){ //integer 2218 _error_("not implemented"); 2219 //datasetinput->AddInput(new IntInput(input_enum,reCast<int>(vector[this->Sid()])),input_id); 2220 } 2221 else if (code==7){ //IssmDouble 2222 _error_("not implemented"); 2223 //datasetinput->AddInput(new DoubleInput(input_enum,vector[this->Sid()]),input_id); 2224 } 2225 else _error_("could not recognize nature of vector from code " << code); 2212 _error_("not implemented"); 2226 2213 } 2227 2214 else if(M==iomodel->numberofelements+1){ 2228 2215 _error_("not supported"); 2229 ///*create transient input: */2230 //IssmDouble* times = xNew<IssmDouble>(N);2231 //for(t=0;t<N;t++) times[t] = vector[(M-1)*N+t];2232 //TransientInput* transientinput=new TransientInput(input_enum,times,N);2233 //TriaInput* bof=NULL;2234 //for(t=0;t<N;t++){2235 // value=vector[N*this->Sid()+t];2236 // switch(this->ObjectEnum()){2237 // case TriaEnum: transientinput->AddTimeInput(new TriaInput( input_enum,&value,P0Enum)); break;2238 // case PentaEnum: transientinput->AddTimeInput(new PentaInput(input_enum,&value,P0Enum)); break;2239 // case TetraEnum: transientinput->AddTimeInput(new TetraInput(input_enum,&value,P0Enum)); break;2240 // default: _error_("Not implemented yet");2241 // }2242 //}2243 //xDelete<IssmDouble>(times);2244 2216 } 2245 2217 else _error_("element vector is either numberofelements or numberofelements+1 long. Field provided (" << EnumToStringx(input_enum) << ") is " << M << " long"); -
issm/trunk-jpl/src/c/classes/Elements/Element.h
r27688 r27717 140 140 void InputCreateP1FromConstant(Inputs* inputs,IoModel* iomodel,IssmDouble value,int vector_enum); 141 141 void ControlInputCreate(IssmDouble* doublearray,IssmDouble* independents_min,IssmDouble* independents_max,Inputs*inputs,IoModel* iomodel,int M,int N,IssmDouble scale,int input_enum,int id); 142 void DatasetInputAdd(int enum_type,IssmDouble* vector,Inputs* inputs,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code,intinput_enum);142 void DatasetInputAdd(int enum_type,IssmDouble* vector,Inputs* inputs,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int input_enum); 143 143 void InputUpdateFromConstant(IssmDouble constant, int name); 144 144 void InputUpdateFromConstant(int constant, int name); -
issm/trunk-jpl/src/c/classes/IoModel.cpp
r27709 r27717 2592 2592 xDelete<int>(ndims); 2593 2593 } 2594 *pnumrecords=num_instances; 2594 if(pnumrecords){ 2595 *pnumrecords=num_instances; 2596 } 2595 2597 } 2596 2598 /*}}}*/ -
issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
r27696 r27717 85 85 for(Object* & object : elements->objects){ 86 86 Element* element=xDynamicCast<Element*>(object); 87 element->DatasetInputAdd(InversionCostFunctionsCoefficientsEnum,&weights[i*iomodel->numberofvertices],inputs,iomodel,M,1,1,cost_function, 7,cost_function);87 element->DatasetInputAdd(InversionCostFunctionsCoefficientsEnum,&weights[i*iomodel->numberofvertices],inputs,iomodel,M,1,1,cost_function,cost_function); 88 88 } 89 89 } -
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp
r27709 r27717 210 210 for(Object* & object : elements->objects){ 211 211 Element* element=xDynamicCast<Element*>(object); 212 element->DatasetInputAdd(StringToEnumx(cfsurfacesquare_definitionstring_s[j]),cfsurfacesquare_observation_s[j],inputs,iomodel,cfsurfacesquare_observation_M_s[j],cfsurfacesquare_observation_N_s[j],obs_vector_type,StringToEnumx(cfsurfacesquare_observation_string_s[j]), 7,SurfaceObservationEnum);213 element->DatasetInputAdd(StringToEnumx(cfsurfacesquare_definitionstring_s[j]),cfsurfacesquare_weights_s[j],inputs,iomodel,cfsurfacesquare_weights_M_s[j],cfsurfacesquare_weights_N_s[j],weight_vector_type,StringToEnumx(cfsurfacesquare_weights_string_s[j]), 7,WeightsSurfaceObservationEnum);212 element->DatasetInputAdd(StringToEnumx(cfsurfacesquare_definitionstring_s[j]),cfsurfacesquare_observation_s[j],inputs,iomodel,cfsurfacesquare_observation_M_s[j],cfsurfacesquare_observation_N_s[j],obs_vector_type,StringToEnumx(cfsurfacesquare_observation_string_s[j]),SurfaceObservationEnum); 213 element->DatasetInputAdd(StringToEnumx(cfsurfacesquare_definitionstring_s[j]),cfsurfacesquare_weights_s[j],inputs,iomodel,cfsurfacesquare_weights_M_s[j],cfsurfacesquare_weights_N_s[j],weight_vector_type,StringToEnumx(cfsurfacesquare_weights_string_s[j]),WeightsSurfaceObservationEnum); 214 214 215 215 } … … 260 260 int *cfssqt_weights_N_s = NULL; 261 261 char **cfssqt_weights_string_s = NULL; 262 IssmDouble **cfssqt_datatimes_s = NULL;263 int *cfssqt_datatimes_M_s = NULL;264 int *cfssqt_datatimes_N_s = NULL;265 262 266 263 /*Fetch name, model_string, observation, observation_string, etc ... (see src/m/classes/cfsurfacesquaretransient.m): */ … … 268 265 iomodel->FetchMultipleData(&cfssqt_definitionstring_s,&test,"md.cfsurfacesquaretransient.definitionstring"); _assert_(test==num_cfsurfacesquaretransients); 269 266 iomodel->FetchMultipleData(&cfssqt_model_string_s,&test,"md.cfsurfacesquaretransient.model_string"); _assert_(test==num_cfsurfacesquaretransients); 270 iomodel->FetchMultipleData(&cfssqt_observations_s,&cfssqt_observations_M_s,&cfssqt_observations_N_s,NULL, "md.cfsurfacesquaretransient.observations"); 271 iomodel->FetchMultipleData(&cfssqt_observations_string_s, NULL,"md.cfsurfacesquaretransient.observation_string"); 272 iomodel->FetchMultipleData(&cfssqt_weights_s,&cfssqt_weights_M_s,&cfssqt_weights_N_s,NULL,"md.cfsurfacesquaretransient.weights"); 273 iomodel->FetchMultipleData(&cfssqt_weights_string_s,NULL,"md.cfsurfacesquaretransient.weights_string"); 274 iomodel->FetchMultipleData(&cfssqt_datatimes_s,&cfssqt_datatimes_M_s,&cfssqt_datatimes_N_s,NULL,"md.cfsurfacesquaretransient.datatimes"); 267 iomodel->FetchMultipleData(&cfssqt_observations_s,&cfssqt_observations_M_s,&cfssqt_observations_N_s,&test, "md.cfsurfacesquaretransient.observations"); _assert_(test==num_cfsurfacesquaretransients); 268 iomodel->FetchMultipleData(&cfssqt_observations_string_s, &test,"md.cfsurfacesquaretransient.observations_string"); _assert_(test==num_cfsurfacesquaretransients); 269 iomodel->FetchMultipleData(&cfssqt_weights_s,&cfssqt_weights_M_s,&cfssqt_weights_N_s, &test,"md.cfsurfacesquaretransient.weights"); _assert_(test==num_cfsurfacesquaretransients); 270 iomodel->FetchMultipleData(&cfssqt_weights_string_s,&test,"md.cfsurfacesquaretransient.weights_string"); _assert_(test==num_cfsurfacesquaretransients); 275 271 276 272 for(j=0;j<num_cfsurfacesquaretransients;j++){ 277 273 278 274 /*Check that we can use P1 inputs*/ 279 if (cfssqt_observations_M_s[j]==iomodel->numberofvertices) _error_("only P1 fields are allowed for now"); 280 if (cfssqt_observations_M_s[j]==cfssqt_weights_M_s[j]) _error_("observations and weights do not have the same number of rows"); 281 if (cfssqt_observations_N_s[j]==cfssqt_weights_N_s[j]) _error_("observations and weights do not have the same number of columns"); 282 if (cfssqt_datatimes_M_s[j]==1) _error_("datatime should have only one row"); 283 if (cfssqt_datatimes_N_s[j]==cfssqt_weights_N_s[j]) _error_("datatime should have the same number of columns as the observations"); 275 if (cfssqt_observations_M_s[j]!=(iomodel->numberofvertices+1)) _error_("observations should be a P1 time series"); 276 if (cfssqt_weights_M_s[j]!=iomodel->numberofvertices+1) _error_("weights should be a P1 time series"); 277 _assert_(cfssqt_observations_N_s[j]>0); 278 279 /*extract data times from last row of observations*/ 280 IssmDouble *datatimes = xNew<IssmDouble>(cfssqt_observations_N_s[j]); 281 for(int k=0;k<cfssqt_observations_N_s[j];k++) datatimes[k] = (cfssqt_observations_s[j])[cfssqt_observations_N_s[j]*(cfssqt_weights_M_s[j]-1)+k]; 284 282 285 283 /*First create a cfsurfacesquaretransient object for that specific string (cfssqt_model_string_s[j]):*/ 286 output_definitions->AddObject(new Cfsurfacesquaretransient(cfssqt_name_s[j], StringToEnumx(cfssqt_definitionstring_s[j]), StringToEnumx(cfssqt_model_string_s[j]), cfssqt_datatimes_N_s[j], cfssqt_datatimes_s[j])); 284 output_definitions->AddObject(new Cfsurfacesquaretransient(cfssqt_name_s[j], StringToEnumx(cfssqt_definitionstring_s[j]), StringToEnumx(cfssqt_model_string_s[j]), cfssqt_observations_N_s[j],datatimes )); 285 xDelete<IssmDouble>(datatimes); 287 286 288 287 /*Now, for this particular cfsurfacesquaretransient object, make sure we plug into the elements: the observation, and the weights.*/ 289 288 for(Object* & object : elements->objects){ 290 289 Element* element=xDynamicCast<Element*>(object); 291 _error_("need to implement transient inputs?"); 292 //element->DatasetInputAdd(StringToEnumx(cfssqt_definitionstring_s[j]),cfssqt_observations_s[j],inputs,iomodel,cfssqt_observations_M_s[j],cfssqt_observations_N_s[j],obs_vector_type,StringToEnumx(cfssqt_observations_string_s[j]),7,SurfaceObservationEnum); 293 //element->DatasetInputAdd(StringToEnumx(cfssqt_definitionstring_s[j]),cfssqt_weights_s[j],inputs,iomodel,cfssqt_weights_M_s[j],cfssqt_weights_N_s[j],weight_vector_type,StringToEnumx(cfssqt_weights_string_s[j]),7,WeightsSurfaceObservationEnum); 290 element->DatasetInputAdd(StringToEnumx(cfssqt_definitionstring_s[j]),cfssqt_observations_s[j],inputs,iomodel,cfssqt_observations_M_s[j],cfssqt_observations_N_s[j],1,StringToEnumx(cfssqt_observations_string_s[j]),SurfaceObservationEnum); 291 element->DatasetInputAdd(StringToEnumx(cfssqt_definitionstring_s[j]),cfssqt_weights_s[j],inputs,iomodel,cfssqt_weights_M_s[j],cfssqt_weights_N_s[j],1,StringToEnumx(cfssqt_weights_string_s[j]),WeightsSurfaceObservationEnum); 294 292 295 293 } … … 320 318 xDelete<int>(cfssqt_weights_N_s); 321 319 xDelete<char*>(cfssqt_weights_string_s); 322 xDelete<IssmDouble>(cfssqt_datatimes_s);323 320 /*}}}*/ 324 321 } … … 361 358 Element* element=xDynamicCast<Element*>(object); 362 359 363 element->DatasetInputAdd(StringToEnumx(cfdragcoeffabsgrad_definitionstring_s[j]),cfdragcoeffabsgrad_weights_s[j],inputs,iomodel,cfdragcoeffabsgrad_weights_M_s[j],cfdragcoeffabsgrad_weights_N_s[j],weight_vector_type,StringToEnumx(cfdragcoeffabsgrad_weights_string_s[j]), 7,WeightsSurfaceObservationEnum);360 element->DatasetInputAdd(StringToEnumx(cfdragcoeffabsgrad_definitionstring_s[j]),cfdragcoeffabsgrad_weights_s[j],inputs,iomodel,cfdragcoeffabsgrad_weights_M_s[j],cfdragcoeffabsgrad_weights_N_s[j],weight_vector_type,StringToEnumx(cfdragcoeffabsgrad_weights_string_s[j]),WeightsSurfaceObservationEnum); 364 361 365 362 } … … 423 420 Element* element=xDynamicCast<Element*>(object); 424 421 425 element->DatasetInputAdd(StringToEnumx(cfrheologybbarabsgrad_definitionstring_s[j]),cfrheologybbarabsgrad_weights_s[j],inputs,iomodel,cfrheologybbarabsgrad_weights_M_s[j],cfrheologybbarabsgrad_weights_N_s[j],weight_vector_type,StringToEnumx(cfrheologybbarabsgrad_weights_string_s[j]), 7,WeightsSurfaceObservationEnum);422 element->DatasetInputAdd(StringToEnumx(cfrheologybbarabsgrad_definitionstring_s[j]),cfrheologybbarabsgrad_weights_s[j],inputs,iomodel,cfrheologybbarabsgrad_weights_M_s[j],cfrheologybbarabsgrad_weights_N_s[j],weight_vector_type,StringToEnumx(cfrheologybbarabsgrad_weights_string_s[j]),WeightsSurfaceObservationEnum); 426 423 427 424 } … … 506 503 Element* element=xDynamicCast<Element*>(object); 507 504 508 element->DatasetInputAdd(StringToEnumx(cfsurfacelogvel_definitionstring[j]),cfsurfacelogvel_vxobs[j],inputs,iomodel,cfsurfacelogvel_observation_M[j],cfsurfacelogvel_observation_N[j],obs_vector_type,StringToEnumx(cfsurfacelogvel_vxobs_string[j]), 7,VxObsEnum);509 element->DatasetInputAdd(StringToEnumx(cfsurfacelogvel_definitionstring[j]),cfsurfacelogvel_vyobs[j],inputs,iomodel,cfsurfacelogvel_observation_M[j],cfsurfacelogvel_observation_N[j],obs_vector_type,StringToEnumx(cfsurfacelogvel_vyobs_string[j]), 7,VyObsEnum);510 element->DatasetInputAdd(StringToEnumx(cfsurfacelogvel_definitionstring[j]),cfsurfacelogvel_weights[j],inputs,iomodel,cfsurfacelogvel_weights_M[j],cfsurfacelogvel_weights_N[j],weight_vector_type,StringToEnumx(cfsurfacelogvel_weightstring[j]), 7,WeightsSurfaceObservationEnum);505 element->DatasetInputAdd(StringToEnumx(cfsurfacelogvel_definitionstring[j]),cfsurfacelogvel_vxobs[j],inputs,iomodel,cfsurfacelogvel_observation_M[j],cfsurfacelogvel_observation_N[j],obs_vector_type,StringToEnumx(cfsurfacelogvel_vxobs_string[j]),VxObsEnum); 506 element->DatasetInputAdd(StringToEnumx(cfsurfacelogvel_definitionstring[j]),cfsurfacelogvel_vyobs[j],inputs,iomodel,cfsurfacelogvel_observation_M[j],cfsurfacelogvel_observation_N[j],obs_vector_type,StringToEnumx(cfsurfacelogvel_vyobs_string[j]),VyObsEnum); 507 element->DatasetInputAdd(StringToEnumx(cfsurfacelogvel_definitionstring[j]),cfsurfacelogvel_weights[j],inputs,iomodel,cfsurfacelogvel_weights_M[j],cfsurfacelogvel_weights_N[j],weight_vector_type,StringToEnumx(cfsurfacelogvel_weightstring[j]),WeightsSurfaceObservationEnum); 511 508 512 509 } … … 598 595 for(Object* & object : elements->objects){ 599 596 Element* element=xDynamicCast<Element*>(object); 600 element->DatasetInputAdd(StringToEnumx(cflevelsetmisfit_definitionstring_s[j]),cflevelsetmisfit_observation_s[j],inputs,iomodel,cflevelsetmisfit_observation_M_s[j],cflevelsetmisfit_observation_N_s[j],obs_vector_type,StringToEnumx(cflevelsetmisfit_observation_string_s[j]), 7,LevelsetObservationEnum);601 element->DatasetInputAdd(StringToEnumx(cflevelsetmisfit_definitionstring_s[j]),cflevelsetmisfit_weights_s[j],inputs,iomodel,cflevelsetmisfit_weights_M_s[j],cflevelsetmisfit_weights_N_s[j],weight_vector_type,StringToEnumx(cflevelsetmisfit_weights_string_s[j]), 7,WeightsLevelsetObservationEnum);597 element->DatasetInputAdd(StringToEnumx(cflevelsetmisfit_definitionstring_s[j]),cflevelsetmisfit_observation_s[j],inputs,iomodel,cflevelsetmisfit_observation_M_s[j],cflevelsetmisfit_observation_N_s[j],obs_vector_type,StringToEnumx(cflevelsetmisfit_observation_string_s[j]),LevelsetObservationEnum); 598 element->DatasetInputAdd(StringToEnumx(cflevelsetmisfit_definitionstring_s[j]),cflevelsetmisfit_weights_s[j],inputs,iomodel,cflevelsetmisfit_weights_M_s[j],cflevelsetmisfit_weights_N_s[j],weight_vector_type,StringToEnumx(cflevelsetmisfit_weights_string_s[j]),WeightsLevelsetObservationEnum); 602 599 } 603 600 }
Note:
See TracChangeset
for help on using the changeset viewer.