subroutine circulator_resolution_from_and_to_ports(me)
type(circulator_t), intent(inout) :: me
real(dp) :: Pin,Pout,dPres,mdot,VarIn,ssOut,ssIn
type(flux_and_derivatives_for_cold_circulator_t) :: FluxIn,Fluxout
type(derivatives_involving_both_branches_t) :: deriv_wr_both_br
Pin=me%br(1)%p%Prim(Pri_P)
Pout=me%br(2)%p%Prim(Pri_P)
dPres=Pout-Pin
if(me%SubType=="pump") then
mdot=imposed_mass_flow_rate(me,dPres,me%mdot0)
else
mdot=imposed_mass_flow_rate(me,dPres,me%mdot0,me%dp0)
endif
call mdot_derivatives(me,deriv_wr_both_br)
call incoming_branch_cold_circulator(me,mdot,dPres,VarIn,deriv_wr_both_br,ssIn,FluxIn)
call outgoing_branch_cold_circulator(me,mdot,VarIn,deriv_wr_both_br,ssOut,Fluxout)
if (sim_error > 0) return
me%wave_time = min(me%br(1)%p%dxLoc/ssIn,me%br(2)%p%dxLoc/ssOut)
me%br(1)%p%flx(:)=FluxIn%flx(:)
me%br(1)%p%vit=FluxIn%vit
me%br(1)%p%derFlx_derCon(:,:)=FluxIn%DerFlxdBr_a(:,:)
me%br(1)%p%derVit_derCon(:)=FluxIn%DerVitdBr_a(:)
me%in_DerFlxdBr_out(:,:)=FluxIn%DerFlxdBr_b(:,:)
me%in_DerVitdBr_out(:)=FluxIn%DerVitdBr_b(:)
me%br(2)%p%flx(:)=Fluxout%flx(:)
me%br(2)%p%vit=Fluxout%vit
me%br(2)%p%derFlx_derCon(:,:)=FluxOut%DerFlxdBr_b(:,:)
me%br(2)%p%derVit_derCon(:)=FluxOut%DerVitdBr_b(:)
me%out_DerFlxdBr_in(:,:)=FluxOut%DerFlxdBr_a(:,:)
me%out_DerVitdBr_in(:)=FluxOut%DerVitdBr_a(:)
end subroutine circulator_resolution_from_and_to_ports