Changeset 22703
- Timestamp:
- 04/20/18 13:50:45 (7 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/cores/transient_core.cpp
r22656 r22703 76 76 #endif 77 77 78 if(isoceancoupling){ 78 if(isoceancoupling){ {{{ 79 79 if(VerboseSolution()) _printf0_(" ocean coupling: initialization \n"); 80 80 int my_rank; 81 int ocean nxsize,oceannysize;81 int oceangridnxsize,oceangridnysize; 82 82 IssmDouble *oceangridx; 83 83 IssmDouble *oceangridy; … … 97 97 ISSM_MPI_Send(&time,1,ISSM_MPI_DOUBLE,0,10001001,tomitgcmcomm); 98 98 ISSM_MPI_Recv(&oceantime,1,ISSM_MPI_DOUBLE,0,10001002,tomitgcmcomm,&status); 99 ISSM_MPI_Recv(&oceannxsize,1,ISSM_MPI_INT,0,10001003,tomitgcmcomm,&status); 100 ISSM_MPI_Recv(&oceannysize,1,ISSM_MPI_INT,0,10001004,tomitgcmcomm,&status); 101 oceangridx = xNew<IssmDouble>(oceannxsize*oceannysize); 102 ISSM_MPI_Recv(oceangridx,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001005,tomitgcmcomm,&status); 103 oceangridy = xNew<IssmDouble>(oceannxsize*oceannysize); 104 ISSM_MPI_Recv(oceangridy,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001006,tomitgcmcomm,&status); 105 icebase = xNew<IssmDouble>(oceannxsize*oceannysize); 106 for(int i=0;i<oceannxsize;i++){ 107 for(int j=0;j<oceannysize;j++){ 108 icebase[i*oceannysize+j]=2*oceangridx[i*oceannysize+j]; 109 } 110 } 111 ISSM_MPI_Send(icebase,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001008,tomitgcmcomm); 112 oceanmelt = xNew<IssmDouble>(oceannxsize*oceannysize); 113 ISSM_MPI_Recv(oceanmelt,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001007,tomitgcmcomm,&status); 99 ISSM_MPI_Recv(&oceangridnxsize,1,ISSM_MPI_INT,0,10001003,tomitgcmcomm,&status); 100 ISSM_MPI_Recv(&oceangridnysize,1,ISSM_MPI_INT,0,10001004,tomitgcmcomm,&status); 101 femmodel->parameters->SetParam(oceangridnxsize,OceanGridNxEnum); 102 femmodel->parameters->SetParam(oceangridnysize,OceanGridNyEnum); 103 oceangridx = xNew<IssmDouble>(oceangridnxsize*oceangridnysize); 104 ISSM_MPI_Recv(oceangridx,oceangridnxsize*oceangridnysize,ISSM_MPI_DOUBLE,0,10001005,tomitgcmcomm,&status); 105 oceangridy = xNew<IssmDouble>(oceangridnxsize*oceangridnysize); 106 ISSM_MPI_Recv(oceangridy,oceangridnxsize*oceangridnysize,ISSM_MPI_DOUBLE,0,10001006,tomitgcmcomm,&status); 107 icebase = xNew<IssmDouble>(oceangridnxsize*oceangridnysize); 108 for(int i=0;i<oceangridnxsize;i++){ 109 for(int j=0;j<oceangridnysize;j++){ 110 icebase[i*oceangridnysize+j]=2*oceangridx[i*oceangridnysize+j]; 111 } 112 } 113 ISSM_MPI_Send(icebase,oceangridnxsize*oceangridnysize,ISSM_MPI_DOUBLE,0,10001008,tomitgcmcomm); 114 oceanmelt = xNew<IssmDouble>(oceangridnxsize*oceangridnysize); 115 ISSM_MPI_Recv(oceanmelt,oceangridnxsize*oceangridnysize,ISSM_MPI_DOUBLE,0,10001007,tomitgcmcomm,&status); 114 116 xDelete<IssmDouble>(icebase); 115 117 xDelete<IssmDouble>(oceangridx); … … 118 120 } 119 121 } 122 }}} 120 123 121 124 IssmDouble output_value; … … 162 165 femmodel->parameters->SetParam(save_results,SaveResultsEnum); 163 166 167 if(isoceancoupling){ {{{ 168 if(VerboseSolution()) _printf0_(" ocean coupling: sending ice base\n"); 169 int my_rank; 170 int oceangridnxsize,oceangridnysize; 171 IssmDouble *icebase; 172 IssmDouble oceantime; 173 ISSM_MPI_Comm tomitgcmcomm; 174 ISSM_MPI_Status status; 175 176 my_rank=IssmComm::GetRank(); 177 GenericParam<ISSM_MPI_Comm>* parcom = dynamic_cast<GenericParam<ISSM_MPI_Comm>*>(femmodel->parameters->FindParamObject(ToMITgcmCommEnum)); 178 if(!parcom)_error_("TransferForcing error message: could not find ToMITgcmCommEnum communicator"); 179 tomitgcmcomm=parcom->GetParameterValue(); 180 if(my_rank==0){ 181 ISSM_MPI_Send(&time,1,ISSM_MPI_DOUBLE,0,10001001,tomitgcmcomm); 182 ISSM_MPI_Recv(&oceantime,1,ISSM_MPI_DOUBLE,0,10001002,tomitgcmcomm,&status); 183 if((oceantime - time > 0.1*yts) & (oceantime - time < -0.1*yts)) _error_("Ocean and ice time are starting to diverge"); 184 femmodel->parameters->FindParam(&oceangridnxsize,OceanGridNxEnum); 185 femmodel->parameters->FindParam(&oceangridnysize,OceanGridNyEnum); 186 for(int i=0;i<oceangridnxsize;i++){ 187 for(int j=0;j<oceangridnysize;j++){ 188 icebase[i*oceangridnysize+j]=9999.; 189 } 190 } 191 ISSM_MPI_Send(icebase,oceangridnxsize*oceangridnysize,ISSM_MPI_DOUBLE,0,10001008,tomitgcmcomm); 192 xDelete<IssmDouble>(icebase); 193 } 194 } 195 }}} 196 164 197 if(isthermal && domaintype==Domain3DEnum){ 165 198 if(issmb){ … … 239 272 } 240 273 274 if(isoceancoupling){ {{{ 275 if(VerboseSolution()) _printf0_(" ocean coupling: receiving melt\n"); 276 int my_rank; 277 int oceangridnxsize,oceangridnysize; 278 IssmDouble *oceanmelt; 279 ISSM_MPI_Comm tomitgcmcomm; 280 ISSM_MPI_Status status; 281 282 my_rank=IssmComm::GetRank(); 283 GenericParam<ISSM_MPI_Comm>* parcom = dynamic_cast<GenericParam<ISSM_MPI_Comm>*>(femmodel->parameters->FindParamObject(ToMITgcmCommEnum)); 284 if(!parcom)_error_("TransferForcing error message: could not find ToMITgcmCommEnum communicator"); 285 tomitgcmcomm=parcom->GetParameterValue(); 286 if(my_rank==0){ 287 femmodel->parameters->FindParam(&oceangridnxsize,OceanGridNxEnum); 288 femmodel->parameters->FindParam(&oceangridnysize,OceanGridNyEnum); 289 oceanmelt = xNew<IssmDouble>(oceangridnxsize*oceangridnysize); 290 ISSM_MPI_Recv(oceanmelt,oceangridnxsize*oceangridnysize,ISSM_MPI_DOUBLE,0,10001007,tomitgcmcomm,&status); 291 xDelete<IssmDouble>(oceanmelt); 292 } 293 } 294 }}} 295 241 296 if(recording_frequency && (step%recording_frequency==0)){ 242 297 if(VerboseSolution()) _printf0_(" checkpointing model \n"); -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r22702 r22703 206 206 NodesEnum, 207 207 NumModelsEnum, 208 OceanGridNxEnum, 209 OceanGridNyEnum, 210 OceanGridXEnum, 211 OceanGridYEnum, 208 212 OutputBufferPointerEnum, 209 213 OutputBufferSizePointerEnum, … … 476 480 NeumannfluxEnum, 477 481 NodeEnum, 478 OceanGridNxEnum,479 OceanGridNyEnum,480 OceanGridXEnum,481 OceanGridYEnum,482 482 OmegaAbsGradientEnum, 483 483 P0Enum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r22702 r22703 214 214 case NodesEnum : return "Nodes"; 215 215 case NumModelsEnum : return "NumModels"; 216 case OceanGridNxEnum : return "OceanGridNx"; 217 case OceanGridNyEnum : return "OceanGridNy"; 218 case OceanGridXEnum : return "OceanGridX"; 219 case OceanGridYEnum : return "OceanGridY"; 216 220 case OutputBufferPointerEnum : return "OutputBufferPointer"; 217 221 case OutputBufferSizePointerEnum : return "OutputBufferSizePointer"; … … 482 486 case NeumannfluxEnum : return "Neumannflux"; 483 487 case NodeEnum : return "Node"; 484 case OceanGridNxEnum : return "OceanGridNx";485 case OceanGridNyEnum : return "OceanGridNy";486 case OceanGridXEnum : return "OceanGridX";487 case OceanGridYEnum : return "OceanGridY";488 488 case OmegaAbsGradientEnum : return "OmegaAbsGradient"; 489 489 case P0Enum : return "P0"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r22702 r22703 217 217 else if (strcmp(name,"Nodes")==0) return NodesEnum; 218 218 else if (strcmp(name,"NumModels")==0) return NumModelsEnum; 219 else if (strcmp(name,"OceanGridNx")==0) return OceanGridNxEnum; 220 else if (strcmp(name,"OceanGridNy")==0) return OceanGridNyEnum; 221 else if (strcmp(name,"OceanGridX")==0) return OceanGridXEnum; 222 else if (strcmp(name,"OceanGridY")==0) return OceanGridYEnum; 219 223 else if (strcmp(name,"OutputBufferPointer")==0) return OutputBufferPointerEnum; 220 224 else if (strcmp(name,"OutputBufferSizePointer")==0) return OutputBufferSizePointerEnum; … … 256 260 else if (strcmp(name,"SettingsIoGather")==0) return SettingsIoGatherEnum; 257 261 else if (strcmp(name,"SettingsOutputFrequency")==0) return SettingsOutputFrequencyEnum; 258 else if (strcmp(name,"SettingsRecordingFrequency")==0) return SettingsRecordingFrequencyEnum; 262 else stage=3; 263 } 264 if(stage==3){ 265 if (strcmp(name,"SettingsRecordingFrequency")==0) return SettingsRecordingFrequencyEnum; 259 266 else if (strcmp(name,"SettingsResultsOnNodes")==0) return SettingsResultsOnNodesEnum; 260 267 else if (strcmp(name,"SettingsSolverResidueThreshold")==0) return SettingsSolverResidueThresholdEnum; 261 268 else if (strcmp(name,"SettingsWaitonlock")==0) return SettingsWaitonlockEnum; 262 else stage=3; 263 } 264 if(stage==3){ 265 if (strcmp(name,"SmbAdThresh")==0) return SmbAdThreshEnum; 269 else if (strcmp(name,"SmbAdThresh")==0) return SmbAdThreshEnum; 266 270 else if (strcmp(name,"SmbAIce")==0) return SmbAIceEnum; 267 271 else if (strcmp(name,"SmbAIdx")==0) return SmbAIdxEnum; … … 379 383 else if (strcmp(name,"BasalforcingsPicoSubShelfOceanSalinity")==0) return BasalforcingsPicoSubShelfOceanSalinityEnum; 380 384 else if (strcmp(name,"BasalforcingsPicoSubShelfOceanTemp")==0) return BasalforcingsPicoSubShelfOceanTempEnum; 381 else if (strcmp(name,"Base")==0) return BaseEnum; 385 else stage=4; 386 } 387 if(stage==4){ 388 if (strcmp(name,"Base")==0) return BaseEnum; 382 389 else if (strcmp(name,"Bed")==0) return BedEnum; 383 390 else if (strcmp(name,"BedSlopeX")==0) return BedSlopeXEnum; 384 391 else if (strcmp(name,"BedSlopeY")==0) return BedSlopeYEnum; 385 else stage=4; 386 } 387 if(stage==4){ 388 if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum; 392 else if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum; 389 393 else if (strcmp(name,"CalvingHabFraction")==0) return CalvingHabFractionEnum; 390 394 else if (strcmp(name,"CalvinglevermannCoeff")==0) return CalvinglevermannCoeffEnum; … … 491 495 else if (strcmp(name,"Neumannflux")==0) return NeumannfluxEnum; 492 496 else if (strcmp(name,"Node")==0) return NodeEnum; 493 else if (strcmp(name,"OceanGridNx")==0) return OceanGridNxEnum;494 else if (strcmp(name,"OceanGridNy")==0) return OceanGridNyEnum;495 else if (strcmp(name,"OceanGridX")==0) return OceanGridXEnum;496 else if (strcmp(name,"OceanGridY")==0) return OceanGridYEnum;497 497 else if (strcmp(name,"OmegaAbsGradient")==0) return OmegaAbsGradientEnum; 498 498 else if (strcmp(name,"P0")==0) return P0Enum;
Note:
See TracChangeset
for help on using the changeset viewer.