Skip to content

Commit

Permalink
v1.0
Browse files Browse the repository at this point in the history
  • Loading branch information
kim3002 committed Jul 13, 2023
0 parents commit bff1f6e
Show file tree
Hide file tree
Showing 831 changed files with 3,680,770 additions and 0 deletions.
57 changes: 57 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# Backup #
##########
*~
*.asv

# Output #
##########
*.nc
*.png

# Large files #
###############
*.uint8
*.float32
*.int16

# Compiled source #
###################
*.com
*.class
*.dll
*.exe
*.o
*.so

# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip

# Logs and databases #
######################
*.log
*.sql
*.sqlite

# OS generated files #
######################
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
.classpath
.project
.prj
/.vscode/
253 changes: 253 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,253 @@
########################## Macro Definitions ############################

# Let's try to auto-detect what platform we're on.
# If this fails, set PLATFORM manually in the else block.
AUTOPLATFORM = Failed
ifeq ($(MSYSTEM),MINGW32)
AUTOPLATFORM = Succeeded
PLATFORM = __MSYS__
endif
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Linux)
AUTOPLATFORM = Succeeded
PLATFORM = __linux__
endif
ifeq ($(UNAME_S),Darwin)
AUTOPLATFORM = Succeeded
PLATFORM = __APPLE__
endif
ifeq ($(AUTOPLATFORM),Failed)
# Autodetect failed. Set platform manually.
#PLATFORM = __APPLE__
#PLATFORM = __linux__
PLATFORM = __MSYS__
endif

#TIMEFLAG =
TIMEFLAG = -D _USE_SYSTEM_TIME_

OPENMPFLAG = -fopenmp
#OPENMPFLAG =

NAME = SOCRATES

# Basic directories
PROJDIR = ./
CODE = $(PROJDIR)code/
OUT = $(PROJDIR)
INOUT42 = $(PROJDIR)orbit/42input/
OBJ = $(CODE)object/
INC = $(CODE)include/
SRC = $(CODE)source/
ORB42DIR = ./orbit/42/
OBJ42 = $(ORB42DIR)Object/
INC42 = $(ORB42DIR)Include/
SRC42 = $(ORB42DIR)Source/
KIT42DIR = $(ORB42DIR)Kit/
KIT42INC = $(KIT42DIR)Include/
KIT42SRC = $(KIT42DIR)Source/

ifeq ($(PLATFORM),__APPLE__)
# Mac Macros
CINC = -I /usr/include
LIBS = -framework System -lnetcdf
LFLAGS = -bind_at_load $(OPENMPFLAG)
# ARCHFLAG = -arch i386
# ARCHFLAG = -arch x86_64
ARCHFLAG = -arch arm64
EXENAME = $(NAME)
CC = mpicc
endif

ifeq ($(PLATFORM),__linux__)
# Linux Macros
CINC =
LIBS = -ldl -lm -lnetcdf
LFLAGS = $(OPENMPFLAG)
ARCHFLAG =
EXENAME = $(NAME)
CC = mpicc
endif

ifeq ($(PLATFORM),__MSYS__)
CINC =
LIBS = -lws2_32 -lnetcdf
LFLAGS = $(OPENMPFLAG)
ARCHFLAG =
EXENAME = $(NAME).exe
CC = mpicc
endif

SOOPOBJ = $(OBJ)socrates.o $(OBJ)init.o $(OBJ)obs.o $(OBJ)geometry.o $(OBJ)ground.o $(OBJ)product.o $(OBJ)antenna.o $(OBJ)attitude.o $(OBJ)earthdata.o $(OBJ)interface.o $(OBJ)util.o

BUSOBJ = $(OBJ)comm.o

RETOBJ = $(OBJ)retrieval.o

DEVOBJ = $(OBJ)design.o

42OBJ = $(OBJ42)42main.o $(OBJ42)42exec.o $(OBJ42)42actuators.o $(OBJ42)42cmd.o \
$(OBJ42)42dynamics.o $(OBJ42)42environs.o $(OBJ42)42ephem.o $(OBJ42)42fsw.o \
$(OBJ42)42init.o $(OBJ42)42jitter.o $(OBJ42)42joints.o \
$(OBJ42)42perturb.o $(OBJ42)42report.o $(OBJ42)42sensors.o $(OBJ42)AcApp.o

KIT42OBJ = $(OBJ42)dcmkit.o $(OBJ42)envkit.o $(OBJ42)fswkit.o $(OBJ42)geomkit.o \
$(OBJ42)iokit.o $(OBJ42)mathkit.o $(OBJ42)nrlmsise00kit.o $(OBJ42)msis86kit.o \
$(OBJ42)orbkit.o $(OBJ42)radbeltkit.o $(OBJ42)sigkit.o $(OBJ42)sphkit.o $(OBJ42)timekit.o

