function [BX,BY,BZ] = T01_01(IOPT,PARMOD,PS,X,Y,Z); % function [BX,BY,BZ] = T01(IOPT,PARMOD,PS,X,Y,Z); % Tsyganenko's External Field Model, 2001 Version (T01) % Translated from original FORTRAN March 27, 2003 % By Paul O'Brien (original by N.A. Tsyganenko) % Paul.OBrien@aero.org (Nikolai.Tsyganenko@gsfc.nasa.gov) % % All subroutines enclosed here as subfunctions % % Updates: % 10 September, 2004 - D. Berube found some initialization errors in EXTALL and DIPOLE % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % SUBROUTINE T01_01 (IOPT,PARMOD,PS,X,Y,Z,BX,BY,BZ) % c % c RELEASE DATE OF THIS VERSION: AUGUST 8, 2001. % C % c-------------------------------------------------------------------- % C A DATA-BASED MODEL OF THE EXTERNAL (I.E., WITHOUT EARTH'S CONTRIBUTION) PART OF THE % C MAGNETOSPHERIC MAGNETIC FIELD, CALIBRATED BY % C (1) SOLAR WIND PRESSURE PDYN (NANOPASCALS), % C (2) DST (NANOTESLA), % C (3) BYIMF, % C (4) BZIMF (NANOTESLA) % C (5) G1-INDEX % C (6) G2-INDEX (SEE TSYGANENKO [2001] FOR AN EXACT DEFINITION OF THESE TWO INDICES) % % c THESE INPUT PARAMETERS SHOULD BE PLACED IN THE FIRST 6 ELEMENTS % c OF THE ARRAY PARMOD(10). % C % C THE REST OF THE INPUT VARIABLES ARE: THE GEODIPOLE TILT ANGLE PS (RADIANS), % C AND X,Y,Z - GSM POSITION (RE) % C % c IOPT IS JUST A DUMMY INPUT PARAMETER, NECESSARY TO MAKE THIS SUBROUTINE % C COMPATIBLE WITH THE TRACING SOFTWARE PACKAGE (GEOPACK). IN THIS MODEL % C IT DOES NOT AFFECT THE OUTPUT FIELD. % c % C******************************************************************************************* % c** ATTENTION: THE MODEL IS BASED ON DATA TAKEN SUNWARD FROM X=-15Re, AND HENCE BECOMES * % C** INVALID AT LARGER TAILWARD DISTANCES !!! * % C******************************************************************************************* % C % c OUTPUT: GSM COMPONENTS OF THE EXTERNAL MAGNETIC FIELD (BX,BY,BZ, nanotesla) % C COMPUTED AS A SUM OF CONTRIBUTIONS FROM PRINCIPAL FIELD SOURCES % C % c (C) Copr. 2001, Nikolai A. Tsyganenko, USRA, Code 690.2, NASA GSFC % c Greenbelt, MD 20771, USA % c % C REFERENCE: % C % C N. A. Tsyganenko, A new data-based model of the near magnetosphere magnetic field: % c 1. Mathematical structure. % c 2. Parameterization and fitting to observations. % c % c (submitted to JGR, July 2001; available online in the PDF format % c from anonymous ftp-area www-istp.gsfc.nasa.gov, /pub/kolya/T01) % c % c---------------------------------------------------------------------- % c % c % c This is a sample main program, calculating the T01 model field produced by the % c external (magnetospheric) sources of the geomagnetic field at a specified point % c of space {XGSM,YGSM,ZGSM}. The earth's dipole tilt angle PS should be specified % c in radians, the solar wind ram pressure PDYN in nanoPascals, Dst index, IMF By % c and Bz components in nT. The two IMF-related indices G1 and G2 take into account % c the IMF and solar wind conditions during the preceding 1-hour interval; their % c exact definition is given in the paper "A new data-based model of the near % c magnetosphere magnetic field. 2. Parameterization and fitting to observations". % c The paper is available online from anonymous ftp-area www-istp.gsfc.nasa.gov, % c /pub/kolya/T01. % c % % function test01 % % parmod = repmat(0,10,1); % % parmod(1)=2; %PDYN % % parmod(2)=-20; %DST % % parmod(3)=-1; %BYIMF % % parmod(4)=-2; %BZIMF % % parmod(5)=10; %G1 % % parmod(6)=10; %G2 % % iopt = 3; % % ps = 0.5; % % x = 1.5; % % y = 2.5; % % z = 3.5; % % [bx,by,bz] = T01_01(iopt,parmod,ps,x,y,z); % % disp([bx,by,bz]); % REAL PARMOD(10),PS,X,Y,Z,BX,BY,BZ % REAL*8 A(43),PDYN,DST_AST,BYIMF,BZIMF,G1,G2,PSS,XX,YY,ZZ, % * BXCF,BYCF,BZCF,BXT1,BYT1,BZT1,BXT2,BYT2,BZT2, % * BXSRC,BYSRC,BZSRC,BXPRC,BYPRC,BZPRC, BXR11,BYR11,BZR11, % * BXR12,BYR12,BZR12,BXR21,BYR21,BZR21,BXR22,BYR22,BZR22,HXIMF, % * HYIMF,HZIMF,BBX,BBY,BBZ % C A = [1.00000,2.48341,.58315,.31917,-.08796,-1.17266,3.57478, ... -.06143,-.01113,.70924,-.01675,-.46056,-.87754,-.03025,.18933, ... .28089,.16636,-.02932,.02592,-.23537,-.07659,.09117,-.02492, ... .06816,.55417,.68918,-.04604,2.33521,3.90147,1.28978,.03139, ... .98751,.21824,41.60182,1.12761,.01376,1.02751,.02969,.15790, ... 8.94335,28.31280,1.24364,.38013]; % C if (X<-20.), disp(sprintf([' ATTENTION: THE MODEL IS VALID SUNWARD FROM X=-15 Re ONLY,\n',... ' WHILE YOU ARE TRYING TO USE IT AT X=%g'], X)); % pause; end % C PDYN=PARMOD(1); DST_AST=PARMOD(2)*0.8-13.*sqrt(PDYN); BYIMF=PARMOD(3); BZIMF=PARMOD(4); % C G1=PARMOD(5); G2=PARMOD(6); PSS=PS; XX=X; YY=Y; ZZ=Z; % C [BXCF,BYCF,BZCF,BXT1,BYT1,BZT1,BXT2,BYT2,BZT2, ... BXSRC,BYSRC,BZSRC,BXPRC,BYPRC,BZPRC, BXR11,BYR11,BZR11, ... BXR12,BYR12,BZR12,BXR21,BYR21,BZR21,BXR22,BYR22,BZR22,HXIMF,... HYIMF,HZIMF,BBX,BBY,BBZ] = T01_EXTALL(0,0,0,0,A,43,PDYN,DST_AST, ... BYIMF,BZIMF,G1,G2,PSS,XX,YY,ZZ); % C BX=BBX; BY=BBY; BZ=BBZ; % C % end of function T01_01 % C % C================================================================ function [BXCF,BYCF,BZCF,BXT1,BYT1,BZT1,BXT2,BYT2,BZT2, ... BXSRC,BYSRC,BZSRC,BXPRC,BYPRC,BZPRC, BXR11,BYR11,BZR11, ... BXR12,BYR12,BZR12,BXR21,BYR21,BZR21,BXR22,BYR22,BZR22,HXIMF, ... HYIMF,HZIMF,BX,BY,BZ] = T01_EXTALL(IOPGEN,IOPT,IOPB,IOPR,A,NTOT, ... PDYN,DST,BYIMF,BZIMF,VBIMF1,VBIMF2,PS,X,Y,Z); % SUBROUTINE EXTALL (IOPGEN,IOPT,IOPB,IOPR,A,NTOT, % * PDYN,DST,BYIMF,BZIMF,VBIMF1,VBIMF2,PS,X,Y,Z, % * BXCF,BYCF,BZCF,BXT1,BYT1,BZT1,BXT2,BYT2,BZT2, % * BXSRC,BYSRC,BZSRC,BXPRC,BYPRC,BZPRC, BXR11,BYR11,BZR11, % * BXR12,BYR12,BZR12,BXR21,BYR21,BZR21,BXR22,BYR22,BZR22,HXIMF, % * HYIMF,HZIMF,BX,BY,BZ) % C % C IOPGEN - GENERAL OPTION FLAG: IOPGEN=0 - CALCULATE TOTAL FIELD % C IOPGEN=1 - DIPOLE SHIELDING ONLY % C IOPGEN=2 - TAIL FIELD ONLY % C IOPGEN=3 - BIRKELAND FIELD ONLY % C IOPGEN=4 - RING CURRENT FIELD ONLY % C IOPGEN=5 - INTERCONNECTION FIELD ONLY % C % C IOPT - TAIL FIELD FLAG: IOPT=0 - BOTH MODES % C IOPT=1 - MODE 1 ONLY % C IOPT=2 - MODE 2 ONLY % C % C IOPB - BIRKELAND FIELD FLAG: IOPB=0 - ALL 4 TERMS % C IOPB=1 - REGION 1, MODES 1 AND 2 % C IOPB=2 - REGION 2, MODES 1 AND 2 % C % C IOPR - RING CURRENT FLAG: IOPR=0 - BOTH SRC AND PRC % C IOPR=1 - SRC ONLY % C IOPR=2 - PRC ONLY % C % IMPLICIT REAL * 8 (A - H, O - Z) % C % DIMENSION A(NTOT) % C % COMMON /TAIL/ DXSHIFT1,DXSHIFT2,D,DELTADY %! THE COMMON BLOCKS FORWARD NONLINEAR PARAMETERS % COMMON /BIRKPAR/ XKAPPA1,XKAPPA2 % COMMON /RCPAR/ SC_SY,SC_AS,PHI % COMMON /G/ G % COMMON /RH0/ RH0 global T01; % common blocks G and RHO are scalars, not structures [BXCF,BYCF,BZCF,BXT1,BYT1,BZT1,BXT2,BYT2,BZT2, ... BXSRC,BYSRC,BZSRC,BXPRC,BYPRC,BZPRC, BXR11,BYR11,BZR11, ... BXR12,BYR12,BZR12,BXR21,BYR21,BZR21,BXR22,BYR22,BZR22,HXIMF, ... HYIMF,HZIMF,BX,BY,BZ] = deal(nan); % initialize all outputs to nan % C % DATA A0_A,A0_S0,A0_X0 /34.586D0,1.1960D0,3.4397D0/ %! SHUE ET AL. PARAMETERS A0_A = 34.586D0; A0_S0 = 1.1960D0; A0_X0 = 3.4397D0; DSIG = 0.003D0; if isempty(T01) | ~isfield(T01,'RH0'), T01.RH0 = 8.0D0; end RH2 = -5.2D0; % c XAPPA=(PDYN/2.)^A(39); %! NOW THIS IS A VARIABLE PARAMETER T01.RH0=A(40); T01.G=A(41); XAPPA3=XAPPA^3; XX=X*XAPPA; YY=Y*XAPPA; ZZ=Z*XAPPA; % C SPS=sin(PS); % c X0=A0_X0/XAPPA; AM=A0_A/XAPPA; S0=A0_S0; % c BPERP=sqrt(BYIMF^2+BZIMF^2); % C % C CALCULATE THE IMF CLOCK ANGLE: % C if (BYIMF==0.D0) & (BZIMF==0.D0), THETA=0.D0; else THETA=atan2(BYIMF,BZIMF); if (THETA<=0.D0), THETA=THETA+6.283185307D0; end end % c CT=cos(THETA); ST=sin(THETA); YS=Y*CT-Z*ST; ZS=Z*CT+Y*ST; STHETAH=sin(THETA/2.)^2; % C % C CALCULATE "IMF" COMPONENTS OUTSIDE THE MAGNETOPAUSE LAYER (HENCE BEGIN WITH "O") % C THEY ARE NEEDED ONLY IF THE POINT (X,Y,Z) IS WITHIN THE TRANSITION MAGNETOPAUSE LAYER % C OR OUTSIDE THE MAGNETOSPHERE: % C FACTIMF=A(24)+A(25)*STHETAH; % c OIMFX=0.D0; OIMFY=BYIMF*FACTIMF; OIMFZ=BZIMF*FACTIMF; % c R=sqrt(X^2+Y^2+Z^2); XSS=X; ZSS=Z; while 1, XSOLD=XSS; %! BEGIN ITERATIVE SEARCH OF UNWARPED COORDS (TO FIND SIGMA) ZSOLD=ZSS; RH=T01.RH0+RH2*(ZSS/R)^2; SINPSAS=SPS/(1.D0+(R/RH)^3)^0.33333333D0; COSPSAS=sqrt(1.D0-SINPSAS^2); ZSS=X*SINPSAS+Z*COSPSAS; XSS=X*COSPSAS-Z*SINPSAS; DD=abs(XSS-XSOLD)+abs(ZSS-ZSOLD); if (DD<=1.D-6), break; end end % C END OF ITERATIVE SEARCH RHO2=Y^2+ZSS^2; ASQ=AM^2; XMXM=AM+XSS-X0; if (XMXM<0.), XMXM=0; end; %! THE BOUNDARY IS A CYLINDER TAILWARD OF X=X0-AM AXX0=XMXM^2; ARO=ASQ+RHO2; SIGMA=sqrt((ARO+AXX0+sqrt((ARO+AXX0)^2-4.*ASQ*AXX0))/(2.*ASQ)); % C % C NOW, THERE ARE THREE POSSIBLE CASES: % C (1) INSIDE THE MAGNETOSPHERE (SIGMA % C (2) IN THE BOUNDARY LAYER % C (3) OUTSIDE THE MAGNETOSPHERE AND B.LAYER % C FIRST OF ALL, CONSIDER THE CASES (1) AND (2): % C % C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ if (SIGMA T0.TAIL.D % C % DATA DELTADX1,ALPHA1,XSHIFT1 /1.D0,1.1D0,6.D0/ DELTADX1 = 1.D0; ALPHA1 = 1.1D0; XSHIFT1 = 6.D0; % DATA DELTADX2,ALPHA2,XSHIFT2 /0.D0,.25D0,4.D0/ DELTADX2 = 0.D0; ALPHA2 = .25D0; XSHIFT2 = 4.D0; A1 = [-25.45869857,57.35899080,317.5501869,-2.626756717, ... -93.38053698,-199.6467926,-858.8129729,34.09192395,845.4214929, ... -29.07463068,47.10678547,-128.9797943,-781.7512093,6.165038619, ... 167.8905046,492.0680410,1654.724031,-46.77337920,-1635.922669, ... 40.86186772,-.1349775602,-.9661991179E-01,-.1662302354, ... .002810467517,.2487355077,.1025565237,-14.41750229,-.8185333989, ... 11.07693629,.7569503173,-9.655264745,112.2446542,777.5948964, ... -5.745008536,-83.03921993,-490.2278695,-1155.004209,39.08023320, ... 1172.780574,-39.44349797,-14.07211198,-40.41201127,-313.2277343, ... 2.203920979,8.232835341,197.7065115,391.2733948,-18.57424451, ... -437.2779053,23.04976898,11.75673963,13.60497313,4.691927060, ... 18.20923547,27.59044809,6.677425469,1.398283308,2.839005878, ... 31.24817706,24.53577264]; A2 = [-287187.1962,4970.499233,410490.1952,-1347.839052, ... -386370.3240,3317.983750,-143462.3895,5706.513767,171176.2904, ... 250.8882750,-506570.8891,5733.592632,397975.5842,9771.762168, ... -941834.2436,7990.975260,54313.10318,447.5388060,528046.3449, ... 12751.04453,-21920.98301,-21.05075617,31971.07875,3012.641612, ... -301822.9103,-3601.107387,1797.577552,-6.315855803,142578.8406, ... 13161.93640,804184.8410,-14168.99698,-851926.6360,-1890.885671, ... 972475.6869,-8571.862853,26432.49197,-2554.752298,-482308.3431, ... -4391.473324,105155.9160,-1134.622050,-74353.53091,-5382.670711, ... 695055.0788,-916.3365144,-12111.06667,67.20923358,-367200.9285, ... -21414.14421,14.75567902,20.75638190,59.78601609,16.86431444, ... 32.58482365,23.69472951,17.24977936,13.64902647,68.40989058, ... 11.67828167]; % DATA XM1,XM2/2*-12.D0/ XM1 = -12; XM2 = -12; if (IOPT~=2), XSC1=(X-XSHIFT1-T01.TAIL.DXSHIFT1)*ALPHA1-XM1*(ALPHA1-1.D0); YSC1=Y*ALPHA1; ZSC1=Z*ALPHA1; D0SC1=T01.TAIL.D*ALPHA1; %! HERE WE USE A SINGLE VALUE D0 OF THE THICKNESS FOR BOTH MODES [FX1,FY1,FZ1] = T01_TAILDISK(D0SC1,DELTADX1,T01.TAIL.DELTADY,XSC1,YSC1,ZSC1); [HX1,HY1,HZ1] = T01_SHLCAR5X5(A1,X,Y,Z,T01.TAIL.DXSHIFT1); BX1=FX1+HX1; BY1=FY1+HY1; BZ1=FZ1+HZ1; if (IOPT==1), BX2=0.D0; BY2=0.D0; BZ2=0.D0; return end end XSC2=(X-XSHIFT2-T01.TAIL.DXSHIFT2)*ALPHA2-XM2*(ALPHA2-1.D0); YSC2=Y*ALPHA2; ZSC2=Z*ALPHA2; D0SC2=T01.TAIL.D*ALPHA2; %! HERE WE USE A SINGLE VALUE D0 OF THE THICKNESS FOR BOTH MODES [FX2,FY2,FZ2] = T01_TAILDISK(D0SC2,DELTADX2,T01.TAIL.DELTADY,XSC2,YSC2,ZSC2); [HX2,HY2,HZ2] = T01_SHLCAR5X5(A2,X,Y,Z,T01.TAIL.DXSHIFT2); BX2=FX2+HX2; BY2=FY2+HY2; BZ2=FZ2+HZ2; if (IOPT==2), BX1=0.D0; BY1=0.D0; BZ1=0.D0; return end % end of function UNWARPED % C % C$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ % C function [BX,BY,BZ] = T01_TAILDISK(D0,DELTADX,DELTADY,X,Y,Z); % SUBROUTINE TAILDISK(D0,DELTADX,DELTADY,X,Y,Z,BX,BY,BZ) % c % c THIS SUBROUTINE COMPUTES THE COMPONENTS OF THE TAIL CURRENT FIELD, % C SIMILAR TO THAT DESCRIBED BY TSYGANENKO AND PEREDO (1994). THE % C DIFFERENCE IS THAT NOW WE USE SPACEWARPING, AS DESCRIBED IN OUR % C PAPER ON MODELING BIRKELAND CURRENTS (TSYGANENKO AND STERN, 1996) % C INSTEAD OF SHEARING IT IN THE SPIRIT OF THE T89 TAIL MODEL. % C % IMPLICIT REAL*8 (A-H,O-Z) % c % DIMENSION F(5),B(5),C(5) % C F = [-71.09346626D0,-1014.308601D0,-1272.939359D0, ... -3224.935936D0,-44546.86232D0]; B = [10.90101242D0,12.68393898D0,13.51791954D0,14.86775017D0, ... 15.12306404D0]; C = [ .7954069972D0,.6716601849D0,1.174866319D0,2.565249920D0, ... 10.01986790D0]; % C RHO=sqrt(X^2+Y^2); DRHODX=X/RHO; DRHODY=Y/RHO; DEX=exp(X/7.D0); D=D0+DELTADY*(Y/20.D0)^2 +DELTADX*DEX; %! THE LAST TERM (INTRODUCED 10/11/2000) MAKES THE SHEET DDDY=DELTADY*Y*0.005D0; %! THICKEN SUNWARD, TO AVOID PROBLEMS IN THE SUBSOLAR REGION DDDX=DELTADX/7.D0*DEX; % C DZETA=sqrt(Z^2+D^2); %! THIS IS THE SAME SIMPLE WAY TO SPREAD % C OUT THE SHEET, AS THAT USED IN T89 DDZETADX=D*DDDX/DZETA; DDZETADY=D*DDDY/DZETA; DDZETADZ=Z/DZETA; % C DBX=0.D0; DBY=0.D0; DBZ=0.D0; % C for I=1:5, % C BI=B(I); CI=C(I); % C S1=sqrt((RHO+BI)^2+(DZETA+CI)^2); S2=sqrt((RHO-BI)^2+(DZETA+CI)^2); DS1DRHO=(RHO+BI)/S1; DS2DRHO=(RHO-BI)/S2; DS1DDZ=(DZETA+CI)/S1; DS2DDZ=(DZETA+CI)/S2; % C DS1DX=DS1DRHO*DRHODX +DS1DDZ*DDZETADX; DS1DY=DS1DRHO*DRHODY + DS1DDZ*DDZETADY; DS1DZ= DS1DDZ*DDZETADZ; % C DS2DX=DS2DRHO*DRHODX +DS2DDZ*DDZETADX; DS2DY=DS2DRHO*DRHODY + DS2DDZ*DDZETADY; DS2DZ= DS2DDZ*DDZETADZ; % C S1TS2=S1*S2; S1PS2=S1+S2; S1PS2SQ=S1PS2^2; FAC1=sqrt(S1PS2SQ-(2.D0*BI)^2); AS=FAC1/(S1TS2*S1PS2SQ); DASDS1=(1.D0/(FAC1*S2)-AS/S1PS2*(S2*S2+S1*(3.D0*S1+4.D0*S2))) ... /(S1*S1PS2); DASDS2=(1.D0/(FAC1*S1)-AS/S1PS2*(S1*S1+S2*(3.D0*S2+4.D0*S1))) ... /(S2*S1PS2); % C DASDX=DASDS1*DS1DX+DASDS2*DS2DX; DASDY=DASDS1*DS1DY+DASDS2*DS2DY; DASDZ=DASDS1*DS1DZ+DASDS2*DS2DZ; % C DBX=DBX-F(I)*X*DASDZ; DBY=DBY-F(I)*Y*DASDZ; DBZ=DBZ+F(I)*(2.D0*AS+X*DASDX+Y*DASDY); end BX=DBX; BY=DBY; BZ=DBZ; % end of function TAILDISK % C % C$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ % C % C THIS CODE RETURNS THE SHIELDING FIELD REPRESENTED BY 5x5=25 "CARTESIAN" % C HARMONICS % C function [HX,HY,HZ] = T01_SHLCAR5X5(A,X,Y,Z,DSHIFT); % SUBROUTINE SHLCAR5X5(A,X,Y,Z,DSHIFT,HX,HY,HZ) % C % C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % C The NLIN coefficients are the amplitudes of the "cartesian" % c harmonics (A(1)-A(NLIN). % c The NNP nonlinear parameters (A(NLIN+1)-A(NTOT) are the scales Pi and Ri % C entering the arguments of exponents, sines, and cosines in each of the % C NLIN "Cartesian" harmonics % C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % C % IMPLICIT REAL * 8 (A - H, O - Z) % C % DIMENSION A(60) % C DHX=0.D0; DHY=0.D0; DHZ=0.D0; L=0; % C for I=1:5, % DO 2 I=1,5 RP=1.D0/A(50+I); CYPI=cos(Y*RP); SYPI=sin(Y*RP); % C for K=1:5, % DO 2 K=1,5 RR=1.D0/A(55+K); SZRK=sin(Z*RR); CZRK=cos(Z*RR); SQPR=sqrt(RP^2+RR^2); EPR=exp(X*SQPR); % C DBX=-SQPR*EPR*CYPI*SZRK; DBY= RP*EPR*SYPI*SZRK; DBZ=-RR*EPR*CYPI*CZRK; L=L+2; COEF=A(L-1)+A(L)*DSHIFT; DHX=DHX+COEF*DBX; DHY=DHY+COEF*DBY; DHZ=DHZ+COEF*DBZ; % c end % 2 CONTINUE end HX=DHX; HY=DHY; HZ=DHZ; % C % end of function SHLCAR5X5 % c % c %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % C function [BX11,BY11,BZ11,BX12,BY12,BZ12,... BX21,BY21,BZ21,BX22,BY22,BZ22] = T01_BIRK_TOT (IOPB,PS,X,Y,Z); % SUBROUTINE BIRK_TOT (IOPB,PS,X,Y,Z,BX11,BY11,BZ11,BX12,BY12,BZ12, % * BX21,BY21,BZ21,BX22,BY22,BZ22) % C % C IOPB - BIRKELAND FIELD MODE FLAG: % C IOPB=0 - ALL COMPONENTS % C IOPB=1 - REGION 1, MODES 1 & 2 % C IOPB=2 - REGION 2, MODES 1 & 2 % C % IMPLICIT REAL*8 (A-H,O-Z) % DIMENSION SH11(86),SH12(86),SH21(86),SH22(86) global T01; % COMMON /BIRKPAR/ XKAPPA1,XKAPPA2 %! INPUT PARAMETERS, SPECIFIED FROM S/R EXTALL % COMMON /DPHI_B_RHO0/ DPHI,B,RHO_0,XKAPPA %! PARAMETERS, CONTROLLING THE DAY-NIGHT ASYMMETRY OF F.A.C. SH11 = [46488.84663,-15541.95244,-23210.09824,-32625.03856, ... -109894.4551,-71415.32808,58168.94612,55564.87578,-22890.60626, ... -6056.763968,5091.368100,239.7001538,-13899.49253,4648.016991, ... 6971.310672,9699.351891,32633.34599,21028.48811,-17395.96190, ... -16461.11037,7447.621471,2528.844345,-1934.094784,-588.3108359, ... -32588.88216,10894.11453,16238.25044,22925.60557,77251.11274, ... 50375.97787,-40763.78048,-39088.60660,15546.53559,3559.617561, ... -3187.730438,309.1487975,88.22153914,-243.0721938,-63.63543051, ... 191.1109142,69.94451996,-187.9539415,-49.89923833,104.0902848, ... -120.2459738,253.5572433,89.25456949,-205.6516252,-44.93654156, ... 124.7026309,32.53005523,-98.85321751,-36.51904756,98.88241690, ... 24.88493459,-55.04058524,61.14493565,-128.4224895,-45.35023460, ... 105.0548704,-43.66748755,119.3284161,31.38442798,-92.87946767, ... -33.52716686,89.98992001,25.87341323,-48.86305045,59.69362881, ... -126.5353789,-44.39474251,101.5196856,59.41537992,41.18892281, ... 80.86101200,3.066809418,7.893523804,30.56212082,10.36861082, ... 8.222335945,19.97575641,2.050148531,4.992657093,2.300564232, ... .2256245602,-.05841594319]; SH12 = [210260.4816,-1443587.401,-1468919.281,281939.2993, ... -1131124.839,729331.7943,2573541.307,304616.7457,468887.5847, ... 181554.7517,-1300722.650,-257012.8601,645888.8041,-2048126.412, ... -2529093.041,571093.7972,-2115508.353,1122035.951,4489168.802, ... 75234.22743,823905.6909,147926.6121,-2276322.876,-155528.5992, ... -858076.2979,3474422.388,3986279.931,-834613.9747,3250625.781, ... -1818680.377,-7040468.986,-414359.6073,-1295117.666,-346320.6487, ... 3565527.409,430091.9496,-.1565573462,7.377619826,.4115646037, ... -6.146078880,3.808028815,-.5232034932,1.454841807,-12.32274869, ... -4.466974237,-2.941184626,-.6172620658,12.64613490,1.494922012, ... -21.35489898,-1.652256960,16.81799898,-1.404079922,-24.09369677, ... -10.99900839,45.94237820,2.248579894,31.91234041,7.575026816, ... -45.80833339,-1.507664976,14.60016998,1.348516288,-11.05980247, ... -5.402866968,31.69094514,12.28261196,-37.55354174,4.155626879, ... -33.70159657,-8.437907434,36.22672602,145.0262164,70.73187036, ... 85.51110098,21.47490989,24.34554406,31.34405345,4.655207476, ... 5.747889264,7.802304187,1.844169801,4.867254550,2.941393119, ... .1379899178,.06607020029]; SH21 = [162294.6224,503885.1125,-27057.67122,-531450.1339, ... 84747.05678,-237142.1712,84133.61490,259530.0402,69196.05160, ... -189093.5264,-19278.55134,195724.5034,-263082.6367,-818899.6923, ... 43061.10073,863506.6932,-139707.9428,389984.8850,-135167.5555, ... -426286.9206,-109504.0387,295258.3531,30415.07087,-305502.9405, ... 100785.3400,315010.9567,-15999.50673,-332052.2548,54964.34639, ... -152808.3750,51024.67566,166720.0603,40389.67945,-106257.7272, ... -11126.14442,109876.2047,2.978695024,558.6019011,2.685592939, ... -338.0004730,-81.99724090,-444.1102659,89.44617716,212.0849592, ... -32.58562625,-982.7336105,-35.10860935,567.8931751,-1.917212423, ... -260.2023543,-1.023821735,157.5533477,23.00200055,232.0603673, ... -36.79100036,-111.9110936,18.05429984,447.0481000,15.10187415, ... -258.7297813,-1.032340149,-298.6402478,-1.676201415,180.5856487, ... 64.52313024,209.0160857,-53.85574010,-98.52164290,14.35891214, ... 536.7666279,20.09318806,-309.7349530,58.54144539,67.45226850, ... 97.92374406,4.752449760,10.46824379,32.91856110,12.05124381, ... 9.962933904,15.91258637,1.804233877,6.578149088,2.515223491, ... .1930034238,-.02261109942]; SH22 = [-131287.8986,-631927.6885,-318797.4173,616785.8782, ... -50027.36189,863099.9833,47680.20240,-1053367.944,-501120.3811, ... -174400.9476,222328.6873,333551.7374,-389338.7841,-1995527.467, ... -982971.3024,1960434.268,297239.7137,2676525.168,-147113.4775, ... -3358059.979,-2106979.191,-462827.1322,1017607.960,1039018.475, ... 520266.9296,2627427.473,1301981.763,-2577171.706,-238071.9956, ... -3539781.111,94628.16420,4411304.724,2598205.733,637504.9351, ... -1234794.298,-1372562.403,-2.646186796,-31.10055575,2.295799273, ... 19.20203279,30.01931202,-302.1028550,-14.78310655,162.1561899, ... .4943938056,176.8089129,-.2444921680,-100.6148929,9.172262228, ... 137.4303440,-8.451613443,-84.20684224,-167.3354083,1321.830393, ... 76.89928813,-705.7586223,18.28186732,-770.1665162,-9.084224422, ... 436.3368157,-6.374255638,-107.2730177,6.080451222,65.53843753, ... 143.2872994,-1028.009017,-64.22739330,547.8536586,-20.58928632, ... 597.3893669,10.17964133,-337.7800252,159.3532209,76.34445954, ... 84.74398828,12.76722651,27.63870691,32.69873634,5.145153451, ... 6.310949163,6.996159733,1.971629939,4.436299219,2.904964304, ... .1486276863,.06859991529]; % C T01.DPHI_B_RHO0.XKAPPA=T01.BIRKPAR.XKAPPA1; %! FORWARDED IN BIRK_1N2 X_SC=T01.BIRKPAR.XKAPPA1-1.1D0; %! FORWARDED IN BIRK_SHL if (IOPB==0) | (IOPB==1), [FX11,FY11,FZ11] = T01_BIRK_1N2(1,1,PS,X,Y,Z); %! REGION 1, MODE 1 [HX11,HY11,HZ11] = T01_BIRK_SHL(SH11,PS,X_SC,X,Y,Z); BX11=FX11+HX11; BY11=FY11+HY11; BZ11=FZ11+HZ11; [FX12,FY12,FZ12] = T01_BIRK_1N2 (1,2,PS,X,Y,Z); %! REGION 1, MODE 2 [HX12,HY12,HZ12] = T01_BIRK_SHL (SH12,PS,X_SC,X,Y,Z); BX12=FX12+HX12; BY12=FY12+HY12; BZ12=FZ12+HZ12; end T01.DPHI_B_RHO0.XKAPPA=T01.BIRKPAR.XKAPPA2 ; %! FORWARDED IN BIRK_1N2 X_SC=T01.BIRKPAR.XKAPPA2-1.0D0 ; %! FORWARDED IN BIRK_SHL if (IOPB==0) | (IOPB==2), [FX21,FY21,FZ21] = T01_BIRK_1N2(2,1,PS,X,Y,Z); %! REGION 2, MODE 1 [HX21,HY21,HZ21] = T01_BIRK_SHL(SH21,PS,X_SC,X,Y,Z); BX21=FX21+HX21; BY21=FY21+HY21; BZ21=FZ21+HZ21; [FX22,FY22,FZ22] = T01_BIRK_1N2(2,2,PS,X,Y,Z); %! REGION 2, MODE 2 [HX22,HY22,HZ22] = T01_BIRK_SHL(SH22,PS,X_SC,X,Y,Z); BX22=FX22+HX22; BY22=FY22+HY22; BZ22=FZ22+HZ22; end % end of function BIRK_TOT % C % c %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % c % c function [BX,BY,BZ] = T01_BIRK_1N2 (NUMB,MODE,PS,X,Y,Z); %! NB# 6, P.60 % SUBROUTINE BIRK_1N2 (NUMB,MODE,PS,X,Y,Z,BX,BY,BZ) %! NB# 6, P.60 % C % C CALCULATES COMPONENTS OF REGION 1/2 FIELD IN SPHERICAL COORDS. DERIVED FROM THE S/R DIPDEF2C (WHICH % C DOES THE SAME JOB, BUT INPUT/OUTPUT THERE WAS IN SPHERICAL COORDS, WHILE HERE WE USE CARTESIAN ONES) % C % C INPUT: NUMB=1 (2) FOR REGION 1 (2) CURRENTS % C MODE=1 YIELDS SIMPLE SINUSOIDAL MLT VARIATION, WITH MAXIMUM CURRENT AT DAWN/DUSK MERIDIAN % C WHILE MODE=2 YIELDS THE SECOND HARMONIC. % C % C % IMPLICIT REAL*8 (A-H,O-Z) % DIMENSION A11(31),A12(31),A21(31),A22(31) % COMMON /MODENUM/ M % COMMON /DTHETA/ DTHETA % COMMON /DPHI_B_RHO0/ DPHI,B,RHO_0,XKAPPA %! THESE PARAMETERS CONTROL DAY-NIGHT ASYMMETRY OF F.A.C., AS FOLLOWS: global T01; % M and DTHETA are scalars in T01 % C (1) DPHI: HALF-DIFFERENCE (IN RADIANS) BETWEEN DAY AND NIGHT LATITUDE OF FAC OVAL AT IONOSPHERIC ALTITUDE; % C TYPICAL VALUE: 0.06 % C (2) B: AN ASYMMETRY FACTOR AT HIGH-ALTITUDES; FOR B=0, THE ONLY ASYMMETRY IS THAT FROM DPHI % C TYPICAL VALUES: 0.35-0.70 % C (3) RHO_0: A FIXED PARAMETER, DEFINING THE DISTANCE RHO, AT WHICH THE LATITUDE SHIFT GRADUALLY SATURATES AND % C STOPS INCREASING % C ITS VALUE WAS ASSUMED FIXED, EQUAL TO 7.0. % C (4) XKAPPA: AN OVERALL SCALING FACTOR, WHICH CAN BE USED FOR CHANGING THE SIZE OF THE F.A.C. OVAL % C % DATA BETA,RH,EPS/0.9D0,10.D0,3.D0/ %! parameters of the tilt-dependent deformation of the untilted F.A.C. field BETA = 0.9D0; RH = 10.D0; EPS = 3.D0; A11 = [.1618068350,-.1797957553,2.999642482,-.9322708978, ... -.6811059760,.2099057262,-8.358815746,-14.86033550,.3838362986, ... -16.30945494,4.537022847,2.685836007,27.97833029,6.330871059, ... 1.876532361,18.95619213,.9651528100,.4217195118,-.08957770020, ... -1.823555887,.7457045438,-.5785916524,-1.010200918,.01112389357, ... .09572927448,-.3599292276,8.713700514,.9763932955,3.834602998, ... 2.492118385,.7113544659]; A12 = [.7058026940,-.2845938535,5.715471266,-2.472820880, ... -.7738802408,.3478293930,-11.37653694,-38.64768867,.6932927651, ... -212.4017288,4.944204937,3.071270411,33.05882281,7.387533799, ... 2.366769108,79.22572682,.6154290178,.5592050551,-.1796585105, ... -1.654932210,.7309108776,-.4926292779,-1.130266095,-.009613974555, ... .1484586169,-.2215347198,7.883592948,.02768251655,2.950280953, ... 1.212634762,.5567714182]; A21 = [.1278764024,-.2320034273,1.805623266,-32.37241440, ... -.9931490648,.3175085630,-2.492465814,-16.21600096,.2695393416, ... -6.752691265,3.971794901,14.54477563,41.10158386,7.912889730, ... 1.258297372,9.583547721,1.014141963,.5104134759,-.1790430468, ... -1.756358428,.7561986717,-.6775248254,-.04014016420,.01446794851, ... .1200521731,-.2203584559,4.508963850,.8221623576,1.779933730, ... 1.102649543,.8867880020]; A22 = [.4036015198,-.3302974212,2.827730930,-45.44405830, ... -1.611103927,.4927112073,-.003258457559,-49.59014949,.3796217108, ... -233.7884098,4.312666980,18.05051709,28.95320323,11.09948019, ... .7471649558,67.10246193,.5667096597,.6468519751,-.1560665317, ... -1.460805289,.7719653528,-.6658988668,.2515179349E-05, ... .02426021891,.1195003324,-.2625739255,4.377172556,.2421190547, ... 2.503482679,1.071587299,.7247997430]; T01.DPHI_B_RHO0.B=0.5; T01.DPHI_B_RHO0.RHO_0=7.0; T01.M=MODE; if (NUMB==1) , T01.DPHI_B_RHO0.DPHI=0.055D0; T01.DTHETA=0.06D0; end if (NUMB==2) , T01.DPHI_B_RHO0.DPHI=0.030D0; T01.DTHETA=0.09D0; end Xsc=X*T01.DPHI_B_RHO0.XKAPPA; Ysc=Y*T01.DPHI_B_RHO0.XKAPPA; Zsc=Z*T01.DPHI_B_RHO0.XKAPPA; RHO=sqrt(Xsc^2+Zsc^2); Rsc=sqrt(Xsc^2+Ysc^2+Zsc^2) ; %! SCALED RHO2=T01.DPHI_B_RHO0.RHO_0^2; if (Xsc==0.D0) & (Zsc==0.D0) , PHI=0.D0; else PHI=atan2(-Zsc,Xsc); %! FROM CARTESIAN TO CYLINDRICAL (RHO,PHI,Y) end SPHIC=sin(PHI); CPHIC=cos(PHI); %! "C" means "CYLINDRICAL", TO DISTINGUISH FROM SPHERICAL PHI BRACK=T01.DPHI_B_RHO0.DPHI+T01.DPHI_B_RHO0.B*RHO2/(RHO2+1.D0)*(RHO^2-1.D0)/(RHO2+RHO^2); R1RH=(Rsc-1.D0)/RH; if (R1RH<0.D0), R1RH=0.D0; end %! AVOID NEGATIVE VALUES OF R1RH, WHICH MAY OCCUR IF THE % C POINT (X,Y,Z) LIES CLOSE TO EARTH'S SURFACE AND THE S.W. % C PRESSURE IS ABNORMALLY LOW PSIAS=BETA*PS/(1.D0+R1RH^EPS)^(1.D0/EPS); PHIS=PHI-BRACK*sin(PHI) -PSIAS; DPHISPHI=1.D0-BRACK*cos(PHI); DPHISRHO=-2.D0*T01.DPHI_B_RHO0.B*RHO2*RHO/(RHO2+RHO^2)^2 *sin(PHI) ... +BETA*PS*R1RH^(EPS-1.D0)*RHO/(RH*Rsc* ... (1.D0+R1RH^EPS)^(1.D0/EPS+1.D0)); DPHISDY= BETA*PS*R1RH^(EPS-1.D0)*Ysc/(RH*Rsc* ... (1.D0+R1RH^EPS)^(1.D0/EPS+1.D0)); SPHICS=sin(PHIS); CPHICS=cos(PHIS); XS= RHO*CPHICS; ZS=-RHO*SPHICS; if (NUMB==1) , if (MODE==1), [BXS,BYAS,BZS] = T01_TWOCONES(A11,XS,Ysc,ZS); end if (MODE==2), [BXS,BYAS,BZS] = T01_TWOCONES(A12,XS,Ysc,ZS); end else if (MODE==1), [BXS,BYAS,BZS] = T01_TWOCONES(A21,XS,Ysc,ZS); end if (MODE==2), [BXS,BYAS,BZS] = T01_TWOCONES(A22,XS,Ysc,ZS); end end BRHOAS=BXS*CPHICS-BZS*SPHICS; BPHIAS=-BXS*SPHICS-BZS*CPHICS; BRHO_S=BRHOAS*DPHISPHI *T01.DPHI_B_RHO0.XKAPPA; %! SCALING BPHI_S=(BPHIAS-RHO*(BYAS*DPHISDY+BRHOAS*DPHISRHO)) *T01.DPHI_B_RHO0.XKAPPA; BY_S=BYAS*DPHISPHI *T01.DPHI_B_RHO0.XKAPPA; BX=BRHO_S*CPHIC-BPHI_S*SPHIC; BY=BY_S; BZ=-BRHO_S*SPHIC-BPHI_S*CPHIC; % end of function BIRK_1N2 % c % C========================================================================= % c function [BX,BY,BZ] = T01_TWOCONES (A,X,Y,Z); % SUBROUTINE TWOCONES (A,X,Y,Z,BX,BY,BZ) % C % C ADDS FIELDS FROM TWO CONES (NORTHERN AND SOUTHERN), WITH A PROPER SYMMETRY % C OF THE CURRENT AND FIELD, CORRESPONDING TO THE REGION 1 BIRKELAND CURRENTS. (NB #6, P.58). % C % IMPLICIT REAL*8 (A-H,O-Z) % DIMENSION A(31) [BXN,BYN,BZN] = T01_ONE_CONE(A,X,Y,Z); [BXS,BYS,BZS] = T01_ONE_CONE(A,X,-Y,-Z); BX=BXN-BXS; BY=BYN+BYS; BZ=BZN+BZS; % end of function TWOCONES % c % C------------------------------------------------------------------------- % C function [BX,BY,BZ] = T01_ONE_CONE(A,X,Y,Z); % SUBROUTINE ONE_CONE(A,X,Y,Z,BX,BY,BZ) % c % c RETURNS FIELD COMPONENTS FOR A DEFORMED CONICAL CURRENT SYSTEM, FITTED TO A BIOSAVART FIELD % c HERE ONLY THE NORTHERN CONE IS TAKEN INTO ACCOUNT. % c % IMPLICIT REAL*8 (A-H,O-Z) % DIMENSION A(31) % COMMON /DTHETA/ DTHETA % COMMON /MODENUM/ M global T01; % DATA DR,DT/1.D-6,1.D-6/ %! JUST FOR NUMERICAL DIFFERENTIATION DR = 1.D-6; DT =1.D-6; %! JUST FOR NUMERICAL DIFFERENTIATION THETA0=A(31); RHO2=X^2+Y^2; RHO=sqrt(RHO2); R=sqrt(RHO2+Z^2); THETA=atan2(RHO,Z); PHI=atan2(Y,X); % C % C MAKE THE DEFORMATION OF COORDINATES: % C RS=T01_R_S(A,R,THETA); THETAS=T01_THETA_S(A,R,THETA); PHIS=PHI; % C % C CALCULATE FIELD COMPONENTS AT THE NEW POSITION (ASTERISKED): % C [BTAST,BFAST] = T01_FIALCOS (RS,THETAS,PHIS,T01.M,THETA0,T01.DTHETA); %! MODE #M % C % C NOW TRANSFORM B{R,T,F}_AST BY THE DEFORMATION TENSOR: % C % C FIRST OF ALL, FIND THE DERIVATIVES: % C DRSDR=(T01_R_S(A,R+DR,THETA)-T01_R_S(A,R-DR,THETA))/(2.D0*DR); DRSDT=(T01_R_S(A,R,THETA+DT)-T01_R_S(A,R,THETA-DT))/(2.D0*DT); DTSDR=(T01_THETA_S(A,R+DR,THETA)-T01_THETA_S(A,R-DR,THETA))/(2.D0*DR); DTSDT=(T01_THETA_S(A,R,THETA+DT)-T01_THETA_S(A,R,THETA-DT))/(2.D0*DT); STSST=sin(THETAS)/sin(THETA); RSR=RS/R; BR =-RSR/R*STSST*BTAST*DRSDT; %! NB#6, P.43 BRAST DOES NOT ENTER HERE BTHETA = RSR*STSST*BTAST*DRSDR; %! (IT IS IDENTICALLY ZERO IN OUR CASE) BPHI = RSR*BFAST*(DRSDR*DTSDT-DRSDT*DTSDR); S=RHO/R; C=Z/R; SF=Y/RHO; CF=X/RHO; BE=BR*S+BTHETA*C; BX=A(1)*(BE*CF-BPHI*SF); BY=A(1)*(BE*SF+BPHI*CF); BZ=A(1)*(BR*C-BTHETA*S); % end of function ONE_CONE % C % C===================================================================================== function R_S = T01_R_S(A,R,THETA) % DOUBLE PRECISION FUNCTION R_S(A,R,THETA) % IMPLICIT REAL*8 (A-H,O-Z) % DIMENSION A(31) % C R_S=R+A(2)/R+A(3)*R/sqrt(R^2+A(11)^2)+A(4)*R/(R^2+A(12)^2) ... +(A(5)+A(6)/R+A(7)*R/sqrt(R^2+A(13)^2)+A(8)*R/(R^2+A(14)^2))* ... cos(THETA) ... +(A(9)*R/sqrt(R^2+A(15)^2)+A(10)*R/(R^2+A(16)^2)^2)* ... cos(2.D0*THETA); % C % end of function R_S % C % C----------------------------------------------------------------------------- % C function THETA_S = T01_THETA_S(A,R,THETA) % DOUBLE PRECISION FUNCTION THETA_S(A,R,THETA) % IMPLICIT REAL*8 (A-H,O-Z) % DIMENSION A(31) % c THETA_S=THETA+(A(17)+A(18)/R+A(19)/R^2 ... +A(20)*R/sqrt(R^2+A(27)^2))*sin(THETA) ... +(A(21)+A(22)*R/sqrt(R^2+A(28)^2) ... +A(23)*R/(R^2+A(29)^2))*sin(2.D0*THETA) ... +(A(24)+A(25)/R+A(26)*R/(R^2+A(30)^2))*sin(3.D0*THETA); % C % end of function THETA_S % C % c!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! % c function [BTHETA,BPHI] = T01_FIALCOS(R,THETA,PHI,N,THETA0,DT); % SUBROUTINE FIALCOS(R,THETA,PHI,BTHETA,BPHI,N,THETA0,DT) % C % C CONICAL MODEL OF BIRKELAND CURRENT FIELD; BASED ON THE OLD S/R FIALCO (OF 1990-91) % C NB OF 1985-86-88, NOTE OF MARCH 5, BUT HERE BOTH INPUT AND OUTPUT ARE IN SPHERICAL CDS. % % C BTN, AND BPN ARE THE ARRAYS OF BTHETA AND BPHI (BTN(i), BPN(i) CORRESPOND TO i-th MODE). % C ONLY FIRST N MODE AMPLITUDES ARE COMPUTED (N<=10). % C THETA0 IS THE ANGULAR HALF-WIDTH OF THE CONE, DT IS THE ANGULAR H.-W. OF THE CURRENT LAYER % % C NOTE: BR=0 (BECAUSE ONLY RADIAL CURRENTS ARE PRESENT IN THIS MODEL) % C % IMPLICIT REAL*8 (A-H,O-Z) % DIMENSION BTN(10),BPN(10),CCOS(10),SSIN(10) SINTE=sin(THETA); RO=R*SINTE; COSTE=cos(THETA); SINFI=sin(PHI); COSFI=cos(PHI); TG=SINTE/(1.D0+COSTE); %! TAN(THETA/2) CTG=SINTE/(1.D0-COSTE); %! COT(THETA/2) % C % C TETANP=THETA0+DT; TETANM=THETA0-DT; if (THETA>=TETANM), TGP=tan(TETANP*0.5D0); TGM=tan(TETANM*0.5D0); TGM2=TGM*TGM; TGP2=TGP*TGP; end COSM1=1.D0; SINM1=0.D0; TM=1.D0; TGM2M=1.D0; TGP2M=1.D0; for M=1:N, TM=TM*TG; CCOS(M)=COSM1*COSFI-SINM1*SINFI; SSIN(M)=SINM1*COSFI+COSM1*SINFI; COSM1=CCOS(M); SINM1=SSIN(M); if (THETA1 MAKES THE CURRENTS % C SHRINK OR EXPAND, RESPECTIVELY. % C % C PHI IS THE ROTATION ANGLE (RADIANS) OF THE PARTIAL RING CURRENT (MEASURED FROM MIDNIGHT TOWARD DUSK) % C % IMPLICIT REAL*8 (A-H,O-Z) % c % c 1. TRANSFORM TO TILTED COORDINATES (i.e., SM coordinates): % C CPS=cos(PS); SPS=sin(PS); XT=X*CPS-Z*SPS; ZT=Z*CPS+X*SPS; % C % C 2. SCALE THE COORDINATES FOR THE SYMMETRIC AND PARTIAL RC COMPONENTS: % C XTS=XT/SC_SY; %! SYMMETRIC YTS=Y /SC_SY; ZTS=ZT/SC_SY; XTA=XT/SC_PR; %! PARTIAL YTA=Y /SC_PR; ZTA=ZT/SC_PR; % C % C 3. CALCULATE COMPONENTS OF THE TOTAL FIELD IN THE TILTED (SOLAR-MAGNETIC) COORDINATE SYSTEM: % C % C========== ONLY FOR LEAST SQUARES FITTING: BXS=0.D0; BYS=0.D0; BZS=0.D0; BXA_S=0.D0; BYA_S=0.D0; BZA_S=0.D0; BXA_QR=0.D0; BYA_QR=0.D0; BZA_Q=0.D0; % C============================================ % C % C 3a. SYMMETRIC FIELD: % C if (IOPR<=1), [BXS,BYS,BZS] = T01_RC_SYMM(XTS,YTS,ZTS); end; if (IOPR==0) | (IOPR==2), [BXA_S,BYA_S,BZA_S] = T01_PRC_SYMM(XTA,YTA,ZTA); end % C 3b. ROTATE THE SCALED SM COORDINATES BY PHI AROUND ZSM AXIS AND CALCULATE QUADRUPOLE PRC FIELD % C IN THOSE COORDS: CP=cos(PHI); SP=sin(PHI); XR=XTA*CP-YTA*SP; YR=XTA*SP+YTA*CP; if (IOPR==0) | (IOPR==2), [BXA_QR,BYA_QR,BZA_Q] = T01_PRC_QUAD(XR,YR,ZTA); end % C 3c. TRANSFORM THE QUADRUPOLE FIELD COMPONENTS BACK TO THE SM COORDS: % C BXA_Q= BXA_QR*CP+BYA_QR*SP; BYA_Q=-BXA_QR*SP+BYA_QR*CP; % C 3d. FIND THE TOTAL FIELD OF PRC (SYMM.+QUADR.) IN THE SM COORDS: % C BXP=BXA_S+BXA_Q; BYP=BYA_S+BYA_Q; BZP=BZA_S+BZA_Q; % C % C 4. TRANSFORM THE FIELDS OF BOTH PARTS OF THE RING CURRENT BACK TO THE GSM SYSTEM: % C BXSRC=BXS*CPS+BZS*SPS; %! SYMMETRIC RC BYSRC=BYS; BZSRC=BZS*CPS-BXS*SPS; % C BXPRC=BXP*CPS+BZP*SPS; %! PARTIAL RC BYPRC=BYP; BZPRC=BZP*CPS-BXP*SPS; % C % end of function SRC_PRC % C % C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& % C function [BX,BY,BZ]= T01_RC_SYMM(X,Y,Z) % SUBROUTINE RC_SYMM (X,Y,Z,BX,BY,BZ) % IMPLICIT REAL * 8 (A - H, O - Z) % DATA DS,DC/1.D-2,0.99994999875D0/, D/1.D-4/,DRD/5.D3/ %! DS=SIN(THETA) AT THE BOUNDARY OF THE LINEARITY % REGION; DC=sqrt(1-DS^2); DRD=1/(2*D) %! DS=SIN(THETA) AT THE BOUNDARY OF THE LINEARITY DS = 1.D-2; DC = 0.99994999875D0; D = 1.D-4; DRD = 5.D3; RHO2=X^2+Y^2; R2=RHO2+Z^2; R=sqrt(R2); RP=R+D; RM=R-D; SINT=sqrt(RHO2)/R; COST=Z/R; if (SINT ALPHA,GAMMA GAMMA=COST1/R^2; ARG1=-((R-R1)/DR1)^2-(COST1/DLA1)^2; ARG2=-((R-R2)/DR2)^2-(COST1/DLA2)^2; ARG3=-((R-R3)/DR3)^2; if (ARG1<-500.D0) , %! TO PREVENT "FLOATING UNDERFLOW" CRASHES DEXP1=0.D0; else DEXP1=exp(ARG1); end if (ARG2<-500.D0) , DEXP2=0.D0; else DEXP2=exp(ARG2); end if (ARG3<-500.D0) , DEXP3=0.D0; else DEXP3=exp(ARG3); end ALPHA_S=ALPHA*(1.D0+P1*DEXP1+P2*DEXP2+P3*DEXP3); %! ALPHA -> ALPHA_S (DEFORMED) GAMMA_S=GAMMA; GAMMAS2=GAMMA_S^2; ALSQH=ALPHA_S^2/2.D0; %! ALPHA_S,GAMMA_S -> RS,SINTS,COSTS F=64.D0/27.D0*GAMMAS2+ALSQH^2; Q=(sqrt(F)+ALSQH)^(1.D0/3.D0); C=Q-4.D0*GAMMAS2^(1.D0/3.D0)/(3.D0*Q); if (C<0.D0), C=0.D0; end G=sqrt(C^2+4.D0*GAMMAS2^(1.D0/3.D0)); RS=4.D0/((sqrt(2.D0*G-C)+sqrt(C))*(G+C)); COSTS=GAMMA_S*RS^2; SINTS=sqrt(1.D0-COSTS^2); RHOS=RS*SINTS; RHOS2=RHOS^2; ZS=RS*COSTS; % C % c 1st loop: P=(RRC1+RHOS)^2+ZS^2+DD1^2; XK2=4.D0*RRC1*RHOS/P; XK=sqrt(XK2); XKRHO12=XK*sqrt(RHOS); %! SEE NB#4, P.3 % C XK2S=1.D0-XK2; DL=log(1.D0/XK2S); ELK=1.38629436112d0+XK2S*(0.09666344259D0+XK2S*(0.03590092383+ ... XK2S*(0.03742563713+XK2S*0.01451196212))) +DL* ... (0.5D0+XK2S*(0.12498593597D0+XK2S*(0.06880248576D0+ ... XK2S*(0.03328355346D0+XK2S*0.00441787012D0)))); ELE=1.D0+XK2S*(0.44325141463D0+XK2S*(0.0626060122D0+XK2S* ... (0.04757383546D0+XK2S*0.01736506451D0))) +DL* ... XK2S*(0.2499836831D0+XK2S*(0.09200180037D0+XK2S* ... (0.04069697526D0+XK2S*0.00526449639D0))); % C APHI1=((1.D0-XK2*0.5D0)*ELK-ELE)/XKRHO12; % c % c 2nd loop: P=(RRC2+RHOS)^2+ZS^2+DD2^2; XK2=4.D0*RRC2*RHOS/P; XK=sqrt(XK2); XKRHO12=XK*sqrt(RHOS); %! SEE NB#4, P.3 % C XK2S=1.D0-XK2; DL=log(1.D0/XK2S); ELK=1.38629436112d0+XK2S*(0.09666344259D0+XK2S*(0.03590092383+ ... XK2S*(0.03742563713+XK2S*0.01451196212))) +DL* ... (0.5D0+XK2S*(0.12498593597D0+XK2S*(0.06880248576D0+ ... XK2S*(0.03328355346D0+XK2S*0.00441787012D0)))); ELE=1.D0+XK2S*(0.44325141463D0+XK2S*(0.0626060122D0+XK2S* ... (0.04757383546D0+XK2S*0.01736506451D0))) +DL* ... XK2S*(0.2499836831D0+XK2S*(0.09200180037D0+XK2S* ... (0.04069697526D0+XK2S*0.00526449639D0))); % C APHI2=((1.D0-XK2*0.5D0)*ELK-ELE)/XKRHO12; AP=A1*APHI1+A2*APHI2; if (PROX), AP=AP*SINT/SINT1; end %! LINEAR INTERPOLATION, IF TOO CLOSE TO THE Z-AXIS % C % end of function AP % c % c@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ % C function [BX,BY,BZ] = T01_PRC_SYMM(X,Y,Z); % SUBROUTINE PRC_SYMM (X,Y,Z,BX,BY,BZ) % IMPLICIT REAL * 8 (A - H, O - Z) %! DS=SIN(THETA) AT THE BOUNDARY OF THE LINEARITY % REGION; DC=sqrt(1-DS^2); DRD=1/(2*D) DS = 1.D-2; DC = 0.99994999875D0; D = 1.D-4; DRD = 5.D3; RHO2=X^2+Y^2; R2=RHO2+Z^2; R=sqrt(R2); RP=R+D; RM=R-D; SINT=sqrt(RHO2)/R; COST=Z/R; if (SINT ALPHA,GAMMA GAMMA=COST1/R^2; ALPHA_S=ALPHA*(1.D0+P1/(1.D0+((ALPHA-ALPHA1)/DAL1)^2)^BETA1 ... *exp(-(GAMMA/DG1)^2) ... +P2*(ALPHA-ALPHA2)/(1.D0+((ALPHA-ALPHA2)/DAL2)^2)^BETA2 ... /(1.D0+(GAMMA/DG2)^2)^BETA3 ... +P3*(ALPHA-ALPHA3)^2/(1.D0+((ALPHA-ALPHA3)/DAL3)^2)^BETA4 ... /(1.D0+(GAMMA/DG3)^2)^BETA5); %! ALPHA -> ALPHA_S (DEFORMED) GAMMA_S=GAMMA*(1.D0+Q0+Q1*(ALPHA-ALPHA4) ... *exp(-((ALPHA-ALPHA4)/DAL4)^2-(GAMMA/DG4)^2) ... %! GAMMA -> GAMMA_ (DEFORMED) +Q2*(ALPHA-ALPHA5)/(1.D0+((ALPHA-ALPHA5)/DAL5)^2)^BETA6 ... /(1.D0+(GAMMA/DG5)^2)^BETA7); GAMMAS2=GAMMA_S^2; ALSQH=ALPHA_S^2/2.D0; %! ALPHA_S,GAMMA_S -> RS,SINTS,COSTS F=64.D0/27.D0*GAMMAS2+ALSQH^2; Q=(sqrt(F)+ALSQH)^(1.D0/3.D0); C=Q-4.D0*GAMMAS2^(1.D0/3.D0)/(3.D0*Q); if (C<0.D0), C=0.D0; end G=sqrt(C^2+4.D0*GAMMAS2^(1.D0/3.D0)); RS=4.D0/((sqrt(2.D0*G-C)+sqrt(C))*(G+C)); COSTS=GAMMA_S*RS^2; SINTS=sqrt(1.D0-COSTS^2); RHOS=RS*SINTS; RHOS2=RHOS^2; ZS=RS*COSTS; % C % c 1st loop: P=(RRC1+RHOS)^2+ZS^2+DD1^2; XK2=4.D0*RRC1*RHOS/P; XK=sqrt(XK2); XKRHO12=XK*sqrt(RHOS); %! NB#4, P.3 % C XK2S=1.D0-XK2; DL=log(1.D0/XK2S); ELK=1.38629436112d0+XK2S*(0.09666344259D0+XK2S*(0.03590092383+ ... XK2S*(0.03742563713+XK2S*0.01451196212))) +DL* ... (0.5D0+XK2S*(0.12498593597D0+XK2S*(0.06880248576D0+ ... XK2S*(0.03328355346D0+XK2S*0.00441787012D0)))); ELE=1.D0+XK2S*(0.44325141463D0+XK2S*(0.0626060122D0+XK2S* ... (0.04757383546D0+XK2S*0.01736506451D0))) +DL* ... XK2S*(0.2499836831D0+XK2S*(0.09200180037D0+XK2S* ... (0.04069697526D0+XK2S*0.00526449639D0))); % C APHI1=((1.D0-XK2*0.5D0)*ELK-ELE)/XKRHO12; % c % c 2nd loop: P=(RRC2+RHOS)^2+ZS^2+DD2^2; XK2=4.D0*RRC2*RHOS/P; XK=sqrt(XK2); XKRHO12=XK*sqrt(RHOS); %! NB#4, P.3 % C XK2S=1.D0-XK2; DL=log(1.D0/XK2S); ELK=1.38629436112d0+XK2S*(0.09666344259D0+XK2S*(0.03590092383+ ... XK2S*(0.03742563713+XK2S*0.01451196212))) +DL* ... (0.5D0+XK2S*(0.12498593597D0+XK2S*(0.06880248576D0+ ... XK2S*(0.03328355346D0+XK2S*0.00441787012D0)))); ELE=1.D0+XK2S*(0.44325141463D0+XK2S*(0.0626060122D0+XK2S* ... (0.04757383546D0+XK2S*0.01736506451D0))) +DL* ... XK2S*(0.2499836831D0+XK2S*(0.09200180037D0+XK2S* ... (0.04069697526D0+XK2S*0.00526449639D0))); % C APHI2=((1.D0-XK2*0.5D0)*ELK-ELE)/XKRHO12; APPRC=A1*APHI1+A2*APHI2; if (PROX), APPRC=APPRC*SINT/SINT1; end %! LINEAR INTERPOLATION, IF TOO CLOSE TO THE Z-AXIS % C % end of function APPRC % C % C@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ % C % C function [BX,BY,BZ] = T01_PRC_QUAD(X,Y,Z); % SUBROUTINE PRC_QUAD (X,Y,Z,BX,BY,BZ) % C % C CALCULATES COMPONENTS OF THE FIELD FROM THE "QUADRUPOLE" COMPONENT OF THE PRC % C % IMPLICIT REAL * 8 (A - H, O - Z) % DATA D,DD/1.D-4,2.D-4/, DS/1.D-2/,DC/0.99994999875D0/ D = 1.D-4; DD =2.D-4; DS = 1.D-2; DC = 0.99994999875D0; RHO2=X^2+Y^2; R=sqrt(RHO2+Z^2); RHO=sqrt(RHO2); SINT=RHO/R; COST=Z/R; RP=R+D; RM=R-D; if (SINT>DS) , CPHI=X/RHO; SPHI=Y/RHO; BR=T01_BR_PRC_Q(R,SINT,COST); BT=T01_BT_PRC_Q(R,SINT,COST); DBRR=(T01_BR_PRC_Q(RP,SINT,COST)-T01_BR_PRC_Q(RM,SINT,COST))/DD; THETA=atan2(SINT,COST); TP=THETA+D; TM=THETA-D; SINTP=sin(TP); COSTP=cos(TP); SINTM=sin(TM); COSTM=cos(TM); DBTT=(T01_BT_PRC_Q(R,SINTP,COSTP)-T01_BT_PRC_Q(R,SINTM,COSTM))/DD; BX=SINT*(BR+(BR+R*DBRR+DBTT)*SPHI^2)+COST*BT; BY=-SINT*SPHI*CPHI*(BR+R*DBRR+DBTT); BZ=(BR*COST-BT*SINT)*CPHI; else ST=DS; CT=DC; if (Z<0.D0), CT=-DC; end; THETA=atan2(ST,CT); TP=THETA+D; TM=THETA-D; SINTP=sin(TP); COSTP=cos(TP); SINTM=sin(TM); COSTM=cos(TM); BR=T01_BR_PRC_Q(R,ST,CT); BT=T01_BT_PRC_Q(R,ST,CT); DBRR=(T01_BR_PRC_Q(RP,ST,CT)-T01_BR_PRC_Q(RM,ST,CT))/DD; DBTT=(T01_BT_PRC_Q(R,SINTP,COSTP)-T01_BT_PRC_Q(R,SINTM,COSTM))/DD; FCXY=R*DBRR+DBTT; BX=(BR*(X^2+2.D0*Y^2)+FCXY*Y^2)/(R*ST)^2+BT*COST; BY=-(BR+FCXY)*X*Y/(R*ST)^2; BZ=(BR*COST/ST-BT)*X/R; end % end of function PRC_QUAD % c % c&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& % C function BR_PRC_Q = T01_BR_PRC_Q(R,SINT,COST) % DOUBLE PRECISION FUNCTION BR_PRC_Q (R,SINT,COST) % C % Calculates the radial component of the "quadrupole" part of the model partial ring current. % C % IMPLICIT REAL * 8 (A - H, O - Z) % DATA A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17, %! ALL LINEAR PARAMETERS HERE % * A18,XK1,AL1,DAL1,B1,BE1,XK2,AL2,DAL2,B2,BE2,XK3,XK4,AL3,DAL3,B3, %! WERE MULTIPLIED BY 0.1, % * BE3,AL4,DAL4,DG1,AL5,DAL5,DG2,C1,C2,C3,AL6,DAL6,DRM/-21.2666329, %! SO THAT THEY CORRESPOND TO P_0=1 nPa, % *32.24527521,-6.062894078,7.515660734,233.7341288,-227.1195714, %! RATHER THAN THE ORIGINAL VALUE OF 10 nPa % *8.483233889,16.80642754,-24.63534184,9.067120578,-1.052686913, %! ASSUMED IN THE BIOT-SAVART INTEGRAL % *-12.08384538,18.61969572,-12.71686069,47017.35679,-50646.71204, % *7746.058231,1.531069371,2.318824273,.1417519429,.6388013110E-02, % *5.303934488,4.213397467,.7955534018,.1401142771,.2306094179E-01, % *3.462235072,2.568743010,3.477425908,1.922155110,.1485233485, % *.2319676273E-01,7.830223587,8.492933868,.1295221828,.01753008801, % *.01125504083,.1811846095,.04841237481,.01981805097,6.557801891, % *6.348576071,5.744436687,.2265212965,.1301957209,.5654023158/ A1 = -21.2666329; A2 = 32.24527521; A3 = -6.062894078; A4 = 7.515660734; A5 = 233.7341288; A6 = -227.1195714; A7 = 8.483233889; A8 = 16.80642754; A9 = -24.63534184; A10 = 9.067120578; A11 = -1.052686913; A12 = -12.08384538; A13 = 18.61969572; A14 = -12.71686069; A15 = 47017.35679; A16 = -50646.71204; A17 = 7746.058231; A18 = 1.531069371; XK1 = 2.318824273; AL1 = .1417519429; DAL1 = .6388013110E-02; B1 = 5.303934488; BE1 = 4.213397467; XK2 = .7955534018; AL2 = .1401142771; DAL2 = .2306094179E-01; B2 = 3.462235072; BE2 = 2.568743010; XK3 = 3.477425908; XK4 = 1.922155110; AL3 = .1485233485; DAL3 = .2319676273E-01; B3 = 7.830223587; BE3 = 8.492933868; AL4 = .1295221828; DAL4 = .01753008801; DG1 = .01125504083; AL5 = .1811846095; DAL5 = .04841237481; DG2 = .01981805097; C1 = 6.557801891; C2 = 6.348576071; C3 = 5.744436687; AL6 = .2265212965; DAL6 = .1301957209; DRM = .5654023158; SINT2=SINT^2; COST2=COST^2; SC=SINT*COST; ALPHA=SINT2/R; GAMMA=COST/R^2; [F,FA,FS] = T01_FFS(ALPHA,AL1,DAL1); D1=SC*F^XK1/((R/B1)^BE1+1.D0); D2=D1*COST2; [F,FA,FS] = T01_FFS(ALPHA,AL2,DAL2); D3=SC*FS^XK2/((R/B2)^BE2+1.D0); D4=D3*COST2; [F,FA,FS] = T01_FFS(ALPHA,AL3,DAL3); D5=SC*(ALPHA^XK3)*(FS^XK4)/((R/B3)^BE3+1.D0); D6=D5*COST2; ARGA=((ALPHA-AL4)/DAL4)^2+1.D0; ARGG=1.D0+(GAMMA/DG1)^2; D7=SC/ARGA/ARGG; D8=D7/ARGA; D9=D8/ARGA; D10=D9/ARGA; ARGA=((ALPHA-AL5)/DAL5)^2+1.D0; ARGG=1.D0+(GAMMA/DG2)^2; D11=SC/ARGA/ARGG; D12=D11/ARGA; D13=D12/ARGA; D14=D13/ARGA; D15=SC/(R^4+C1^4); D16=SC/(R^4+C2^4)*COST2; D17=SC/(R^4+C3^4)*COST2^2; [F,FA,FS] = T01_FFS(ALPHA,AL6,DAL6); D18=SC*FS/(1.D0+((R-1.2D0)/DRM)^2); BR_PRC_Q=A1*D1+A2*D2+A3*D3+A4*D4+A5*D5+A6*D6+A7*D7+A8*D8+A9*D9+ ... A10*D10+A11*D11+A12*D12+A13*D13+A14*D14+A15*D15+A16*D16+A17*D17+ ... A18*D18; % C % end of function BR_PRC_Q % c % C%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % C function BT_PRC_Q = T01_BT_PRC_Q(R,SINT,COST); % DOUBLE PRECISION FUNCTION BT_PRC_Q (R,SINT,COST) % C % Calculates the Theta component of the "quadrupole" part of the model partial ring current. % C % IMPLICIT REAL * 8 (A - H, O - Z) % DATA A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17, %! ALL LINEAR PARAMETERS HERE % *XK1,AL1,DAL1,B1,BE1,XK2,AL2,DAL2,BE2,XK3,XK4,AL3,DAL3,B3,BE3,AL4, %! WERE MULTIPLIED BY 0.1, % *DAL4,DG1,AL5,DAL5,DG2,C1,C2,C3/12.74640393,-7.516393516, %! SO THAT THEY CORRESPOND TO P_0=1 nPa, % *-5.476233865,3.212704645,-59.10926169,46.62198189,-.01644280062, %! RATHER THAN THE ORIGINAL VALUE OF 10 nPa % *.1234229112,-.08579198697,.01321366966,.8970494003,9.136186247, %! ASSUMED IN THE BIOT-SAVART INTEGRAL % *-38.19301215,21.73775846,-410.0783424,-69.90832690,-848.8543440, % *1.243288286,.2071721360,.05030555417,7.471332374,3.180533613, % *1.376743507,.1568504222,.02092910682,1.985148197,.3157139940, % *1.056309517,.1701395257,.1019870070,6.293740981,5.671824276, % *.1280772299,.02189060799,.01040696080,.1648265607,.04701592613, % *.01526400086,12.88384229,3.361775101,23.44173897/ A1 = 12.74640393; A2 = -7.516393516; A3 = -5.476233865; A4 = 3.212704645; A5 = -59.10926169; A6 = 46.62198189; A7 = -.01644280062; A8 = .1234229112; A9 = -.08579198697; A10 = .01321366966; A11 = .8970494003; A12 = 9.136186247; A13 = -38.19301215; A14 = 21.73775846; A15 = -410.0783424; A16 = -69.90832690; A17 = -848.8543440; XK1 = 1.243288286; AL1 = .2071721360; DAL1 = .05030555417; B1 = 7.471332374; BE1 = 3.180533613; XK2 = 1.376743507; AL2 = .1568504222; DAL2 = .02092910682; BE2 = 1.985148197; XK3 = .3157139940; XK4 = 1.056309517; AL3 = .1701395257; DAL3 = .1019870070; B3 = 6.293740981; BE3 = 5.671824276; AL4 = .1280772299; DAL4 = .02189060799; DG1 = .01040696080; AL5 = .1648265607; DAL5 = .04701592613; DG2 = .01526400086; C1 = 12.88384229; C2 = 3.361775101; C3 = 23.44173897; SINT2=SINT^2; COST2=COST^2; SC=SINT*COST; ALPHA=SINT2/R; GAMMA=COST/R^2; [F,FA,FS] = T01_FFS(ALPHA,AL1,DAL1); D1=F^XK1/((R/B1)^BE1+1.D0); D2=D1*COST2; [F,FA,FS] = T01_FFS(ALPHA,AL2,DAL2); D3=FA^XK2/R^BE2; D4=D3*COST2; [F,FA,FS] = T01_FFS(ALPHA,AL3,DAL3); D5=FS^XK3*ALPHA^XK4/((R/B3)^BE3+1.D0); D6=D5*COST2; [F,FA,FS] = T01_FFS(GAMMA,0.D0,DG1); FCC=(1.D0+((ALPHA-AL4)/DAL4)^2); D7 =1.D0/FCC*FS; D8 =D7/FCC; D9 =D8/FCC; D10=D9/FCC; ARG=1.D0+((ALPHA-AL5)/DAL5)^2; D11=1.D0/ARG/(1.D0+(GAMMA/DG2)^2); D12=D11/ARG; D13=D12/ARG; D14=D13/ARG; D15=1.D0/(R^4+C1^2); D16=COST2/(R^4+C2^2); D17=COST2^2/(R^4+C3^2); % C BT_PRC_Q=A1*D1+A2*D2+A3*D3+A4*D4+A5*D5+A6*D6+A7*D7+A8*D8+A9*D9+ ... A10*D10+A11*D11+A12*D12+A13*D13+A14*D14+A15*D15+A16*D16+A17*D17; % C % end of function BT_PRC_Q % c % c@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ function [F,FA,FS] = T01_FFS(A,A0,DA); % SUBROUTINE FFS(A,A0,DA,F,FA,FS) % IMPLICIT REAL * 8 (A - H, O - Z) SQ1=sqrt((A+A0)^2+DA^2); SQ2=sqrt((A-A0)^2+DA^2); FA=2.D0/(SQ1+SQ2); F=FA*A; FS=0.5D0*(SQ1+SQ2)/(SQ1*SQ2)*(1.D0-F*F); % end of function FFS % C % C|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| % C % C function [BX,BY,BZ] = T01_RC_SHIELD (A,PS,X_SC,X,Y,Z) % SUBROUTINE RC_SHIELD (A,PS,X_SC,X,Y,Z,BX,BY,BZ) % C % C COMPUTES THE COMPONENTS OF THE SHIELDING FIELD FOR THE RING CURRENT % C (EITHER PARTIAL OR AXISYMMETRICAL) % C INPUT: A - AN ARRAY CONTAINING THE HARMONIC COEFFICIENTS AND NONLINEAR PARAMETERS % C PS - GEODIPOLE TILT ANGLE IN RADIANS % C X_SC - SCALING FACTOR ( X_SC> 1 AND X_SC< 1 CORRESPOND TO LARGER/SMALLER % C RING CURRENT, RESP.) % C X,Y,Z - POSITION IN RE (GSM COORDS) % C OUTPUT: BX,BY,BZ - SHIELDING FIELD COMPONENTS (GSM) % C % IMPLICIT REAL * 8 (A - H, O - Z) % DIMENSION A(86) % C FAC_SC=(X_SC+1.D0)^3; % C CPS=cos(PS); SPS=sin(PS); S3PS=2.D0*CPS; % C PST1=PS*A(85); PST2=PS*A(86); ST1=sin(PST1); CT1=cos(PST1); ST2=sin(PST2); CT2=cos(PST2); X1=X*CT1-Z*ST1; Z1=X*ST1+Z*CT1; X2=X*CT2-Z*ST2; Z2=X*ST2+Z*CT2; % C L=0; GX=0.D0; GY=0.D0; GZ=0.D0; % C for M=1:2, % DO 1 M=1,2 %! M=1 IS FOR THE 1ST SUM ("PERP." SYMMETRY) % C AND M=2 IS FOR THE SECOND SUM ("PARALL." SYMMETRY) for I=1:3, % DO 2 I=1,3 P=A(72+I); Q=A(78+I); CYPI=cos(Y/P); CYQI=cos(Y/Q); SYPI=sin(Y/P); SYQI=sin(Y/Q); % C for K=1:3, % DO 3 K=1,3 R=A(75+K); S=A(81+K); SZRK=sin(Z1/R); CZSK=cos(Z2/S); CZRK=cos(Z1/R); SZSK=sin(Z2/S); SQPR=sqrt(1.D0/P^2+1.D0/R^2); SQQS=sqrt(1.D0/Q^2+1.D0/S^2); EPR=exp(X1*SQPR); EQS=exp(X2*SQQS); % C for N=1:2, % DO 4 N=1,2 %! N=1 IS FOR THE FIRST PART OF EACH COEFFICIENT % C AND N=2 IS FOR THE SECOND ONE for NN=1:2, % DO 5 NN=1,2 %! NN = 1,2 FURTHER SPLITS THE COEFFICIENTS INTO 2 PARTS, % C TO TAKE INTO ACCOUNT THE SCALE FACTOR DEPENDENCE if (M==1) , FX=-SQPR*EPR*CYPI*SZRK *FAC_SC; FY=EPR*SYPI*SZRK/P *FAC_SC; FZ=-EPR*CYPI*CZRK/R *FAC_SC; if (N==1) , if (NN==1) , HX=FX; HY=FY; HZ=FZ; else HX=FX*X_SC; HY=FY*X_SC; HZ=FZ*X_SC; end else if (NN==1) , HX=FX*CPS; HY=FY*CPS; HZ=FZ*CPS; else HX=FX*CPS*X_SC; HY=FY*CPS*X_SC; HZ=FZ*CPS*X_SC; end end else %! M==2 FX=-SPS*SQQS*EQS*CYQI*CZSK *FAC_SC; FY=SPS/Q*EQS*SYQI*CZSK *FAC_SC; FZ=SPS/S*EQS*CYQI*SZSK *FAC_SC; if (N==1) , if (NN==1) , HX=FX; HY=FY; HZ=FZ; else HX=FX*X_SC; HY=FY*X_SC; HZ=FZ*X_SC; end else if (NN==1) , HX=FX*S3PS; HY=FY*S3PS; HZ=FZ*S3PS; else HX=FX*S3PS*X_SC; HY=FY*S3PS*X_SC; HZ=FZ*S3PS*X_SC; end end end L=L+1; if (M==1) , HXR=HX*CT1+HZ*ST1; HZR=-HX*ST1+HZ*CT1; else HXR=HX*CT2+HZ*ST2; HZR=-HX*ST2+HZ*CT2; end GX=GX+HXR*A(L); GY=GY+HY *A(L); GZ=GZ+HZR*A(L); end % 5 end % 4 CONTINUE end % 3 CONTINUE end % 2 CONTINUE end % 1 CONTINUE BX=GX; BY=GY; BZ=GZ; % end of function RC_SHIELD % C % c=========================================================================== % c function [BX,BY,BZ] = T01_DIPOLE (PS,X,Y,Z) % SUBROUTINE DIPOLE (PS,X,Y,Z,BX,BY,BZ) % C % C THIS IS A DOUBLE PRECISION ROUTINE, OTHERWISE IDENTICAL TO THE S/R DIP OF GEOPACK % C % C CALCULATES GSM COMPONENTS OF A GEODIPOLE FIELD WITH THE DIPOLE MOMENT % C CORRESPONDING TO THE EPOCH OF 2000. % C % C------INPUT PARAMETERS: % C PS - GEODIPOLE TILT ANGLE IN RADIANS, % C X,Y,Z - GSM COORDINATES IN RE (1 RE = 6371.2 km) % C % C----OUTPUT PARAMETERS: % C BX,BY,BZ - FIELD COMPONENTS IN GSM SYSTEM, IN NANOTESLA. % C % C LAST MODIFICATION: JAN. 5, 2001. THE VALUE OF THE DIPOLE MOMENT WAS UPDATED TO 2000. % C AND A "SAVE" STATEMENT HAS BEEN ADDED, TO AVOID POTENTIAL PROBLEMS WITH SOME % C FORTRAN COMPILERS % C % C WRITTEN BY: N. A. TSYGANENKO % C % IMPLICIT REAL*8 (A-H,O-Z) persistent M PSI SPS CPS if isempty(M), M = 0; end if isempty(PSI), PSI = 5.D0; end if~((M==1) & (abs(PS-PSI)<1.D-5)) , %! THIS IS TO AVOID MULTIPLE CALCULATIONS SPS=sin(PS); %! OF SIN(PS) AND COS(PS), IF THE ANGLE PS CPS=cos(PS); %! REMAINS UNCHANGED PSI=PS; M=1; end P=X^2; U=Z^2; V=3.D0*Z*X; T=Y^2; Q=30115.D0/sqrt(P+T+U)^5; BX=Q*((T+U-2.D0*P)*SPS-V*CPS); BY=-3.D0*Y*Q*(X*SPS+Z*CPS); BZ=Q*((P+T-2.D0*U)*CPS-V*SPS); % end of function DIPOLE % c@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@