Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Project Submission Guide

ASTR 596: Modeling the Universe

San Diego State University

Course Philosophy on Collaboration

This course thrives on collaboration! You are strongly encouraged to:

Important: While collaboration is encouraged, all submitted code, memos, and documentation must be your own work. Think of it like studying together for an exam—you can discuss and learn together, but when it’s time to write, you do so independently.

This is not a competition! We’re all here to learn, grow, and support each other in mastering computational astrophysics.

Project Schedule & Deadlines

Projects are assigned on Mondays (posted to GitHub Classroom) with varying completion periods based on complexity. This schedule allows you to review requirements before Friday’s class, where we’ll work on implementation together.

ProjectAssignedDue DateDurationTopicKey Concepts
Project 1Aug 29 (Fri)Sept 10 (Wed)~1.5 weeksPython/OOP/Stellar Physics BasicsOOP & Classes, HR diagrams
Project 2Sept 10 (Wed)Sept 24 (Wed)2 weeksODE Integration & N-Body DynamicsEuler, RK4, Leapfrog, Planetary + Star Cluster Dynamics, IMF Sampling
Project 3Sept 24 (Wed)Oct 15 (Wed)3 weeksMonte Carlo Radiative Transfer (MCRT)Photon packets, scattering, absorption
Project 4Oct 15 (Wed)Nov 5 (Wed)3 weeksBayesian Inference/MCMCPriors, Likelihood, Metropolis-Hastings, Gradient descent
Project 5Nov 5 (Wed)Nov 26 (Mon)3 weeksGaussian ProcessesKernels, Hyperparameters, Regression
Final ProjectNov 17 (Mon)Dec 18 (Thu)~4.5 weeksNeural Networks (From Scratch + JAX)Backprop, autodiff, JAX Ecosystem

General Project Timeline

2-week projects: Foundation (days 1-5) → Implementation & Testing (days 6-10) → Polish & Submit (days 11-14)

3-week projects: Theory & Planning (week 1) → Core Implementation (week 2) → Extensions & Polish (week 3)

Pro tip: Start early, commit often, and use Friday lab sessions for debugging with peers!

Project Extensions: Your Creative Playground

Extension Requirements

Graduate Students: Must complete at least one substantial extension beyond base requirements.

Undergraduate Students: Extensions are optional but highly recommended—they’re where the real fun and deeper learning happen!

The Spirit of Extensions

Extensions are YOUR opportunity to explore what interests you most. The goal is to promote curiosity and experimentation. This is about what YOU want to explore, not what you think I want to see!

Extension Ideas

Scientific Investigation:

Computational Exploration:

Creative Visualization:

Physics Extensions:

Not sure about your extension idea? Talk to me or classmates! The best extensions come from genuine curiosity.

Submission Requirements

GitHub Classroom

Accept the assignment link → Clone your repo → Work locally → Push regularly → Submit by deadline

For detailed GitHub Classroom instructions, see the Getting Started Guide.

Required Project Structure

project_N/
├── src/                  # Your source code (modular design)
├── tests/                # Basic tests for key functions
├── outputs/
│   ├── figures/          # All generated plots
│   └── data/             # Output data files
├── notes/                # Optional: ongoing project notes
├── README.md             # Installation, usage, results summary
├── requirements.txt      # Dependencies with versions
├── research_memo.md      # Analysis (2-3 pages)
├── growth_memo.md        # Reflection (1-2 pages)
└── .gitignore            # Use provided template

1. Code Requirements

Standards:

Required Docstring Format (NumPy style recommended):

def integrate_orbit(initial_conditions, time_span, method='RK4', dt=0.01):
    """
    Integrate orbital dynamics using specified numerical method.
    
    Parameters
    ----------
    initial_conditions : np.ndarray
        Shape (6,) array of [x, y, z, vx, vy, vz]
    time_span : tuple
        (t_start, t_end) for integration
    method : str, optional
        Integration method: 'Euler', 'RK4', or 'Leapfrog'
    dt : float, optional
        Time step size
    
    Returns
    -------
    trajectory : np.ndarray
        Shape (n_steps, 6) array of positions and velocities
    times : np.ndarray
        Shape (n_steps,) array of time points
    
    Raises
    ------
    ValueError
        If method is not recognized or dt <= 0
    
    Examples
    --------
    >>> ic = np.array([1, 0, 0, 0, 1, 0])
    >>> traj, t = integrate_orbit(ic, (0, 10))
    """
    # Implementation here

2. Research Memo (Markdown or PDF, 2-3 pages of text)

Markdown Docs:

Required sections (2-3 pages of text, not counting figures/references):

Submit as research_memo.md or research_memo.pdf in your project repository.

3. Growth Memo (Markdown, 1-2 pages)

Informal reflection about your learning journey. See the Growth Memo Guide for detailed instructions and use the provided growth_memo_template.md.

Key elements to address:

Pro tip: Keep notes throughout (notes/notes.md) for authentic reflection!

4. README Requirements

Must include:

5. Git Practices

Grading Components

ComponentFocus
Core ImplementationCorrectness, completeness
ExtensionsRequired for grads, valued for undergrads
Code QualityStructure, documentation, Git practices
Research MemoAnalysis quality, scientific writing
Growth MemoReflection depth, learning insights

Note: Weight varies by project to align with learning objectives.

Submission Checklist

Before submitting:

Late Policy

Getting Help

When to seek help:

How to ask effectively:

  1. What you’re trying to do

  2. What you’ve tried (code/errors)

  3. Expected vs. actual behavior

  4. Minimal reproducible example

Resources:

Remember: Struggling is learning, but struggling alone too long is inefficient. This is a collaborative environment—use it!