Defines how to subtract two LocalEMFields types
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(LocalEMFields), | intent(in) | :: | p1 | |||
type(LocalEMFields), | intent(in) | :: | p2 |
elemental function lflf_subtract(p1, p2) result (p3)
!+ Defines how to subtract two [[LocalEMFields]] types
type(LocalEMFields), intent(in) :: p1,p2
type(LocalEMFields) :: p3
real(Float64), dimension(3) :: bfield,efield
p3%pos = p1%pos - p2%pos
p3%uvw = p1%uvw - p2%uvw
p3%br = p1%br - p2%br
p3%bt = p1%bt - p2%bt
p3%bz = p1%bz - p2%bz
p3%er = p1%er - p2%er
p3%et = p1%et - p2%et
p3%ez = p1%ez - p2%ez
bfield = p1%b_abs*p1%b_norm - p2%b_abs*p2%b_norm
p3%b_abs = norm2(bfield)
if(p3%b_abs.gt.0.d0) then
p3%b_norm = bfield/p3%b_abs
call calc_perp_vectors(p3%b_norm,p3%a_norm,p3%c_norm)
endif
efield = p1%e_abs*p1%e_norm - p2%e_abs*p2%e_norm
p3%e_abs = norm2(efield)
if(p3%e_abs.gt.0.d0) p3%e_norm = efield/p3%e_abs
p3%dbr_dr = p1%dbr_dr - p2%dbr_dr
p3%dbr_dz = p1%dbr_dz - p2%dbr_dz
p3%dbt_dr = p1%dbt_dr - p2%dbt_dr
p3%dbt_dz = p1%dbt_dz - p2%dbt_dz
p3%dbz_dr = p1%dbz_dr - p2%dbz_dr
p3%dbz_dz = p1%dbz_dz - p2%dbz_dz
end function lflf_subtract