current_sharing_temperature_nb3sn Function

public function current_sharing_temperature_nb3sn(c_pt, B, St, Jop, Bc0, Jc0, Tc, Tc0, Bc) result(current_sharing_temperature) bind(C)

Arguments

Type IntentOptional Attributes Name
type(c_ptr), value :: c_pt
real(kind=dp), value :: B
real(kind=dp), value :: St
real(kind=dp), value :: Jop
real(kind=dp), value :: Bc0
real(kind=dp), value :: Jc0
real(kind=dp), value :: Tc
real(kind=dp), value :: Tc0
real(kind=dp), value :: Bc

Return Value real(kind=dp)


Calls

proc~~current_sharing_temperature_nb3sn~~CallsGraph proc~current_sharing_temperature_nb3sn current_sharing_temperature_nb3sn proc~critical_current_density_nb3sn critical_current_density_nb3sn proc~current_sharing_temperature_nb3sn->proc~critical_current_density_nb3sn proc~fpnb3sn fpNb3Sn proc~critical_current_density_nb3sn->proc~fpnb3sn proc~hnb3sn hNb3Sn proc~critical_current_density_nb3sn->proc~hnb3sn proc~snb3sn sNb3Sn proc~critical_current_density_nb3sn->proc~snb3sn

Source Code

  function current_sharing_temperature_nb3sn(c_pt,B,St,Jop,Bc0,Jc0,Tc,Tc0,Bc) result(current_sharing_temperature) bind(C)
      type(c_ptr), value :: c_pt
      real(dp), value :: B,St,Jop,Bc0,Jc0,Tc,Tc0,Bc
      real(dp) :: current_sharing_temperature
      real(dp) :: T,tt,ttlow,ttup,error,tolerance,Jc
      logical :: converged      

      type(nb3sn_cfg_t), pointer :: nb3sn_ptr
      call c_f_pointer(c_pt,nb3sn_ptr)

      tolerance=1.0e-5_dp
    
      if(B>=Bc0) then
        current_sharing_temperature=0.0_dp
        return
      endif

      if(Jop>=Jc0) then
         current_sharing_temperature=0.0_dp
         return
      endif

      if(Jop<=0.0_dp) then
         current_sharing_temperature = Tc
         return
      endif

      ttup =Tc/nb3sn_ptr%Tc0m
      ttlow=0.0_dp

      converged=.false.
      do while(.not.converged)
        tt=0.5_dp*(ttlow+ttup)
        T  = tt * nb3sn_ptr%Tc0m
        Jc = critical_current_density_nb3sn(c_pt,T,B,St,Tc0,Bc)
        if(Jc>Jop) then
           ttlow = tt
        else if(Jc<=Jop) then
           ttup  = tt
        else if(abs(Jc-Jop)<=1.0e-12_dp) then
           ttup  = tt
           ttlow = tt
        endif
        error     = abs(ttup-ttlow)
        converged = error<=tolerance
      enddo

      current_sharing_temperature = tt*nb3sn_ptr%Tc0m
  end function current_sharing_temperature_nb3sn