Wrapper for IGRF functions.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(shellig_type), | intent(inout) | :: | me | |||
real(kind=wp), | intent(in) | :: | lon |
geodetic longitude in degrees (east) |
||
real(kind=wp), | intent(in) | :: | lat |
geodetic latitude in degrees (north) |
||
real(kind=wp), | intent(in) | :: | height |
altitude in km above sea level |
||
real(kind=wp), | intent(in) | :: | year |
decimal year for which geomagnetic field is to be calculated (e.g.:1995.5 for day 185 of 1995) |
||
real(kind=wp), | intent(out) | :: | xl |
l-value |
||
real(kind=wp), | intent(out) | :: | bbx |
b_total / b_equatorial ratio |
subroutine igrf(me, lon, lat, height, year, xl, bbx) class(shellig_type), intent(inout) :: me real(wp), intent(in) :: lon !! geodetic longitude in degrees (east) real(wp), intent(in) :: lat !! geodetic latitude in degrees (north) real(wp), intent(in) :: height !! altitude in km above sea level real(wp), intent(in) :: year !! decimal year for which geomagnetic field is to !! be calculated (e.g.:1995.5 for day 185 of 1995) real(wp), intent(out) :: xl !! l-value real(wp), intent(out) :: bbx !! b_total / b_equatorial ratio real(wp) :: bab1, babs, bdel, bdown, beast, & beq, bequ, bnorth, dimo, rr0 integer :: icode logical :: val real(wp), parameter :: stps = 0.05_wp ! JW : do we need to reset some or all of these ? me%sp = 0.0_wp me%xi = 0.0_wp me%h = 0.0_wp me%step = 0.20_wp me%steq = 0.03_wp call me%feldcof(year, dimo) call me%feldg(lat, lon, height, bnorth, beast, bdown, babs) call me%shellg(lat, lon, height, dimo, xl, icode, bab1) bequ = dimo / (xl * xl * xl) if (icode == 1) then bdel = 1.0e-3_wp call me%findb0(stps, bdel, val, beq, rr0) if (val) bequ = beq end if bbx = babs / bequ end subroutine igrf