Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
4700083
LambdaIntegrand() was hard-wired to compute things at a spherical rad…
mghenderson64 Aug 19, 2019
d2c7604
Merge branch 'master' of https://github.com/drsteve/LANLGeoMag
mghenderson64 Aug 19, 2019
f16f021
Added ErrorStatus variable to some rotuines
mghenderson64 Apr 25, 2023
b422d86
Added ErrorStatus variable to some routines
mghenderson64 Apr 25, 2023
bb8a850
Added some checks for n<=0
mghenderson64 Apr 25, 2023
e0534b8
Commented out some print statements
mghenderson64 Apr 25, 2023
e2f22cd
Minor formatting change
mghenderson64 Apr 25, 2023
ffd5f45
Added Lgm_Terminator()
mghenderson64 Apr 25, 2023
95c364c
Added Lgm_Terminator() function prototype
mghenderson64 Apr 25, 2023
907bef7
Removed register modifier
mghenderson64 Apr 25, 2023
84a8861
Added function prototypes
mghenderson64 Apr 25, 2023
c02019a
Added a number of new unc. variables
mghenderson64 Apr 25, 2023
ad5920b
Added gradient of Bvec (a tensor quant.)
mghenderson64 Apr 25, 2023
1246ebf
Improved housekeeping for multiple extrema
mghenderson64 Apr 25, 2023
a250897
Added ErrorStatus in some routines
mghenderson64 Apr 25, 2023
a99a435
Added Gaussian Process Regression rotuines
mghenderson64 Apr 25, 2023
e3a8f16
Added Gaussian Process Regression Function protos
mghenderson64 Apr 25, 2023
4ec6191
Added another version of GPR
mghenderson64 Apr 25, 2023
635742d
Adds routine FluxTubeVolume()
mghenderson64 Apr 25, 2023
931cec1
Added example code
mghenderson64 Apr 25, 2023
17b97ac
Added routines to compute 1st inv. to second order
mghenderson64 May 2, 2023
c027842
Added protos for Lgm_FirstInvariant.c routines
mghenderson64 May 2, 2023
8aeafb4
Mods/adds to ViewDriftShejll and Examples
mghenderson64 Oct 10, 2023
2e14546
Minor change in print statement
mghenderson64 Oct 10, 2023
a4481a5
Added code to compute B-field tilt angle in B.c
mghenderson64 Oct 10, 2023
fe1cf3a
Added example files to show how to compute Grad of a vector-B.
mghenderson64 Oct 24, 2023
19c3218
Changed permission (removed executable)
mghenderson64 Nov 15, 2023
575f40d
Added test for trying to evaluate deep inside Earth.
mghenderson64 Nov 15, 2023
f9b3769
Changed permission (removed executable)
mghenderson64 Nov 15, 2023
0002bb8
Added doxygen-ized comments and some additional routines.
mghenderson64 Nov 15, 2023
ee94050
Added additional prototypes
mghenderson64 Nov 15, 2023
0eba30f
Changed permission (removed executable)
mghenderson64 Nov 15, 2023
93c2dd7
Added GPR.h
mghenderson64 Nov 15, 2023
1397cf7
Added/Changed some default settings. Added PBQ coord trans routines.
mghenderson64 Nov 15, 2023
f7157c0
Fixed a bug in intersection calcs
mghenderson64 Nov 15, 2023
8941065
Changed some parameters (NOTE this routine is still experimental)
mghenderson64 Nov 15, 2023
607a674
Added derivatives of the distribution wrt params. Cleaned up comments.
mghenderson64 Nov 15, 2023
c88e989
Fixed bug in Lgm_Eclipse.c
mghenderson64 Nov 15, 2023
08f3527
Changed variable RE to Rref
mghenderson64 Nov 15, 2023
6042f39
Fixed formatting in doxygen latex.
mghenderson64 Nov 15, 2023
223fece
Added Lgm_ReplaceSubString2() rotuine
mghenderson64 Nov 15, 2023
df37302
Added numerous new functions needed in 1st inv. calcs
mghenderson64 Nov 15, 2023
a792b91
Adds time-dependence to Lgm_GradBvec2()
mghenderson64 Nov 15, 2023
f011445
Adds prototypes for routines in Lgm_GradB.c
mghenderson64 Nov 15, 2023
25ad75c
Adds prototype for Lgm_ReplaceSubString2()
mghenderson64 Nov 15, 2023
b1949a6
Adds addition files to the am file
mghenderson64 Nov 15, 2023
df7dc12
Adds initializations/freeing for added variables.
mghenderson64 Nov 15, 2023
5741af3
Added more error checking (function arguments change in a few routines)
mghenderson64 Nov 15, 2023
0e17b0a
Commented out some debug prints
mghenderson64 Nov 15, 2023
5a42cae
Added some variables
mghenderson64 Nov 15, 2023
455ba49
Changed some achinery for Shabansky stuff
mghenderson64 Nov 15, 2023
d9d9fdb
Added some error messages. Fixed some global B finding steps
mghenderson64 Nov 15, 2023
ea4dfff
doxygen formatting changes
mghenderson64 Nov 15, 2023
cef52f8
Added some routines for non-rel psd. Adds uncertainties in PSD.
mghenderson64 Nov 15, 2023
ad6a6ab
Added comments and error messages
mghenderson64 Nov 15, 2023
fb31523
Adds a header file
mghenderson64 Nov 15, 2023
1ae3a29
Changed formatting slightly when saving points
mghenderson64 Nov 15, 2023
932f2ec
Adds writes for additional variables
mghenderson64 Nov 15, 2023
a3ce620
Adds Lgm_B_FromScatteredData6()
mghenderson64 Nov 15, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 32 additions & 2 deletions Examples/Bfield/B.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,14 @@ int main(){
* Or there is a setter routine ...
*/
//Lgm_MagModelInfo_Set_MagModel( LGM_EDIP, LGM_EXTMODEL_T89, mInfo );
Lgm_MagModelInfo_Set_MagModel( LGM_EDIP, LGM_EXTMODEL_TS04, mInfo );



/*
* For TS07, the coeffs need to be initialized for each new time...
*/
Lgm_SetCoeffs_TS07( Date, UTC, &mInfo->TS07_Info );
//Lgm_SetCoeffs_TS07( Date, UTC, &mInfo->TS07_Info );



Expand Down Expand Up @@ -83,7 +84,7 @@ int main(){

for (i=0; i<=5; i++) {
mInfo->Kp = i;
u.x = -6.6; u.y = 0.0; u.z = 0.0;
u.x = -5.8; u.y = 0.0; u.z = 0.0;
//Lgm_Convert_Coords( &u, &ugsm, GEO_TO_GSM, mInfo->c );
Lgm_Convert_Coords( &u, &ugsm, SM_TO_GSM, mInfo->c );
mInfo->Bfield( &ugsm, &B, mInfo );
Expand Down Expand Up @@ -112,6 +113,35 @@ int main(){



double Tilt, Phi, Theta, MLT, R;
R = 6.6;
FILE *fp1 = fopen( "Tilt1.txt", "w" );
FILE *fp2 = fopen( "Tilt2.txt", "w" );
for (MLT = 18.0; MLT <= 30.0; MLT += 0.1 ) {

Phi = 180.0 + (MLT-18.0)*15.0;
Theta = 0.0;

u.x = R * cos( Phi*RadPerDeg ) * cos( Theta *RadPerDeg );
u.y = R * sin( Phi*RadPerDeg ) * cos( Theta *RadPerDeg );
u.z = R * sin( Theta *RadPerDeg );
printf("u = %g %g %g\n", u.x, u.y, u.z);

Lgm_Convert_Coords( &u, &ugsm, SM_TO_GSM, mInfo->c );

mInfo->Bfield( &ugsm, &B, mInfo );

Tilt = DegPerRad * atan2( B.z, sqrt(B.x*B.x + B.y*B.y) );
fprintf( fp1, "%g %g\n", MLT, Tilt );


Tilt = DegPerRad * asin( B.z/sqrt(B.x*B.x + B.y*B.y + B.z*B.z) );
fprintf( fp2, "%g %g\n", MLT, Tilt );

}
fclose(fp1);
fclose(fp2);




Expand Down
106 changes: 106 additions & 0 deletions Examples/Bfield/GradBvec.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
#include <Lgm_MagModelInfo.h>

/* BAL 04-Jan-2011 modified for more cases */

int main(){


long int Date;
double UTC;
double GradBvec[3][3];
Lgm_Vector u, B, CurlB, GradB;
Lgm_MagModelInfo *mInfo;
int i, j;


Date = 20050831;
UTC = 9.0;

mInfo = Lgm_InitMagInfo( );
Lgm_Set_Coord_Transforms( Date, UTC, mInfo->c );

//mInfo->Bfield = Lgm_B_T89;
//mInfo->Bfield = Lgm_B_TS04;
//mInfo->Bfield = Lgm_B_OP77;
//mInfo->Bfield = Lgm_B_T89;
mInfo->Bfield = Lgm_B_TS04;
mInfo->P = 4.1011111111111118;
mInfo->Dst = 7.7777777777777777;
mInfo->By = 3.7244444444444444;
mInfo->Bz = -0.12666666666666665;
mInfo->W[0] = 0.12244444444444445;
mInfo->W[1] = 0.2514;
mInfo->W[2] = 0.089266666666666661;
mInfo->W[3] = 0.047866666666666668;
mInfo->W[4] = 0.22586666666666666;
mInfo->W[5] = 1.0461333333333334;


printf("%5s", "Kp");
printf(" %10s", "Ux (Re)");
printf(" %10s", "Uy (Re)");
printf(" %10s", "Uz (Re)");
printf(" %10s", "Bx (nT)");
printf(" %10s", "By (nT)");
printf(" %10s", "Bz (nT)");
printf(" %10s", "Bmag (nT)");
printf(" %15s", "(\u2207B)_x");
printf(" %15s", "(\u2207B)_y");
printf(" %15s", "(\u2207B)_z\n");


for (i=0; i<=5; i++) {
mInfo->Kp = i;
u.x = -6.6; u.y = 0.0; u.z = 0.0;
mInfo->Bfield( &u, &B, mInfo );
Lgm_CurlB( &u, &CurlB, LGM_DERIV_SIX_POINT, 1e-3, mInfo );
Lgm_GradB( &u, &GradB, LGM_DERIV_SIX_POINT, 1e-3, mInfo );
Lgm_GradBvec( &u, GradBvec, LGM_DERIV_SIX_POINT, 1e-3, mInfo );

printf("\n\n");
printf( "\t Kp = %5d\n", mInfo->Kp);
printf( "\t u = %10g %10g %10g\n", u.x, u.y, u.z );
printf( "\t B = %10g %10g %10g\n", B.x, B.y, B.z );
printf( "\t |B| = %10g\n", Lgm_Magnitude( &B ) );
printf( "\t CurlB = %15g %15g %15g\n", CurlB.x, CurlB.y, CurlB.z );
printf( "\t GradB = %15g %15g %15g\n", GradB.x, GradB.y, GradB.z );
printf( "\t (%8g %8g %8g)\n", GradBvec[0][0], GradBvec[0][1], GradBvec[0][2] );
printf( "\t Grad Bvec = (%8g %8g %8g)\n", GradBvec[1][0], GradBvec[1][1], GradBvec[1][2] );
printf( "\t (%8g %8g %8g)\n", GradBvec[2][0], GradBvec[2][1], GradBvec[2][2] );
double Bmag = Lgm_Magnitude( &B );
printf("\n\t Show that GradB can be derived from GradBvec...\n");
printf("\t GradB_X: %g\n", (B.x*GradBvec[0][0] + B.y*GradBvec[1][0] + B.z*GradBvec[2][0])/Bmag );
printf("\t GradB_Y: %g\n", (B.x*GradBvec[0][1] + B.y*GradBvec[1][1] + B.z*GradBvec[2][1])/Bmag );
printf("\t GradB_Z: %g\n", (B.x*GradBvec[0][2] + B.y*GradBvec[1][2] + B.z*GradBvec[2][2])/Bmag );
printf("\n\t Show that CurlB can be derived from GradBvec...\n");
printf("\t CurlB_X: %g\n", GradBvec[2][1] - GradBvec[1][2] );
printf("\t CurlB_Y: %g\n", GradBvec[0][2] - GradBvec[2][0] );
printf("\t CurlB_Z: %g\n", GradBvec[1][0] - GradBvec[0][1] );
}

/*
for (j=0; j<100; j++){
mInfo->Kp = 3;
for (i=0; i<13; i++) {
u.x = -1. - (double)i * 0.5;
u.y = 0.0; u.z = 0.0;
mInfo->Bfield( &u, &B, mInfo );
Lgm_GradB( &u, &GradB, LGM_DERIV_SIX_POINT, 1e-3, mInfo );
printf( "%5d", mInfo->Kp);
printf( " %10g %10g %10g", u.x, u.y, u.z );
printf( " %10g %10g %10g", B.x, B.y, B.z );
printf( " %10g", Lgm_Magnitude( &B ) );
printf( " %15g %15g %15g \n", GradB.x, GradB.y, GradB.z );
}
}
*/





Lgm_FreeMagInfo( mInfo );


exit(0);
}
115 changes: 115 additions & 0 deletions Examples/Bfield/GradBvec2.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
#include <Lgm_MagModelInfo.h>
#include <Lgm_DynamicMemory.h>

/* BAL 04-Jan-2011 modified for more cases */

int main(){


long int Date;
double UTC;
double GradBvec[4][4];
Lgm_Vector u, B, CurlB, GradB;
Lgm_MagModelInfo **mInfo;
int i, j, n;

j = 167;
n = 8640;
LGM_ARRAY_1D( mInfo, n, Lgm_MagModelInfo * );

/*
* Initialize an array of mInfo[i] structures...
*/
Date = 20050831;
for ( i=0; i<8640; ++i ) {
UTC = (double)i*10.0/3600.0;
mInfo[i] = Lgm_InitMagInfo( );
mInfo[i]->Kp = i%5;
Lgm_Set_Coord_Transforms( Date, UTC, mInfo[i]->c );
//printf("%8ldT%02d%02d%02d %g\n", mInfo[i]->c->UTC.Date, mInfo[i]->c->UTC.Hour, mInfo[i]->c->UTC.Minute, (int)mInfo[i]->c->UTC.Second, mInfo[i]->c->psi*DegPerRad );
Lgm_MagModelInfo_Set_MagModel( LGM_IGRF, LGM_EXTMODEL_T89, mInfo[i] );
mInfo[i]->P = 4.1011111111111118;
mInfo[i]->Dst = 7.7777777777777777;
mInfo[i]->By = 3.7244444444444444;
mInfo[i]->Bz = -0.12666666666666665;
mInfo[i]->W[0] = 0.12244444444444445;
mInfo[i]->W[1] = 0.2514;
mInfo[i]->W[2] = 0.089266666666666661;
mInfo[i]->W[3] = 0.047866666666666668;
mInfo[i]->W[4] = 0.22586666666666666;
mInfo[i]->W[5] = 1.0461333333333334;
}


printf("%5s", "Kp");
printf(" %10s", "Ux (Re)");
printf(" %10s", "Uy (Re)");
printf(" %10s", "Uz (Re)");
printf(" %10s", "Bx (nT)");
printf(" %10s", "By (nT)");
printf(" %10s", "Bz (nT)");
printf(" %10s", "Bmag (nT)");
printf(" %15s", "(\u2207B)_x");
printf(" %15s", "(\u2207B)_y");
printf(" %15s", "(\u2207B)_z\n");


for (i=0; i<=5; i++) {
u.x = -6.6; u.y = 0.3; u.z = -2.0;
mInfo[j]->Bfield( &u, &B, mInfo[j] );
Lgm_CurlB( &u, &CurlB, LGM_DERIV_SIX_POINT, 1e-3, mInfo[j] );
Lgm_GradB( &u, &GradB, LGM_DERIV_SIX_POINT, 1e-3, mInfo[j] );
Lgm_GradBvec2( j, &u, GradBvec, LGM_DERIV_SIX_POINT, 1e-3, n, 10.0, &mInfo[0] );

printf("\n\n");
printf( "\t Kp = %5d\n", mInfo[i]->Kp);
printf( "\t u = %10g %10g %10g\n", u.x, u.y, u.z );
printf( "\t B = %10g %10g %10g\n", B.x, B.y, B.z );
printf( "\t |B| = %10g\n", Lgm_Magnitude( &B ) );
printf( "\t CurlB = %15g %15g %15g\n", CurlB.x, CurlB.y, CurlB.z );
printf( "\t GradB = %15g %15g %15g\n", GradB.x, GradB.y, GradB.z );
printf( "\t (%8g %8g %8g %8g)\n", GradBvec[0][0], GradBvec[0][1], GradBvec[0][2], GradBvec[0][3] );
printf( "\t Grad Bvec = (%8g %8g %8g %8g)\n", GradBvec[1][0], GradBvec[1][1], GradBvec[1][2], GradBvec[1][3] );
printf( "\t (%8g %8g %8g %8g)\n", GradBvec[2][0], GradBvec[2][1], GradBvec[2][2], GradBvec[2][3] );
printf( "\t (%8g %8g %8g %8g)\n", GradBvec[3][0], GradBvec[3][1], GradBvec[3][2], GradBvec[3][3] );
double Bmag = Lgm_Magnitude( &B );
printf("\n\t Show that GradB can be derived from GradBvec...\n");
printf("\t GradB_T: %g\n", (B.x*GradBvec[1][0] + B.y*GradBvec[2][0] + B.z*GradBvec[3][0])/Bmag );
printf("\t GradB_X: %g\n", (B.x*GradBvec[1][1] + B.y*GradBvec[2][1] + B.z*GradBvec[3][1])/Bmag );
printf("\t GradB_Y: %g\n", (B.x*GradBvec[1][2] + B.y*GradBvec[2][2] + B.z*GradBvec[3][2])/Bmag );
printf("\t GradB_Z: %g\n", (B.x*GradBvec[1][3] + B.y*GradBvec[2][3] + B.z*GradBvec[3][3])/Bmag );
printf("\n\t Show that CurlB can be derived from GradBvec...\n");
printf("\t CurlB_X: %g\n", GradBvec[3][2] - GradBvec[2][3] );
printf("\t CurlB_Y: %g\n", GradBvec[1][3] - GradBvec[3][1] );
printf("\t CurlB_Z: %g\n", GradBvec[2][1] - GradBvec[1][2] );
}

/*
for (j=0; j<100; j++){
mInfo[i]->Kp = 3;
for (i=0; i<13; i++) {
u.x = -1. - (double)i * 0.5;
u.y = 0.0; u.z = 0.0;
mInfo[i]->Bfield( &u, &B, mInfo[i] );
Lgm_GradB( &u, &GradB, LGM_DERIV_SIX_POINT, 1e-3, mInfo[i] );
printf( "%5d", mInfo[i]->Kp);
printf( " %10g %10g %10g", u.x, u.y, u.z );
printf( " %10g %10g %10g", B.x, B.y, B.z );
printf( " %10g", Lgm_Magnitude( &B ) );
printf( " %15g %15g %15g \n", GradB.x, GradB.y, GradB.z );
}
}
*/





for ( i=0; i<8640; ++i ) {
Lgm_FreeMagInfo( mInfo[i] );
}
LGM_ARRAY_1D_FREE( mInfo );


exit(0);
}
10 changes: 8 additions & 2 deletions Examples/Bfield/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ HDF5FLAGS = `pkg-config hdf5 --cflags --libs 2>/dev/null`
LGMFLAGS = `pkg-config lgm --cflags --libs`


all: B B2 GradB GradB2 B_Cross_GradB_Over_B CurlB CurlB2 DivB
all: B B2 GradBvec GradBvec2 GradB GradB2 B_Cross_GradB_Over_B CurlB CurlB2 DivB


B: B.c
Expand All @@ -11,6 +11,12 @@ B: B.c
B2: B2.c
gcc B2.c $(LGMFLAGS) $(HDF5FLAGS) -o B2 -Wall

GradBvec: GradBvec.c
gcc GradBvec.c $(LGMFLAGS) $(HDF5FLAGS) -o GradBvec -Wall

GradBvec2: GradBvec2.c
gcc GradBvec2.c $(LGMFLAGS) $(HDF5FLAGS) -o GradBvec2 -Wall

GradB: GradB.c
gcc GradB.c $(LGMFLAGS) $(HDF5FLAGS) -o GradB -Wall

Expand All @@ -31,4 +37,4 @@ DivB: DivB.c


clean:
rm *~ *.o B B2 GradB GradB2 B_Cross_GradB_Over_B CurlB CurlB2 DivB
rm *~ *.o B B2 GradBvec GradBvec2 GradB GradB2 B_Cross_GradB_Over_B CurlB CurlB2 DivB
39 changes: 39 additions & 0 deletions Examples/Geodetic/Geodetic2.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
// Geodetic.c
#include <Lgm_CTrans.h>
int main(){

double GeodLat, GeodLong, GeodHeight, r;
double GeoLat, GeoLong, GeoHeight;
Lgm_Vector v;

GeodLat = 35.0 + 53.0/60.0 + 17.0/3600.0; // degrees
GeodLong = -106.0 - 18.0/60.0 - 23.0/3600.0; // degrees
GeodHeight = 20.0; // km
GeoLat = 56.02; // degrees
GeoLong = -141.42; // degrees
GeoHeight = 850.0; // km
v.x = (1.0+GeoHeight/WGS84_A)*cos( GeoLong * RadPerDeg )*cos( GeoLat*RadPerDeg );
v.y = (1.0+GeoHeight/WGS84_A)*sin( GeoLong * RadPerDeg )*cos( GeoLat*RadPerDeg );
v.z = (1.0+GeoHeight/WGS84_A)*sin( GeoLat*RadPerDeg );
Lgm_WGS84_to_GEOD( &v, &GeodLat, &GeodLong, &GeodHeight );

// Lgm_GEOD_to_WGS84( GeodLat, GeodLong, GeodHeight, &v );

printf( " Geodetic Position\n");
printf( " ===================================\n");
printf( " GeodLat : %lf degrees\n", GeodLat );
printf( " GeodLong : %lf degrees\n", GeodLong );
printf( " GeodHeight : %lf km\n\n", GeodHeight );

printf( " Geocentric Position\n");
printf( " ===================================\n");
printf( " X : %-15lf meters\n", v.x*WGS84_A*1000.0); // meters
printf( " Y : %-15lf meters\n", v.y*WGS84_A*1000.0); // meters
printf( " Z : %-15lf meters\n", v.z*WGS84_A*1000.0); // meters
r = sqrt(v.x*v.x + v.y*v.y + v.z*v.z);
printf( " Radius : %lf Re (%lf km)\n", r, r*WGS84_A );
printf( " Latitude : %lf degrees\n", DegPerRad*asin( v.z/r ) );
printf( " Longitude : %lf degrees\n\n", DegPerRad*atan2( v.y, v.x ) );

exit(0);
}
Loading