CFLAGS = -Wall -Wshadow -Wno-deprecated -g $(GLINC) $(CINC) -I $(INC) -I $(SRC) -I $(INC42) -I $(KIT42INC) -I $(KIT42SRC) -O0 $(ARCHFLAG) $(TIMEFLAG) $(OPENMPFLAG)
#-fno-stack-protector

########################## Rules to link SoOp #############################

SOCRATES : $(SOOPOBJ) $(BUSOBJ) $(DEVOBJ) $(RETOBJ) $(42OBJ) $(KIT42OBJ)
$(CC) $(LFLAGS) -o $(EXENAME) $(SOOPOBJ) $(DEVOBJ) $(RETOBJ) $(BUSOBJ) $(42OBJ) $(KIT42OBJ) $(LIBS)

#################### Rules to compile objects ###########################

$(OBJ)socrates.o : $(SRC)socrates.c $(INC)socrates.h $(INC42)42.h
$(CC) $(CFLAGS) -c $(SRC)socrates.c -o $(OBJ)socrates.o

$(OBJ)init.o : $(SRC)init.c $(INC)socrates.h $(INC42)42.h
$(CC) $(CFLAGS) -c $(SRC)init.c -o $(OBJ)init.o

$(OBJ)obs.o : $(SRC)obs.c $(INC)socrates.h $(INC42)42.h
$(CC) $(CFLAGS) -c $(SRC)obs.c -o $(OBJ)obs.o

$(OBJ)geometry.o : $(SRC)geometry.c $(INC)socrates.h $(INC42)42.h
$(CC) $(CFLAGS) -c $(SRC)geometry.c -o $(OBJ)geometry.o

$(OBJ)ground.o : $(SRC)ground.c $(INC)socrates.h $(INC42)42.h
$(CC) $(CFLAGS) -c $(SRC)ground.c -o $(OBJ)ground.o

$(OBJ)product.o : $(SRC)product.c $(INC)socrates.h $(INC42)42.h
$(CC) $(CFLAGS) -c $(SRC)product.c -o $(OBJ)product.o

$(OBJ)antenna.o : $(SRC)antenna.c $(INC)socrates.h $(INC42)42.h
$(CC) $(CFLAGS) -c $(SRC)antenna.c -o $(OBJ)antenna.o

$(OBJ)attitude.o : $(SRC)attitude.c $(INC)socrates.h $(INC42)42.h
$(CC) $(CFLAGS) -c $(SRC)attitude.c -o $(OBJ)attitude.o

$(OBJ)interface.o : $(SRC)interface.c $(INC)socrates.h $(INC42)42.h
$(CC) $(CFLAGS) -c $(SRC)interface.c -o $(OBJ)interface.o

$(OBJ)earthdata.o : $(SRC)earthdata.c $(INC)socrates.h $(INC42)42.h
$(CC) $(CFLAGS) -c $(SRC)earthdata.c -o $(OBJ)earthdata.o

$(OBJ)util.o : $(SRC)util.c $(INC)util.h $(INC)socrates.h $(INC42)42.h
$(CC) $(CFLAGS) -c $(SRC)util.c -o $(OBJ)util.o

$(OBJ)retrieval.o : $(SRC)retrieval.c $(INC)socrates.h $(INC42)42.h
$(CC) $(CFLAGS) -c $(SRC)retrieval.c -o $(OBJ)retrieval.o

$(OBJ)comm.o : $(SRC)comm.c $(INC)socrates.h $(INC42)42.h
$(CC) $(CFLAGS) -c $(SRC)comm.c -o $(OBJ)comm.o

$(OBJ)design.o : $(SRC)design.c $(INC)socrates.h $(INC42)42.h
$(CC) $(CFLAGS) -c $(SRC)design.c -o $(OBJ)design.o

$(OBJ42)42main.o : $(SRC42)42main.c
$(CC) $(CFLAGS) -c $(SRC42)42main.c -o $(OBJ42)42main.o

$(OBJ42)42exec.o : $(SRC42)42exec.c $(INC42)42.h $(INC)socrates.h
$(CC) $(CFLAGS) -c $(SRC42)42exec.c -o $(OBJ42)42exec.o

$(OBJ42)42actuators.o : $(SRC42)42actuators.c $(INC42)42.h $(INC42)Ac.h $(INC42)AcTypes.h
$(CC) $(CFLAGS) -c $(SRC42)42actuators.c -o $(OBJ42)42actuators.o

$(OBJ42)42cmd.o : $(SRC42)42cmd.c $(INC42)42.h $(INC42)Ac.h $(INC42)AcTypes.h
$(CC) $(CFLAGS) -c $(SRC42)42cmd.c -o $(OBJ42)42cmd.o

