Index: /issm/trunk-jpl/src/c/cores/transient_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/transient_core.cpp	(revision 22490)
+++ /issm/trunk-jpl/src/c/cores/transient_core.cpp	(revision 22491)
@@ -21,5 +21,5 @@
 	/*parameters: */
 	IssmDouble finaltime,dt,yts;
-	bool       isstressbalance,ismasstransport,issmb,isFS,isthermal,isgroundingline,isgia,isslr,iscoupler,ismovingfront,isdamageevolution,ishydrology;
+	bool       isstressbalance,ismasstransport,issmb,isFS,isthermal,isgroundingline,isgia,isslr,iscoupler,ismovingfront,isdamageevolution,ishydrology,isoceancoupling;
 	bool       save_results,dakota_analysis;
 	int        timestepping;
@@ -57,4 +57,5 @@
 	femmodel->parameters->FindParam(&isgroundingline,TransientIsgroundinglineEnum);
 	femmodel->parameters->FindParam(&ismovingfront,TransientIsmovingfrontEnum);
+	femmodel->parameters->FindParam(&isoceancoupling,TransientIsoceancouplingEnum);
 	femmodel->parameters->FindParam(&isdamageevolution,TransientIsdamageevolutionEnum);
 	femmodel->parameters->FindParam(&ishydrology,TransientIshydrologyEnum);
@@ -71,4 +72,44 @@
 	}
 	#endif
+
+	if(isoceancoupling){
+		printf("startin ocean coupling \n");
+		int my_rank;
+		int oceannxsize,oceannysize;
+		IssmDouble *oceangridx;
+		IssmDouble *oceangridy;
+		IssmDouble *oceanmelt;
+		IssmDouble *icebase;
+		IssmDouble coupling_time,oceantime;
+		ISSM_MPI_Comm tomitgcmcomm;
+		ISSM_MPI_Status status;
+
+		my_rank=IssmComm::GetRank();
+		femmodel->parameters->FindParam(&coupling_time,TimesteppingCouplingTimeEnum);
+		GenericParam<ISSM_MPI_Comm>* parcom = dynamic_cast<GenericParam<ISSM_MPI_Comm>*>(femmodel->parameters->FindParamObject(ToMITgcmCommEnum));
+		if(!parcom)_error_("TransferForcing error message: could not find ToMITgcmCommEnum communicator");
+		tomitgcmcomm=parcom->GetParameterValue();
+		if(my_rank==0){
+			printf("starting ocean coupling rank 0 \n");
+			printf("coupling time: %g \n",coupling_time);
+			ISSM_MPI_Send(&coupling_time,1,ISSM_MPI_DOUBLE,0,10001000,tomitgcmcomm);
+			ISSM_MPI_Send(&time,1,ISSM_MPI_DOUBLE,0,10001001,tomitgcmcomm);
+			ISSM_MPI_Recv(&oceantime,1,ISSM_MPI_DOUBLE,0,10001002,tomitgcmcomm,&status);
+			ISSM_MPI_Recv(&oceannxsize,1,ISSM_MPI_INT,0,10001003,tomitgcmcomm,&status);
+			ISSM_MPI_Recv(&oceannysize,1,ISSM_MPI_INT,0,10001004,tomitgcmcomm,&status);
+			//oceangridx = xNew<IssmDouble>(oceannxsize*oceannysize);
+			//ISSM_MPI_Recv(&oceangridx,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001005,tomitgcmcomm,&status);
+			//oceangridy = xNew<IssmDouble>(oceannxsize*oceannysize);
+			//ISSM_MPI_Recv(&oceangridy,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001006,tomitgcmcomm,&status);
+			//icebase = xNew<IssmDouble>(oceannxsize*oceannysize);
+			//ISSM_MPI_Send(&icebase,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001008,tomitgcmcomm);
+			//oceanmelt = xNew<IssmDouble>(oceannxsize*oceannysize);
+			//ISSM_MPI_Recv(&oceanmelt,oceannxsize*oceannysize,ISSM_MPI_DOUBLE,0,10001007,tomitgcmcomm,&status);
+			//xDelete<IssmDouble>(icebase);
+			//xDelete<IssmDouble>(oceangridx);
+			//xDelete<IssmDouble>(oceangridy);
+			//xDelete<IssmDouble>(oceanmelt);
+		}
+	}
 
 	while(time < finaltime - (yts*DBL_EPSILON)){ //make sure we run up to finaltime.
