Changeset 27920
- Timestamp:
- 09/21/23 11:41:17 (18 months ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 3 added
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/Makefile.am
r27916 r27920 86 86 ./classes/Cfdragcoeffabsgradtransient.cpp \ 87 87 ./classes/Cfrheologybbarabsgrad.cpp \ 88 ./classes/Cfrheologybbarabsgradtransient.cpp \ 88 89 ./classes/Cfsurfacelogvel.cpp \ 89 90 ./classes/Cflevelsetmisfit.cpp \ -
issm/trunk-jpl/src/c/classes/Cfrheologybbarabsgrad.cpp
r27728 r27920 29 29 this->definitionenum = -1; 30 30 this->name = NULL; 31 this->weights_enum = UNDEF;32 this->timepassedflag = false;33 31 this->J = 0.; 32 this->firsttimepassed = false; 34 33 } 35 34 /*}}}*/ 36 Cfrheologybbarabsgrad::Cfrheologybbarabsgrad(char* in_name, int in_definitionenum , int in_weights_enum){/*{{{*/35 Cfrheologybbarabsgrad::Cfrheologybbarabsgrad(char* in_name, int in_definitionenum){/*{{{*/ 37 36 38 37 this->definitionenum=in_definitionenum; … … 41 40 xMemCpy<char>(this->name,in_name,strlen(in_name)+1); 42 41 43 this->weights_enum=in_weights_enum;44 this->timepassedflag=false;45 46 42 this->J=0; 43 this->firsttimepassed = false; 47 44 } 48 45 /*}}}*/ 49 Cfrheologybbarabsgrad::Cfrheologybbarabsgrad(char* in_name, int in_definitionenum, int in_weights_enum, bool in_timepassedflag,IssmDouble in_J){/*{{{*/46 Cfrheologybbarabsgrad::Cfrheologybbarabsgrad(char* in_name, int in_definitionenum, IssmDouble in_J){/*{{{*/ 50 47 51 48 this->definitionenum=in_definitionenum; … … 54 51 xMemCpy<char>(this->name,in_name,strlen(in_name)+1); 55 52 56 this->weights_enum=in_weights_enum; 57 this->timepassedflag=in_timepassedflag; 53 this->J=in_J; 54 this->firsttimepassed = false; 55 } 56 /*}}}*/ 57 Cfrheologybbarabsgrad::Cfrheologybbarabsgrad(char* in_name, int in_definitionenum, IssmDouble in_J, bool in_firsttimepassed){/*{{{*/ 58 59 this->definitionenum=in_definitionenum; 60 61 this->name = xNew<char>(strlen(in_name)+1); 62 xMemCpy<char>(this->name,in_name,strlen(in_name)+1); 58 63 59 64 this->J=in_J; 65 this->firsttimepassed = in_firsttimepassed; 60 66 } 61 67 /*}}}*/ … … 66 72 /*Object virtual function resolutoin: */ 67 73 Object* Cfrheologybbarabsgrad::copy() {/*{{{*/ 68 Cfrheologybbarabsgrad* mf = new Cfrheologybbarabsgrad(this->name,this->definitionenum, this-> weights_enum,this->timepassedflag,this->J);74 Cfrheologybbarabsgrad* mf = new Cfrheologybbarabsgrad(this->name,this->definitionenum, this->J, this->firsttimepassed); 69 75 return (Object*) mf; 70 76 } … … 76 82 void Cfrheologybbarabsgrad::Echo(void){/*{{{*/ 77 83 _printf_(" Cfrheologybbarabsgrad: " << name << " " << this->definitionenum << "\n"); 78 _printf_(" weights_enum: " << weights_enum << " " << EnumToStringx(weights_enum) << "\n");79 _printf_(" timepassedflag: "<<timepassedflag<<"\n");80 84 } 81 85 /*}}}*/ … … 92 96 marshallhandle->call(this->definitionenum); 93 97 marshallhandle->call(this->name); 94 marshallhandle->call(this->weights_enum);95 marshallhandle->call(this->timepassedflag);96 98 marshallhandle->call(this->J); 99 marshallhandle->call(this->firsttimepassed); 97 100 } 98 101 /*}}}*/ … … 119 122 IssmDouble J_sum=0.; 120 123 121 for(Object* & object : femmodel->elements->objects){ 122 Element* element=xDynamicCast<Element*>(object); 123 J_part+=this->Cfrheologybbarabsgrad_Calculation(element,weights_enum); 124 if (!this->firsttimepassed){ 125 for(Object* & object : femmodel->elements->objects){ 126 Element* element=xDynamicCast<Element*>(object); 127 J_part+=this->Cfrheologybbarabsgrad_Calculation(element); 128 } 129 130 ISSM_MPI_Allreduce( (void*)&J_part,(void*)&J_sum,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm()); 131 ISSM_MPI_Bcast(&J_sum,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm()); 132 this->J = J_sum; 133 134 this->firsttimepassed = true; 124 135 } 125 126 ISSM_MPI_Allreduce( (void*)&J_part,(void*)&J_sum,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());127 ISSM_MPI_Bcast(&J_sum,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());128 129 this->timepassedflag = true;130 this->J = J_sum;131 136 return this->J; 132 137 }/*}}}*/ 133 IssmDouble Cfrheologybbarabsgrad::Cfrheologybbarabsgrad_Calculation(Element* element , int weights_enum){/*{{{*/138 IssmDouble Cfrheologybbarabsgrad::Cfrheologybbarabsgrad_Calculation(Element* element){/*{{{*/ 134 139 135 140 int domaintype,numcomponents; -
issm/trunk-jpl/src/c/classes/Cfrheologybbarabsgrad.h
r27728 r27920 19 19 int definitionenum; 20 20 char* name; 21 int weights_enum; 22 bool timepassedflag; 21 bool firsttimepassed; 23 22 IssmDouble J; 24 23 25 24 /*Cfrheologybbarabsgrad constructors, destructors :*/ 26 25 Cfrheologybbarabsgrad(); 27 Cfrheologybbarabsgrad(char* in_name, int in_definitionenum, int in_weights_enum); 28 Cfrheologybbarabsgrad(char* in_name, int in_definitionenum, int in_weights_enum, bool in_timepassedflag, IssmDouble in_J); 26 Cfrheologybbarabsgrad(char* in_name, int in_definitionenum); 27 Cfrheologybbarabsgrad(char* in_name, int in_definitionenum, IssmDouble in_J); 28 Cfrheologybbarabsgrad(char* in_name, int in_definitionenum, IssmDouble in_J, bool in_firsttimepassed); 29 29 ~Cfrheologybbarabsgrad(); 30 30 … … 41 41 char* Name(); 42 42 IssmDouble Response(FemModel* femmodel); 43 IssmDouble Cfrheologybbarabsgrad_Calculation(Element* element , int weights_enum);43 IssmDouble Cfrheologybbarabsgrad_Calculation(Element* element); 44 44 }; 45 45 #endif /* _CFRHEOLOGYBBARABSGRAD_H_ */ -
issm/trunk-jpl/src/c/classes/classes.h
r27902 r27920 28 28 #include "./Cfdragcoeffabsgradtransient.h" 29 29 #include "./Cfrheologybbarabsgrad.h" 30 #include "./Cfrheologybbarabsgradtransient.h" 30 31 #include "./Cfsurfacelogvel.h" 31 32 #include "./Cflevelsetmisfit.h" -
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp
r27902 r27920 384 384 int* cfdraggradt_weights_N_s = NULL; 385 385 386 /*Fetch name, model_string, observation, observation_string, etc ... (see src/m/classes/cfdragcoeffabsgrad .m): */386 /*Fetch name, model_string, observation, observation_string, etc ... (see src/m/classes/cfdragcoeffabsgradtransient.m): */ 387 387 iomodel->FetchMultipleData(&cfdraggradt_name_s,&num_cfdragcoeffabsgradtransients, "md.cfdragcoeffabsgradtransient.name"); 388 388 iomodel->FetchMultipleData(&cfdraggradt_definitionstring_s,&num_cfdragcoeffabsgradtransients, "md.cfdragcoeffabsgradtransient.definitionstring"); … … 486 486 xDelete<int>(cfrheologybbarabsgrad_weights_N_s); 487 487 xDelete<char*>(cfrheologybbarabsgrad_weights_string_s); 488 /*}}}*/ 489 } 490 else if (output_definition_enums[i]==CfrheologybbarabsgradtransientEnum){ 491 /*Deal with cfrheologybbarabsgradtransient: {{{*/ 492 493 /*cfrheologybbarabsgrad variables: */ 494 int num_cfrheologybbarabsgradtransients, test; 495 char** cfrheogradt_name_s = NULL; 496 char** cfrheogradt_definitionstring_s = NULL; 497 IssmDouble** cfrheogradt_weights_s = NULL; 498 int* cfrheogradt_weights_M_s = NULL; 499 int* cfrheogradt_weights_N_s = NULL; 500 char** cfrheogradt_weights_string_s = NULL; 501 502 /*Fetch name, model_string, observation, observation_string, etc ... (see src/m/classes/cfrheologybbarabsgradtransient.m): */ 503 iomodel->FetchMultipleData(&cfrheogradt_name_s,&num_cfrheologybbarabsgradtransients, "md.cfrheologybbarabsgradtransient.name"); 504 iomodel->FetchMultipleData(&cfrheogradt_definitionstring_s,&num_cfrheologybbarabsgradtransients, "md.cfrheologybbarabsgradtransient.definitionstring"); 505 iomodel->FetchMultipleData(&cfrheogradt_weights_s,&cfrheogradt_weights_M_s,&cfrheogradt_weights_N_s,&test, "md.cfrheologybbarabsgradtransient.weights"); 506 507 for(j=0;j<num_cfrheologybbarabsgradtransients;j++){ 508 509 if (cfrheogradt_weights_M_s[j]!=iomodel->numberofvertices+1) _error_("weights should be a P1 time series"); 510 511 /*extract data times from last row of observations*/ 512 IssmDouble *datatimes = xNew<IssmDouble>(cfrheogradt_weights_N_s[j]); 513 for(int k=0;k<cfrheogradt_weights_N_s[j];k++) datatimes[k] = (cfrheogradt_weights_s[j])[cfrheogradt_weights_N_s[j]*(cfrheogradt_weights_M_s[j]-1)+k]; 514 515 /*First create a cfrheologybbarabsgradtransient object for that specific string:*/ 516 output_definitions->AddObject(new Cfrheologybbarabsgradtransient(cfrheogradt_name_s[j],StringToEnumx(cfrheogradt_definitionstring_s[j]), cfrheogradt_weights_N_s[j], datatimes)); 517 518 /*Now, for this particular cfrheologybbarabsgrad object, make sure we plug into the elements: the observation, and the weights.*/ 519 for(Object* & object : elements->objects){ 520 521 Element* element=xDynamicCast<Element*>(object); 522 523 element->DatasetInputAdd(StringToEnumx(cfrheogradt_definitionstring_s[j]),cfrheogradt_weights_s[j],inputs,iomodel,cfrheogradt_weights_M_s[j],cfrheogradt_weights_N_s[j],1,WeightsSurfaceObservationEnum,WeightsSurfaceObservationEnum); 524 525 } 526 } 527 528 /*Free resources:*/ 529 for(j=0;j<num_cfrheologybbarabsgradtransients;j++){ 530 char* string=NULL; 531 IssmDouble* matrix = NULL; 532 533 string = cfrheogradt_definitionstring_s[j]; xDelete<char>(string); 534 string = cfrheogradt_name_s[j]; xDelete<char>(string); 535 matrix = cfrheogradt_weights_s[j]; xDelete<IssmDouble>(matrix); 536 } 537 xDelete<char*>(cfrheogradt_name_s); 538 xDelete<char*>(cfrheogradt_definitionstring_s); 539 xDelete<IssmDouble*>(cfrheogradt_weights_s); 540 xDelete<int>(cfrheogradt_weights_M_s); 541 xDelete<int>(cfrheogradt_weights_N_s); 488 542 /*}}}*/ 489 543 } -
issm/trunk-jpl/src/c/shared/Enum/Enum.vim
r27913 r27920 1421 1421 syn keyword cConstant CfdragcoeffabsgradtransientEnum 1422 1422 syn keyword cConstant CfrheologybbarabsgradEnum 1423 syn keyword cConstant CfrheologybbarabsgradtransientEnum 1423 1424 syn keyword cConstant CfsurfacelogvelEnum 1424 1425 syn keyword cConstant CfsurfacesquareEnum … … 1800 1801 syn keyword cType Cflevelsetmisfit 1801 1802 syn keyword cType Cfrheologybbarabsgrad 1803 syn keyword cType Cfrheologybbarabsgradtransient 1802 1804 syn keyword cType Cfsurfacelogvel 1803 1805 syn keyword cType Cfsurfacesquare -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r27913 r27920 1420 1420 CfdragcoeffabsgradtransientEnum, 1421 1421 CfrheologybbarabsgradEnum, 1422 CfrheologybbarabsgradtransientEnum, 1422 1423 CfsurfacelogvelEnum, 1423 1424 CfsurfacesquareEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r27913 r27920 1423 1423 case CfdragcoeffabsgradtransientEnum : return "Cfdragcoeffabsgradtransient"; 1424 1424 case CfrheologybbarabsgradEnum : return "Cfrheologybbarabsgrad"; 1425 case CfrheologybbarabsgradtransientEnum : return "Cfrheologybbarabsgradtransient"; 1425 1426 case CfsurfacelogvelEnum : return "Cfsurfacelogvel"; 1426 1427 case CfsurfacesquareEnum : return "Cfsurfacesquare"; -
issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim
r27913 r27920 1414 1414 syn keyword juliaConstC CfdragcoeffabsgradtransientEnum 1415 1415 syn keyword juliaConstC CfrheologybbarabsgradEnum 1416 syn keyword juliaConstC CfrheologybbarabsgradtransientEnum 1416 1417 syn keyword juliaConstC CfsurfacelogvelEnum 1417 1418 syn keyword juliaConstC CfsurfacesquareEnum -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r27913 r27920 1456 1456 else if (strcmp(name,"Cfdragcoeffabsgradtransient")==0) return CfdragcoeffabsgradtransientEnum; 1457 1457 else if (strcmp(name,"Cfrheologybbarabsgrad")==0) return CfrheologybbarabsgradEnum; 1458 else if (strcmp(name,"Cfrheologybbarabsgradtransient")==0) return CfrheologybbarabsgradtransientEnum; 1458 1459 else if (strcmp(name,"Cfsurfacelogvel")==0) return CfsurfacelogvelEnum; 1459 1460 else if (strcmp(name,"Cfsurfacesquare")==0) return CfsurfacesquareEnum;
Note:
See TracChangeset
for help on using the changeset viewer.