$(OBJ42)42dynamics.o : $(SRC42)42dynamics.c $(INC42)42.h
$(CC) $(CFLAGS) -c $(SRC42)42dynamics.c -o $(OBJ42)42dynamics.o

$(OBJ42)42environs.o : $(SRC42)42environs.c $(INC42)42.h
$(CC) $(CFLAGS) -c $(SRC42)42environs.c -o $(OBJ42)42environs.o

$(OBJ42)42ephem.o : $(SRC42)42ephem.c $(INC42)42.h
$(CC) $(CFLAGS) -c $(SRC42)42ephem.c -o $(OBJ42)42ephem.o

$(OBJ42)42fsw.o : $(SRC42)42fsw.c $(INC42)Ac.h $(INC42)AcTypes.h
$(CC) $(CFLAGS) -c $(SRC42)42fsw.c -o $(OBJ42)42fsw.o

$(OBJ42)42GlutGui.o : $(SRC42)42GlutGui.c $(INC42)42.h $(INC42)42GlutGui.h
$(CC) $(CFLAGS) -c $(SRC42)42GlutGui.c -o $(OBJ42)42GlutGui.o

$(OBJ42)42init.o : $(SRC42)42init.c $(INC42)42.h
$(CC) $(CFLAGS) -c $(SRC42)42init.c -o $(OBJ42)42init.o

$(OBJ42)42jitter.o : $(SRC42)42jitter.c $(INC42)42.h
$(CC) $(CFLAGS) -c $(SRC42)42jitter.c -o $(OBJ42)42jitter.o

$(OBJ42)42joints.o : $(SRC42)42joints.c $(INC42)42.h
$(CC) $(CFLAGS) -c $(SRC42)42joints.c -o $(OBJ42)42joints.o

$(OBJ42)42perturb.o : $(SRC42)42perturb.c $(INC42)42.h
$(CC) $(CFLAGS) -c $(SRC42)42perturb.c -o $(OBJ42)42perturb.o

$(OBJ42)42report.o : $(SRC42)42report.c $(INC42)42.h
$(CC) $(CFLAGS) -c $(SRC42)42report.c -o $(OBJ42)42report.o

$(OBJ42)42sensors.o : $(SRC42)42sensors.c $(INC42)42.h $(INC42)Ac.h $(INC42)AcTypes.h
$(CC) $(CFLAGS) -c $(SRC42)42sensors.c -o $(OBJ42)42sensors.o

$(OBJ42)AcApp.o : $(SRC42)AcApp.c $(INC42)Ac.h $(INC42)AcTypes.h
$(CC) $(CFLAGS) -c $(SRC42)AcApp.c -o $(OBJ42)AcApp.o

$(OBJ42)dcmkit.o : $(KIT42SRC)dcmkit.c
$(CC) $(CFLAGS) -c $(KIT42SRC)dcmkit.c -o $(OBJ42)dcmkit.o

$(OBJ42)envkit.o : $(KIT42SRC)envkit.c
$(CC) $(CFLAGS) -c $(KIT42SRC)envkit.c -o $(OBJ42)envkit.o

$(OBJ42)fswkit.o : $(KIT42SRC)fswkit.c
$(CC) $(CFLAGS) -c $(KIT42SRC)fswkit.c -o $(OBJ42)fswkit.o

$(OBJ42)glkit.o : $(KIT42SRC)glkit.c $(KIT42INC)glkit.h
$(CC) $(CFLAGS) -c $(KIT42SRC)glkit.c -o $(OBJ42)glkit.o

$(OBJ42)geomkit.o : $(KIT42SRC)geomkit.c $(KIT42INC)geomkit.h
$(CC) $(CFLAGS) -c $(KIT42SRC)geomkit.c -o $(OBJ42)geomkit.o

$(OBJ42)gmseckit.o : $(KIT42SRC)gmseckit.c $(KIT42INC)gmseckit.h
$(CC) $(CFLAGS) -c $(KIT42SRC)gmseckit.c -o $(OBJ42)gmseckit.o

$(OBJ42)iokit.o : $(KIT42SRC)iokit.c
$(CC) $(CFLAGS) -c $(KIT42SRC)iokit.c -o $(OBJ42)iokit.o

$(OBJ42)mathkit.o : $(KIT42SRC)mathkit.c
$(CC) $(CFLAGS) -c $(KIT42SRC)mathkit.c -o $(OBJ42)mathkit.o

$(OBJ42)nrlmsise00kit.o : $(KIT42SRC)nrlmsise00kit.c
$(CC) $(CFLAGS) -c $(KIT42SRC)nrlmsise00kit.c -o $(OBJ42)nrlmsise00kit.o

