current_sharing_temperature_nbti Function

public function current_sharing_temperature_nbti(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_nbti~~CallsGraph proc~current_sharing_temperature_nbti current_sharing_temperature_nbti proc~critical_current_density_nbti critical_current_density_nbti proc~current_sharing_temperature_nbti->proc~critical_current_density_nbti proc~fpnbti fpNbTi proc~critical_current_density_nbti->proc~fpnbti proc~hnbti hNbTi proc~critical_current_density_nbti->proc~hnbti

Source Code

  function current_sharing_temperature_nbti(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(nbti_cfg_t), pointer :: nbti_ptr
      call c_f_pointer(c_pt,nbti_ptr)

      tolerance=1.0e-5_dp

      if(B>=nbti_ptr%Bc20) 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 = nbti_ptr%Tc0_p
        return
      endif

      ttup =1.0_dp
      ttlow=0.0_dp

      converged=.false.
      do while(.not.converged) 
        tt=0.5_dp*(ttlow+ttup)
        T  = tt * nbti_ptr%Tc0_p
        Jc = critical_current_density_nbti(c_pt,T,B,St,Tc0,Bc)

        if(Jc>Jop) then
           ttlow = tt
        elseif(Jc<=Jop) then
           ttup  = tt
        elseif(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*nbti_ptr%Tc0_p
  end function current_sharing_temperature_nbti