critical_field_nb3sn Function

public function critical_field_nb3sn(c_pt, T, St) result(critical_field) bind(C)

Arguments

Type IntentOptional Attributes Name
type(c_ptr), value :: c_pt
real(kind=dp), value :: T
real(kind=dp), value :: St

Return Value real(kind=dp)


Calls

proc~~critical_field_nb3sn~~CallsGraph proc~critical_field_nb3sn critical_field_nb3sn proc~snb3sn sNb3Sn proc~critical_field_nb3sn->proc~snb3sn

Source Code

  function critical_field_nb3sn(c_pt,T,St) result(critical_field) bind(C)
      type(c_ptr), value :: c_pt
      real(dp), value :: T,St
      real(dp) :: critical_field
      real(dp) :: Tlim,ee,s,Tc0,tt,bb,Tlow

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

      ! L. Bottura, B. Bordini, Jc(B,T,e) Parameterization for the ITER
      ! Nb3Sn Production, IEEE Trans. Appl. Sup., 19(2), 1477-1480, 2009      

      Tlow=0.0_dp
      Tlim=max(T,Tlow)

      ee = St-nb3sn_ptr%emax
      s  = sNb3Sn(ee,nb3sn_ptr%Ca1,nb3sn_ptr%Ca2,nb3sn_ptr%e0a)

      Tc0 = nb3sn_ptr%Tc0m * s**0.333333_dp
      tt = Tlim/Tc0
 
      if(tt>0.0_dp .and. tt<1.0_dp) then
         bb = s * (1.0_dp-tt**nb3sn_ptr%nu)
      else if(tt<=0.0_dp) then
         bb = 1.0_dp
      else if(tt>1.0_dp) then
         bb = 0.0_dp
      endif

      critical_field = nb3sn_ptr%Bc20m * bb
  end function critical_field_nb3sn