$(OBJ42)msis86kit.o : $(KIT42SRC)msis86kit.c $(KIT42INC)msis86kit.h
$(CC) $(CFLAGS) -c $(KIT42SRC)msis86kit.c -o $(OBJ42)msis86kit.o

$(OBJ42)orbkit.o : $(KIT42SRC)orbkit.c
$(CC) $(CFLAGS) -c $(KIT42SRC)orbkit.c -o $(OBJ42)orbkit.o

$(OBJ42)radbeltkit.o : $(KIT42SRC)radbeltkit.c
$(CC) $(CFLAGS) -c $(KIT42SRC)radbeltkit.c -o $(OBJ42)radbeltkit.o

$(OBJ42)sigkit.o : $(KIT42SRC)sigkit.c
$(CC) $(CFLAGS) -c $(KIT42SRC)sigkit.c -o $(OBJ42)sigkit.o

$(OBJ42)sphkit.o : $(KIT42SRC)sphkit.c
$(CC) $(CFLAGS) -c $(KIT42SRC)sphkit.c -o $(OBJ42)sphkit.o

$(OBJ42)timekit.o : $(KIT42SRC)timekit.c
$(CC) $(CFLAGS) -c $(KIT42SRC)timekit.c -o $(OBJ42)timekit.o

######################## Miscellaneous Rules ############################
clean :
ifeq ($(PLATFORM),_WIN32)
del .\obj\*.o .\$(EXENAME)
else ifeq ($(PLATFORM),_WIN64)
del .\obj\*.o .\$(EXENAME)
else
rm -f $(OBJ)*.o
endif


42 changes: 42 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# SOCRATES

SOCRATES (Signals of Opportunity Constellation and Remote sensing Analysis Tool for Earth Science) is an end-to-end mission simulator for multiple Signals of Opportunity (multi-SoOp) for land remote sensing. This tool offers a comprehensive analysis environment to explore from a high-level mission design to scientific measurements. The current release of SOCRATES boasts the following capabilities:

- Satellite- and tower-based observation of soil moisture using multi-SoOp.
- Tradespace exploration of multi-SoOp constellation design.
- Orbit propagation and import of multiple receivers and transmitters.
- Specular reflection point prediction on the Earth surface.
- Instrument property realizations including channel frequency, bandwidth, coherent integration time, and noise temperature.
- Antenna property realizations including antenna orientation and gain pattern.
- Geophysical data realizations including soil moisture, soil temperature, soil texture, vegetation, land cover, freeze/thaw state, and snow cover.
- Link budget for direct and reflected signals.
- Modeling of multi-body spacecraft attitude dynamics with rigid bodies.

Use SOCRATES-Retrieval for end-to-end retrieval analysis using multi-SoOp. SOCRATES-Retrieval can be accessed from the following Code Ocean capsule: <https://doi.org/10.24433/CO.5405959.v1>

## Compilation

The GNU Compiler Collection with C11 standard on a Unix or Linux platform is recommended to compile the code. Additional software packages OpenMPI and netCDF are required for the compilation. The latest versions of the packages are recommended. OpenMPI is used for multi-processing the mission design processes. NetCDF is for creating, reading, and writing the NetCDF files.

SOCRATES can be accessed from the following GitHub repository: <https://github.itap.purdue.edu/RadioNavigationLab/SOCRATES>. To install from GitHub:

1. Download the source code from the latest release or clone the code from GitHub: `$ git clone git@github.itap.purdue.edu:RadioNavigationLab/SOCRATES.git`
2. Open a terminal on the top-level directory (i.e., .../SOCRATES) and run `$ make` to compile the simulator. Note that `$ make clean` deletes the existing object files and the executable file.
3. An executable file SOCRATES should be created in the top-level directory.

## Downloading Large Binaries
In the current version, the following large files must exist in each corresponding directory:

- A 1-km resolution land mask: ./earthdata/static/Land_Mask_1km_EASE2.uint8

These files are distributed through releases. To download:

1. Visit <https://github.itap.purdue.edu/RadioNavigationLab/SOCRATES/releases> and click the latest release.
2. Download the necessary large files attached to the release.
3. Place each file in each corresponding directory.

## Getting Started
See the manual, "SOCRATES\_User\_Manual.pdf" in the ./doc folder.

## Citation
S. Kim and J. L. Garrison, "A Mission Design Tool for Satellite Constellations Using Multi-Frequency Signals of Opportunity," IGARSS 2023 - 2023 IEEE International Geoscience and Remote Sensing Symposium, 2023.
Binary file added SOCRATES
Binary file not shown.
Binary file added SOCRATES.mlapp
Binary file not shown.
Loading

0 comments on commit bff1f6e

Please sign in to comment.