diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 084139d6..cdaa9a9a 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -12,6 +12,7 @@ A clear and concise description of what the bug is. **To Reproduce** Steps to reproduce the behavior: + 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' @@ -24,9 +25,10 @@ A clear and concise description of what you expected to happen. If applicable, add screenshots to help explain your problem. **System information (please complete the following information):** - - OS: [e.g. iOS] - - Compilers used, with version numbers - - Otheer details about your setup that could be relevant + +- OS: (e.g. MacOS, Linux distribution, etc.) +- Compilers used, with version numbers +- Otheer details about your setup that could be relevant **Additional context** Add any other context about the problem here. diff --git a/.gitignore b/.gitignore index 12bc3ad8..7cb5316c 100644 --- a/.gitignore +++ b/.gitignore @@ -9,7 +9,7 @@ # Run and build directories run/ -run.test/ +run*/ build/ # Doxygen generated files @@ -17,6 +17,7 @@ doc/generated # Python extras __pycache__ +.ipynb_checkpoints # autogenerated files tags @@ -38,3 +39,7 @@ _deps #vs code settings .vscode .DS_Store + +# fism files +srcPython/FISM*.nc +srcPython/fism*.txt \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index a479a1fe..1f68744e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,6 +18,7 @@ endif() # Directory variables file(GLOB SRC_FILES ${PROJECT_SOURCE_DIR}/src/*.cpp) +file(GLOB TEST_FILES ${PROJECT_SOURCE_DIR}/srcTest/*.cpp) set(MAIN_DIR ${PROJECT_SOURCE_DIR}/src/main) set(TESTS_DIR ${PROJECT_SOURCE_DIR}/tests) set(OUT_DIR ${PROJECT_SOURCE_DIR}/src/output) @@ -34,7 +35,7 @@ elseif(TEST_EXCHANGE) elseif(TEST_GRADIENT) add_executable(aether ${SRC_FILES} ${MSIS_FILES} ${MAIN_DIR}/main_test_gradient.cpp) else() - add_executable(aether ${SRC_FILES} ${MSIS_FILES} ${IE_FILES} ${MAIN_DIR}/main.cpp) + add_executable(aether ${SRC_FILES} ${TEST_FILES} ${MSIS_FILES} ${IE_FILES} ${MAIN_DIR}/main.cpp) endif() if(USE_DOUBLE_PRECISION) @@ -100,6 +101,14 @@ if (USE_NETCDF) target_link_libraries(aether PUBLIC ${NETCDF_LIBRARIES_C}) endif() +# use_old_timing +# cmake -DUSE_OLD_TIMING=ON .. +option(USE_OLD_TIMING "Use old timing for performance - default is off" OFF) +if (USE_OLD_TIMING) + add_definitions(-DOLD_TIMING) + set(OLD_TIMING "YES") +endif() + # Set up links for executable file(CREATE_LINK ${CMAKE_BINARY_DIR}/aether ${PROJECT_SOURCE_DIR}/share/run/aether SYMBOLIC) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 141db86d..6f8bcef8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,12 +1,21 @@ -Contributing -============ - -Code ----- +# Contributing Please read the [standards document](doc/design/standards) before contributing. +- [Contributing](#contributing) + - [Code](#code) + - [Development](#development) + - [Using AStyle](#using-astyle) + - [Linting](#linting) + - [Commit Styling](#commit-styling) + - [Pull Requests](#pull-requests) + - [Issues](#issues) + +--- + +## Code + ### Development Make new branches for features `git checkout -b my_feature` and commit often @@ -16,8 +25,8 @@ you have something that works. #### Using AStyle We have started using astyle to format the code. Please see -http://astyle.sourceforge.net/. There is a style file in the root directory -of Aether, called .astylerc. To run this, do: +. There is a style file in the root directory of +Aether, called .astylerc. To run this, do: AStyle --project=.astylerc src/*.cpp @@ -25,32 +34,22 @@ on WSL with Ubuntu, the command seems to be: astyle --options=.astylerc src/*.cpp +Astyle can also be used within VSCode as an extension. Install the "Astyle" extension (author: Chieh Yu). Then go to settings (the "Manage" wheel on the bottom left, then click on "settings"). Under "Extensions", click on "Astyle Configuration". Within that, you can set the location of the astylerc file. Click on "Edit in settings.json". Modify the file so it has the following line: + "[cpp]": { + "editor.defaultFormatter": "chiehyu.vscode-astyle", + "editor.formatOnSave": true + }, + "astyle.astylerc": "${workspaceRoot}/.astylerc" -#### Linting - -For *C++* code make sure to use a static code checker like -[cpplint](https://github.com/cpplint/cpplint) to check the code for -any style issues before submitting. For *Python*, -[flake8](https://flake8.pycqa.org/en/latest/) is a good option. Both -of these may by installed using pip. +This should then allow you to format the code using the defaults that we have set in the astyle file. This can be done with (Ctrl-Shift-I for Linux, Alt-Shift-F for Windows) and upon saving the file - this reformats the whole file to put it into the astyle format. -To install `cpplint` +#### Linting -```sh -# depending on your system one of these lines applies -pip install --user cpplint -pip install cpplint -python3 -m pip cpplint -python3 -m pip --user cpplint -``` +For *Python*, +[flake8](https://flake8.pycqa.org/en/latest/) is a good option. This may by installed using pip. -Using a linter in an editor is a good supplement, but not a replacement for the static linters. -The linter in the 'atom' editor requires that you install the `linter` and `gcc-linter` packages. -Atom also has additional packages `whitespaces` and `tabs-to-spaces` -to automatically remove whitespaces at the end of the lines, and -convert tabs to spaces. -### Commit Styling +## Commit Styling The first line of the commit must be *at most* ~50 characters long and should start with either. @@ -74,25 +73,24 @@ For example, *do:* -``` +```github FEAT: Hydrostatic density implementation. ``` *don't:* -``` +```github Implemented hydrostatic density. (feature) ``` -### Pull Requests +## Pull Requests Make sure you have linted and checked your code before asking for a pull request. Before requesting a review, ensure the pull request check list has been completed. Another member must check the code and approve it before merge. -Issues ------- +## Issues *Issues* are reporting bugs, feature requests, or goals for the project. In order to submit an issue make sure it follows the [issue diff --git a/README.md b/README.md index 4af46445..ab60df80 100644 --- a/README.md +++ b/README.md @@ -1,192 +1,170 @@ # Aether -This is the home of the Aether model of the thermosphere and ionosphere. - -The Aether model has been developed using gnu c++ (versions 9, 10, 11). If -you are using this, hopefully it will just work out of the box. We have -been doing development of Aether on Mac OSX, and in Ubuntu Linux. We have -also used the Windows Subsystem for Linux, Ubuntu distribution, which -works similarly to the native Linux distribution. - -If you are a student and don't know how to work with a large code base -(i.e., multiple source codes in multiple directories), you may consider -starting with the doc/student.md file. - -## Dependencies: - -On Mac, installing some of the dependencies can be awkward, depending -on which c++ compiler you are using. Since there is one that -essentially comes with Mac OSX, called clang, the default compiler is -often this. Much of the other software is not built with this, so you -need to switch compilers, which can be challenging. - -While the development team has tried to remove as many of the -dependencies as possible to reduce this issues, it is still a good -idea to try to get a different compiler to work. If you want to -use netCDF files or the fortran compiled options (like MSIS), you -will probably have to do this. - -0. Install gcc. This comes install by default on Ubuntu. For MacOS, -this can be installed using [macports](https://www.macports.org/): -```bash -sudo port install gcc11 -``` -(At this moment, gcc11 is the latest version, there may be a more up-to-date version available now.) - - -1. Aether uses [CMake](https://cmake.org/) instead of make. If you don't have it installed, you need it. - -For MacOS, this can be installed using -[macports](https://www.macports.org/) -```bash -sudo port install cmake -``` - -Or using [homebrew](https://formulae.brew.sh/formula/cmake): -```bash -sudo brew install cmake -``` -The development team has mostly used macports and not homebrew. - -For Ubuntu/Debian Linux: -```bash -sudo apt install cmake -``` -This can be done on redhat using yum also. - -2. Aether uses the nlohman json package for reading and writing json files. - -On Ubuntu: - -```bash -sudo apt-get install -y nlohmann-json3-dev -``` - -On Mac: - -```bash -sudo port install nlohmann-json -``` - -3. The armadillo headers need to be installed. Simplistically, -Armadillo is a system that allows matrix math to be done in C++ -easily. We mostly use it for doing math with matrices (like -multiplication, addition, etc.), but it is much more powerful than -this. You will notice that there are not many 3D loops in Aether, -which is due to Armadillo. To make this all fast, it is best to -install the lapack abd blas libraries too. - -On Ubuntu: - -```bash -sudo apt-get install liblapack-dev -sudo apt-get install libblas-dev -sudo apt-get install libboost-dev -sudo apt-get install libarmadillo-dev -sudo apt-get install openmpi-bin libopenmpi-dev -``` -On Mac: - -```bash -sudo port install lapack -sudo port install OpenBLAS -sudo port install boost -sudo port install armadillo -sudo port install openmpi-bin libopenmpi-dev - ``` - -4. We have removed the strict dependency for netcdf, but a lot of -codes used netCDF, so it doesn't hurt to try to install the libraries. -Aether uses the netcdf library (netcdf-cxx4). As above, netCDF can be -installed using a package manager. - -On Mac, if you want the clang compiled version of netcdf, then: -```bash -sudo port install netcdf-cxx4 -``` - -If you want the gcc version of netcdf, then: -```bash -sudo port install netcdf-cxx4 +gcc10 -``` - -On Ubuntu, gcc is the default compiler, it seems like you can probably just do: -```bash -sudo apt-get install libnetcdf-dev -sudo apt install libnetcdf-c++4-dev -``` - -## Quick Start: - -These are unix commands, assuming that you have access to a unix/linux -terminal. This has been tested on a MacBook Pro and Ubuntu. (This is -assuming that you are installing the root version of Aether and not a -forked version. If you are using a forked version, replace the -"AetherModel" with the appropriate location of the fork.) +This is the home of the Aether model of the thermosphere and ionosphere. -```bash -git clone https://github.com/AetherModel/Aether +The Aether model has been developed using GNU C++ (versions 9, 10, 11). If you +are using this, hopefully it will just work out of the box. We have been doing +development of Aether on MacOS and Ubuntu Linux. We have also used the Windows +Subsystem for Linux, Ubuntu distribution, which works similarly to the native +Linux distribution. + +> If you are a student and don't know how to work with a large code base (i.e., +multiple source codes in multiple directories), you may consider starting within +the [Students](doc/student.md) page. + +All other users may wish to continue with the short installation guide below. If +you run into issues or have questions, first consult the in-progress +[documentation](doc/README.md). More complete documentation is actively being +developed. + +## Contents + +- [Contents](#contents) +- [Quick Start](#quick-start) + - [Dependencies](#dependencies) + - [Getting the Code](#getting-the-code) + - [Compiling \& Running](#compiling--running) + - [Inputs](#inputs) +- [Code Manual](#code-manual) +- [Further Documentation](#further-documentation) + +## Quick Start + +The following guide serves to demonstrate how to download, install, and then run +the Aether model. More details on each topic will be linked, and some more +detail is available [here](doc/README.md). + +### Dependencies + +On MacOS, installing some of the dependencies can be awkward, depending on which +C++ compiler you are using. Since there is one that essentially comes with +MacOS, called `clang`, the default compiler is often this. Much of the other +software is not built with this, so you need to switch compilers, which can be +challenging. + +While the development team has tried to remove as many of the dependencies as +possible to reduce this issues, it is still a good idea to try to get a +different compiler to work. If you want to use NetCDF files or the Fortran +compiled options (like MSIS), you will probably have to do this. + +A package manager is recommended to install the dependencies of the Aether +model. More details on the use of package managers can be found on [the +dependencies page](doc/installation/dependencies.md). For MacOS and Ubuntu Linux, the validated configurations are: + +
+ MacOS + + | Dependency | Tested version | + |---------------|----------------| + | armadillo | 11.4 | + | boost | 1.76 | + | cmake | 2.24 | + | gcc | 10, 11 | + | netcdf | 4.9 | + | netcdf-cxx4 | 4.3 | + | nlohmann-json | 3.11 | + | OpenBLAS | 0.3 | + | mpich | 4.1 | + + MacOS has two predominant package managers: [Homebrew](https://brew.sh) and + [MacPorts](https://www.macports.org/). Either will work. + +
+ +
+ Linux + + | Dependency | Tested version | + |--------------------|----------------| + | cmake | 2.24 | + | gcc | 10, 11, 12 | + | libarbadillo-dev | | + | libblas-dev | | + | libboost-dev | | + | liblapack-dev | | + | libnetcdf-dev | | + | libnetcdf-c++4-dev | | + | libopenmpi-dev | | + | nlohmann-json3-dev | | + | openmpi-bin | same as gcc | + + The specific package manager to use depends on which distribution of Linux + Aether is installed on. More details on Linux package managers can be found + [here, for + example](https://www.linode.com/docs/guides/linux-package-management-overview/#comparison-of-package-managers). + +
+ +### Getting the Code + +This has been tested on a MacBook Pro and Ubuntu. + +```bash +git clone git@github.com:AetherModel/Aether.git cd Aether git checkout develop ``` +> ***NOTES:*** +> +> - (This is assuming that you are installing the root version of Aether and not +a forked version. If you are using a forked version, replace the +"`AetherModel`" with the appropriate location of the fork.) +> - GitHub now recommends cloning repositories via `ssh` instead of `https`. For +development work, this is the way to go. If the above `git clone` command fails +and you are not planning on contributing to Aether development, the first line +can be replaced with "`git clone https://github.com/AetherModel/Aether`". For +help setting up your machine to use `ssh` to connect to Github, see [this +page](https://docs.github.com/en/authentication/connecting-to-github-with-ssh) + +### Compiling & Running + To compile Aether: + ```bash mkdir build cd build cmake .. make [-j4] ``` -The -j4 is optional and uses 4 processors, but you could use 2, 4, 8, -or whatever. - -To compile Aether with NetCDF: -```bash -mkdir build -cd build -cmake -DUSE_NETCDF=Y .. -make [-j4] (the -j4 uses 4 processors) -``` -To compile Aether with FORTRAN codes: -```bash -mkdir build -cd build -cmake -DUSE_FORTRAN=Y .. -make [-j4] (the -j4 uses 4 processors) -``` +The `-j4` is optional and uses 4 processors, but you could use 2, 4, 8, or +whatever. -To compile Aether with double precision: -```bash -mkdir build -cd build -cmake -DUSE_DOUBLE_PRECISION=Y .. -make [-j4] (the -j4 uses 4 processors) -``` +More compilation options can be found on the [Compiling +Aether](doc/installation/build_opts.md) page. -Once you have compiled you can install Aether with an example run directory +Once you have compiled, you can install Aether with an example run directory structure like this: ```bash cd .. cp -R share/run ./run.test cd run.test -./aether +mpirun -np 4 ./aether ``` +This will run the default configuration of Aether, which requires four MPI processors. +The default grids are `sphere4` and `dipole4` for the neutrals and ions (respectively), +which both require four "root nodes", or MPI workers. To read more about root nodes and +the available grids, please see [this page in the documentation](doc/internals/grid.md). + +### Inputs + There are essentially two input files that specify the settings in the code. When you are in a run directory, they are: -1. UA/inputs/defaults.json. These set the default inputs for the run -and should not be modified at all. You can look at these and copy the -settings that you want to change to this file: +1. UA/inputs/defaults.json. These set the default inputs for the run and should +not be modified at all. You can look at these and copy the settings that you +want to change to this file. -2. aether.json. This file can and should be modified to direct the -code to run the way that you would like. You can copy settings from -the default.json file and then modify them here. This will be covered -in the reference manual, once we have written one. +2. aether.json. This file can and should be modified to direct the code to run +the way that you would like. You can copy settings from the default.json file +and then modify them here. This will be covered in the reference manual, once we +have written one. -You can check to make sure that these are valid json files (not checking the content, though) with: +You can check to make sure that these are valid json files (not checking the +content, though) with: ```bash cd run.test @@ -194,7 +172,8 @@ python -m json.tool aether.json python -m json.tool UA/inputs/defaults.json ``` -At this time, there is no checker to see if all of the settings in each of the inputs files are actually valid and Aether understands them. +At this time, there is no checker to see if all of the settings in each of the +inputs files are actually valid and Aether understands them. Output files are in UA/output. @@ -202,7 +181,7 @@ We are working on aetherpy to make plots. Compare png files to tests/outputs_pngs/*.png to see if they are similar. -## Code Manual: +## Code Manual To create the code documentation manual, download Doxygen for your operating system and run: @@ -211,3 +190,13 @@ system and run: cd doc doxygen Doxyfile ``` + +## Further Documentation + +A more complete documentation is in +[development](https://github.com/AetherModel/AetherDocumentation), which can be +browsed [here](https://aetherdocumentation.rtfd.io/). + +The collection of Markdown files within the [doc](doc/README.md) folder of this +repository will provide more information and, at the time of writing, is more up +to date than the official documentation. It is recommended to start there. diff --git a/doc/README.md b/doc/README.md new file mode 100644 index 00000000..e51ddd53 --- /dev/null +++ b/doc/README.md @@ -0,0 +1,40 @@ +# Temporary Aether Documentation + +As the [full Aether +documentation](https://aetherdocumentation.readthedocs.io/en/latest/index.html) +is still in [development](https://github.com/AetherModel/AetherDocumentation), +this collection of Markdown files may provide more information on the use of the +Aether model. + +Users are encouraged to begin with the [README](../README.md) at the root of the +repository first, then consult the documents here for further assistance. While +effort was devoted to covering as much as possible regarding setup, it is +inevitable that there will be gaps in the documentation. Do not hesitate to +file an Issue on the Aether repository to request the documentation be filled +in. + +## Quick Links + +Contents within `doc`: + +`doc` + +- Design + - [Standards](design/standards.md) +- Installing + - [Installation](installation/installation.md) + - [Dependencies](installation/dependencies.md) + - [Compilation Options](installation/build_opts.md) +- Usage + - [Running Aether](usage/running_aether.md) + - [Debugging](usage/debug.md) +- Aether Internals + - [Ensembles](internals/ensembles.md) + - [Indices](internals/indices.md) + - [The Grid](internals/grid.md) + - [Coordinate Systems](internals/coordinates.md) +- [Doxyfile](Doxyfile) +- [README (this page)](README.md) +- [Citations](citations.md) +- [Dev Team](dev_team.md) +- [Students](student.md) diff --git a/doc/design/standards.md b/doc/design/standards.md index 0f2e52ca..a7422db1 100644 --- a/doc/design/standards.md +++ b/doc/design/standards.md @@ -4,7 +4,8 @@ Aether Coding and Design Standards Document Overall Design Philosophy ------------------------- -### Files +Files +---- Directory Structure: @@ -14,7 +15,5 @@ Directory Structure: - Names should be short but descriptive (less than 25 characters) - Source term files should start with `calc` - Variable naming --------------- - diff --git a/doc/installation.md b/doc/installation.md deleted file mode 100644 index 6f27df2e..00000000 --- a/doc/installation.md +++ /dev/null @@ -1,114 +0,0 @@ -# Installation instructions - -## Dependencies - -Before beginning Aether installation, make sure the following dependencies are -available on your system. We recommend using a package manager, such as -MacPorts, Homebrew (Mac OS X), apt-get (Ubuntu), or Chocolatey (Windows). - -| Mac OS X | -|--------------------------------| -| Dependency | Tested version | -|---------------|----------------| -| armadillo | 11.4 | -| boost | 1.76 | -| cmake | 2.24 | -| gcc | 10, 11 | -| netcdf | 4.9 | -| netcdf-cxx4 | 4.3 | -| nlohmann-json | 3.11 | -| OpenBLAS | 0.3 | -| mpich | 4.1 | - - - -| Ubuntu | -|-------------------------------------| -| Dependency | Tested version | -|--------------------|----------------| -| cmake | 2.24 | -| gcc | 10, 11, 12 | -| libarbadillo-dev | | -| libblas-dev | | -| libboost-dev | | -| liblapack-dev | | -| libnetcdf-dev | | -| libnetcdf-c++4-dev | | -| libopenmpi-dev | | -| nlohmann-json3-dev | | -| openmpi-bin | same as gcc | - -## Get Aether - -Clone Aether from GitHub into a local directory of your choosing. We currently -recommend checking out the `develop` branch, as the model is still awaiting its -first release. - -## Build Aether - -Start by creating a build directory for the necessary files. In this example, -we show how to do so from the Aether project directory and assume you start -there. - -```bash -mkdir build -cd build -``` - -Next, use `cmake` to create the necessary make files in the build directory - -```bash -cmake .. -``` - -This is also the point where compilation options can be chosen. These take -the structure: - -```bash -cmake -DFLAG=VALUE .. -``` - -where `FLAG` is a flag name and `VALUE` is the desired value. A table of model -options is included below. Depending on your system, you may also need to -either declare local environment variables or define them using this flag -system. These will show up as cmake warnings. - -| Aether Flag | Value | Description | -|----------------------|-------|-----------------------------------| -| USE_DOUBLE_PRECISION | Y | Run Aether with higher precission | - -If your default compiler isn't a GCC compiler, you will likely need to specify -the desired GCC compiler at this step using: - -```bash -cmake -DCMAKE_CXX_COMPILER= -``` - -Finally, run the make command in the build directory: - -```bash -make [-jN] -``` - -The `-j` flag tells the computer the number of processers to use when running -the code (where N is that number). To use a single processor, just do not use -the flag. - -If the make command fails, try using the `VERBOSE=1` flag. This will include -additional output that may make it easier to debug the process. - -## Test the executable - -To test the model executable, exit the build diretory and run the test script: - -```bash -cd .. -cp -R share/run ./run.test -cd run.test -./aether -``` - -The output should LOOK LIKE THIS - -For more details about running Aether, see the documentation about creating and -modifying input files in the document running_aether.md. \ No newline at end of file diff --git a/doc/installation/build_opts.md b/doc/installation/build_opts.md new file mode 100644 index 00000000..78e8bb48 --- /dev/null +++ b/doc/installation/build_opts.md @@ -0,0 +1,38 @@ +# Compilation Options + +When compiling the code, you are able to set variables to pass to the compiler. +This can enable things like NetCDF optputs, for example. This page serves to +give a rough description of the available compilation flags and their purpose. + +Depending on your system, you may also need to either declare local environment +variables or define them using this flag system. These will show up as `cmake` +warnings. + +## Table of Compilation Options + +The following table lists many of the optional compilation flags. For boolean +flags, the value can be set to `ON` or `Y` to enable it. All boolean options are +disabled by default. + +| Compilation Flag | Type | Description | +| ---------------------- | ------- | ---------------------------------------- | +| `USE_DOUBLE_PRECISION` | boolean | Run Aether with higher precision | +| `CMAKE_CXX_COMPILER` | path | Path to gcc or MPI executable | +| `USE_FORTRAN` | boolean | Enables the compilation of Fortran code. | +| `USE_NETCDF` | boolean | Write outputs to NetCDF format? | + +Recall, the flags are specified with `cmake -DFLAG=VALUE ..`, where `FLAG` is a +flag name and `VALUE` is the desired value. + +### Additional Test flags + +The following flags are used for testing vaious aspects of the Aether model. +These are not recommended to be enabled unless you are involved in development. + +- `TEST_INTERPOLATION` +- `TEST_COORD` +- `TEST_EXCHANGE` + - Enables `USE_DOUBLE_PRECISION` as well. +- `TEST_GRADIENT` + +> These flags are mutually exclusive; multiple *cannot* be used at the same time. diff --git a/doc/installation/dependencies.md b/doc/installation/dependencies.md new file mode 100644 index 00000000..eabdf3a1 --- /dev/null +++ b/doc/installation/dependencies.md @@ -0,0 +1,137 @@ +# Installing Dependencies + +Instructions for MacOS are written for use with MacPorts, as the development +team has mostly used MacPorts and not Homebrew. Commands for the two package +managers are nearly identical, although Homebrew may be preferred if you do not +have root access on your machine. For example, the following two commands will +both install `cmake`. Translating the following guide from MacPorts to Homebrew +is left to the user. + +```bash +sudo port install cmake +brew install cmake +``` + +> To check if any of the following dependencies are already installed on your +system, you will need access to the command line (terminal). To check if (and +where) `cmake` is installed, for example, the command `which cmake` can be run. +If a path is printed, `cmake` is installed. To check the version, run `cmake +--version`. + +The layout of this page is as follows: + +- [Installing Dependencies](#installing-dependencies) + - [Install Compiler](#install-compiler) + - [Install cmake](#install-cmake) + - [Install JSON libraries](#install-json-libraries) + - [Install Armadillo (and boost)](#install-armadillo-and-boost) + - [Install NetCDF (optional)](#install-netcdf-optional) + +## Install Compiler + +On MacOS this can be installed, for example, using: + +```bash +sudo port install g++ +``` + +> NOTE: On Macos, cmake will default to using clang instead of gcc. +You need to set an environmental variable to tell cmake to use g++ instead. +Do this with `export CXX=/opt/local/bin/g++`, +and replace the path if it is placed somewhere different. + +On Ubuntu, `gcc` (the C-compiler) is pre-installed, but the C++ compiler is not. This +can be installed with (subsituting your machine's package manager command): + +```bash +sudo apt install g++ +``` + +## Install cmake + +Aether uses [CMake](https://cmake.org/) instead of GNU make. If you don't have it +installed, you need it. + +For MacOS, this can be installed with: + +```bash +sudo port install cmake +``` + +For Ubuntu/Debian Linux: + +```bash +sudo apt install cmake +``` + +This can be done on RedHat using `yum` also. + +## Install JSON libraries + +Aether uses the nlohman json package for reading and writing json files. + +On Ubuntu: + +```bash +sudo apt-get install -y nlohmann-json3-dev +``` + +On Mac: + +```bash +sudo port install nlohmann-json +``` + +## Install Armadillo (and boost) + +Simplistically, Armadillo is a system that allows matrix math to be done in C++ +easily. We mostly use it for doing math with matrices (like multiplication, +addition, etc.), but it is much more powerful than this. You will notice that +there are not many 3D loops in Aether, which is due to Armadillo. To make this +all fast, it is best to install the `lapack` and `blas` libraries too. + +On Ubuntu: + +```bash +sudo apt-get install liblapack-dev +sudo apt-get install libblas-dev +sudo apt-get install libboost-dev +sudo apt-get install libarmadillo-dev +sudo apt-get install openmpi-bin libopenmpi-dev +``` + +On Mac: + +```bash +sudo port install lapack +sudo port install OpenBLAS +sudo port install boost +sudo port install armadillo +sudo port install openmpi + ``` + +## Install NetCDF (optional) + +We have removed the strict dependency for NetCDF, but a lot of codes used +NetCDF, so it doesn't hurt to try to install the libraries. Aether uses the +NetCDF library (netcdf-cxx4). As above, NetCDF can be installed using a package +manager. + +On Mac, if you want the clang compiled version of netcdf, then: + +```bash +sudo port install netcdf-cxx4 +``` + +If you want the gcc version of netcdf, then: + +```bash +sudo port install netcdf-cxx4 +``` + +On Ubuntu, gcc is the default compiler, it seems like you can probably just do: + +```bash +sudo apt-get install libnetcdf-dev +sudo apt install libnetcdf-c++4-dev +``` diff --git a/doc/installation/installation.md b/doc/installation/installation.md new file mode 100644 index 00000000..850d79fb --- /dev/null +++ b/doc/installation/installation.md @@ -0,0 +1,151 @@ +# Installation instructions + +Before installing the Aether model, it is recommended to ensure the required +[dependencies](#dependencies) for your system are met. The next step is to +[download](#get-aether) and then [build](#build-aether) the software. Your +install can then be [tested](#test-the-executable). + +## Dependencies + +The Aether development team has tested several possible configurations of the +following dependencies. Note that other versions of these programs may possibly +work, however the listed versions are the recommended starting point. + +If you are working on an HPC cluster, it is likely that all of these +dependencies will already be installed. Consult the documentation of your +specific system to find out how to load the software, which will likely be done +with `module`. + +### MacOS + + | Dependency | Tested version | + |---------------|----------------| + | armadillo | 11.4 | + | boost | 1.76 | + | cmake | 2.24 | + | gcc | 10, 11 | + | netcdf | 4.9 | + | netcdf-cxx4 | 4.3 | + | nlohmann-json | 3.11 | + | OpenBLAS | 0.3 | + | mpich | 4.1 | + + MacOS has two predominant package managers: [Homebrew](https://brew.sh) and + [MacPorts](https://www.macports.org/). Either will work. + +### Linux + + | Dependency | Tested version | + |--------------------|----------------| + | cmake | 2.24 | + | gcc | 10, 11, 12 | + | libarbadillo-dev | | + | libblas-dev | | + | libboost-dev | | + | liblapack-dev | | + | libnetcdf-dev | | + | libnetcdf-c++4-dev | | + | libopenmpi-dev | | + | nlohmann-json3-dev | | + | openmpi-bin | same as gcc | + +The specific package manager to use depends on which distribution of Linux +Aether is installed on. More details on Linux package managers can be found +[here](https://www.linode.com/docs/guides/linux-package-management-overview/#comparison-of-package-managers). + +> Programs such as `conda` and `snap` are **not** recommended to install +> dependencies. + +## Get Aether + +Clone Aether from GitHub into a local directory of your choosing. We currently +recommend checking out the `develop` branch, as the model is still awaiting its +first release. + +```bash +cd [some/directory] +git clone git@github.com:AetherModel/Aether.git +cd Aether +git checkout develop +``` + +## Build Aether + +Start by creating a build directory for the necessary files. In this example, +we show how to do so from the Aether project directory and assume you start +there. + +```bash +mkdir build +cd build +``` + +Next, use `cmake` to create the necessary make files in the build directory + +```bash +cmake .. +``` + +This is also the point where compilation options can be chosen. These take +the structure: + +```bash +cmake -DFLAG=VALUE .. +``` + +Here `FLAG` is a flag name and `VALUE` is the desired value (note the `-D`). A +more complete discussion of the available compilation flags can be found on the +[Compilation Options](build_opts.md) page. + +> If your default compiler isn't a GCC compiler, you will likely need to specify +the desired GCC compiler at this step using the environmental variable `$CXX`, or: + +> ```bash +cmake -DCMAKE_CXX_COMPILER= +``` + +Finally, run the make command in the build directory: + +```bash +make [-jN] +``` + +The `-j` flag tells the computer the number of processers to use when running +the code (where N is that number). To use a single processor, just do not use +the flag. + +If the make command fails, try using the `VERBOSE=1` flag. This will include +additional output that may make it easier to debug the process. + +## Test the executable + +To test the model executable, exit the build diretory and run the test script: + +```bash +cd .. +cp -R share/run ./run.test +cd run.test +./aether +``` + +The output should look like this: + +```bash +> Need to NOT adjust F10.7, but that isn't included yet!!! +> Writing file : 3DALL_20110320_000000 +> Writing file : 3DBFI_20110320_000000 +> Wall Time : 4s (left : 1111h); Current Time : 2011 3 20 0 0 0 0 +> Wall Time : 4s (left : 23m); Current Time : 2011 3 20 0 0 10 0 +> Wall Time : 5s (left : 14m); Current Time : 2011 3 20 0 0 20 0 +> Wall Time : 5s (left : 9m); Current Time : 2011 3 20 0 0 30 0 +> Wall Time : 5s (left : 7m); Current Time : 2011 3 20 0 0 40 0 +> Wall Time : 6s (left : 7m); Current Time : 2011 3 20 0 0 50 0 +> Wall Time : 6s (left : 5m); Current Time : 2011 3 20 0 1 0 0 +> Wall Time : 6s (left : 5m); Current Time : 2011 3 20 0 1 10 0 +> Wall Time : 7s (left : 5m); Current Time : 2011 3 20 0 1 20 0 +> Wall Time : 7s (left : 4m); Current Time : 2011 3 20 0 1 30 0 +etc. +``` + +For more details about running Aether, see the documentation about creating and +modifying input files in the document running_aether.md. diff --git a/doc/internals/coordinates.md b/doc/internals/coordinates.md new file mode 100644 index 00000000..d33d1984 --- /dev/null +++ b/doc/internals/coordinates.md @@ -0,0 +1,78 @@ + +# Coordinate Systems + +## GEO - Geographic coordinate system (or geodetic) +- Longitude (radians) - radians east of prime meridian (0 - 2pi) +- Latitude (radians) - angle between the equatorial plane and point. For oblate spheriod, this angle is not the same as the angle orthogonal to the surface of the planet and the equatorial plane. +- Radius (meters) - the distance to the center of the planet (Altitude is often used instead). + +## PCPF - Planet-centered Planet-fixed or Geocentric coordinate system +- Cartesian coordinates of Geographic coordinate system in meters (X, Y, Z). +- X (meters) - aligned with the equator and prime meridian +- Z (meters) - aligned with rotation axis of the planet +- Y (meters) - completes the right-hand coordinate system + +## PSE - Planetary Solar Ecliptic coordinates +- Cartesian coordinates tying together planet and Sun +- X (meters) - points from the center of the planet to the Sun +- Y (meters) - points from the center of the planet towards dusk and opposite planet's motion around the sun +- Z (meters) - orthogonal to the ecliptic plane + +## Dipole Coordinates +- Longitude (radians) - radians east of the meridian that contains the north magnetic pole and north rotation axis +- P (meters) - Identifies the field line. This is the same as L-shell and is constant along wach field line. +- Q (dimensionless) - parameterizes the distance along the field line, related to magnetic latitude & radius. This varies along the field line, but the values are idential for all field lines within each node. q=0 at the equator, and approaches positive (negative) infinity as theta points towards the north (south) pole. Thus, q values will be negative in the southern hemisphere and the change in q "upwards" will be negative in the northern hemisphere. See [../../edu/examples/Dipole](../../edu/examples/Dipole) for more information. + +## More Dipole Coordinates +- L-shell (Planetary Radii) - The distance from the planet's center at which the magnetic field encounters the dipole's equatorial plane +- Magnetic Latitude (radians) - angle between the dipole's equatorial plane and a point. +- Invariant Latitude (radians) - angle between the dipole's equatorial plane and the point at which the field-line passes through a reference radius of the planet ([specified in the inputs](../internals/grid.md#inputs)). This is constant along the field-line and is related to the L-Shell. +- Magnetic Local Time (hours) - Angle between the sun, the north magnetic pole, and the point. Explicitly, this is done in PSE XY coordinates, ignoring the Z coorinate. + +> The dipole `(i,j,k)` coordinates are (magnetic longitude, p, q). + +# Coordinates in Aether + +There are a variety of coordinates in Aether. This document describes some of them. + +## Spherical Coordinates + +The easiest coordinate system to understand within Aether is the spherical system, which is a longitude, latitude, radial (LLR) coordinate system. When the planet is a pure sphere, the LLR system is orthogonal - meaning that the grid lines up perfectly with the lines of constant longitude, latitude, and radius. + +In Aether, longitude and latitude are expressed in radians and are positive towards the east and towards the north. Radius is expressed in meters and is positive away from the planet (upwards). In Aether, often Altitude is used instead of radius. When the planet is a perfect sphere, these are offset by a constant value. + +If the planet is an oblate spheriod, then the equator is larger than the pole, so that the planetary radius is dependent on latitude. Aether is currently set up so that Altitude is not dependent on latitude or longitude, so that if an oblate spheriod is used, then a constant altitude would have a radius that is dependent on latitude. This means that the coordinate system is not purely orthogonal. At this time, this is not dealt with properly. + +Because Aether considers gravity to be a function of radius and explicitly includes the centrifugal acceleration, the pertubation away from a perfect sphere should mostly cancel. + +## i, j, k Coordinates + +As described in the grid.md file, Aether uses a logical `(i, j, k)` 3D grid structure. Therefore, we refer to the 'primary' coordinates as the ijk coordinate system. What this means is that the i-coordinate is in the i-direction, the j-coordinate is in the j-direction, and the k-coordinate is in the k-direction. + +For the (perfectly) spherical grid, the i-coordinate is longitude, the j-coordinate is latitude, and the k-coordinate is radius. + +For the Cubedsphere grid, the i-coordinate is RIGHT, the j-coodinate is UP, and the k-coordinate is radius. Each face of the cubedsphere has the same coordinate system, but only with reference to that face. This means that if each face is looked at independently, the lower left corner is at (about) i = -45, j = -45 deg, while the upper right corner is at i = +45, j = +45 deg. Radius is treated the same as in a spherical grid. + +For the dipole coordinate system, the i-coordinate is magnetic longitude, the j-coordinate is L-shell, and the k-coordinate is Q: a dimensionless parameter, normalized to the planet radius, representing diatance along a magnetic field line. The dipole is orthogonal to a dipolar magnetic field. + + +Should the official coordinates be in the native coordinates (which could be different for each system), or should the coordinates be in meters, such that when gradients are taken, they are in /m? + +Maybe we could have: + +i_scgc, j_scgc, k_scgc - coordinates in the native coordinates (radians, meters, etc.) +im_scgc, jm_scgc, km_scgc - coordinate in meters + +The question is what variables do we need? + +Locations: +- Cell Centers (these are the center of each volume) +- Cell Edges in the i, j, k directions (these are the center of each area) +- Cell Corners + +All locations should be described in the following coordinates: +- i, j, k +- lon, lat, radius (+alt) +- magnetic lon, invariant lat (only the dipole magnetic grid then has magnetic latitude) + + diff --git a/doc/ensembles.md b/doc/internals/ensembles.md similarity index 86% rename from doc/ensembles.md rename to doc/internals/ensembles.md index 7184c291..54eba907 100644 --- a/doc/ensembles.md +++ b/doc/internals/ensembles.md @@ -1,10 +1,13 @@ +# Ensembles Aether is capable of running with ensembles, meaning that you can run multiples of the same simulation in one run. This is enabled by adding to the aether.json file: +```json "Ensembles" : { "nMembers" : N}, +``` where N is the number of members that you would like to run. In order to do this, the number of nodes that are requested have to be N times @@ -19,21 +22,22 @@ with. To perturb indices in Aether, you can use the "Perturb" command in the aether.json file. As an example: - "Perturb": { - "f107" : { "Mean" : 1.0, - "Std" : 0.10, - "Add" : false, - "Constant" : true}, - "f107a" : { "Mean" : 1.0, - "Std" : 0.10, - "Add" : false, - "Constant" : true}, - "imfbz" : { "Mean" : 0.0, - "Std" : 2.0, - "Add" : true, - "Constant" : false} - +```json +"Perturb": { + "f107" : { "Mean" : 1.0, + "Std" : 0.10, + "Add" : false, + "Constant" : true}, + "f107a" : { "Mean" : 1.0, + "Std" : 0.10, + "Add" : false, + "Constant" : true}, + "imfbz" : { "Mean" : 0.0, + "Std" : 2.0, + "Add" : true, + "Constant" : false} } +``` This perturbs the F10.7, F10.7a, and IMF Bz indices. The sub-parts of the command include: @@ -74,8 +78,10 @@ the post processing code can create mean and std files. You can also perturb chemical reaction rates, but doing something like: +```json "Perturb": { - "Chemistry" : ["R2", "R10", "R20"] } + "Chemistry" : ["R2", "R10", "R20"] } +``` This will perturb the reaction rates in the chemistry file. The Rxx names have to be in the "name" column. The percentage of uncertainty diff --git a/doc/internals/fism.md b/doc/internals/fism.md new file mode 100644 index 00000000..5b1322e8 --- /dev/null +++ b/doc/internals/fism.md @@ -0,0 +1,42 @@ +# FISM-2 + +FISM-2 can be used as a EUV model. + +Needs the FISM-2 files automatically made by `srcPython/fism.py`. + +FISM-2 contains the binned flux already, however Aether must still be provided with an +EUV csv file containing the cross-sections. + +The different fism models available in fism.py contain different numbers of bins, so +the euv file must be different. + +| Model | number of bins | euv file | +| :--- | :-------------: | -------: | +| HFG | 23 | euv_solomon.csv | +| Solomon | 23 | euv_solomon.csv | +| NEUVAC | 37/59 | euv.csv / euv_59.csv | +| EUVAC | 37 | euv.csv | + +The input format, when using fism data: + + "Euv" : { + "doUse" : true, + "Model" : "fism", + "File" : "UA/inputs/euv_59.csv", + "fismFile": "fism2_file_59.txt", + "IncludePhotoElectrons" : true, + "HeatingEfficiency" : 0.05, + "dt" : 60.0 + }, + +To generate FISM-2 irradiances between two dates, one may call fism.py like so: + +srcPython/fism.py 20110319 20110321 -b neuvac + +Note that the optional argument '-b' defaults to the binning scheme of the NEUVAC model, +which employs 59 bins. To use the 37 bins of the EUVAC model, the argument should be +'euvac', while to use the 23 bins used by the HFG model, the argument should be 'solomon'. + +fism.py should always be run before Aether is run using the FISM-2 model. Even though the +entire FISM-2 irradiances are stored in the repository, Aether will need a separate .csv +file containing the temporal subset of FISM-2 irradiances in the desired binning scheme. diff --git a/doc/internals/grid.md b/doc/internals/grid.md new file mode 100644 index 00000000..4be0269f --- /dev/null +++ b/doc/internals/grid.md @@ -0,0 +1,388 @@ +# Grids in Aether + +Aether uses a 2d domain decomposition and the grid system is basically a 3D `(i, +j, k)` system, meaning that the arrays within Aether are 3D arrays. Aether +decomposes the grid in the first 2 dimensions (`i` and `j`) using a quadtree +structure, while the 3rd dimension is left alone and each processor solves for +the entire 3rd dimension. + +Practically, what this means is that Aether uses powers of 4 to specify the grid +system. When you ask for 4x the number of processors it doubles the resolution +in `i` and `j`. You can't double in `i` or `j` independently. + +Aether using root nodes, which specify the smallest number of processors that +can be run on. For example, the simple "Sphere" grid has one root node that +handles the entire Earth (in latitude and longitude). If the resolution needs +to be doubles, 4 processors can be asked for. If the resolution is doubled +again, 16 processors are needed, etc. However, in the altitude/radial direction, +the number of points that are specified in the aether.json is unchanged, as it +does not rely on the number of processors used. + +- [Grid Types Explained](#grid-types-explained) +- [Grid Shapes Explained](#grid-shapes-explained) + - [TL;DR](#tldr) + - [The Sphere Grid](#the-sphere-grid) + - [The Cubesphere Grid](#the-cubesphere-grid) + - [The Dipole Grid](#the-dipole-grid) + - [Inputs:](#inputs) + - [Root Nodes](#root-nodes) + - [Sphere](#sphere) + - [Cubesphere](#cubesphere) + - [Dipole](#dipole) + - [Specifying Root Nodes](#specifying-root-nodes) +- [Specifying the Grid](#specifying-the-grid) + - [Horizontal Resolution](#horizontal-resolution) + - [Vertical Resolution](#vertical-resolution) + +## Grid Types Explained + +Aether has two types of grid systems - the neutral grid (`neuGrid`) and the ion +grid (`ionGrid`). For each type of constituent (neutral or ion), their primary +grid is the one where most of the equations are solved, and then they are passed +to the other grid. For example, the neutral winds are solved for on the +`neuGrid`, and then passed onto the `ionGrid` in order to calculate source terms +for the ions. As another example, the ion advection is solved for on the +`ionGrid`. The ion densities are then passed to the `neuGrid`, where the source +terms for the neutrals are calculated. + +These grids can be identical or nearly identical. If they are, then it is best +to have them on a neutral type of grid, since the stability of the neutrals +along the 3rd dimension (where gravity is prime) is hard to achieve. + +The neutral grid system typically has its third axis aligned (mostly) with the +radial direction. This is to allow special solvers to treat gravity and the +gradient in pressure in a special way. There are two issues with solving the +neutrals in the third dimension: (1) often, the top of thermosphere models are +supposed to be the exosphere, which means that they can't extend too far in the +vertical direction; and (2) neutral solvers struggle with having too many scale +heights in a domain when solving the full momentum equation. These limit the +full height of the model domain for the neutrals. + +For the ions, with systems that have magnetic fields, the plasma often moves up +field-lines on the dayside and down field-lines on the nightside. This transport +is often above the top of the neutral grid. Further, the ions are often +structured by the magnetic field, making this the natural coordinate system. For +planets without magnetic fields, a grid similar to the neutrals may be useful. +The ion grid can extend above and below the neutral grid with both a +magnetic-field-aligned grid and a spherical grid. + +## Grid Shapes Explained + +Aether currently has three basic grid shapes: `spherical`, `cubesphere`, and +`dipole`. The spherical grid is an (`i`, `j`, `k`) = (longitude, latitude, +altitude) system, with these being (mostly) orthogonal to each other. This grid +system can simulate a sub-region of the Earth if desired. + +### TL;DR + +The user needs to specify the shape of the grid, which specifies the grid shape +and the number of root nodes. Shapes include: `sphere` (1 root node), `sphere6` +(6 root nodes), `cubesphere` (6 root nodes),`dipole4` (4 root nodes), and +`dipole6` (6 root nodes). + +### The Sphere Grid + +The sphere grid is a normal longitude, latitude, altitude grid. + +### The Cubesphere Grid + +The cubesphere grid is composed of 6 different faces, similar to a cube, but +where each cube "face" is pushed out to form a sphere. The corners of the cube +are first set to intersect the sphere, then all of the other grid points on the +cube are pushed out until they intersect the sphere. + +| Cube with spherical cube | +|:--:| +| A graphical representation of the cubesphere grid.
(*Source: A2569875, CC BY-SA 4.0 , via Wikimedia Commons*) | + +One cube face defines the southern polar region, one face defines the northern +polar region, and the other four faces are spaced in longitude around the +equatorial region. For the cubesphere grid, the `k` dimension is altitude. The +(`i, j`) system is set up so that `i` is considered left-right on the cube face, +while `j` is up-down. For the four faces around the equator, (`i, j`) is roughly +(longitude, latitude), but not exactly. For the polar faces, the relationship +between (`i, j`) and (longitude, latitude) is much more complex. + +For both the spherical grid and the cubesphere grid, the altitudes, `k`, can be +stretched or uniform. A lower boundary is set and the delta-altitude is +specified as either a constant distance or a constant percentage of the bulk +scale-height. + +### The Dipole Grid + +The dipole grid is aligned with the magnetic field. The `k` dimension is along +the fieldline, `i` is magnetic longitude, and `j` is roughly latitude for the +bottom of the field-line. + +Each fieldline starts at the lowest modeled altitude +and curves towards the equator. In the northern hemisphere, this means that the +fieldlines curve south, while in the southern hemisphere they curve north. + +The dipole grid is evenly spaced in **invariant latitude** (where the field line +passes the minumum altitude) and **q** (the dipole coordinate +specifying how far along the field line a point lies). Q is dimensionless and defined +to be $-\infty$ at the south pole, $+\infty$ at the north pole, and 0 at the +magnetic equator. The equations for p (L-shell) and q are the following, +where r is the distance from the origin and $\theta$ is *colatitude*: + +```math +p = \frac{r}{\sin^2\theta} +``` + +```math +q = \frac{\cos{\theta}}{r^2} +``` + +Here is how the dipole grid is generated: + +1. Receive latitude range of this block from the quadtree. This will look +something like `lower_left_norm=(0.0, -0.5, 0.0)` and `size_up_norm=(0, 0.25, 0)` +for the node nearest the south pole in dipole4. From this, determine if we are +in the southern hemisphere. If we are, everything will be done as if it was the north +hemisphere and then reversed & negated at the end. +2. Store the latitude (j) component of `lower_left_norm` as `lat_origin`. If this +node is in the southern hemisphere, store the top of the node's extent as lat_origin. +3. Scale this node's portion of the quadtree to be limited by the user-provided +`lat_range`. These for the invariant latitudes, which are evenly spaced between +the latitude range provided and dictate where each field line passes through the minimum +altitude provided. + - At the poles, put the last corner at $89.9^\circ$ magnetic latitude, or +$0.1^\circ$ and $179.9^\circ$ magnetic ***co***latitude. Add +another corner 1/2 way between this point and the last "real" corner, and put +cell centers between these corners. +4. Determine if this node will have closed or open field lines. There are two conditions: + - If the node is touching the equator + - If the lowest L-shell is below the maximum altitude. This is rare, but prevents unexpected behavior. +5. Determine the limits, then values, of the q-coordinate for all points along each field +lines on this node. The q-values on each node are identical, and the p-value is +constant along each field line (by definition). To solve for q, use the p-values +from step 3 and the altitude, as described below and $q=\sqrt{(1-r/p)/r^4}$. + - If the field line closes, $q_{min}=0$. There will be a corner/edge at the +magnetic equator and two ghost cell centers across the equator for message passing. + - If the field line does not close, $q_{min}$ is calculated from the highest +altitude point on the lowest latitude field line. This is the point farthest +from the planet on the most equatorward field line (and since q=0 at the +equator, it has the lowest allowed q-value). + - The maximum q-value is solved for identically in open & closed blocks with +the lower altitude limit and the highest latitude field line. The point closest +to the planet on the highest latitude field line has the highest allowed q-value +(q=$\pm$infinity at the poles). +6. We now have `p` (step 3) and `q` (step 5) for all points on the grid. From this +we solve for $(r, \theta)$, and any other coordinates we need. + +See [edu/examples/Dipole](../../edu/examples/Dipole) for more detailed information +and to experiment with the available options in a Python script. + +#### Inputs: + +- ***Shape***: either `dipole4` or `dipole6`. Cannot be run on a single core. +- ***nLonsPerBlock***: number of magnetic longitudes +- ***nLatsPerBlock***: number of field lines (invariant latitudes) +- ***nAlts***: Number of points along each field line. A number of these will +be discarded for being at too low of altitude. +- ***AltRange***: (`min_alt`, `max_alt`) - the altitude (in km) range to bound +cells by. +- ***LatRange***: (`min_lat`, `max_lat`) - the limits on invariant latitudes +(in degrees). Sets the limits on the latitudes where field lines cross `min_alt`. + + +### Root Nodes + +> This document uses the words "block" and "node" somewhat +interchangably. Technically, a "block" is single (`i, j, k`) grid, while a +"node" can be multiple "blocks" that make up a section of the globe. + +A fundamental assumption within Aether is that each processor does computation +on one and only one block. This means that each processor does not deal with +multiple blocks, and therefore the distribution of blocks across processors has +to match exactly. + +Aether uses a quadtree system to subdivide and distribute the grids (or blocks) +across processors. This means that when an additional level of refinement is +desired, an individual block is split in 4 - the number of blocks is doubled in +both `i` and `j`. The question then is *how many blocks to start with*? These +are the root nodes. + +#### Sphere + +For the whole globe `sphere` shape, there is one single root node, which allows +users to run the code on a single processor. When a user asks for one processor +using this sphere shape, there is only one single block, which is the root node, +and spans the entire globe. When the user asks for four processors using the +sphere shape, the number of blocks in latitude are doubled and the number of +blocks in longitude are doubled. There is still only one root node, but the +number of blocks is four, with 2 in the longitudinal direction and 2 in the +latitudinal direction. If the user asks for 16 processors using the sphere +shape, the blocks are sub-divided again, with sill one single root node, and 16 +blocks - four in the longitudinal direction and four in the altitudinal +direction. With a sphere grid, the number of processors that can be used to +specify the grid are then: 1, 4, 16 (=4^2), 64 (=4^3), 256 (=4^4), 1024 (=4^5), +etc. + +#### Cubesphere + +With a cubesphere grid, there are six root nodes, meaning that the code needs +six processors to run on just to start. Each root node is a face of the +cubesphere. If the user asks for 24 processors (i.e., 6 root nodes that are each +divided into four blocks each), each root node is split in half along the +left-right direction and the up-down direction. For a cubesphere grid, the +number of processors that can be used to specify the grid are then: 6, 24 (6 +\* 4), 96 (6 \* 4^2), 384 (6 \* 4^3), etc. + +#### Dipole + +The dipole grid requires >4 root nodes to ensure the coordinates are +mutually orthogonal. The available shapes are `dipole4` and `dipole6`, for +compatibility with the neutral grid being a sphere or cubesphere. In both cases, +each root node covers the entire longitude range and given a portion of the latitude +range. So in the case of `dipole4`, the four nodes each cover 1/4 of the available +latitudes and all of the longitudes. The available latitudes are scaled to the latitude +limits specified in the input file, so the divisions will not be at $\pm45^\circ$ and +$0^\circ$ latitude, rather will be offset to evenly divide the entire range across the +blocks. Dividing the root nodes works identically to the spherical grid, for example +`dipole4` can be used with 16 MPI tasks and each root node is divided into four blocks, +forming a 2x2 grid. + +#### Specifying Root Nodes + +The root nodes indicate the span of the grid that they cover. This is done in a +header file. In order to accomplish this, the lower-left corner location +(ORGINS) is specified as well the span of the root node in the left-to-right (i) +direction (RIGHTS) and in the (j) down-to-up direction (UPS). The easiest +example is here: + +```cpp +namespace Sphere { + /// The normalized origins of each face of the cube (i.e. corner) + static const arma_mat ORIGINS = { + {0.0, -0.5, 0.0} + }; + /// Normalized right steps in cube + static const arma_mat RIGHTS = { + {2.0, 0.0, 0.0} + }; + /// Normalized right steps in cube + static const arma_mat UPS = { + {0.0, 1.0, 0.0} + }; +}; +``` + +Since the sphere goes from -90$^\circ$ to +90$^\circ$ in latitude, and 0$^\circ$ +to 360$^\circ$ in longitude, and pi is the normalizer, then the grid should go +from -0.5 to 0.5 in the UPS direction, so the ORIGIN is placed at -0.5 and the +span is 1.0. In the longitudinal direction, the grid should go from 0 to 2, so +the ORIGIN is placed at 0.0 and the span is 2.0. + +This could be altered to have two root nodes. If someone wanted the root node to +be "square", in that the latitude and longitude spans are the same, this could +be done with: + +```cpp +namespace Sphere2 { + /// The normalized origins of each face of the cube (i.e. corner) + static const arma_mat ORIGINS = { + {0.0, -0.5, 0.0}, + {1.0, -0.5, 0.0} + }; + /// Normalized right steps in cube + static const arma_mat RIGHTS = { + {1.0, 0.0, 0.0}, + {1.0, 0.0, 0.0} + }; + /// Normalized right steps in cube + static const arma_mat UPS = { + {0.0, 1.0, 0.0}, + {0.0, 1.0, 0.0} + }; +}; +``` + +Notice that the namespace is different, so that it can be unique. In this case, +there are two ORGINS (offset by 1.0 in longitude), two RIGHTS (which are the +same), and two UPS (which are the same). + +In both of these examples, the third dimension doesn't change. This is because a +single altitude in a spherical grid can be fully described with two variables +(lat and lon). For a cubesphere grid, on the other hand, there are three +variables that are needed - each face is in an XY, XZ, or YZ plane, so all three +(X, Y, and Z) are needed. The 6 root nodes for the cubesphere are specified in +the [cubesphere.h header file](../../include/cubesphere.h). + +## Specifying the Grid + +There are many different components to specifying the actual grid that is +desired, namely: + +- Min and Max latitude +- Min and Max longitude +- Min Altitude, whether a stretched altitude is desired, and the altitudinal + spacing + +In addition, the number of grid points that should be used in each block are +specified: + +- nLons or nX - number of grid cells per block in the i direction +- nLats or nY - number of grid cells per block in the j direction +- nAlts or nZ - total number of grid cells in the block in the k direction + +### Horizontal Resolution + +For some grid shapes (`sphere` and `dipole`), the total number of grid cells in +the `i` and `j` direction can be determined by, for example, multiplying the +*number of blocks* in the `i` direction by the *number of cells in each block* +in the `i` direction. So, with a spherical grid with one root node, and 256 +processors used, the number of blocks in the `i` and `j` direction is 256 ( = 4 +\* 4 \* 4 \* 4). Breaking it into both directions - (2\*2) \* (2*2) \* (2\*2) \* +(2\*2) or (2 \* 2 \* 2 \* 2) \* (2 \* 2 \* 2 \* 2) or (16 \* 16) - 16 and 16. +So, the total number of blocks in the `i` direction is 16 \* nLons and in the +`j` direction is 16 \* nLats. + +For the cubesphere grid, the `nX` and `nY` are the number of grid cells in the +`i` and `j` direction. At this time, these have to be identical in order to have +the grid cells match up along the boundaries between the top and bottom nodes. +The resolution of the Cubesphere grid is roughly (360$^\circ$ / (4 \* nX \* +sqrt(nProc/6))). For example, if `nX` = 18, and 24 processors are requested, +then the resolution = 360 / (4 \* 18 \* sqrt(4)) = 360 / (72 \* 2) = +2.5$^\circ$. As another example, to make a grid with 1$^\circ$ resolution with +96 processors, we get (1 = 360 / (4 \* nX \* 4) = 22.5 / nX), so `nX` has to be +around 22. (If `nX` were 22, and `nProc` = 96, then the resolution would be +1.02$^\circ$). + +### Vertical Resolution + +In all grids, the nAlts (`nZ`) are not parallelized, so the number of points +in the `k` direction is what is specified by the user. For the `sphere` and +`cubesphere` grids, this is the number of altitude points. On the `dipole` grid, +this is the number of points along the dipole flux tube. + +```json + "neuGrid" : { + "Shape" : "sphere", + "LatRange" : [-90.0, 90.0], + "nLatsPerBlock" : 18, + "LonRange" : [0.0, 360.0], + "nLonsPerBlock" : 36, + "nAlts" : 50, + "MinAlt" : 100.0, + "dAltkm" : 5.0, + "dAltScale" : 0.25, + "IsUniformAlt" : true, + "AltFile" : ""}, +``` + +```json + "ionGrid": { + "Shape": "dipole4", + "nLonsPerBlock": 36, + "nLatsPerBlock": 18, + "nAlts": 100, + "LatRange": [10, 80], + "AltRange": [80.0, 1000], + "LonRange": [0.0, 360.0]}, +``` + +The dipole grid has both open field-lines and closed field-lines. The closed +field-lines are near the equator, while the open field-lines are near the poles. +The variable `MaxAlt` sets where the differentiation occurs - if the apex +height of all field-lines on this block are above this altitude, then it is open. \ No newline at end of file diff --git a/doc/indices.md b/doc/internals/indices.md similarity index 93% rename from doc/indices.md rename to doc/internals/indices.md index 5949ea93..8dc2e20f 100644 --- a/doc/indices.md +++ b/doc/internals/indices.md @@ -1,5 +1,5 @@ -Supported Indices within Aether (with internal id): +# Supported Indices within Aether (with internal id) F10.7: Solar index (f107) @@ -26,4 +26,3 @@ AE: Auroral electrojet index in nT (ae) AU: Auroral electrojet upper index in nT (au) AL: Auroral electrojet lower index in nT (al) - diff --git a/doc/internals/interpolation.md b/doc/internals/interpolation.md new file mode 100644 index 00000000..4eb0e08d --- /dev/null +++ b/doc/internals/interpolation.md @@ -0,0 +1,46 @@ + +# How to use the built in interpolator in Aether + +Before attempting interpolation, you need to have the geogrid, some +grids where you want to perform the interpolation (the size of the +grid should match exactly with the geogrid, and the values in the grid +should represent the quantity at the center of cells in the geogrid), +and a set of points at which you want to interpolate the values. + +First, place the longitude, latitude, and altitude of the points into +three different vectors. For example, if you have points p1 (lon 180, +lat 0, alt 10000), p2 (lon 90, lat -30, alt 15000), p3 (lon 270, lat +40, alt 10000), and p4 (lon 0, lat 0, alt 15000), then you should +create three vectors as follows: + +```bash +std::vector Lons = {180, 90, 270, 0}; +std::vector Lats = {0, -30, 40, 0}; +std::vector Alts = {10000, 15000, 10000, 15000}; +``` +Second, set the interpolation coefficients. Continuing with the +previous example, assuming you have a geogrid named "geo_grid," you +should call: + +```bash +geo_grid.set_interpolation_coefs(Lons, Lats, Alts); +``` + +All subsequent calls to geo_grid.get_interpolation_values will use +these coefficients until geo_grid.set_interpolation_coefs is called +again (and the coefficients are updated to the newly set ones). + +Finally, obtain the values at the set of points. Continuing with the +previous example, if you want to perform interpolation on "arma_cube +data1" and "arma_cube data2" with the set of points, you can execute: + +```bash +std::vector ans1 = geo_grid.get_interpolation_values(data1); +std::vector ans2 = geo_grid.get_interpolation_values(data2); +``` + +The first element in "ans1" (i.e., ans1[0]) represents the +interpolated value for the quantity "data1" at point p1 (lon 180, lat +0, alt 10000), and the second element is the result for point p2, and +so on. This is the same for "ans2", except that it is for the quantity +"data2". diff --git a/doc/running_aether.md b/doc/running_aether.md deleted file mode 100644 index 8c2d2a81..00000000 --- a/doc/running_aether.md +++ /dev/null @@ -1,223 +0,0 @@ -# Running Aether - -See the installation.md document for how to install Aether. - -## The first run - -Once you have compiled you can run Aether. To remember which runs you're doing, -we recommend creating a specific directory for each run. This can be done by -copying the default run directory to have a special name, like this: -```bash -cd .. -cp -R share/run ./run.first_run -``` - -This creates the directory where you will do your run. In that directory is a link to the aether executable and an input file called aether.json. - -You can then run the executable from the directory you created. -```bash -cd run.first_run -./aether -``` -You should see something like: -```bash -run.first_run% ./aether -> Need to NOT adjust F10.7, but that isn't included yet!!! -> Writing file : 3DALL_20110320_000000 -> Writing file : 3DBFI_20110320_000000 -> Wall Time : 4s (left : 1111h); Current Time : 2011 3 20 0 0 0 0 -> Wall Time : 4s (left : 23m); Current Time : 2011 3 20 0 0 10 0 -> Wall Time : 5s (left : 14m); Current Time : 2011 3 20 0 0 20 0 -> Wall Time : 5s (left : 9m); Current Time : 2011 3 20 0 0 30 0 -> Wall Time : 5s (left : 7m); Current Time : 2011 3 20 0 0 40 0 -> Wall Time : 6s (left : 7m); Current Time : 2011 3 20 0 0 50 0 -> Wall Time : 6s (left : 5m); Current Time : 2011 3 20 0 1 0 0 -> Wall Time : 6s (left : 5m); Current Time : 2011 3 20 0 1 10 0 -> Wall Time : 7s (left : 5m); Current Time : 2011 3 20 0 1 20 0 -> Wall Time : 7s (left : 4m); Current Time : 2011 3 20 0 1 30 0 -etc. -``` - -The successful end of this will show a timing summary, similar to: -```bash ->main>advance>Chemistry::calc_chemistry - nTimes called : 720 - timing_total (s) : 1.52599 ->main>advance>Ions::calc_ion_temperature - nTimes called : 720 - timing_total (s) : 19.0279 ->main>advance>Neutrals::exchange - nTimes called : 720 - timing_total (s) : 2.94398 -``` - -## Output Files - -Aether outputs to a subdirectory called UA/output. At this time, all processors within the Aether run output their own files and they can be combined using the post processor. - -### Blocks - -Aether is a block-based code, so the domain is split up into different blocks that hold a given volume (for spherical grids, this is some range of latitude, longitude and altitude; for other grids it could differ). If you asked for (for example) 4 processors, then the Earth would be broken up into 4 different blocks and each output would consist of 4 different blocks. - -### Ensembles - -Aether can run the same simulation multiple times simultaneously with different drivers and internal parameters. The collection of these simulations is called an ensemble, with each individual simulation called a member. All of the ensemble members output to the UA/output directory. See the ensembles.md document to learn more about ensembles. - -### Post processing - -Because there can be multiple blocks and multiple ensemble members, there is a post processor that can pull all of the files together. By default, the post processor combines all of the block files for one ensemble member for one time into one file. This means that if there are 25 hourly outputs requested, there will be 25 total files for each ensemble member. - -If there is more than one simulation, then the post processor will create a mean file for each time. If there are more than two ensemble members, a standard deviation file is also created. The mean and standard deviations are calculated across ensemble members. - -To run the post processor, do the following: - -```bash -cd UA/output -../../../srcPython/post_process.py -``` - -By default, this will also leave the raw files and will produce plots just to make sure that everything is working ok. If you don't need the raw files (there is not a good reason to keep these, unless you are debugging the post processor), you can run the post-processor with the "-rm" argument. If you don't want any plots, you can run with the "-alt=-1" argument. An example of this is (this is how it is often run): - -```bash -../../../srcPython/post_process.py -rm -alt=-1 -``` - -If you are going to be using Aether a lot, you may want to copy the post-processor into your bin directory. - -## Input Files - -Aether reads in a bunch of files, most of which are specified by the settings file. In order to minimize the number of places where new settings need to be specified, Aether uses a defaults file that sets the generic defaults of the model. This file is in UA/inputs/defaults.json. - -## defaults.json file - -This is a json file that sets all of the defaults within Aether. This file should never be modified! - -### For Developers - -Within Aether, the inputs.cpp file has a large handful of of get_ routines to get the values of the settings that the user has set. - -## aether.json file - -The file aether.json is read in AFTER the defaults file and these settings overwrite the defaults. So, if you want to modify the default settings, simply copy a setting out of defaults.json and paste it into aether.json. Then, you can modify the setting in aether.json. - -Because the files are json files, you don't actually have to set all of the subsettings within a specific setting. For example, within the defaults.json file, the EUV setting is: - -```bash - "Euv" : { - "doUse" : true, - "Model" : "euvac", - "File" : "UA/inputs/euv.csv", - "IncludePhotoElectrons" : true, - "HeatingEfficiency" : 0.05, - "dt" : 60.0}, -``` - -If you simply want to turn off the EUV, you can insert this into the aether.json file: - -```bash - "Euv" : { - "doUse" : false}, -``` - -or, if you wanted to use the 59 wavelength bins instead of the 37 EUVAC bins, you could do: - -```bash - "Euv" : { - "File" : "UA/inputs/euv_59.csv"}, -``` - -## planet.in file - -Within the input file, the planet file can be set: - -```bash - "Planet" : { - "name" : "earth", - "file": "UA/inputs/earth.in"}, -``` - -This file defines the neutrals and ions to be modeled. For example: - -```bash -#NEUTRALS -name, mass, vibration, thermal_cond, thermal_exp, advect, BC -O, 16, 5, 5.6e-4, 0.69, 1, 5.0e17 -N, 14, 5, 5.6e-4, 0.69, 1, 2.5e11 -O2, 32, 7, 3.6e-4, 0.69, 1, 4.0e18 -N2, 28, 7, 3.6e-4, 0.69, 1, 1.7e19 -NO, 30, 7, 3.6e-4, 0.69, 1, 5.4e14 -He, 4, 5, 5.6e-4, 0.69, 1, 1.5e14 -N_2D, 14, 5, 5.6e-4, 0.69, 0, 2.5e9 -N_2P, 14, 5, 5.6e-4, 0.69, 0, 2.5e7 -H, 1, 5, 5.6e-4, 0.69, 0, 3.0e13 -O_1D, 16, 5, 5.6e-4, 0.69, 0, 1.0e10 -CO2, 46, 7, 3.6e-4, 0.69, 0, 4.5e15 -``` - -This is a comma seperated list that includes: -- name - this is the common name of the species -- mass - the atomic mass of the species -- vibration - the degrees of freedom for the species -- thermal_cond - the thermal conductivity coeficient of the species -- thermal_exp - the exponent that is put on the temperature (Lambda = A * T^B) -- advect - whether the species is advected or not -- BC - the lower boundary condition on the species density - -```bash -#IONS -name, mass, charge, advect -O+, 16, 1, 1 -O2+, 32, 1, 0 -N2+, 28, 1, 0 -NO+, 30, 1, 0 -N+, 14, 1, 0 -He+, 4, 1, 1 -O+_2D, 16, 1, 0 -O+_2P, 16, 1, 0 -``` - -This is a comma separated list that includes: -- name - this is the common name of the species -- mass - the atomic mass of the species -- charge - the charge of the species -- advect - whether the species is advected or not - -```bash -#TEMPERATURE -alt, temp -100.0, 200.0 -200.0, 800.0 -300.0, 800.0 -``` - -Within the input file (i.e., aether.json), the following can be set: - -```bash - "InitialConditions" : { - "type" : "Planet"}, - - "BoundaryConditions" : { - "type" : "Planet"}, -``` - -If these are set to "Planet", then the temperature profile is set as the initial condition. If the boundary condition is set to "Planet", then the lowest altitude is used as a boundary condition on the temperature. - -## orbits.csv file - -This file contains all of the orbital, mass, rotation, and magnetic field characteristics of the planets. All of the planets within the solar system are included. Other planets (like exo-planets or artificial planets) can be included by adding lines. - -## chemistry file - -The chemistry file defines all of the chemical reactions within the system. - -For example: -```bash -He+ + e- -> He, with R = 4.8e-18 * (250 / Te) ^ 0.7 -``` -With an exothermal energy of xxx. Also, the uncertainty of the reaction can be set too (set to 10%, or 0.1). - -```bash -R11,He+,e-,,,He,,,4.80E-18,(250/Te)^0.7,,1,0,,0.1,,,,gitm,250,Te,0.7,,,,1, -``` - - diff --git a/doc/student.md b/doc/student.md index 669c1bff..5ba7c855 100644 --- a/doc/student.md +++ b/doc/student.md @@ -1,6 +1,5 @@ # Student Walk Through of Aether - ## Start with the Basics 0. [Using the terminal - Unix commands](https://ubuntu.com/tutorials/command-line-for-beginners#1-overview) @@ -13,26 +12,21 @@ 4. [Tutorial for git and GitHub](https://www.freecodecamp.org/news/git-and-github-for-beginners/) - ## Some Editors The Classics: 1. [Emacs](http://www.jesshamrick.com/2012/09/10/absolute-beginners-guide-to-emacs/) - -emacs can be installed using a package manager such as apt or port - + - emacs can be installed using a package manager such as apt or port 2. [vim](https://linuxconfig.org/vim-tutorial) 21st Century Editors: 1. Most people are using Visual Studio Code to work on Aether. - 2. There are always popular Integrated Development Environments (IDEs) that can be used to edit, develop, and test code. If you use one and develop on Aether, please feel free to update this section. - ## Install Aether for Development Make sure you have all of the dependencies installed (see installation.md). @@ -40,17 +34,13 @@ Then start by creating a new fork of the Aether repository on GitHub. To do this: 1. Go to the Aether repository and click on "Fork" then "+ Create a new fork" - 2. Unclick the "Copy the main branch only" checkbox - 3. Click "Create fork" - 4. GitHub will take you to this repository automatically. It is now your "version" of Aether, and all development will be done here. We will use the username "YourRepo" instead of your actual repository in the examples below. - ```bash git clone https://github.com/YourRepo/Aether cd Aether @@ -58,8 +48,8 @@ git checkout develop ``` To compile Aether, you need to make sure you have all of the dependencies -installed (see the main README.md in the Aether directory), and then run -these commands: +installed (see the main README.md in the Aether directory or [this +page](installation/dependencies.md)), and then run these commands: ```bash mkdir build @@ -68,21 +58,24 @@ cmake .. make ``` -Once you have compiled you can run Aether. To remember which runs you're doing, +Once you have compiled, you can run Aether. To remember which runs you're doing, we recommend creating a specific directory for each run. This can be done by -copying the default run directory to have a special name, like this: +copying the default run directory to have a special name, like: + ```bash cd .. cp -R share/run ./run.test ``` Now, run the executable from the directory you created. + ```bash cd run.test ./aether ``` You should see something like: + ```bash run.test% ./aether > Need to NOT adjust F10.7, but that isn't included yet!!! @@ -102,6 +95,7 @@ etc. ``` The successful end of this will show a timing summary, similar to: + ```bash >main>advance>Chemistry::calc_chemistry nTimes called : 720 @@ -116,13 +110,15 @@ The successful end of this will show a timing summary, similar to: Now, edit the aether.json file and add the following after the "Debug" section, where "Your Name" should be your name: + ```bash "Student" : { - "name" : "Your Name", - "is" : true }, + "name" : "[Your Name]", + "is" : true }, ``` Then, run aether again. Your output should now look something like this: + ```bash run.test% ./aether > Hello Aaron - welcome to Aether! @@ -147,6 +143,7 @@ run.test% ./aether If something happened that made the input file unreadable, you'll instead see something like this: + ```bash Error in reading input file! input initialization failed! @@ -205,4 +202,3 @@ While you are awaiting a response from your advisor, you can check out the Issues part of the Aether github site. That will let you know all of the outstanding issues that are being worked on. Maybe you can contribute to some of these! - diff --git a/doc/debug.md b/doc/usage/debug.md similarity index 89% rename from doc/debug.md rename to doc/usage/debug.md index 9da04050..d2b5c706 100644 --- a/doc/debug.md +++ b/doc/usage/debug.md @@ -1,14 +1,17 @@ +# Debug The Debug command in the input file sets the type and amount of information that is fed to the user. An example of the Debug command is: +```json "Debug" : { - "iVerbose" : 0, - "dt" : 60.0, - "TimingPercent" : 1.0, - "iTimingDepth" : 5, - "iProc" : 0}, + "iVerbose" : 0, + "dt" : 60.0, + "TimingPercent" : 1.0, + "iTimingDepth" : 5, + "iProc" : 0}, +``` The "iVerbose" command can be used under "Debug" in aether.json to set the overall verbose level in the code. This sets the amount of @@ -37,6 +40,7 @@ certain functions by specifying the function names and the corresponding verbose levels using the "iFunctionVerbose" command as follows: +```json "Debug" : { "iVerbose" : 0, "iFunctionVerbose" : { @@ -44,8 +48,9 @@ follows: "func2" : 2}, "dt" : 10.0 } +``` When a sub-function is entered, the verbose level stays the same if the verbose level for that sub-function is not specified. When that sub-function exits, the verbose level will accordingly be set back to -that of the function it is returning to. \ No newline at end of file +that of the function it is returning to. diff --git a/doc/usage/running_aether.md b/doc/usage/running_aether.md new file mode 100644 index 00000000..7702d8e9 --- /dev/null +++ b/doc/usage/running_aether.md @@ -0,0 +1,353 @@ +# Running Aether + +This document assumes you have already downloaded and built the Aether model. If +not, you should return to [one](../../README.md) of +[these](../installation/installation.md) pages before continuing. + +- [The first run](#the-first-run) + - [Running in 1D](#running-in-1d) + - [Using OpenMP](#using-openmp) +- [Output Files](#output-files) + - [Blocks](#blocks) + - [Ensembles](#ensembles) + - [Post processing](#post-processing) +- [Input Files](#input-files) +- [defaults.json file](#defaultsjson-file) +- [For Developers](#for-developers) +- [aether.json file](#aetherjson-file) +- [planet.in file](#planetin-file) +- [orbits.csv file](#orbitscsv-file) +- [chemistry file](#chemistry-file) + + +## The first run + +Once you have compiled you can run Aether. To remember which runs you're doing, +we recommend creating a specific directory for each run. This can be done by +copying the default run directory to have a special name, like this: + +```bash +cd .. +cp -R share/run ./run.first_run +``` + +This creates the directory where you will do your run. In that directory is a +link to the aether executable and an input file called aether.json. + +You can then run the executable from the directory you created. This uses four cores, +which is the minimum for the dipole grid. + +```bash +cd run.first_run +mpirun -np 4 ./aether +``` + +You should see something like: + +```bash +run.first_run% mpirun -np 4 ./aether +> Need to NOT adjust F10.7, but that isn't included yet!!! +> Writing file : 3DALL_20110320_000000 +> Writing file : 3DBFI_20110320_000000 +> Wall Time : 4s (left : 1111h); Current Time : 2011 3 20 0 0 0 0 +> Wall Time : 4s (left : 23m); Current Time : 2011 3 20 0 0 10 0 +> Wall Time : 5s (left : 14m); Current Time : 2011 3 20 0 0 20 0 +> Wall Time : 5s (left : 9m); Current Time : 2011 3 20 0 0 30 0 +> Wall Time : 5s (left : 7m); Current Time : 2011 3 20 0 0 40 0 +> Wall Time : 6s (left : 7m); Current Time : 2011 3 20 0 0 50 0 +> Wall Time : 6s (left : 5m); Current Time : 2011 3 20 0 1 0 0 +> Wall Time : 6s (left : 5m); Current Time : 2011 3 20 0 1 10 0 +> Wall Time : 7s (left : 5m); Current Time : 2011 3 20 0 1 20 0 +> Wall Time : 7s (left : 4m); Current Time : 2011 3 20 0 1 30 0 +etc. +``` + +The successful end of this will show a timing summary, similar to: + +```bash +>main>advance>Chemistry::calc_chemistry + nTimes called : 720 + timing_total (s) : 1.52599 +>main>advance>Ions::calc_ion_temperature + nTimes called : 720 + timing_total (s) : 19.0279 +>main>advance>Neutrals::exchange + nTimes called : 720 + timing_total (s) : 2.94398 +``` + +### Running in 1D + +If you want to quickly run Aether to test if things are working, there are a few changes +that need to be made to run in one dimension. + +1. Change the input file's, `aether.json`, value for the neutral and ion grids **both** +to `"sphere"`. No number! +2. Run the code with `./aether`. This will not use MPI, however armadillo may use +multiple OpenMP processes for math, so be careful on cluster login nodes. + +### Using OpenMP + +> This section is mostly a placeholder. Everything is correct, but has little +> effect on Aether's speed. This is only really a concern on laptops with low core counts +> or shared systems. + +Armadillo contains several optimizations which utilize OpenMP for parallelization beyond +the block decomposition on the entire sphere. Thus, runs on 4 MPI processors can benefit +from devoting additional processors to OpenMP parallelization. + +The number of OpenMP tasks Armadillo is able to utilize can be set before compiling or +at runtime. To change this *before* compiling, change the value of`ARMA_OPENMP_THREADS` +in the [Armadillo config.hpp file](../../share/include/armadillo_bits/config.hpp#173) +from 8. This will require re-compiling & possibly re-running `cmake`. The more flexible +option is to use a variable at runtime: + +The easier way to set the number of OpenMP threads is to use the variable +`OMP_NUM_THREADS`. This can be set before running the executable with +`export OMP_NUM_THREADS=2`, or at runtime with: + +```bash +OMP_NUM_THREADS=2 mpirun -np 4 ./aether +``` +At this stage in development, there is not much speedup available from OpenMP. For +example, the change in runtime from the default value of 8 (from Armadillo) and 1 +(disabling OpenMP) in a 10-minute run is about one minute, or about 10%. + +## Output Files + +Aether outputs to a subdirectory called UA/output. At this time, all processors +within the Aether run output their own files and they can be combined using the +post processor. + +### Blocks + +Aether is a block-based code, so the domain is split up into different blocks +that hold a given volume (for spherical grids, this is some range of latitude, +longitude and altitude; for other grids it could differ). If you asked for (for +example) 4 processors, then the Earth would be broken up into 4 different blocks +and each output would consist of 4 different blocks. + +### Ensembles + +Aether can run the same simulation multiple times simultaneously with different +drivers and internal parameters. The collection of these simulations is called +an ensemble, with each individual simulation called a member. All of the +ensemble members output to the UA/output directory. See the ensembles.md +document to learn more about ensembles. + +### Post processing + +Because there can be multiple blocks and multiple ensemble members, there is a +post processor that can pull all of the files together. By default, the post +processor combines all of the block files for one ensemble member for one time +into one file. This means that if there are 25 hourly outputs requested, there +will be 25 total files for each ensemble member. + +If there is more than one simulation, then the post processor will create a mean +file for each time. If there are more than two ensemble members, a standard +deviation file is also created. The mean and standard deviations are calculated +across ensemble members. + +To run the post processor, do the following: + +```bash +cd UA/output +../../../srcPython/post_process.py +``` + +By default, this will also leave the raw files and will produce plots just to +make sure that everything is working ok. If you don't need the raw files (there +is not a good reason to keep these, unless you are debugging the post +processor), you can run the post-processor with the "-rm" argument. If you +don't want any plots, you can run with the "-alt=-1" argument. An example of +this is (this is how it is often run): + +```bash +../../../srcPython/post_process.py -rm -alt=-1 +``` + +If you are going to be using Aether a lot, you may want to copy the +post-processor into your bin directory. + +## Input Files + +Aether reads in a bunch of files, most of which are specified by the settings +file. In order to minimize the number of places where new settings need to be +specified, Aether uses a defaults file that sets the generic defaults of the +model. This file is in UA/inputs/defaults.json. + +## defaults.json file + +This is a json file that sets all of the defaults within Aether. This file +should never be modified! + +## For Developers + +Within Aether, the inputs.cpp file has a large handful of of `get_` routines to +get the values of the settings that the user has set. + +To speedup builds, it can be faster to use Ninja instead of GNU make. Ninja +automatically parallelizes to fit your machine, can re-run cmake for small changes, and +has other small differences from GNU make. To use ninja for builds: + +1. Ensure it is installed. This can be done with conda or your system's package manager +(note on Ubuntu it is called "ninja-build) +2. Clear the GNU make build pecs from `build`. This is most easily done by removing the +`CMakeCache.txt` file, but you can remove the entire contents of the build directory. +3. Tell cmake to generate build scripts for Ninja. From `Aether/build/`, run: +`cmake -GNinja [any options] ../`. +4. Build with `ninja`. This will use as many cores asz your system has. + +The dfevelopment process can be further sped up since Ninja can change directories +before compiling. This is useful, for example, to not need to cd out of run when testing +changes. From `Aether/run/`, you can compile and run the code with the one-liner: + +```bash +ninja -C ../build && mpirun -np 4 ./aether +``` + +The `-C` flag specifies which directory to move to before building. Obviously, change it +if yours is different. When changing header files, Ninja often catches the change and +will re-run cmake automatically. If not, you will need to remove `CMakeCache.txt` and +re-run cmake (again using the `-GNinja` flag). + +## aether.json file + +The file aether.json is read in AFTER the defaults file and these settings +overwrite the defaults. So, if you want to modify the default settings, simply +copy a setting out of defaults.json and paste it into aether.json. Then, you +can modify the setting in aether.json. + +Because the files are json files, you don't actually have to set all of the +subsettings within a specific setting. For example, within the defaults.json +file, the EUV setting is: + +```bash + "Euv" : { + "doUse" : true, + "Model" : "euvac", + "File" : "UA/inputs/euv.csv", + "IncludePhotoElectrons" : true, + "HeatingEfficiency" : 0.05, + "dt" : 60.0}, +``` + +If you simply want to turn off the EUV, you can insert this into the aether.json +file: + +```bash + "Euv" : { + "doUse" : false}, +``` + +or, if you wanted to use the 59 wavelength bins instead of the 37 EUVAC bins, +you could do: + +```bash + "Euv" : { + "File" : "UA/inputs/euv_59.csv"}, +``` + +## planet.in file + +Within the input file, the planet file can be set: + +```bash + "Planet" : { + "name" : "earth", + "file": "UA/inputs/earth.in"}, +``` + +This file defines the neutrals and ions to be modeled. For example: + +```bash +#NEUTRALS +name, mass, vibration, thermal_cond, thermal_exp, advect, BC +O, 16, 5, 5.6e-4, 0.69, 1, 5.0e17 +N, 14, 5, 5.6e-4, 0.69, 1, 2.5e11 +O2, 32, 7, 3.6e-4, 0.69, 1, 4.0e18 +N2, 28, 7, 3.6e-4, 0.69, 1, 1.7e19 +NO, 30, 7, 3.6e-4, 0.69, 1, 5.4e14 +He, 4, 5, 5.6e-4, 0.69, 1, 1.5e14 +N_2D, 14, 5, 5.6e-4, 0.69, 0, 2.5e9 +N_2P, 14, 5, 5.6e-4, 0.69, 0, 2.5e7 +H, 1, 5, 5.6e-4, 0.69, 0, 3.0e13 +O_1D, 16, 5, 5.6e-4, 0.69, 0, 1.0e10 +CO2, 46, 7, 3.6e-4, 0.69, 0, 4.5e15 +``` + +This is a comma seperated list that includes: + +- name - this is the common name of the species +- mass - the atomic mass of the species +- vibration - the degrees of freedom for the species +- thermal_cond - the thermal conductivity coeficient of the species +- thermal_exp - the exponent that is put on the temperature (Lambda = A * T^B) +- advect - whether the species is advected or not +- BC - the lower boundary condition on the species density + +```bash +#IONS +name, mass, charge, advect +O+, 16, 1, 1 +O2+, 32, 1, 0 +N2+, 28, 1, 0 +NO+, 30, 1, 0 +N+, 14, 1, 0 +He+, 4, 1, 1 +O+_2D, 16, 1, 0 +O+_2P, 16, 1, 0 +``` + +This is a comma separated list that includes: + +- name - this is the common name of the species +- mass - the atomic mass of the species +- charge - the charge of the species +- advect - whether the species is advected or not + +```bash +#TEMPERATURE +alt, temp +100.0, 200.0 +200.0, 800.0 +300.0, 800.0 +``` + +Within the input file (i.e., aether.json), the following can be set: + +```bash + "InitialConditions" : { + "type" : "Planet"}, + + "BoundaryConditions" : { + "type" : "Planet"}, +``` + +If these are set to "Planet", then the temperature profile is set as the initial +condition. If the boundary condition is set to "Planet", then the lowest +altitude is used as a boundary condition on the temperature. + +## orbits.csv file + +This file contains all of the orbital, mass, rotation, and magnetic field +characteristics of the planets. All of the planets within the solar system are +included. Other planets (like exo-planets or artificial planets) can be +included by adding lines. + +## chemistry file + +The chemistry file defines all of the chemical reactions within the system. + +For example: + +```bash +He+ + e- -> He, with R = 4.8e-18 * (250 / Te) ^ 0.7 +``` + +With an exothermal energy of xxx. Also, the uncertainty of the reaction can be +set too (set to 10%, or 0.1). + +```bash +R11,He+,e-,,,He,,,4.80E-18,(250/Te)^0.7,,1,0,,0.1,,,,gitm,250,Te,0.7,,,,1, +``` diff --git a/edu/examples/Advection/advect.cpp b/edu/examples/Advection/advect.cpp index 8fe26261..76fac277 100644 --- a/edu/examples/Advection/advect.cpp +++ b/edu/examples/Advection/advect.cpp @@ -1,7 +1,31 @@ // g++ -I/usr/local/include -I/Users/ridley/Software/Json/json/include main.cpp +// g++ -I/usr/local/include -o advect1d advect.cpp + +/// The armadillo library is to allow the use of 3d cubes and other +/// array types, with array math built in. This eliminates loops! +#include + +/// This is used for timing and the random seed generator: +#include + +// Types +// Precision compile-time aliasing +#ifdef AETHER_USE_PRECISION_DOUBLE +/// Precision type chosen to be `double` through `AETHER_USE_PRECISION_DOUBLE` +using precision_t = double; +#else +/// Precision type compile-time default to float. +using precision_t = float; +#endif + +/// Armadillo type vector (single column) with compile-time precision. +using arma_vec = arma::Col; +/// Armadillo type matrix (two dimension) with compile-time precision. +using arma_mat = arma::Mat; +/// Armadillo type cube (three dimension) with compile-time precision. +using arma_cube = arma::Cube; -#include "../../../include/aether.h" #include // --------------------------------------------------------- @@ -17,10 +41,40 @@ arma_vec init_grid(int64_t nPts, int64_t nGCs) { for (int64_t i = -nGCs; i < nPts + nGCs; i++) { x(i + nGCs) = i * dx; } + precision_t maxX = x(nPts + nGCs - 1); + x = 100.0 * x / maxX; return x; } +// --------------------------------------------------------- +// grid stretched creation +// --------------------------------------------------------- + +arma_vec init_stretched_grid(int64_t nPts, int64_t nGCs) { + + precision_t dx = 1.0; + arma_vec x(nPts + nGCs * 2); + + precision_t factor = 1.0; + precision_t i2pi = 2.0 * 3.1415927 / (nPts-1); + + x(nGCs) = 0.0; + + for (int64_t i = 1; i < nPts + nGCs; i++) { + x(i + nGCs) = x(i - 1 + nGCs) + dx + factor * (1 + cos(i * i2pi)); + std::cout << "i : " << i << " " << cos(i * i2pi) << "\n"; + } + for (int64_t i = -1; i >= -nGCs; i--) { + x(i + nGCs) = x(i + 1 + nGCs) - dx - factor * (1 + cos(i * i2pi)); + std::cout << "i : " << i << " " << cos(i * i2pi) << "\n"; + } + precision_t maxX = x(nPts + nGCs - 1); + x = 100.0 * x / maxX; + + return x; +} + // --------------------------------------------------------- // bin edges // --------------------------------------------------------- @@ -80,6 +134,7 @@ arma_vec init_vel(int64_t nPts) { arma_vec vel(nPts); // all cells positive to right: vel.ones(); + vel = -1.0 * vel; return vel; } @@ -182,6 +237,43 @@ arma_vec calc_grad(arma_vec values, return gradients; } +// --------------------------------------------------------- +// Limiter on values +// projected is assumed to be on the edge between the +// i-1 and i cell (i-1/2) +// limited is returned at edges +// --------------------------------------------------------- + +arma_vec limiter_value(arma_vec projected, + arma_vec values, + int64_t nPts, + int64_t nGCs) { + + int64_t iStart = 0; + int64_t iEnd = nPts + 2 * nGCs; + + arma_vec limited = projected; + + precision_t mini, maxi; + + for (int64_t i = iStart + 1; i < iEnd - 1; i++) { + + mini = values(i-1); + if (values(i) < mini) + mini = values(i); + maxi = values(i-1); + if (values(i) > maxi) + maxi = values(i); + + if (limited(i) < mini) + limited(i) = mini; + if (limited(i) > maxi) + limited(i) = maxi; + + } + return limited; +} + // --------------------------------------------------------- // Project gradients + values to the right face, from the left // returned values are on the i - 1/2 edges @@ -209,6 +301,42 @@ arma_vec project_from_left(arma_vec values, return projected; } +// --------------------------------------------------------- +// Project gradients + values to the right face, from the left +// returned values are on the i - 1/2 edges +// (between i-1 and i cell center) +// --------------------------------------------------------- + +arma_vec project_from_left_new(arma_vec values, + arma_vec x_centers, + arma_vec x_edges, + int64_t nPts, + int64_t nGCs) { + int64_t iStart = 1; + int64_t iEnd = nPts + 2 * nGCs - 1; + + // Define at edges: + arma_vec projected(nPts + 2 * nGCs + 1); + projected.zeros(); + + precision_t dxei, dxci, dxcip1, r; + + // no gradient in the 0 or iEnd cells + for (int64_t i = iStart; i < iEnd; i++) { + dxei = x_edges(i + 1) - x_edges(i); + dxci = x_centers(i) - x_centers(i - 1); + dxcip1 = x_centers(i + 1) - x_centers(i); + r = dxcip1 / dxci; + projected(i + 1) = values(i) + + 0.5 * dxei * (values(i) - values(i - 1)) / dxci + + 0.125 * dxei * dxei * (values(i + 1) + r * values(i - 1) - (1 + r) * values(i)) / (dxci * dxcip1); + } + + projected = limiter_value(projected, values, nPts, nGCs); + + return projected; +} + // --------------------------------------------------------- // Project gradients + values to the left face, from the right @@ -238,40 +366,39 @@ arma_vec project_from_right(arma_vec values, } // --------------------------------------------------------- -// Limiter on values -// projected is assumed to be on the edge between the -// i-1 and i cell (i-1/2) -// limited is returned at edges +// Project gradients + values to the left face, from the right +// returned values are on the i - 1 edges +// (between i-1 and i cell center) // --------------------------------------------------------- -arma_vec limiter_value(arma_vec projected, - arma_vec values, - int64_t nPts, - int64_t nGCs) { - - int64_t iStart = 0; - int64_t iEnd = nPts + 2 * nGCs; - - arma_vec limited = projected; +arma_vec project_from_right_new(arma_vec values, + arma_vec x_centers, + arma_vec x_edges, + int64_t nPts, + int64_t nGCs) { + int64_t iStart = 1; + int64_t iEnd = nPts + 2 * nGCs - 1; - precision_t mini, maxi; + // Define at edges: + arma_vec projected(nPts + 2 * nGCs + 1); + precision_t dxei, dxci, dxcip1, r; - for (int64_t i = iStart + 1; i < iEnd - 1; i++) { - - mini = values(i-1); - if (values(i) < mini) - mini = values(i); - maxi = values(i-1); - if (values(i) > maxi) - maxi = values(i); + projected.zeros(); - if (limited(i) < mini) - limited(i) = mini; - if (limited(i) > maxi) - limited(i) = maxi; - + // no gradient in the 0 or iEnd cells + for (int64_t i = iStart; i < iEnd; i++) { + dxei = x_edges(i + 1) - x_edges(i); + dxci = x_centers(i) - x_centers(i - 1); + dxcip1 = x_centers(i + 1) - x_centers(i); + r = dxcip1 / dxci; + projected(i) = values(i) - + 0.5 * dxei * (values(i + 1) - values(i)) / dxcip1 + + 0.125 * dxei * dxei * (values(i + 1) + r * values(i - 1) - (1 + r) * values(i)) / (dxci * dxcip1); } - return limited; + + projected = limiter_value(projected, values, nPts, nGCs); + + return projected; } // --------------------------------------------------------- @@ -363,19 +490,21 @@ void output(arma_vec values, int main() { - precision_t dt = 0.01; - - int64_t nSteps = 3; - int64_t iStep; - - int64_t nPts = 60; + int64_t nPts = 200; int64_t nGCs = 2; int64_t nPtsTotal = nGCs + nPts + nGCs; arma_vec x = init_grid(nPts, nGCs); + //arma_vec x = init_stretched_grid(nPts, nGCs); arma_vec edges = calc_bin_edges(x); arma_vec widths = calc_bin_widths(edges); + precision_t dt = 0.1 * x(nPts + nGCs - 1) / nPts; + precision_t time = 0.0; + + int64_t nSteps = x(nPts + nGCs - 1) / dt; + int64_t iStep; + arma_vec grad_rho; arma_vec rhoL; arma_vec rhoR; @@ -392,19 +521,29 @@ int main() { exchange(vel, nPts, nGCs); output(rho, "rho.txt", false, nPts, nGCs); + output(x, "x.txt", false, nPts, nGCs); for (iStep = 0; iStep < nSteps; iStep++) { + + std::cout << "iStep = " << iStep << "; time = " << time << "\n"; + time = time + dt; grad_rho = calc_grad(rho, x, nPts, nGCs); // Right side of edge from left - rhoR = project_from_left(rho, grad_rho, +//rhoR = project_from_left(rho, grad_rho, +// x, edges, +// nPts, nGCs); + rhoR = project_from_left_new(rho, x, edges, nPts, nGCs); //rhoR = limiter_value(rhoR, rho, nPts, nGCs); // Left side of edge from left - rhoL = project_from_right(rho, grad_rho, +// rhoL = project_from_right(rho, grad_rho, +// x, edges, +// nPts, nGCs); + rhoL = project_from_right_new(rho, x, edges, nPts, nGCs); //rhoL = limiter_value(rhoL, rho, nPts, nGCs); @@ -413,13 +552,19 @@ int main() { grad_vel = calc_grad(vel, x, nPts, nGCs); // Right side of edge from left - velR = project_from_left(vel, grad_vel, +// velR = project_from_left(vel, grad_vel, +// x, edges, +// nPts, nGCs); + velR = project_from_left_new(vel, x, edges, nPts, nGCs); //velR = limiter_value(velR, vel, nPts, nGCs); // Left side of edge from left - velL = project_from_right(vel, grad_vel, +// velL = project_from_right(vel, grad_vel, +// x, edges, +// nPts, nGCs); + velL = project_from_right_new(vel, x, edges, nPts, nGCs); //velL = limiter_value(velL, vel, nPts, nGCs); diff --git a/edu/examples/Advection/cubesphere_equal_angle.cpp b/edu/examples/Advection/cubesphere_equal_angle.cpp new file mode 100644 index 00000000..3c3687e4 --- /dev/null +++ b/edu/examples/Advection/cubesphere_equal_angle.cpp @@ -0,0 +1,1757 @@ +/* + This is an example of a second order 2D solver for the Euler equations. + + to compile: + g++ -I/usr/local/include -I/Users/ridley/Software/Json/json/include -o cubesphere2d cubesphere2d.cpp + +*/ + +#include +#include + +using precision_t = double; + +/// Armadillo type vector (single column) with compile-time precision. +using arma_vec = arma::Col; +/// Armadillo type matrix (two dimension) with compile-time precision. +using arma_mat = arma::Mat; +/// Armadillo type cube (three dimension) with compile-time precision. +using arma_cube = arma::Cube; + +precision_t cPI = 3.141592653589793; +precision_t cTWOPI = 2.0 * cPI; +precision_t cRtoD = 180.0 / cPI; +precision_t cPIdiv2 = cPI / 2; +precision_t cGamma = 5.0 / 3.0; // Specific ratio of heat +precision_t cKb = 1.38e-23; +precision_t mmm = 16.0 * 1.67e-27; + +// --------------------------------------------------------- +// A couple of global variables +// --------------------------------------------------------- + +int64_t verbose = 1; + +struct projection_struct { + arma_mat gradLR; + arma_mat gradDU; + arma_mat R; + arma_mat L; + arma_mat U; + arma_mat D; +}; + +struct grid_struct { + + // sizes: + int64_t nXt, nYt, nGCs; + int64_t iXfirst_, iXlast_; + int64_t iYfirst_, iYlast_; + + // Positions: + arma_mat lon; + arma_mat lat; + + // These are for Ronchi et al., JCP 124, 93-114, 1996 + arma_mat X, Y, Z, C, D, d; + arma_mat dlx, dln, dS; + // xi is the LR direction + // nu is the UD direction + arma_mat xi, nu; + arma_mat x, y, r; + arma_mat Apn, Apx, Atn, Atx; + arma_mat Axt, Axp, Ant, Anp; + precision_t dxi, dnu, R; + arma_mat alpha; + arma_mat sinAlpha; + + arma_mat nXiLon; + arma_mat nXiLat; + arma_mat nNuLon; + arma_mat nNuLat; + // These are eq28 of Nair (g lower ij): + arma_mat gl11, gl12, gl21, gl22; + // These are eq29 of Nair (g upper ij): + arma_mat sqrtg; + arma_mat gu11, gu12, gu21, gu22; + // These are eq32 of Nair (sphere-to-cube): + arma_mat s2c11, s2c12, s2c21, s2c22; + arma_mat c2s11, c2s12, c2s21, c2s22; +}; + +// --------------------------------------------------------- +// +// --------------------------------------------------------- + +precision_t calc_dt(arma_mat dx, + arma_mat dy, + arma_mat &wsLR, + arma_mat &wsDU, + int64_t nGCs) { + + if (verbose > 2) + std::cout << " --> calc_dt\n"; + + int64_t nX = wsLR.n_rows; + int64_t nY = wsLR.n_cols; + + precision_t wsX, wsY, dtX, dtY, dt; + + dt = 1e32; + + for (int64_t j = nGCs; j < nY - nGCs; j++) { + for (int64_t i = nGCs; i < nX - nGCs; i++) { + wsX = (wsLR(i + 1, j) + wsLR(i, j)) / 2; + dtX = dx(i, j) / wsX; + wsY = (wsDU(i, j + 1) + wsDU(i, j)) / 2; + dtY = dy(i, j) / wsY; + + if (dtX < dt) + dt = dtX; + + if (dtY < dt) + dt = dtY; + } + } + + return dt; +} + +/** + * Output function + * + * @param values Values + * @param filename FileName + * @param DoAppend + */ +void output(arma_mat &values, + std::string filename, + bool DoAppend) { + + std::ofstream outfile; + + if (DoAppend) + outfile.open(filename, std::ios_base::app); + else { + outfile.open(filename); + int64_t nX = values.n_rows; + int64_t nY = values.n_cols; + outfile << nX << " " << nY << "\n"; + } + + outfile << values; + outfile.close(); +} + +/** + * Transform spherical coordinates to 3D Cartesian + * + * doi: 10.1016/j.jcp.2007.07.022 + * Section 3, Eqn (23) + * + * @return dh Great Circle Distance between two points + */ +arma_vec sph2cart(precision_t lon, + precision_t lat, + precision_t r) { + arma_vec xyz(3); + xyz(0) = r * std::cos(lat) * std::cos(lon); + xyz(1) = r * std::cos(lat) * std::sin(lon); + xyz(2) = r * std::sin(lat); + return xyz; +} + +grid_struct init_grid_equidistant(int iFace, + int64_t nX, + int64_t nY, + int64_t nGCs, + precision_t R, + precision_t xOff, + precision_t yOff) { + + double a = R / std::sqrt(3); + + grid_struct grid; + int64_t nXt = nX + 2 * nGCs; + int64_t nYt = nY + 2 * nGCs; + + grid.nXt = nXt; + grid.nYt = nYt; + grid.nGCs = nGCs; + grid.iXfirst_ = nGCs; + grid.iYfirst_ = nGCs; + grid.iXlast_ = nX + nGCs; + grid.iYlast_ = nY + nGCs; + + // Positions: + grid.lon.resize(nXt, nYt); + grid.lat.resize(nXt, nYt); + + grid.x.resize(nXt, nYt); + grid.y.resize(nXt, nYt); + grid.r.resize(nXt, nYt); + grid.xi.resize(nXt, nYt); + grid.nu.resize(nXt, nYt); + grid.X.resize(nXt, nYt); + grid.Y.resize(nXt, nYt); + grid.Z.resize(nXt, nYt); + grid.C.resize(nXt, nYt); + grid.D.resize(nXt, nYt); + grid.d.resize(nXt, nYt); + grid.dlx.resize(nXt, nYt); + grid.dln.resize(nXt, nYt); + grid.dS.resize(nXt, nYt); + + grid.s2c11.resize(nXt, nYt); + grid.s2c12.resize(nXt, nYt); + grid.s2c21.resize(nXt, nYt); + grid.s2c22.resize(nXt, nYt); + grid.c2s11.resize(nXt, nYt); + grid.c2s12.resize(nXt, nYt); + grid.c2s21.resize(nXt, nYt); + grid.c2s22.resize(nXt, nYt); + + grid.gl11.resize(nXt, nYt); + grid.gl12.resize(nXt, nYt); + grid.gl21.resize(nXt, nYt); + grid.gl22.resize(nXt, nYt); + grid.gu11.resize(nXt, nYt); + grid.gu12.resize(nXt, nYt); + grid.gu21.resize(nXt, nYt); + grid.gu22.resize(nXt, nYt); + grid.sqrtg.resize(nXt, nYt); + + double iD, iL, x, y, theta, phi, r; + + double dx = 2 * a / nX; + double dy = 2 * a / nY; + double r3, r4; + double R2 = R * R; + + // Loop through each point and derive the coordinate + // DU is y-direction (down-up) + // LR is x-direction (left-right) + for (int iDU = 0; iDU < nYt; iDU++) { + for (int iLR = 0; iLR < nXt; iLR++) { + + // the offsets are so we can find cell centers, edges, and corners + // Centers assume Off = 0.5, which edges assume Off = 0 + double iD = iDU - nGCs + yOff; + double iL = iLR - nGCs + xOff; + + x = -a + iL * dx; + y = -a + iD * dy; + phi = std::atan(x / a); + // y = a * tan(theta) * sec(phi) => y * cos(phi) = a * tan(theta) + theta = std::atan(y * std::cos(phi) / a); + //std::cout << "Grid creation : " + // << iDU << " " + // << iLR << " " + // << y << " " + // << x << " " + // << theta * cRtoD << " " + // << phi * cRtoD << "\n"; + grid.lon(iLR, iDU) = phi; + grid.lat(iLR, iDU) = theta; + grid.X(iLR, iDU) = R * std::cos(theta) * std::cos(phi); + grid.Y(iLR, iDU) = R * std::cos(theta) * std::sin(phi); + grid.Z(iLR, iDU) = R * std::sin(theta); + grid.r(iLR, iDU) = std::sqrt(a * a + x * x + y * y); + + // Equation 28 of Nair: + r4 = r * r * r * r; + grid.gl11(iLR, iDU) = R2 / r4 * (a * a + y * y); + grid.gl12(iLR, iDU) = - R2 / r4 * (x * y); + grid.gl21(iLR, iDU) = - R2 / r4 * (x * y); + grid.gl22(iLR, iDU) = R2 / r4 * (a * a + x * x); + // Equation 29 of Nair: + r3 = r * r * r; + grid.sqrtg(iLR, iDU) = R2 * a / r3; + grid.gu11(iLR, iDU) = grid.gl22(iLR, iDU) / grid.sqrtg(iLR, iDU); + grid.gu12(iLR, iDU) = - grid.gl12(iLR, iDU) / grid.sqrtg(iLR, iDU); + grid.gu21(iLR, iDU) = - grid.gl21(iLR, iDU) / grid.sqrtg(iLR, iDU); + grid.gu22(iLR, iDU) = grid.gl11(iLR, iDU) / grid.sqrtg(iLR, iDU); + + grid.s2c11(iLR, iDU) = a / (R * std::cos(theta) * std::cos(phi)) * + (1 / std::cos(theta)); + grid.s2c12(iLR, iDU) = 0.0; + grid.s2c21(iLR, iDU) = a / (R * std::cos(theta) * std::cos(phi)) * + (std::tan(theta) * std::tan(phi)); + grid.s2c22(iLR, iDU) = a / (R * std::cos(theta) * std::cos(phi)) * + (1 / std::cos(phi)); + grid.c2s11(iLR, iDU) = (R * std::cos(theta) * std::cos(phi)) / a * std::cos( + theta); + grid.c2s12(iLR, iDU) = 0.0; + grid.c2s21(iLR, iDU) = -(R * std::cos(theta) * std::cos(phi)) / a * + std::sin(theta) * std::sin(phi); + grid.c2s22(iLR, iDU) = (R * std::cos(theta) * std::cos(phi)) / a * std::cos( + phi); + + } + } + + //xxx + return grid; +} + + +grid_struct init_grid(int iFace, + int64_t nX, int64_t nY, int64_t nGCs, + precision_t R, + precision_t xOff, precision_t yOff) { + + grid_struct grid; + int64_t nXt = nX + 2 * nGCs; + int64_t nYt = nY + 2 * nGCs; + + grid.nXt = nXt; + grid.nYt = nYt; + grid.nGCs = nGCs; + grid.iXfirst_ = nGCs; + grid.iYfirst_ = nGCs; + grid.iXlast_ = nX + nGCs; + grid.iYlast_ = nY + nGCs; + + // Positions: + grid.lon.resize(nXt, nYt); + grid.lat.resize(nXt, nYt); + + grid.xi.resize(nXt, nYt); + grid.nu.resize(nXt, nYt); + grid.X.resize(nXt, nYt); + grid.Y.resize(nXt, nYt); + grid.C.resize(nXt, nYt); + grid.D.resize(nXt, nYt); + grid.d.resize(nXt, nYt); + grid.dlx.resize(nXt, nYt); + grid.dln.resize(nXt, nYt); + grid.dS.resize(nXt, nYt); + + grid.Axt.resize(nXt, nYt); + grid.Axp.resize(nXt, nYt); + grid.Ant.resize(nXt, nYt); + grid.Anp.resize(nXt, nYt); + + grid.Apn.resize(nXt, nYt); + grid.Apx.resize(nXt, nYt); + grid.Atn.resize(nXt, nYt); + grid.Atx.resize(nXt, nYt); + + precision_t fortyfive = cPI / 4.0; + // Xi is LR (x), Nu is UD (y) + precision_t dxi = 2.0 * fortyfive / (nX - 1 + xOff * 2); + precision_t dnu = 2.0 * fortyfive / (nY - 1 + yOff * 2); + + grid.dxi = dxi; + grid.dnu = dnu; + grid.R = R; + + precision_t latp, lonp; + + // Loop through each point and derive the coordinate + + precision_t total_area = 0.0, det, dmo; + + for (int iDU = 0; iDU < nYt; iDU++) { + for (int iLR = 0; iLR < nXt; iLR++) { + + // the offsets are so we can find cell centers, edges, and corners + double iD = iDU - nGCs + yOff; + double iL = iLR - nGCs + xOff; + + // Define local coordinates: + // Xi is LR (x), Nu is UD (y) + grid.nu(iLR, iDU) = (-fortyfive + dnu * iD); + grid.xi(iLR, iDU) = (-fortyfive + dxi * iL); + + grid.X(iLR, iDU) = tan(grid.xi(iLR, iDU)); + grid.Y(iLR, iDU) = tan(grid.nu(iLR, iDU)); + + // Transformation from 3D Cartesian to LatLong + // lonp = std::atan2(y_cart, x_cart) + cPI/2.0; + if (iFace == 0) { + lonp = std::atan(grid.X(iLR, iDU)); + // Theta in Ronchi is from the north pole, so lat is 90 - theta + latp = std::atan(1.0 / grid.Y(iLR, iDU) / std::cos(lonp)); + } + + if (iFace == 1) { + lonp = std::atan(-1.0 / grid.X(iLR, iDU)); + + if (lonp < 0) + lonp = cPI + lonp; + + // Theta in Ronchi is from the north pole, so lat is 90 - theta + latp = std::atan(1.0 / grid.Y(iLR, iDU) / std::sin(lonp)); + } + + if (iFace == 2) { + lonp = std::atan(grid.X(iLR, iDU)) + cPI; + // Theta in Ronchi is from the north pole, so lat is 90 - theta + latp = std::atan(-1.0 / grid.Y(iLR, iDU) / std::cos(lonp)); + } + + if (iFace == 3) { + lonp = std::atan(-1.0 / grid.X(iLR, iDU)); + + if (lonp > 0) + lonp = lonp + cPI; + else + lonp = 2 * cPI + lonp; + + // Theta in Ronchi is from the north pole, so lat is 90 - theta + latp = std::atan(-1.0 / grid.Y(iLR, iDU) / std::sin(lonp)); + } + + if (iFace == 4) { + lonp = std::atan2(grid.X(iLR, iDU), grid.Y(iLR, iDU)); + latp = std::atan2(-grid.Y(iLR, iDU), cos(lonp) ); + } + + if (iFace == 5) { + lonp = std::atan2(-grid.X(iLR, iDU), grid.Y(iLR, iDU)); + latp = -std::atan2(-grid.Y(iLR, iDU), cos(lonp) ); + } + + if (latp > 0) + latp = cPI / 2 - latp; + else + latp = -(cPI / 2 + latp); + + // Fill Computed coords + grid.lat(iLR, iDU) = latp; + grid.lon(iLR, iDU) = lonp; + + grid.d(iLR, iDU) = + 1 + + grid.X(iLR, iDU) * grid.X(iLR, iDU) + + grid.Y(iLR, iDU) * grid.Y(iLR, iDU); + grid.C(iLR, iDU) = sqrt(1 + + grid.X(iLR, iDU) * grid.X(iLR, iDU)); + grid.D(iLR, iDU) = sqrt(1 + + grid.Y(iLR, iDU) * grid.Y(iLR, iDU)); + + if (iFace < 4) { + grid.Axt(iLR, iDU) = 0.0; + grid.Axp(iLR, iDU) = grid.C(iLR, iDU) * grid.D(iLR, iDU) / + sqrt(grid.d(iLR, iDU)); + grid.Ant(iLR, iDU) = -1.0; + grid.Anp(iLR, iDU) = grid.X(iLR, iDU) * grid.Y(iLR, iDU) / + sqrt(grid.d(iLR, iDU)); + } else { + dmo = 1.0 / std::sqrt(grid.d(iLR, iDU) - 1); + + //if (dmo > 100.0) + // dmo = 100.0; + + if (iFace == 4) { + grid.Axt(iLR, iDU) = - dmo * grid.D(iLR, iDU) * grid.X(iLR, iDU); + grid.Axp(iLR, iDU) = dmo * grid.D(iLR, iDU) * grid.Y(iLR, iDU) / + sqrt(grid.d(iLR, iDU)); + grid.Ant(iLR, iDU) = - dmo * grid.C(iLR, iDU) * grid.Y(iLR, iDU); + grid.Anp(iLR, iDU) = - dmo * grid.C(iLR, iDU) * grid.X(iLR, iDU) / + sqrt(grid.d(iLR, iDU)); + + } else { + // iFace == 5 + grid.Axt(iLR, iDU) = dmo * grid.D(iLR, iDU) * grid.X(iLR, iDU); + grid.Axp(iLR, iDU) = - dmo * grid.D(iLR, iDU) * grid.Y(iLR, iDU) / + sqrt(grid.d(iLR, iDU)); + grid.Ant(iLR, iDU) = dmo * grid.C(iLR, iDU) * grid.Y(iLR, iDU); + grid.Anp(iLR, iDU) = dmo * grid.C(iLR, iDU) * grid.X(iLR, iDU) / + sqrt(grid.d(iLR, iDU)); + } + } + + // Calculate inverse of matrix for calculating Ax and An from At and Ap: + det = 1.0 / (grid.Axt(iLR, iDU) * grid.Anp(iLR, iDU) - + grid.Axp(iLR, iDU) * grid.Ant(iLR, iDU)); + + grid.Atx(iLR, iDU) = det * grid.Anp(iLR, iDU); + grid.Atn(iLR, iDU) = - det * grid.Axp(iLR, iDU); + grid.Apx(iLR, iDU) = - det * grid.Ant(iLR, iDU); + //grid.Apx(iLR, iDU) = grid.d(iLR, iDU) / (grid.C(iLR, iDU) * grid.D(iLR, iDU)); + grid.Apn(iLR, iDU) = det * grid.Axt(iLR, iDU); + + grid.dlx(iLR, iDU) = + R * grid.D(iLR, iDU) * dxi / + grid.d(iLR, iDU) / + (cos(grid.xi(iLR, iDU)) * cos(grid.xi(iLR, iDU))); + grid.dln(iLR, iDU) = + R * grid.C(iLR, iDU) * dnu / + grid.d(iLR, iDU) / + (cos(grid.nu(iLR, iDU)) * cos(grid.nu(iLR, iDU))); + + //grid.dS(iLR, iDU) = R * R * dxi * dnu / + // (sqrt(grid.d(iLR, iDU) * grid.d(iLR, iDU) * grid.d(iLR, iDU))) * + // grid.C(iLR, iDU) * grid.C(iLR, iDU) * + // grid.D(iLR, iDU) * grid.D(iLR, iDU); + grid.dS(iLR, iDU) = R * R * dxi * dnu / + (sqrt(grid.d(iLR, iDU) * grid.d(iLR, iDU) * grid.d(iLR, iDU)) * + cos(grid.xi(iLR, iDU)) * cos(grid.xi(iLR, iDU)) * + cos(grid.nu(iLR, iDU)) * cos(grid.nu(iLR, iDU))); + //grid.dS(iLR, iDU) = R * R * dxi * dnu * + // grid.C(iLR, iDU) * grid.D(iLR, iDU) / + // (grid.d(iLR, iDU) * grid.d(iLR, iDU) * + // cos(grid.xi(iLR, iDU)) * cos(grid.xi(iLR, iDU)) * + // cos(grid.nu(iLR, iDU)) * cos(grid.nu(iLR, iDU))); + + if (iLR > 2 && iLR < nXt - 3 && + iDU > 2 && iDU < nYt - 3) + total_area = total_area + grid.dS(iLR, iDU); + } + } + + std::cout << "Total Area : " << total_area << "; expected : " << 4 * cPI * R * + R / 6.0 << "\n"; + + return grid; +} + +/** + * Calculate Great Circle Distance + * + * doi: 10.1016/j.jcp.2007.07.022 + * Section 3, Eqn (23) + * + * @return dh Great Circle Distance between two points + */ +precision_t calc_great_circle(precision_t lon1, + precision_t lon2, + precision_t lat1, + precision_t lat2) { + + precision_t dlon_2 = (lon2 - lon1) / 2.0; + precision_t dlat_2 = (lat2 - lat1) / 2.0; + + precision_t dh = 2.0 * std::asin(std::sqrt(std::sin(dlat_2) * std::sin(dlat_2) + + std::sin(dlon_2) * std::sin(dlon_2) * std::cos(lat1) * std::cos(lat2))); + + return dh; +} + +// --------------------------------------------------------- +// Angle between three points on a sphere +// --------------------------------------------------------- +precision_t calc_angle_given_three_lon_lat(precision_t p1_lon, + precision_t p1_lat, + precision_t p2_lon, + precision_t p2_lat, + precision_t p3_lon, + precision_t p3_lat, + precision_t R) { + + arma_vec p1 = sph2cart(p1_lon, p1_lat, R); + arma_vec p2 = sph2cart(p2_lon, p2_lat, R); + arma_vec p3 = sph2cart(p3_lon, p3_lat, R); + arma_vec d1 = p1 - p2; + arma_vec d2 = p3 - p2; + precision_t n1 = std::sqrt(d1(0) * d1(0) + + d1(1) * d1(1) + + d1(2) * d1(2)); + precision_t n2 = std::sqrt(d2(0) * d2(0) + + d2(1) * d2(1) + + d2(2) * d2(2)); + d1 = d1 / n1; + d2 = d2 / n2; + precision_t angle = std::acos(d1(0) * d2(0) + + d1(1) * d2(1) + + d1(2) * d2(2)); + + return angle; +} + +// --------------------------------------------------------- +// bin edges +// --------------------------------------------------------- + +arma_vec calc_bin_edges(arma_vec centers) { + + int64_t nPts = centers.n_elem; + arma_vec edges(nPts + 1); + + precision_t dc = centers(1) - centers(0); + + edges(0) = centers(0) - dc / 2.0; + edges(1) = centers(0) + dc / 2.0; + + for (int64_t i = 2; i < nPts + 1; i++) + edges(i) = 2 * centers(i - 1) - edges(i - 1); + + return edges; +} + +// --------------------------------------------------------- +// bin edges +// --------------------------------------------------------- + +arma_mat calc_bin_edges(arma_mat centers, bool DoX) { + + // X is first dimension (row), Y is second dimension (col) + + int64_t nX = centers.n_rows; + int64_t nY = centers.n_cols; + arma_mat edges; + arma_vec centers1d; + + if (DoX) { + if (verbose > 2) + std::cout << " --> x\n"; + + edges.resize(nX + 1, nY); + + for (int64_t j = 0; j < nY; j++) { + centers1d = centers.col(j); + edges.col(j) = calc_bin_edges(centers1d); + } + } else { + if (verbose > 2) + std::cout << " --> y\n"; + + edges.resize(nX, nY + 1); + + for (int64_t i = 0; i < nX; i++) { + centers1d = centers.row(i).as_col(); + edges.row(i) = calc_bin_edges(centers1d).as_row(); + } + } + + return edges; +} + +// --------------------------------------------------------- +// bin widths +// --------------------------------------------------------- + +arma_vec calc_bin_widths(arma_vec edges) { + + int64_t nPts = edges.n_elem - 1; + arma_vec widths(nPts); + + for (int64_t i = 0; i < nPts; i++) + widths(i) = edges(i + 1) - edges(i); + + return widths; +} + +// --------------------------------------------------------- +// bin widths 2d +// --------------------------------------------------------- + +arma_mat calc_bin_widths(arma_mat edges, bool DoX) { + + int64_t nX = edges.n_rows; + int64_t nY = edges.n_cols; + + arma_mat widths; + arma_vec edges1d; + + if (DoX) { + if (verbose > 2) + std::cout << " --> x\n"; + + nX--; + widths.resize(nX, nY); + + for (int64_t j = 0; j < nY; j++) { + edges1d = edges.col(j); + widths.col(j) = calc_bin_widths(edges1d); + } + } else { + if (verbose > 2) + std::cout << " --> y\n"; + + nY--; + widths.resize(nX, nY); + + for (int64_t i = 0; i < nX; i++) { + edges1d = edges.row(i).as_col(); + widths.row(i) = calc_bin_widths(edges1d).as_row(); + } + } + + return widths; +} + +/**SOME PROJECTION AND GRADIENT CODE **/ +// --------------------------------------------------------- +// +// --------------------------------------------------------- + +arma_vec limiter_mc(arma_vec &left, + arma_vec &right, + int64_t nPts, + int64_t nGCs) { + + precision_t beta = 0.8; + + arma_vec s = left % right; + arma_vec combined = (left + right) * 0.5; + + left = left * beta; + right = right * beta; + arma_vec limited = left; + + for (int64_t i = 1; i < nPts + 2 * nGCs - 1; i++) { + if (s(i) < 0) { + // Sign < 0 means opposite signed left and right: + limited(i) = 0.0; + } else { + if (left(i) > 0 && right(i) > 0) { + if (right(i) < limited(i)) + limited(i) = right(i); + + if (combined(i) < limited(i)) + limited(i) = combined(i); + } else { + if (right(i) > limited(i)) + limited(i) = right(i); + + if (combined(i) > limited(i)) + limited(i) = combined(i); + } + } + } + + return limited; +} + +void print(arma_vec values) { + int64_t nP = values.n_elem; + + for (int64_t i = 0; i < nP; i++) + std::cout << values(i) << " "; + + std::cout << "\n"; +} + +// --------------------------------------------------------- +// calc gradients at centers +// - values and x defined at centers +// --------------------------------------------------------- + +arma_vec calc_grad_1d(arma_vec &values, + arma_vec &x, + int64_t nPts, + int64_t nGCs) { + + arma_vec gradients = values * 0.0; + arma_vec gradL = values * 0.0; + arma_vec gradR = values * 0.0; + + precision_t factor1 = 0.625; + precision_t factor2 = 0.0416667; + precision_t h; + + int64_t i; + arma_vec hv = values * 0.0; + + i = nGCs - 1; + h = 2.0 / (x(i + 1) - x(i)); + gradR(i) = h * (factor1 * (values(i + 1) - values(i)) - + factor2 * (values(i + 2) - values(i - 1))); + gradL(i) = (values(i) - values(i - 1)) / (x(i) - x(i - 1)); + + // This is attempting to vectorize the problem, but it seems to be slower? + // int64_t iS = nGCs; + // int64_t iE = nPts + nGCs - 1; + // hv.rows(iS, iE) = 2.0 / (x.rows(iS, iE) - x.rows(iS-1, iE-1)); + // gradL.rows(iS, iE) = hv.rows(iS,iE) % (factor1 * (values.rows(iS, iE) - + // values.rows(iS-1, iE-1)) - + // factor2 * (values.rows(iS+1, iE+1) - + // values.rows(iS-2, iE-2))); + // hv.rows(iS, iE) = 2.0 / (x.rows(iS+1, iE+1) - x.rows(iS, iE)); + // gradR.rows(iS, iE) = hv.rows(iS,iE) % (factor1 * (values.rows(iS+1, iE+1) - + // values.rows(iS, iE)) - + // factor2 * (values.rows(iS+2, iE+2) - + // values.rows(iS-1, iE-1))); + + for (i = nGCs; i < nPts + nGCs; i++) { + h = 2.0 / (x(i) - x(i - 1)); + gradL(i) = h * (factor1 * (values(i) - values(i - 1)) - + factor2 * (values(i + 1) - values(i - 2))); + h = 2.0 / (x(i + 1) - x(i)); + gradR(i) = h * (factor1 * (values(i + 1) - values(i)) - + factor2 * (values(i + 2) - values(i - 1))); + } + + i = nPts + nGCs; + h = 2.0 / (x(i) - x(i - 1)); + gradL(i) = h * (factor1 * (values(i) - values(i - 1)) - + factor2 * (values(i + 1) - values(i - 2))); + gradR(i) = (values(i + 1) - values(i)) / (x(i + 1) - x(i)); + + gradients = limiter_mc(gradL, gradR, nPts, nGCs); + + return gradients; +} + +// --------------------------------------------------------- +// calc gradients at centers for 2d matrices +// - values and x defined at centers +// --------------------------------------------------------- + +arma_mat calc_grad(arma_mat values, + arma_mat x, + int64_t nGCs, + bool DoX) { + + arma_mat v2d, x2d; + + if (DoX) { + v2d = values; + x2d = x; + } else { + v2d = values.t(); + x2d = x.t(); + } + + int64_t nX = v2d.n_rows; + int64_t nY = v2d.n_cols; + arma_mat grad2d = v2d * 0.0; + + int64_t nPts = nX - 2 * nGCs; + arma_vec values1d(nX); + arma_vec x1d(nX); + + for (int64_t j = 1; j < nY - 1; j++) { + values1d = v2d.col(j); + x1d = x2d.col(j); + grad2d.col(j) = calc_grad_1d(values1d, x1d, nPts, nGCs); + } + + arma_mat gradients; + + if (DoX) + gradients = grad2d; + else + gradients = grad2d.t(); + + return gradients; +} + +// --------------------------------------------------------- +// Project gradients + values to the right face, from the left +// returned values are on the i - 1/2 edges +// (between i-1 and i cell center) +// --------------------------------------------------------- + +arma_mat project_from_left(arma_mat values, + arma_mat gradients, + arma_mat x_centers, + arma_mat x_edges, + int64_t nGCs) { + + int64_t nX = values.n_rows; + int64_t nY = values.n_cols; + + // Define at edges: + arma_mat projected(nX + 1, nY); + projected.zeros(); + + // no gradient in the 0 or iEnd cells + for (int64_t j = 0; j < nY; j++) { + for (int64_t i = 1; i < nX - 1; i++) { + projected(i + 1, j) = values(i, j) + + gradients(i, j) * (x_edges(i + 1, j) - x_centers(i, j)); + } + + projected(1, j) = projected(2, j); + projected(0, j) = projected(1, j); + projected(nX, j) = projected(nX - 1, j); + } + + return projected; +} + +// --------------------------------------------------------- +// Project gradients + values to the left face, from the right +// returned values are on the i - 1 edges +// (between i-1 and i cell center) +// --------------------------------------------------------- + +arma_mat project_from_right(arma_mat values, + arma_mat gradients, + arma_mat x_centers, + arma_mat x_edges, + int64_t nGCs) { + int64_t nX = values.n_rows; + int64_t nY = values.n_cols; + + // Define at edges: + arma_mat projected(nX + 1, nY); + projected.zeros(); + + // no gradient in the 0 or iEnd cells + for (int64_t j = 0; j < nY; j++) { + for (int64_t i = 1; i < nX - 1; i++) { + projected(i, j) = values(i, j) + + gradients(i, j) * (x_edges(i, j) - x_centers(i, j)); + } + + projected(0, j) = projected(1, j); + projected(nX - 1, j) = projected(nX - 2, j); + projected(nX, j) = projected(nX - 1, j); + } + + return projected; +} + +// --------------------------------------------------------- +// Limiter on values +// projected is assumed to be on the edge between the +// i-1 and i cell (i-1/2) +// limited is returned at edges +// --------------------------------------------------------- + +arma_vec limiter_value(arma_vec projected, + arma_vec values, + int64_t nPts, + int64_t nGCs) { + + int64_t iStart = 0; + int64_t iEnd = nPts + 2 * nGCs; + + arma_vec limited = projected; + + precision_t mini, maxi; + + for (int64_t i = iStart + 1; i < iEnd - 1; i++) { + + mini = values(i - 1); + + if (values(i) < mini) + mini = values(i); + + maxi = values(i - 1); + + if (values(i) > maxi) + maxi = values(i); + + if (limited(i) < mini) + limited(i) = mini; + + if (limited(i) > maxi) + limited(i) = maxi; + } + + return limited; +} + +// --------------------------------------------------------- +// take gradients and project to all edges +// --------------------------------------------------------- + +projection_struct project_to_edges(arma_mat &values, + arma_mat &x_centers, arma_mat &x_edges, + arma_mat &y_centers, arma_mat &y_edges, + int64_t nGCs) { + + int64_t nX = values.n_rows; + int64_t nY = values.n_cols; + + projection_struct proj; + + proj.gradLR = calc_grad(values, x_centers, nGCs, true); + proj.gradDU = calc_grad(values.t(), y_centers.t(), nGCs, true).t(); + + proj.R = project_from_left(values, proj.gradLR, + x_centers, x_edges, nGCs); + // Left side of edge from left + proj.L = project_from_right(values, proj.gradLR, + x_centers, x_edges, nGCs); + // Up side of edge from down (left) + proj.U = project_from_left(values.t(), proj.gradDU.t(), + y_centers.t(), y_edges.t(), nGCs) + .t(); + // Down side of edge from up (right) + proj.D = project_from_right(values.t(), proj.gradDU.t(), + y_centers.t(), y_edges.t(), nGCs) + .t(); + + return proj; +} + +/**** SOME INITIALIZATION FUNCTION, NOT CORE ****/ +// --------------------------------------------------------- +// initial rho: initialize the whole field to be 2.0 +// --------------------------------------------------------- +arma_mat init_rho(arma_mat &x, + arma_mat &y) { + + int64_t nX = x.n_rows; + int64_t nY = x.n_cols; + + arma_mat rho(nX, nY); + arma_mat r; + + r = sqrt((x - 0.0) % (x - 0.0) + (y - 0.0) % (y - 0.0)); + rho.fill(1.0); + rho.elem( find( r < 0.25)).fill(1.2); + + return rho; +} + +// --------------------------------------------------------- +// initial velocity: initialize zero velocity +// --------------------------------------------------------- + +arma_mat init_vel(arma_mat &x, + arma_mat &y) { + int64_t nX = x.n_rows; + int64_t nY = x.n_cols; + arma_mat vel(nX, nY); + // all cells positive to right: + vel.zeros(); + vel.fill(0.5); + return vel; +} + + +// --------------------------------------------------------- +// initial values +// --------------------------------------------------------- + +arma_mat init_value(arma_mat &x, + arma_mat &y, + precision_t inVal) { + int64_t nX = x.n_rows; + int64_t nY = x.n_cols; + arma_mat val(nX, nY); + val.fill(inVal); + return val; +} + +arma_mat init_vel2(arma_mat &x, + arma_mat &y) { + int64_t nX = x.n_rows; + int64_t nY = x.n_cols; + arma_mat vel(nX, nY); + // all cells positive to right: + vel.zeros(); + //vel.fill(1.0); + return vel; +} + +// --------------------------------------------------------- +// initial temp (E): constant total energy +// THIS IS NOT e but E, the total energy +// --------------------------------------------------------- + +arma_mat init_temp(arma_mat &x, + arma_mat &y) { + int64_t nX = x.n_rows; + int64_t nY = x.n_cols; + + arma_mat temp(nX, nY); + temp.fill(100.0); + return temp; +} + +// --------------------------------------------------------- +// Calculate the max speed in the x and y directions +// --------------------------------------------------------- + +void calc_cmax(arma_mat &xVel, + arma_mat &yVel, + arma_mat &temp, + arma_mat &xMax, + arma_mat &yMax) { + + if (verbose > 2) + std::cout << " --> calc_max\n"; + + arma_mat xVel2, yVel2; + + xVel2 = xVel % xVel; + yVel2 = yVel % yVel; + xMax = sqrt(xVel2) + sqrt(cKb / mmm * temp); + yMax = sqrt(yVel2) + sqrt(cKb / mmm * temp); + + return; +} + + +// --------------------------------------------------------- +// Set Boundary Conditions +// --------------------------------------------------------- + +void set_bcs(arma_mat &rho, + arma_mat &xVel, + arma_mat &yVel, + arma_mat &temp, + grid_struct gridC) { + + if (verbose > 2) + std::cout << " --> set_bcs\n"; + + // ------------------------------------------------ + // Exchange messages (set BCs, really): + for (int64_t i = gridC.iXfirst_; i < gridC.iXlast_; i++) { + for (int64_t j = 0; j < gridC.nGCs; j++) { + // bottom bc: + rho(i, gridC.iYfirst_ - 1 - j) = rho(i, gridC.iYlast_ - 1 - j); + // top bc: + rho(i, gridC.iYlast_ + j) = rho(i, gridC.iYfirst_ + j); + } + } + + for (int64_t j = gridC.iYfirst_; j < gridC.iYlast_; j++) { + for (int64_t i = 0; i < gridC.nGCs; i++) { + // left bc: + rho(gridC.iXfirst_ - 1 - i, j) = rho(gridC.iXlast_ - 1 - i, j); + // right bc: + rho(gridC.iXlast_ + i, j) = rho(gridC.iXfirst_ + i, j); + } + } + + return; +} + +// --------------------------------------------------------- +// Convert vector from Alat, Alon to Axi, Anu +// -> Using equation (7) of Ronchi et al: +// --------------------------------------------------------- + +void convert_vector_ll_to_xn(arma_mat aLon, + arma_mat aLat, + arma_mat &aXi, + arma_mat &aNu, + grid_struct grid) { + + // Ronchi defines aPhi = aLon, aTheta = -aLat + aXi = -grid.Axt % aLat + grid.Axp % aLon; + aNu = -grid.Ant % aLat + grid.Anp % aLon; + return; +} + +// --------------------------------------------------------- +// Convert vector from sphere to cube +// -> Using equation (32) of Nair: +// --------------------------------------------------------- + +void convert_vector_sphere_to_cube(arma_mat u, + arma_mat v, + arma_mat &u1, + arma_mat &u2, + grid_struct grid) { + + // Ronchi defines aPhi = aLon, aTheta = -aLat + u1 = grid.s2c11 % u + grid.s2c12 % v; + u2 = grid.s2c21 % u + grid.s2c22 % v; + return; +} + +// --------------------------------------------------------- +// Convert vector cube to sphere +// -> Using equation (32) of Nair: +// --------------------------------------------------------- + +void convert_vector_cube_to_sphere(arma_mat u1, + arma_mat u2, + arma_mat &u, + arma_mat &v, + grid_struct grid) { + + // Ronchi defines aPhi = aLon, aTheta = -aLat + u = grid.c2s11 % u1 + grid.c2s12 % u2; + v = grid.c2s21 % u1 + grid.c2s22 % u2; + return; +} + +// --------------------------------------------------------- +// Convert vector from Alat, Alon to Axi, Anu +// -> Using equation (7) of Ronchi et al: +// --------------------------------------------------------- + +void convert_vector_xn_to_ll(arma_mat aXi, + arma_mat aNu, + arma_mat &aLon, + arma_mat &aLat, + grid_struct grid) { + + // Ronchi defines aPhi = aLon, aTheta = -aLat + aLat = -(grid.Atx % aXi + grid.Atn % aNu); + aLon = grid.Apx % aXi + grid.Apn % aNu; + + return; +} + +// --------------------------------------------------------- +// Convert vector from Alat, Alon to Axi, Anu +// -> Using equation (7) of Ronchi et al: +// --------------------------------------------------------- + +arma_mat calc_angle_between_coords(grid_struct grid) { + + arma_mat e1Lat, e1Lon, e2Lat, e2Lon, m, one, zero; + arma_mat e1dote2, alpha; + + m.resize(grid.nXt, grid.nYt); + one.resize(grid.nXt, grid.nYt); + one.fill(1.0); + zero.resize(grid.nXt, grid.nYt); + zero.fill(0.0); + + // define e1 as the LR (xi) direction: + e1Lat.resize(grid.nXt, grid.nYt); + e1Lon.resize(grid.nXt, grid.nYt); + convert_vector_xn_to_ll(one, zero, e1Lon, e1Lat, grid); + m = sqrt(e1Lon % e1Lon + e1Lat % e1Lat); + e1Lon = e1Lon / m; + e1Lat = e1Lat / m; + + // define e2 as the DU (nu) direction: + e2Lat.resize(grid.nXt, grid.nYt); + e2Lon.resize(grid.nXt, grid.nYt); + convert_vector_xn_to_ll(zero, one, e2Lon, e2Lat, grid); + m = sqrt(e2Lon % e2Lon + e2Lat % e2Lat); + e2Lon = e2Lon / m; + e2Lat = e2Lat / m; + + alpha = acos(e1Lat % e2Lat + e1Lon % e2Lon); + + return alpha; +} + +// --------------------------------------------------------- +// Convert vector from Alat, Alon to Axi, Anu +// -> Using equation (7) of Ronchi et al: +// --------------------------------------------------------- + +void calc_norms(grid_struct &grid) { + + arma_mat e1Lat, e1Lon, e2Lat, e2Lon, m, one, zero; + + grid.nXiLon.resize(grid.nXt, grid.nYt); + grid.nXiLat.resize(grid.nXt, grid.nYt); + grid.nNuLon.resize(grid.nXt, grid.nYt); + grid.nNuLat.resize(grid.nXt, grid.nYt); + + m.resize(grid.nXt, grid.nYt); + one.resize(grid.nXt, grid.nYt); + one.fill(1.0); + zero.resize(grid.nXt, grid.nYt); + zero.fill(0.0); + + // define e1 as the LR (xi) direction: + e1Lat.resize(grid.nXt, grid.nYt); + e1Lon.resize(grid.nXt, grid.nYt); + convert_vector_xn_to_ll(one, zero, e1Lon, e1Lat, grid); + m = sqrt(e1Lon % e1Lon + e1Lat % e1Lat); + + // Rotate by 90 deg (CCW) to get the norm: + grid.nNuLon = -e1Lat / m; + grid.nNuLat = e1Lon / m; + + // define e2 as the DU (nu) direction: + e2Lat.resize(grid.nXt, grid.nYt); + e2Lon.resize(grid.nXt, grid.nYt); + convert_vector_xn_to_ll(zero, one, e2Lon, e2Lat, grid); + m = sqrt(e2Lon % e2Lon + e2Lat % e2Lat); + // Rotate by 90 deg (CW) to get the norm: + grid.nXiLon = e2Lat / m; + grid.nXiLat = -e2Lon / m; + + return; +} + + +// --------------------------------------------------------- +// Update States +// --------------------------------------------------------- + +void update_states(arma_mat rho, + arma_mat &xVel, + arma_mat &yVel, + arma_mat &temp, + arma_mat &drhodt, + arma_mat &dlonVeldt, + arma_mat &dlatVeldt, + arma_mat &dtempdt, + grid_struct gridC, + grid_struct gridL, + grid_struct gridD, + precision_t dt) { + + arma_mat xMomentum, yMomentum; + arma_mat rhoE, energy, vel2; + + precision_t cv = 1500.0; + + if (verbose > 2) + std::cout << " --> update_states\n"; + + // Derived variables: + xMomentum = rho % xVel; // x1momentum, pure scalar field + yMomentum = rho % yVel; // y1momentum, pure scalar field + rhoE = rho % temp; + + vel2 = xVel % xVel + yVel % yVel; + //energy = rho % (0.5 * vel2 + cv * temp); + energy = cv * rho % temp; + + /** Initialize projection constructs */ + static projection_struct rhoP; + static projection_struct xMomentumP, xVelP; + static projection_struct yMomentumP, yVelP; + static projection_struct energyP; + static projection_struct tempP; + + // They are all pure scalar fields without sqrt(g) + static arma_mat totaleL, totaleR, totaleD, totaleU; + static arma_mat velL2, velR2, velD2, velU2; + static arma_mat pressureL, pressureR, pressureD, pressureU; + + arma_mat dxVeldt = xVel * 0.0; + arma_mat dyVeldt = yVel * 0.0; + + dlonVeldt = dxVeldt * 0.0 + 1; + dlatVeldt = dyVeldt * 0.0 + 1; + + static arma_mat velNormL, velNormR, velNormU, velNormD; + + /** Initialize Flux and Wave Speed Storages */ + static arma_mat eq1FluxLR, eq1FluxDU; + static arma_mat eq1FluxL, eq1FluxR, eq1FluxD, eq1FluxU; + static arma_mat eq2FluxLR, eq2FluxDU; + static arma_mat eq2FluxL, eq2FluxR, eq2FluxD, eq2FluxU; + static arma_mat eq3FluxLR, eq3FluxDU; + static arma_mat eq3FluxL, eq3FluxR, eq3FluxD, eq3FluxU; + static arma_mat eq4FluxLR, eq4FluxDU; + static arma_mat eq4FluxL, eq4FluxR, eq4FluxD, eq4FluxU; + + arma_mat wsL, wsR, wsD, wsU, wsLR, wsDU; + + arma_mat diff; // for Riemann Solver + + if (verbose > 3) + std::cout << " ---> Projecting\n"; + + rhoP = project_to_edges(rho, gridC.xi, gridL.xi, gridC.nu, gridD.nu, + gridC.nGCs); + // project the lon / lat velocities to the edges: + xVelP = project_to_edges(xVel, gridC.xi, gridL.xi, gridC.nu, gridD.nu, + gridC.nGCs); + yVelP = project_to_edges(yVel, gridC.xi, gridL.xi, gridC.nu, gridD.nu, + gridC.nGCs); + xMomentumP = project_to_edges(xMomentum, gridC.xi, gridL.xi, gridC.nu, gridD.nu, + gridC.nGCs); + yMomentumP = project_to_edges(yMomentum, gridC.xi, gridL.xi, gridC.nu, gridD.nu, + gridC.nGCs); + energyP = project_to_edges(energy, gridC.xi, gridL.xi, gridC.nu, gridD.nu, + gridC.nGCs); + tempP = project_to_edges(temp, gridC.xi, gridL.xi, gridC.nu, gridD.nu, + gridC.nGCs); + + if (verbose > 3) + std::cout << " ---> Derived values\n"; + + velL2 = (xVelP.L % xVelP.L + yVelP.L % yVelP.L); + velR2 = (xVelP.R % xVelP.R + yVelP.R % yVelP.R); + velD2 = (xVelP.D % xVelP.D + yVelP.D % yVelP.D); + velU2 = (xVelP.U % xVelP.U + yVelP.U % yVelP.U); + + precision_t k = 1.38e-23; + // let's be Oxygen: + precision_t mass = 16.0 * 1.67e-27; + pressureL = k / mass * (rhoP.L % tempP.L); + pressureR = k / mass * (rhoP.R % tempP.R); + pressureD = k / mass * (rhoP.D % tempP.D); + pressureU = k / mass * (rhoP.U % tempP.U); + + arma_mat pressureLR = (pressureL + pressureR) / 2; + arma_mat pressureDU = (pressureD + pressureU) / 2; + + if (verbose > 3) + std::cout << " ---> Normal Velocities\n"; + + // Calculate the normal velocity at the boundaries: + velNormL = xVelP.L % gridL.nXiLon + yVelP.L % gridL.nXiLat; + velNormR = xVelP.R % gridL.nXiLon + yVelP.R % gridL.nXiLat; + velNormU = xVelP.U % gridD.nNuLon + yVelP.U % gridD.nNuLat; + velNormD = xVelP.D % gridD.nNuLon + yVelP.D % gridD.nNuLat; + + if (verbose > 3) + std::cout << " ---> Fluxes eq 1\n"; + + // Flux calculated from the left of the edge + eq1FluxL = rhoP.L % velNormL; + // Flux calculated from the right of the edge + eq1FluxR = rhoP.R % velNormR; + // Flux calculated from the down of the edge + eq1FluxD = rhoP.D % velNormD; + // Flux calculated from the up of the edge + eq1FluxU = rhoP.U % velNormU; + + if (verbose > 3) + std::cout << " ---> Fluxes eq 2\n"; + + eq2FluxL = (xMomentumP.L % velNormL); + eq2FluxR = (xMomentumP.R % velNormR); + eq2FluxD = (xMomentumP.D % velNormD); + eq2FluxU = (xMomentumP.U % velNormU); + + if (verbose > 3) + std::cout << " ---> Fluxes eq 3\n"; + + eq3FluxL = (yMomentumP.L % velNormL); + eq3FluxR = (yMomentumP.R % velNormR); + eq3FluxD = (yMomentumP.D % velNormD); + eq3FluxU = (yMomentumP.U % velNormU); + + eq4FluxL = energyP.L % velNormL; + eq4FluxR = energyP.R % velNormR; + eq4FluxD = energyP.D % velNormD; + eq4FluxU = energyP.U % velNormU; + + // ------------------------------------------------ + // Calculate the wave speed for the diffusive flux: + // In Reference velocities + if (verbose > 3) + std::cout << " ---> Diffusive Fluxes\n"; + + wsL = sqrt(velL2) + sqrt(cGamma * (cGamma - 1) * tempP.L); + wsR = sqrt(velR2) + sqrt(cGamma * (cGamma - 1) * tempP.R); + wsD = sqrt(velD2) + sqrt(cGamma * (cGamma - 1) * tempP.D); + wsU = sqrt(velU2) + sqrt(cGamma * (cGamma - 1) * tempP.U); + + wsLR = wsR; + + for (int64_t i = 0; i < gridC.nXt + 1; i++) { + for (int64_t j = 0; j < gridC.nYt; j++) { + if (wsL(i, j) > wsLR(i, j)) + wsLR(i, j) = wsL(i, j); + } + } + + wsDU = wsD; + + for (int64_t i = 0; i < gridC.nXt; i++) { + for (int64_t j = 0; j < gridC.nYt + 1; j++) { + if (wsU(i, j) > wsDU(i, j)) + wsDU(i, j) = wsU(i, j); + } + } + + // ------------------------------------------------ + // Calculate average flux at the edges (Rusanov Flux): + + if (verbose > 3) + std::cout << " ---> Averaging fluxes at edges\n"; + + diff = (rhoP.R - rhoP.L); + eq1FluxLR = (eq1FluxL + eq1FluxR) / 2 + 0.5 * wsLR % diff; + diff = (rhoP.U - rhoP.D); + eq1FluxDU = (eq1FluxD + eq1FluxU) / 2 + 0.5 * wsDU % diff; + + diff = (xMomentumP.R - xMomentumP.L); + eq2FluxLR = (eq2FluxL + eq2FluxR) / 2 + 0.5 * wsLR % diff; + diff = (xMomentumP.U - xMomentumP.D); + eq2FluxDU = (eq2FluxD + eq2FluxU) / 2 + 0.5 * wsDU % diff; + + diff = (yMomentumP.R - yMomentumP.L); + eq3FluxLR = (eq3FluxL + eq3FluxR) / 2 + 0.5 * wsLR % diff; + diff = (yMomentumP.U - yMomentumP.D); + eq3FluxDU = (eq3FluxD + eq3FluxU) / 2 + 0.5 * wsDU % diff; + + diff = (energyP.R - energyP.L); + eq4FluxLR = (eq4FluxL + eq4FluxR) / 2 + 0.5 * wsLR % diff; + diff = (energyP.U - energyP.D); + eq4FluxDU = (eq4FluxD + eq4FluxU) / 2 + 0.5 * wsDU % diff; + + // ------------------------------------------------ + // Update values: + if (verbose > 3) + std::cout << " ---> Updating equations of state\n"; + + precision_t dpdx, dpdn, pp, pm; + + arma_mat ax, an; + + ax = xVel * 0.0; + an = yVel * 0.0; + arma_mat dedt = xVel * 0.0; + + arma_mat rhoNew = rho; + + // Only deal with inner cell + for (int64_t j = gridC.iYfirst_; j < gridC.iYlast_; j++) { + for (int64_t i = gridC.iXfirst_; i < gridC.iXlast_; i++) { + precision_t rhoResidual_ij = (gridL.dln(i + 1, j) * eq1FluxLR(i + 1, j) - + gridL.dln(i, j) * eq1FluxLR(i, j) + + gridD.dlx(i, j + 1) * eq1FluxDU(i, j + 1) - + gridD.dlx(i, j) * eq1FluxDU(i, j)); + drhodt(i, j) = rhoResidual_ij / gridC.dS(i, j); + + rhoNew(i, j) = rho(i, j) + dt * drhodt(i, j); + + precision_t xMomentumResidual_ij = (gridL.dln(i + 1, j) * eq2FluxLR(i + 1, j) - + gridL.dln(i, j) * eq2FluxLR(i, j) + + gridD.dlx(i, j + 1) * eq2FluxDU(i, j + 1) - + gridD.dlx(i, j) * eq2FluxDU(i, j)); + dxVeldt(i, j) = xMomentumResidual_ij / gridC.dS(i, j) / rhoNew(i, j); + + precision_t yMomentumResidual_ij = (gridL.dln(i + 1, j) * eq3FluxLR(i + 1, j) - + gridL.dln(i, j) * eq3FluxLR(i, j) + + gridD.dlx(i, j + 1) * eq3FluxDU(i, j + 1) - + gridD.dlx(i, j) * eq3FluxDU(i, j)); + dyVeldt(i, j) = yMomentumResidual_ij / gridC.dS(i, j) / rhoNew(i, j); + + // Calculate the gradient in the potential in the cubesphere + // coordinate system: + dpdx = 1 / gridC.R * gridC.D(i, j) * + (pressureLR(i + 1, j) - pressureLR(i, j)) / gridC.dxi; + dpdn = 1 / gridC.R * gridC.X(i, j) * gridC.Y(i, j) / + gridC.D(i, j) * + (pressureDU(i, j + 1) - pressureDU(i, j)) / gridC.dnu; + ax(i, j) = (dpdx + dpdn) / rhoNew(i, j); + + dpdx = 1 / gridC.R * gridC.X(i, j) * gridC.Y(i, j) / + gridC.C(i, j) * (pressureLR(i + 1, j) - pressureLR(i, j)) / gridC.dxi; + dpdn = 1 / gridC.R * gridC.C(i, j) * + (pressureDU(i, j + 1) - pressureDU(i, j)) / gridC.dnu; + an(i, j) = (dpdx + dpdn) / rhoNew(i, j); + + precision_t energyResidual_ij = (gridL.dln(i + 1, j) * eq4FluxLR(i + 1, j) - + gridL.dln(i, j) * eq4FluxLR(i, j) + + gridD.dlx(i, j + 1) * eq4FluxDU(i, j + 1) - + gridD.dlx(i, j) * eq4FluxDU(i, j)); + dedt(i, j) = energyResidual_ij / gridC.dS(i, j); + + } + } + + dlatVeldt = dyVeldt - (ax % gridC.Atx + an % gridC.Atn); + dlonVeldt = dxVeldt + ax % gridC.Apx + an % gridC.Apn; + dtempdt = dedt / rhoNew / cv; + + return; +} + + +// --------------------------------------------------------- +// Main Code! +// --------------------------------------------------------- + +int main() { + precision_t dt; // Time Step + precision_t current_time = 0.0; // Initial Time 0 + precision_t total_time = 100.0; // Total simulation time + precision_t cfl = 0.75; + int iFace = 5; + + precision_t dtOut = total_time / 50.0; // Output Interval + precision_t dtReport = total_time / 200.0; // Output Interval + + int64_t iStep; // Iterator of Time Step + + int64_t nX = 50; // Number of x grid cells + int64_t nY = 50; // Number of y grid cells + int64_t nGCs = 2; // Number of ghost cells + + // Radius of Sphere + precision_t R = 10000.; + + if (verbose > 0) + std::cout << "> generating cubesphere cell center and metrics\n"; + + grid_struct gridC_eq = init_grid_equidistant(iFace, nX, nY, nGCs, R, 0.5, 0.5); + + output(gridC_eq.lat, "eq_lat.txt", false); + output(gridC_eq.lon, "eq_lon.txt", false); + output(gridC_eq.r, "eq_r.txt", false); + + grid_struct gridC = init_grid(iFace, nX, nY, nGCs, R, 0.5, 0.5); + grid_struct gridL = init_grid(iFace, nX + 1, nY, nGCs, R, 0.0, 0.5); + grid_struct gridD = init_grid(iFace, nX, nY + 1, nGCs, R, 0.5, 0.0); + + gridC.alpha = calc_angle_between_coords(gridC); + gridL.alpha = calc_angle_between_coords(gridL); + gridD.alpha = calc_angle_between_coords(gridD); + + gridC.sinAlpha = sin(gridC.alpha); + gridL.sinAlpha = sin(gridL.alpha); + gridD.sinAlpha = sin(gridD.alpha); + + calc_norms(gridC); + calc_norms(gridL); + calc_norms(gridD); + + /** State Initialization */ + /// Initialize Density + if (verbose > 0) + std::cout << "> initializing rho\n"; + + arma_mat rho = init_rho(gridC.xi, gridC.nu); // rho, pure scalar field + + /// Initialize Velocity and Momentum + if (verbose > 0) + std::cout << "> initializing vel\n"; + + // Initialize spherical velocity + // Supposed to be Longitudinal Velocity: + arma_mat vLon = init_value(gridC.xi, gridC.nu, 0.0); + // Supposed to be Latitudinal Velocity: + arma_mat vLat = init_value(gridC.xi, gridC.nu, 0.0); + + arma_mat vXi, vNu; + convert_vector_ll_to_xn(vLon, vLat, vXi, vNu, gridC); + + + /// Initialize total energy + if (verbose > 0) + std::cout << "> initializing energy\n"; + + arma_mat temp = init_temp(gridC.xi, gridC.nu); + + /** Output some pre-simulation results */ + if (verbose > 0) + std::cout << "-> outputting\n"; + + output(gridC.xi, "xi.txt", false); + output(gridC.dS, "dS.txt", false); + output(gridC.d, "d.txt", false); + output(gridC.nu, "nu.txt", false); + output(gridC.lat, "lat.txt", false); + output(gridC.lon, "lon.txt", false); + output(gridC.alpha, "alpha.txt", false); + output(rho, "rho.txt", false); + output(vLon, "vLon.txt", false); + output(vLat, "vLat.txt", false); + output(vXi, "vXi.txt", false); + output(vNu, "vNu.txt", false); + output(temp, "temp.txt", false); + iStep = 0; + + arma_mat xMax, yMax; + + arma_mat drhodt; + arma_mat dxVeldt, dyVeldt; + arma_mat dtempdt; + + drhodt.resize(gridC.nXt, gridC.nYt); + dxVeldt.resize(gridC.nXt, gridC.nYt); + dyVeldt.resize(gridC.nXt, gridC.nYt); + dtempdt.resize(gridC.nXt, gridC.nYt); + + arma_mat k1rho, k2rho, k3rho, k4rho, rhoInterK1, rhoInterK2, rhoInterK3; + k1rho.resize(gridC.nXt, gridC.nYt); + k2rho.resize(gridC.nXt, gridC.nYt); + k3rho.resize(gridC.nXt, gridC.nYt); + k4rho.resize(gridC.nXt, gridC.nYt); + rhoInterK1.resize(gridC.nXt, gridC.nYt); + rhoInterK2.resize(gridC.nXt, gridC.nYt); + rhoInterK3.resize(gridC.nXt, gridC.nYt); + + arma_mat k1vLon, k2vLon, k3vLon, k4vLon, vLonInterK1, vLonInterK2, vLonInterK3; + k1vLon.resize(gridC.nXt, gridC.nYt); + k2vLon.resize(gridC.nXt, gridC.nYt); + k3vLon.resize(gridC.nXt, gridC.nYt); + k4vLon.resize(gridC.nXt, gridC.nYt); + vLonInterK1.resize(gridC.nXt, gridC.nYt); + vLonInterK2.resize(gridC.nXt, gridC.nYt); + vLonInterK3.resize(gridC.nXt, gridC.nYt); + + arma_mat k1vLat, k2vLat, k3vLat, k4vLat, vLatInterK1, vLatInterK2, vLatInterK3; + k1vLat.resize(gridC.nXt, gridC.nYt); + k2vLat.resize(gridC.nXt, gridC.nYt); + k3vLat.resize(gridC.nXt, gridC.nYt); + k4vLat.resize(gridC.nXt, gridC.nYt); + vLatInterK1.resize(gridC.nXt, gridC.nYt); + vLatInterK2.resize(gridC.nXt, gridC.nYt); + vLatInterK3.resize(gridC.nXt, gridC.nYt); + + arma_mat k1temp, k2temp, k3temp, k4temp, tempInterK1, tempInterK2, tempInterK3; + k1temp.resize(gridC.nXt, gridC.nYt); + k2temp.resize(gridC.nXt, gridC.nYt); + k3temp.resize(gridC.nXt, gridC.nYt); + k4temp.resize(gridC.nXt, gridC.nYt); + tempInterK1.resize(gridC.nXt, gridC.nYt); + tempInterK2.resize(gridC.nXt, gridC.nYt); + tempInterK3.resize(gridC.nXt, gridC.nYt); + + while (current_time < total_time) { + + if (int((current_time - dt) / dtReport) != int((current_time ) / dtReport)) { + std::cout << "step : " << iStep << "; time : " << current_time << "\n"; + arma_vec amin, amax; + precision_t mini, maxi; + amin = rho.min(); + mini = amin.min(); + amax = max(rho, 1); + maxi = arma::max(amax); + std::cout << " -> min/max (rho) : " << mini << " / " << maxi << "\n"; + amin = temp.min(); + mini = amin.min(); + amax = max(temp, 1); + maxi = arma::max(amax); + std::cout << " -> min/max (temp) : " << mini << " / " << maxi << "\n"; + } + + calc_cmax(vLon, vLat, temp, xMax, yMax); + dt = calc_dt(gridC.dlx, gridC.dln, xMax, yMax, gridC.nGCs); + dt = cfl * dt; + std::cout << " dt: " << dt << "\n"; + + // k1 - start at t0, go to t+1/2 to figure out slope at t0 (k1) + update_states(rho, vLon, vLat, temp, + k1rho, k1vLon, k1vLat, k1temp, + gridC, gridL, gridD, dt / 2); + // Take 1/2 step to figure out t+1/2 values, using k1: + rhoInterK1 = rho + k1rho * dt / 2; + vLonInterK1 = vLon + k1vLon * dt / 2; + vLatInterK1 = vLat + k1vLat * dt / 2; + tempInterK1 = temp + k1temp * dt / 2; + set_bcs(rhoInterK1, vLonInterK1, vLatInterK1, tempInterK1, gridC); + + // k2 - start at t+1/2, go to t+1 to figure out slope at t+1/2 (k2) + update_states(rhoInterK1, vLonInterK1, vLatInterK1, tempInterK1, + k2rho, k2vLon, k2vLat, k2temp, + gridC, gridL, gridD, dt / 2); + // Take 1/2 step to figure out t+1/2 values, using k2: + rhoInterK2 = rho + k2rho * dt / 2; + vLonInterK2 = vLon + k2vLon * dt / 2; + vLatInterK2 = vLat + k2vLat * dt / 2; + tempInterK2 = temp + k2temp * dt / 2; + set_bcs(rhoInterK2, vLonInterK2, vLatInterK2, tempInterK2, gridC); + + // k3 - start at t+1/2, go to t+1 to figure out slope at t+1/2 (k3) + update_states(rhoInterK2, vLonInterK2, vLatInterK2, tempInterK2, + k3rho, k3vLon, k3vLat, k3temp, + gridC, gridL, gridD, dt / 2); + // Take full step to figure out k4, using k3 slope: + rhoInterK3 = rho + k3rho * dt; + vLonInterK3 = vLon + k3vLon * dt; + vLatInterK3 = vLat + k3vLat * dt; + tempInterK3 = temp + k3rho * dt; + set_bcs(rhoInterK3, vLonInterK3, vLatInterK3, tempInterK3, gridC); + + // k4 - start at t+1, go to t+2 to figure out slope at t+1 (k4) + update_states(rhoInterK3, vLonInterK3, vLatInterK3, tempInterK3, + k4rho, k4vLon, k4vLat, k4temp, + gridC, gridL, gridD, dt); + + rho = rho - dt / 6 * (k1rho + 2 * k2rho + 2 * k3rho + k4rho); + vLon = vLon - dt / 6 * (k1vLon + 2 * k2vLon + 2 * k3vLon + k4vLon); + vLat = vLat - dt / 6 * (k1vLat + 2 * k2vLat + 2 * k3vLat + k4vLat); + temp = temp - dt / 6 * (k1temp + 2 * k2temp + 2 * k3temp + k4temp); + set_bcs(rho, vLon, vLat, temp, gridC); + + iStep++; + current_time += dt; + + if (verbose > 3) + std::cout << " ---> Outputing\n"; + + if (int((current_time - dt) / dtOut) != int((current_time ) / dtOut)) { + std::cout << "> Outputing at time : " << current_time << "\n"; + output(rho, "rho.txt", true); + output(vLon, "vLon.txt", true); + output(vLat, "vLat.txt", true); + output(temp, "temp.txt", true); + } + } + + return 0; +} diff --git a/edu/examples/Advection/cubesphere_test.cpp b/edu/examples/Advection/cubesphere_test.cpp index f201e00b..f23176aa 100644 --- a/edu/examples/Advection/cubesphere_test.cpp +++ b/edu/examples/Advection/cubesphere_test.cpp @@ -97,7 +97,6 @@ void output(arma_mat &values, outfile << nX << " " << nY << "\n"; } outfile << values; - outfile << "----"; outfile.close(); } @@ -801,7 +800,7 @@ arma_mat init_rho(arma_mat &x, r = sqrt((x - 0.0) % (x - 0.0) + (y - 0.0) % (y - 0.0)); rho.fill(1.0); - // rho.elem( find( r < 0.25)).fill(2.2); + rho.elem( find( r < 0.25)).fill(2.2); // rho.elem( find( r < 0.25)) = 2.25 - r.elem( find( r < 0.25)); return rho; @@ -857,7 +856,7 @@ int main() { precision_t dt = 0.0001; // Time Step precision_t current_time = 0.0; // Initial Time 0 - precision_t total_time = 2.0; // Total simulation time + precision_t total_time = 0.1; // Total simulation time precision_t cfl = 0.1; // CFL Number precision_t gamma = 5.0 / 3.0; // Specific ratio of heat @@ -1274,4 +1273,4 @@ int main() output(xVelSph_output, "xvel_sph.txt", true); output(yVelSph_output, "yvel_sph.txt", true); return 0; -} \ No newline at end of file +} diff --git a/edu/examples/Advection/euler.cpp b/edu/examples/Advection/euler.cpp index 5a2ad1e4..d3a7f652 100644 --- a/edu/examples/Advection/euler.cpp +++ b/edu/examples/Advection/euler.cpp @@ -1,9 +1,60 @@ -// g++ -I/usr/local/include -I/Users/ridley/Software/Json/json/include main.cpp +// g++ -o euler1d.exe -I/usr/local/include euler.cpp + +/// The armadillo library is to allow the use of 3d cubes and other +/// array types, with array math built in. This eliminates loops! +#include + +/// This is used for timing and the random seed generator: +#include + +// Types +// Precision compile-time aliasing +#ifdef AETHER_USE_PRECISION_DOUBLE +/// Precision type chosen to be `double` through `AETHER_USE_PRECISION_DOUBLE` +using precision_t = double; +#else +/// Precision type compile-time default to float. +using precision_t = float; +#endif + +/// Armadillo type vector (single column) with compile-time precision. +using arma_vec = arma::Col; +/// Armadillo type matrix (two dimension) with compile-time precision. +using arma_mat = arma::Mat; +/// Armadillo type cube (three dimension) with compile-time precision. +using arma_cube = arma::Cube; -#include "../../../include/aether.h" #include +// --------------------------------------------------------- +// grid stretched creation +// --------------------------------------------------------- + +arma_vec init_stretched_grid(int64_t nPts, int64_t nGCs) { + + precision_t dx = 1.0; + arma_vec x(nPts + nGCs * 2); + + precision_t factor = 1.0; + precision_t i2pi = 2.0 * 3.1415927 / (nPts-1); + + x(nGCs) = 0.0; + + for (int64_t i = 1; i < nPts + nGCs; i++) { + x(i + nGCs) = x(i - 1 + nGCs) + dx + factor * (1 + cos(i * i2pi)); + std::cout << "i : " << i << " " << cos(i * i2pi) << "\n"; + } + for (int64_t i = -1; i >= -nGCs; i--) { + x(i + nGCs) = x(i + 1 + nGCs) - dx - factor * (1 + cos(i * i2pi)); + std::cout << "i : " << i << " " << cos(i * i2pi) << "\n"; + } + precision_t maxX = x(nPts + nGCs - 1); + x = 100.0 * x / maxX; + + return x; +} + // --------------------------------------------------------- // grid creation // --------------------------------------------------------- @@ -17,6 +68,7 @@ arma_vec init_grid(int64_t nPts, int64_t nGCs) { for (int64_t i = -nGCs; i < nPts + nGCs; i++) { x(i + nGCs) = i * dx; } + x = x * 100.0; return x; } @@ -63,7 +115,7 @@ arma_vec init_rho(int64_t nPts) { arma_vec rho(nPts); for (int64_t i = 0; i < nPts; i++) { - if (i > (1 * nPts)/4 && i < 3 * nPts / 4) + if (i > nPts/2 - 3 && i < nPts / 2 + 3) rho(i) = 2.2; else rho(i) = 2.0; @@ -285,6 +337,79 @@ arma_vec limiter_value(arma_vec projected, return limited; } + +// --------------------------------------------------------- +// Project gradients + values to the right face, from the left +// returned values are on the i - 1/2 edges +// (between i-1 and i cell center) +// --------------------------------------------------------- + +arma_vec project_from_left_new(arma_vec values, + arma_vec x_centers, + arma_vec x_edges, + int64_t nPts, + int64_t nGCs) { + int64_t iStart = 1; + int64_t iEnd = nPts + 2 * nGCs - 1; + + // Define at edges: + arma_vec projected(nPts + 2 * nGCs + 1); + projected.zeros(); + + precision_t dxei, dxci, dxcip1, r; + + // no gradient in the 0 or iEnd cells + for (int64_t i = iStart; i < iEnd; i++) { + dxei = x_edges(i + 1) - x_edges(i); + dxci = x_centers(i) - x_centers(i - 1); + dxcip1 = x_centers(i + 1) - x_centers(i); + r = dxcip1 / dxci; + projected(i + 1) = values(i) + + 0.5 * dxei * (values(i) - values(i - 1)) / dxci + + 0.125 * dxei * dxei * (values(i + 1) + r * values(i - 1) - (1 + r) * values(i)) / (dxci * dxcip1); + } + + projected = limiter_value(projected, values, nPts, nGCs); + + return projected; +} + +// --------------------------------------------------------- +// Project gradients + values to the left face, from the right +// returned values are on the i - 1 edges +// (between i-1 and i cell center) +// --------------------------------------------------------- + +arma_vec project_from_right_new(arma_vec values, + arma_vec x_centers, + arma_vec x_edges, + int64_t nPts, + int64_t nGCs) { + int64_t iStart = 1; + int64_t iEnd = nPts + 2 * nGCs - 1; + + // Define at edges: + arma_vec projected(nPts + 2 * nGCs + 1); + precision_t dxei, dxci, dxcip1, r; + + projected.zeros(); + + // no gradient in the 0 or iEnd cells + for (int64_t i = iStart; i < iEnd; i++) { + dxei = x_edges(i + 1) - x_edges(i); + dxci = x_centers(i) - x_centers(i - 1); + dxcip1 = x_centers(i + 1) - x_centers(i); + r = dxcip1 / dxci; + projected(i) = values(i) - + 0.5 * dxei * (values(i + 1) - values(i)) / dxcip1 + + 0.125 * dxei * dxei * (values(i + 1) + r * values(i - 1) - (1 + r) * values(i)) / (dxci * dxcip1); + } + + projected = limiter_value(projected, values, nPts, nGCs); + + return projected; +} + // --------------------------------------------------------- // gudonov upwind scheme // --------------------------------------------------------- @@ -374,20 +499,24 @@ void output(arma_vec values, int main() { - precision_t dt = 0.0005; + precision_t time = 0.0; + precision_t gamma = 5.0/3.0; - int64_t nSteps = 100; int64_t iStep; - int64_t nPts = 60; + int64_t nPts = 100; int64_t nGCs = 2; int64_t nPtsTotal = nGCs + nPts + nGCs; - arma_vec x = init_grid(nPts, nGCs); + //arma_vec x = init_grid(nPts, nGCs); + arma_vec x = init_stretched_grid(nPts, nGCs); arma_vec edges = calc_bin_edges(x); arma_vec widths = calc_bin_widths(edges); + precision_t dt = 0.01 * x(nPts + nGCs - 1) / nPts; + int64_t nSteps = 10.0 / dt; + // state variables: arma_vec rho = init_rho(nPtsTotal); arma_vec grad_rho; @@ -424,10 +553,12 @@ int main() { output(rho, "rho.txt", false, nPts, nGCs); output(vel, "vel.txt", false, nPts, nGCs); output(temp, "temp.txt", false, nPts, nGCs); + output(x, "x.txt", false, nPts, nGCs); for (iStep = 0; iStep < nSteps; iStep++) { - std::cout << "step : " << iStep << "\n"; + std::cout << "iStep = " << iStep << "; time = " << time << "\n"; + time = time + dt; // ----------------------------------- // Rho @@ -435,12 +566,12 @@ int main() { grad_rho = calc_grad(rho, x, nPts, nGCs); // Right side of edge from left - rhoR = project_from_left(rho, grad_rho, + rhoR = project_from_left_new(rho, x, edges, nPts, nGCs); // Left side of edge from left - rhoL = project_from_right(rho, grad_rho, + rhoL = project_from_right_new(rho, x, edges, nPts, nGCs); @@ -449,11 +580,11 @@ int main() { grad_vel = calc_grad(vel, x, nPts, nGCs); // Right side of edge from left - velR = project_from_left(vel, grad_vel, + velR = project_from_left_new(vel, x, edges, nPts, nGCs); // Left side of edge from left - velL = project_from_right(vel, grad_vel, + velL = project_from_right_new(vel, x, edges, nPts, nGCs); @@ -462,11 +593,11 @@ int main() { grad_temp = calc_grad(temp, x, nPts, nGCs); // Right side of edge from left - tempR = project_from_left(temp, grad_temp, + tempR = project_from_left_new(temp, x, edges, nPts, nGCs); // Left side of edge from left - tempL = project_from_right(temp, grad_temp, + tempL = project_from_right_new(temp, x, edges, nPts, nGCs); diff --git a/edu/examples/Advection/euler_vertical.cpp b/edu/examples/Advection/euler_vertical.cpp new file mode 100644 index 00000000..65a0a429 --- /dev/null +++ b/edu/examples/Advection/euler_vertical.cpp @@ -0,0 +1,737 @@ + +// g++ -o euler1dv.exe -I/usr/local/include euler_vertical.cpp + +/// The armadillo library is to allow the use of 3d cubes and other +/// array types, with array math built in. This eliminates loops! +#include + +/// This is used for timing and the random seed generator: +#include + +// Types +// Precision compile-time aliasing +//#ifdef AETHER_USE_PRECISION_DOUBLE +/// Precision type chosen to be `double` through `AETHER_USE_PRECISION_DOUBLE` +using precision_t = double; +//#else +/// Precision type compile-time default to float. +//using precision_t = float; +//#endif + +/// Armadillo type vector (single column) with compile-time precision. +using arma_vec = arma::Col; +/// Armadillo type matrix (two dimension) with compile-time precision. +using arma_mat = arma::Mat; +/// Armadillo type cube (three dimension) with compile-time precision. +using arma_cube = arma::Cube; + +#include + +const precision_t t0 = 1000.0; +const precision_t mass = 16.0 * 1.67e-27; +const precision_t r0 = 1.0e19 * mass; +const precision_t kb = 1.38e-23; +const precision_t gravity = -kb * t0 / mass / 100000.0; + +// --------------------------------------------------------- +// grid stretched creation +// --------------------------------------------------------- + +arma_vec init_stretched_grid(int64_t nPts, int64_t nGCs) { + + precision_t dx = 1.0; + arma_vec x(nPts + nGCs * 2); + + precision_t factor = 1.0; + precision_t i2pi = 2.0 * 3.1415927 / (nPts-1); + + x(nGCs) = 0.0; + + for (int64_t i = 1; i < nPts + nGCs; i++) { + x(i + nGCs) = x(i - 1 + nGCs) + dx + factor * (1 + cos(i * i2pi)); + std::cout << "i : " << i << " " << cos(i * i2pi) << "\n"; + } + for (int64_t i = -1; i >= -nGCs; i--) { + x(i + nGCs) = x(i + 1 + nGCs) - dx - factor * (1 + cos(i * i2pi)); + std::cout << "i : " << i << " " << cos(i * i2pi) << "\n"; + } + precision_t maxX = x(nPts + nGCs - 1); + x = 100.0 * x / maxX; + + return x; +} + +// --------------------------------------------------------- +// grid creation +// --------------------------------------------------------- + +arma_vec init_grid(int64_t nPts, int64_t nGCs) { + + precision_t dx = 1.0 / nPts; + arma_vec x(nPts + nGCs * 2); + + // uniform grid: + for (int64_t i = -nGCs; i < nPts + nGCs; i++) { + x(i + nGCs) = i * dx; + } + // stretch to be 100 km: + x = x * 200.0 * 1000.0; + + return x; +} + +// --------------------------------------------------------- +// bin edges +// --------------------------------------------------------- + +arma_vec calc_bin_edges(arma_vec centers) { + + int64_t nPts = centers.n_elem; + arma_vec edges(nPts+1); + + precision_t dc = centers(1) - centers(0); + + edges(0) = centers(0) - dc / 2.0; + edges(1) = centers(0) + dc / 2.0; + for (int64_t i = 2; i < nPts + 1; i++) + edges(i) = 2 * centers(i - 1) - edges(i - 1); + + return edges; +} + +// --------------------------------------------------------- +// bin widths +// --------------------------------------------------------- + +arma_vec calc_bin_widths(arma_vec edges) { + + int64_t nPts = edges.n_elem - 1; + arma_vec widths(nPts); + + for (int64_t i = 0; i < nPts; i++) + widths(i) = edges(i + 1) - edges(i); + + return widths; +} + +// --------------------------------------------------------- +// initial rho +// --------------------------------------------------------- + +arma_vec init_rho(int64_t nPts, arma_vec x) { + + arma_vec rho(nPts); + precision_t h, dx; + rho(0) = r0; + for (int64_t i = 1; i < nPts; i++) { + // t = 100: + h = kb * t0 / mass / abs(gravity); + dx = x(i) - x(i-1); + rho(i) = rho(i-1) * exp( - dx / h); +//std::cout << "i, rho : " << i +// << " " << rho(i) +// << " " << dx +// << " " << h << "\n"; + } + + return rho; +} + +// --------------------------------------------------------- +// set BCs +// --------------------------------------------------------- + +void set_bcs(int64_t nPts, int64_t nGCs, + arma_vec x, + arma_vec &rho, + arma_vec &vel, + arma_vec &temp) { + + precision_t h, dx; + // Lower BC on rho: + rho(0) = r0; + vel(0) = 0.0; //vel(nGCs); + temp(0) = t0; + for (int64_t i = 1; i < nGCs; i++) { + h = kb * t0 / mass / abs(gravity); + dx = x(i) - x(i-1); + rho(i) = rho(i-1) * exp( - dx / h); + vel(i) = 0.0; //vel(nGCs); + temp(i) = t0; + } + // Upper BC on rho: + for (int64_t i = nPts + nGCs; i < nPts + 2 * nGCs; i++) { + h = kb * temp(i) / mass / abs(gravity); + dx = x(i) - x(i-1); + temp(i) = temp(i-1); + rho(i) = temp(i-1) / temp(i) * rho(i-1) * exp( - dx / h); + //if (vel(i-1) >= 0.0) { + vel(i) = vel(i-1); + //} else { + //vel(i) = 0.0; + //} + } + + return; +} + +// --------------------------------------------------------- +// initial velocity +// --------------------------------------------------------- + +arma_vec init_vel(int64_t nPts) { + arma_vec vel(nPts); + // all cells positive to right: + vel.zeros(); + return vel; +} + +// --------------------------------------------------------- +// initial temp (e) +// --------------------------------------------------------- + +arma_vec init_temp(int64_t nPts) { + arma_vec temp(nPts); + temp.ones(); + temp = temp * t0; + return temp; +} + +// --------------------------------------------------------- +// exchange messages +// --------------------------------------------------------- + +void exchange(arma_vec &values, int64_t nPts, int64_t nGCs) { + + int64_t iEnd = nPts + 2 * nGCs; + // this is a periodic BC: + for (int64_t i = 0; i < nGCs; i++) { + values(i) = values(iEnd - 2 * nGCs + i); + values(iEnd - nGCs + i) = values(nGCs + i); + } +} + +// --------------------------------------------------------- +// +// --------------------------------------------------------- + +arma_vec limiter_mc(arma_vec left, + arma_vec right, + int64_t nPts, + int64_t nGCs) { + + precision_t beta = 0.8; + + arma_vec s = left % right; + arma_vec combined = (left + right) * 0.5; + + left = left * beta; + right = right * beta; + arma_vec limited = left; + + for (int64_t i = 1; i < nPts + 2 * nGCs - 1; i++) { + if (s(i) < 0) { + // Sign < 0 means opposite signed left and right: + limited(i) = 0.0; + } else { + if (left(i) > 0 && right(i) > 0) { + if (right(i) < limited(i)) + limited(i) = right(i); + if (combined(i) < limited(i)) + limited(i) = combined(i); + } else { + if (right(i) > limited(i)) + limited(i) = right(i); + if (combined(i) > limited(i)) + limited(i) = combined(i); + } + } + + } + return limited; +} + +// --------------------------------------------------------- +// calc gradients at centers +// - values and x defined at centers +// --------------------------------------------------------- + +arma_vec calc_grad(arma_vec values, + arma_vec x, + int64_t nPts, + int64_t nGCs) { + + arma_vec gradients = values * 0.0; + arma_vec gradL = values * 0.0; + arma_vec gradR = values * 0.0; + + precision_t factor1 = 0.625; + precision_t factor2 = 0.0416667; + precision_t h; + + int64_t i; + + i = nGCs - 1; + h = 2.0 / (x(i+1) - x(i)); + gradR(i) = h * (factor1 * (values(i+1) - values(i)) - + factor2 * (values(i+2) - values(i-1))); + gradL(i) = (values(i) - values(i-1)) / (x(i) - x(i-1)); + + for (i = nGCs; i < nPts + nGCs; i++) { + h = 2.0 / (x(i) - x(i-1)); + gradL(i) = h * (factor1 * (values(i) - values(i-1)) - + factor2 * (values(i+1) - values(i-2))); + h = 2.0 / (x(i+1) - x(i)); + gradR(i) = h * (factor1 * (values(i+1) - values(i)) - + factor2 * (values(i+2) - values(i-1))); + } + i = nPts + nGCs; + h = 2.0 / (x(i) - x(i-1)); + gradL(i) = h * (factor1 * (values(i) - values(i-1)) - + factor2 * (values(i+1) - values(i-2))); + gradR(i) = (values(i+1) - values(i)) / (x(i+1) - x(i)); + + gradients = limiter_mc(gradL, gradR, nPts, nGCs); + + return gradients; +} + +// --------------------------------------------------------- +// Project gradients + values to the right face, from the left +// returned values are on the i - 1/2 edges +// (between i-1 and i cell center) +// --------------------------------------------------------- + +arma_vec project_from_left(arma_vec values, + arma_vec gradients, + arma_vec x_centers, + arma_vec x_edges, + int64_t nPts, + int64_t nGCs) { + int64_t iStart = 0; + int64_t iEnd = nPts + 2 * nGCs; + + // Define at edges: + arma_vec projected(nPts + 2 * nGCs + 1); + projected.zeros(); + + // no gradient in the 0 or iEnd cells + for (int64_t i = iStart + 1; i < iEnd - 1; i++) + projected(i + 1) = values(i) + + gradients(i) * (x_edges(i + 1) - x_centers(i)); + + return projected; +} + + +// --------------------------------------------------------- +// Project gradients + values to the left face, from the right +// returned values are on the i - 1 edges +// (between i-1 and i cell center) +// --------------------------------------------------------- + +arma_vec project_from_right(arma_vec values, + arma_vec gradients, + arma_vec x_centers, + arma_vec x_edges, + int64_t nPts, + int64_t nGCs) { + int64_t iStart = 0; + int64_t iEnd = nPts + 2 * nGCs; + + // Define at edges: + arma_vec projected(nPts + 2 * nGCs + 1); + projected.zeros(); + + // no gradient in the 0 or iEnd cells + for (int64_t i = iStart + 1; i < iEnd - 1; i++) + projected(i) = values(i) + + gradients(i) * (x_edges(i) - x_centers(i)); + + return projected; +} + +// --------------------------------------------------------- +// Limiter on values +// projected is assumed to be on the edge between the +// i-1 and i cell (i-1/2) +// limited is returned at edges +// --------------------------------------------------------- + +arma_vec limiter_value(arma_vec projected, + arma_vec values, + int64_t nPts, + int64_t nGCs) { + + int64_t iStart = 0; + int64_t iEnd = nPts + 2 * nGCs; + + arma_vec limited = projected; + + precision_t mini, maxi; + + for (int64_t i = iStart + 1; i < iEnd - 1; i++) { + + mini = values(i-1); + if (values(i) < mini) + mini = values(i); + maxi = values(i-1); + if (values(i) > maxi) + maxi = values(i); + + if (limited(i) < mini) + limited(i) = mini; + if (limited(i) > maxi) + limited(i) = maxi; + + } + return limited; +} + + +// --------------------------------------------------------- +// Project gradients + values to the right face, from the left +// returned values are on the i - 1/2 edges +// (between i-1 and i cell center) +// --------------------------------------------------------- + +arma_vec project_from_left_new(arma_vec values, + arma_vec x_centers, + arma_vec x_edges, + int64_t nPts, + int64_t nGCs) { + int64_t iStart = 1; + int64_t iEnd = nPts + 2 * nGCs - 1; + + // Define at edges: + arma_vec projected(nPts + 2 * nGCs + 1); + projected.zeros(); + + precision_t dxei, dxci, dxcip1, r; + + // no gradient in the 0 or iEnd cells + for (int64_t i = iStart; i < iEnd; i++) { + dxei = x_edges(i + 1) - x_edges(i); + dxci = x_centers(i) - x_centers(i - 1); + dxcip1 = x_centers(i + 1) - x_centers(i); + r = dxcip1 / dxci; + projected(i + 1) = values(i) + + 0.5 * dxei * (values(i) - values(i - 1)) / dxci + + 0.125 * dxei * dxei * (values(i + 1) + r * values(i - 1) - (1 + r) * values(i)) / (dxci * dxcip1); + } + + projected = limiter_value(projected, values, nPts, nGCs); + + return projected; +} + +// --------------------------------------------------------- +// Project gradients + values to the left face, from the right +// returned values are on the i - 1 edges +// (between i-1 and i cell center) +// --------------------------------------------------------- + +arma_vec project_from_right_new(arma_vec values, + arma_vec x_centers, + arma_vec x_edges, + int64_t nPts, + int64_t nGCs) { + int64_t iStart = 1; + int64_t iEnd = nPts + 2 * nGCs - 1; + + // Define at edges: + arma_vec projected(nPts + 2 * nGCs + 1); + precision_t dxei, dxci, dxcip1, r; + + projected.zeros(); + + // no gradient in the 0 or iEnd cells + for (int64_t i = iStart; i < iEnd; i++) { + dxei = x_edges(i + 1) - x_edges(i); + dxci = x_centers(i) - x_centers(i - 1); + dxcip1 = x_centers(i + 1) - x_centers(i); + r = dxcip1 / dxci; + projected(i) = values(i) - + 0.5 * dxei * (values(i + 1) - values(i)) / dxcip1 + + 0.125 * dxei * dxei * (values(i + 1) + r * values(i - 1) - (1 + r) * values(i)) / (dxci * dxcip1); + } + + projected = limiter_value(projected, values, nPts, nGCs); + + return projected; +} + +// --------------------------------------------------------- +// gudonov upwind scheme +// --------------------------------------------------------- + +arma_vec gudonov(arma_vec valL, + arma_vec valR, + arma_vec velL, + arma_vec velR, + int64_t nPts, + int64_t nGCs) { + + int64_t iStart = 0; + int64_t iEnd = nPts + 2 * nGCs; + + arma_vec flux = velL * 0.0; + arma_vec vel = (velL + velR)/2.0; + + for (int64_t i = iStart + 1; i < iEnd - 1; i++) { + if (vel(i) > 0) + flux(i) = valR(i) * vel(i); + else + flux(i) = valL(i) * vel(i); + } + return flux; +} + +// --------------------------------------------------------- +// gudonov upwind scheme +// --------------------------------------------------------- + +arma_vec rusanov(arma_vec valL, + arma_vec valR, + arma_vec velL, + arma_vec velR, + arma_vec widths, + int64_t nPts, + int64_t nGCs) { + + int64_t iStart = 0; + int64_t iEnd = nPts + 2 * nGCs; + + arma_vec ws = abs((velL + velR)/2.0) + 1.; + arma_vec fluxL = valL % velL; + arma_vec fluxR = valR % velR; + arma_vec valDiff = valL - valR; + arma_vec flux = (fluxL + fluxR) / 2.0; + for (int64_t i = iStart + 1; i < iEnd - 1; i++) + flux(i) = flux(i) - ws(i)/2 * valDiff(i); + + return flux; +} + +// --------------------------------------------------------- +// +// --------------------------------------------------------- + +void output(arma_vec values, + std::string filename, + bool DoAppend, + int64_t nPts, + int64_t nGCs) { + + std::ofstream outfile; + if (DoAppend) + outfile.open(filename, std::ios_base::app); + else + outfile.open(filename); + + int64_t i; + for (i = 0; i < nPts + 2 * nGCs ; i++) { + outfile << values(i) << " "; + } + outfile << "\n"; + outfile.close(); + +} + + +// --------------------------------------------------------- +// +// --------------------------------------------------------- + + +// --------------------------------------------------------- +// main code +// --------------------------------------------------------- + +int main() { + + precision_t timeMax = 0.1; + precision_t time = 0.0; + + precision_t gamma = 5.0/3.0; + precision_t KoM = kb/mass; + //gamma = kb/mass; + + int64_t iStep; + + int64_t nPts = 100, i; + int64_t nGCs = 2; + int64_t nPtsTotal = nGCs + nPts + nGCs; + + arma_vec x = init_grid(nPts, nGCs); + //arma_vec x = init_stretched_grid(nPts, nGCs); + arma_vec edges = calc_bin_edges(x); + arma_vec widths = calc_bin_widths(edges); + + precision_t dt = 0.00001 * x(nPts + nGCs - 1) / nPts; + int64_t nSteps = 100.0 / dt; + + // std::cout << "dt : " << dt << "; nSteps: " << nSteps << "\n"; + + // state variables: + arma_vec rho = init_rho(nPtsTotal, x); + arma_vec grad_rho; + arma_vec rhoL; + arma_vec rhoR; + + arma_vec vel = init_vel(nPtsTotal); + arma_vec grad_vel; + arma_vec velL; + arma_vec velR; + + // temp is "e" (not E): + arma_vec temp = init_temp(nPtsTotal); + arma_vec grad_temp; + arma_vec tempL, tempR; + + arma_vec eq1Flux, eq1FluxL, eq1FluxR; + arma_vec eq2Flux, eq2FluxL, eq2FluxR; + arma_vec eq3Flux, eq3FluxL, eq3FluxR; + arma_vec wsL, wsR, ws; + arma_vec dtAll; + + arma_vec diff; + +// exchange(rho, nPts, nGCs); +// exchange(vel, nPts, nGCs); +// exchange(temp, nPts, nGCs); + + arma_vec momentum = rho % vel; + arma_vec grad_momenum, momentumL, momentumR; + + arma_vec totalE = rho % temp * KoM + 0.5 * rho % vel % vel; + arma_vec grad_totalE, totaleL, totaleR; + + output(rho, "rho.txt", false, nPts, nGCs); + output(vel, "vel.txt", false, nPts, nGCs); + output(temp, "temp.txt", false, nPts, nGCs); + output(totalE, "totale.txt", false, nPts, nGCs); + output(x, "x.txt", false, nPts, nGCs); + + iStep = 0; + while (time < timeMax) { + + std::cout << "iStep = " << iStep + << "; time = " << time + << "; vel = " << vel(80) << "\n"; + + // ----------------------------------- + // Rho + + grad_rho = calc_grad(rho, x, nPts, nGCs); + + // Right side of edge from left + rhoR = project_from_left_new(rho, + x, edges, + nPts, nGCs); + + // Left side of edge from left + rhoL = project_from_right_new(rho, + x, edges, + nPts, nGCs); + + // ----------------------------------- + // vel + + grad_vel = calc_grad(vel, x, nPts, nGCs); + // Right side of edge from left + velR = project_from_left_new(vel, + x, edges, + nPts, nGCs); + // Left side of edge from left + velL = project_from_right_new(vel, + x, edges, + nPts, nGCs); + + // ----------------------------------- + // temp + + grad_temp = calc_grad(temp, x, nPts, nGCs); + // Right side of edge from left + tempR = project_from_left_new(temp, + x, edges, + nPts, nGCs); + // Left side of edge from left + tempL = project_from_right_new(temp, + x, edges, + nPts, nGCs); + + // eq 1 = rho + // eq 2 = rho * vel (momentum) + // eq 3 = E --> rho * (temp + 0.5 * vel^2) (totalE) + + // Calculate fluxes of different terms at the edges: + eq1FluxL = rhoL % velL; + eq1FluxR = rhoR % velR; + + momentumL = eq1FluxL; + momentumR = eq1FluxR; + totaleL = rhoL % tempL * KoM + 0.5 * rhoL % velL % velL; + totaleR = rhoR % tempR * KoM + 0.5 * rhoR % velR % velR; + + //eq2FluxL = rhoL % (velL % velL + (gamma-1) * tempL); + //eq2FluxR = rhoR % (velR % velR + (gamma-1) * tempR); + eq2FluxL = rhoL % (velL % velL + KoM * tempL); + eq2FluxR = rhoR % (velR % velR + KoM * tempR); + + //eq3FluxL = rhoL % velL % (0.5 * velL % velL + gamma * tempL); + //eq3FluxR = rhoR % velR % (0.5 * velR % velR + gamma * tempR); + eq3FluxL = rhoL % velL % (0.5 * velL % velL + gamma * tempL * KoM); + eq3FluxR = rhoR % velR % (0.5 * velR % velR + gamma * tempR * KoM); + + // Calculate the wave speed for the diffusive flux: + //wsL = abs(velL) + sqrt(gamma * (gamma-1.0) * tempL); + //wsR = abs(velR) + sqrt(gamma * (gamma-1.0) * tempR); + wsL = abs(velL) + sqrt(gamma * KoM * tempL); + wsR = abs(velR) + sqrt(gamma * KoM * tempR); + ws = wsR; + dt = 0.0; + for (i = 1; i < nPts + nGCs*2 - 1; i++) { + if (wsR(i) > ws(i)) ws(i) = wsR(i); + if (widths(i) / ws(i) > dt) + dt = widths(i) / ws(i); + } + dt = dt * 0.001; + time = time + dt; + + // Calculate average flux at the edges: + diff = rhoR - rhoL; + eq1Flux = (eq1FluxL + eq1FluxR) / 2 + 0.5 * ws % diff; + diff = momentumR - momentumL; + eq2Flux = (eq2FluxL + eq2FluxR) / 2 + 0.5 * ws % diff; + diff = totaleR - totaleL; + eq3Flux = (eq3FluxL + eq3FluxR) / 2 + 0.5 * ws % diff; + + // Update values: + for (i = nGCs; i < nPts + nGCs*2 - 1; i++) { + rho(i) = rho(i) - dt / widths(i) * (eq1Flux(i+1) - eq1Flux(i)); + momentum(i) = momentum(i) - dt / widths(i) * (eq2Flux(i+1) - eq2Flux(i)) + + gravity * rho(i) * dt; + totalE(i) = totalE(i) - dt / widths(i) * (eq3Flux(i+1) - eq3Flux(i)); + } + + //exchange(rho, nPts, nGCs); + //exchange(momentum, nPts, nGCs); + //exchange(totalE, nPts, nGCs); + vel = momentum / rho; + temp = (totalE / rho - 0.5 * vel % vel) / KoM; + + set_bcs(nPts, nGCs, x, rho, vel, temp); + + output(rho, "rho.txt", true, nPts, nGCs); + output(vel, "vel.txt", true, nPts, nGCs); + output(temp, "temp.txt", true, nPts, nGCs); + output(totalE, "totale.txt", true, nPts, nGCs); + //output(rhoL, "rhor.txt", false, nPts, nGCs); + //output(rhoR, "rhol.txt", false, nPts, nGCs); + iStep++; + + } + + return 0; +} diff --git a/edu/examples/Advection/plot.py b/edu/examples/Advection/plot.py index 3dc8e6d9..a922e766 100755 --- a/edu/examples/Advection/plot.py +++ b/edu/examples/Advection/plot.py @@ -33,8 +33,11 @@ def read_file(file): return values -def plot_data(values, fileout): +def plot_data(values, fileout, x = []): + if (len(x) == 0): + nPts = len(values[0]) + x = np.arange(0, nPts) fig = plt.figure(figsize = (10,10)) ax = fig.add_subplot(111) n = len(values)-1 @@ -42,12 +45,13 @@ def plot_data(values, fileout): nSkip = int(n / 10) else: nSkip = 1 + if (n == 0): + n = 1 for i, v in enumerate(values): per = 0.1 + 0.9 * float(i) / float(n) if (i % nSkip == 0): - ax.plot(v, alpha = per) - - ax.plot(values[-1]) + print('Plotting... ', i, values[i][10]) + ax.plot(x, values[i]) fig.savefig(fileout) plt.close() @@ -61,6 +65,7 @@ def plot_data(values, fileout): fileout = fileout[0] values = read_file(filein) - -plot_data(values, fileout) +x = read_file('x.txt') +x = x[0] +plot_data(values, fileout, x = x) diff --git a/edu/examples/Dipole/MoreDipoleInfo.ipynb b/edu/examples/Dipole/MoreDipoleInfo.ipynb new file mode 100644 index 00000000..547388a1 --- /dev/null +++ b/edu/examples/Dipole/MoreDipoleInfo.ipynb @@ -0,0 +1,389 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "d3792d6f-1f9b-4364-a1a8-f5d37dabdf41", + "metadata": {}, + "outputs": [], + "source": [ + "import dipole # use the coordinate transforms from dipole.py\n", + "import numpy as np \n", + "import matplotlib.pyplot as plt\n", + "from matplotlib.colors import LinearSegmentedColormap\n", + "\n", + "save_figs = False" + ] + }, + { + "cell_type": "markdown", + "id": "175f59e3-7801-4b34-ac69-1a91231b9786", + "metadata": {}, + "source": [ + "# Dipole Information continued\n", + "\n", + "This document has more information on the dipole coordinate system. Some things are impossible to convey in just words...\n", + "\n", + "\n", + "First, a primer on the dipole coordinates and some plots of how they look in 2D space:\n", + "\n", + "## Dipole (p,q) coordinates\n", + "\n", + "The magnetic coordinates in Aether are orthogonal to a dipolar magnetic field. The `p` coordinate is the same as L-shell, and `q` paramaterizes the displacement along the magnetic field line. In terms of radius and ***co***latitude, `p` and `q` are calculated as\n", + "\n", + "$$\n", + "p = \\frac{r}{\\sin^2{\\theta}}\n", + "\\tag{1}\n", + "$$\n", + "\n", + "$$\n", + "q = \\frac{\\cos{\\theta}}{r^2}\n", + "\\tag{2}\n", + "$$\n", + "\n", + "Here is a quick plot of `p` and `q` in 2D space:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "54ce013a-a7a3-4e5a-8fde-c15276486ee2", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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xMte9jLcf//9M72sOYWrrroKhBBcdtllM72UWY2HH34Yr3jFK7Bs2TIMDAzgaU97GjZu3DjTy5q1iOMY7373u3HIIYeg1Wph/fr1+MAHPgCue6LVwLwnQi9/+ctx11134cYbb8SNN96Iu+66CxdffHHX8170ohdh69at5vHd7353GlY7+3Ddddfhsssuw7ve9S786le/wnOf+1yceeaZ2Lx5s3P8Qw89hLPOOgvPfe5z8atf/QrvfOc78Za3vAVf//rXp3nlsxO9vp8a999/f+b38bDDDpumFXsAktxfeuml+NnPfoabb74ZcRzj9NNPx+jo6EwvbU7gzjvvxGc/+1kce+yxM72UWY2dO3fiOc95DsIwxPe+9z3ce++9+OhHP4rFixfP9NJmLf7pn/4Jn/70p/GpT30K9913Hz7ykY/gn//5n/HJT36y/iRiHuPee+8VAMTPfvYzs+/2228XAMTvfve70vMuueQScc4550zDCmc/nvnMZ4o3vOENmX1HHHGEuPLKK53j//Ef/1EcccQRmX2vf/3rxYknnrjf1jiX0Ov7+aMf/UgAEDt37pyG1XnUxfbt2wUA8eMf/3imlzLrMTIyIg477DBx8803i1NPPVW89a1vneklzVq8/e1vFyeffPJML2NO4cUvfrF4zWtek9l33nnniVe84hW155jXitDtt9+ORYsW4VnPepbZd+KJJ2LRokW47bbbKs+95ZZbsHLlSmzYsAGve93rsH379v293FmHdruNjRs34vTTT8/sP/3000vfv9tvv70w/owzzsAvfvELdDr93UJ8Mu+nxtOf/nSsWbMGL3jBC/CjH/1ofy7TowZ2794NAFi6dOkMr2T249JLL8WLX/xinHbaaTO9lFmPb33rWzjhhBNw/vnnY+XKlXj605+Oz33uczO9rFmNk08+GT/84Q/xwAMPAAB+/etf46c//SnOOuus2nPUbro6F7Ft2zasXLmysH/lypXYtm1b6Xlnnnkmzj//fKxbtw4PPfQQ/uf//J/4i7/4C2zcuLGvKn0+/vjjSJIEq1atyuxftWpV6fu3bds25/g4jvH4449jzZo1+229sx2TeT/XrFmDz372szj++OMxMTGBL37xi3jBC16AW265Baeccsp0LNsjByEELr/8cpx88sk4+uijZ3o5sxpf/epX8ctf/hJ33nnnTC9lTuDBBx/ENddcg8svvxzvfOc78fOf/xxvectb0Gg08MpXvnKmlzcr8fa3vx27d+/GEUccAcYYkiTBhz70IVx44YW155iTROh973sf3v/+91eO0R88QkjhmBDCuV/jr//6r83ro48+GieccALWrVuHG264Aeedd94kVz13kX+vur1/rvGu/f2KXt7Pww8/HIcffrjZPumkk7Blyxb87//9vz0RmiG86U1vwt13342f/vSnM72UWY0tW7bgrW99K2666SY0m82ZXs6cAOccJ5xwAj784Q8DkErwb3/7W1xzzTWeCJXguuuuw5e+9CV85StfwVOe8hTcdddduOyyy3DAAQfgkksuqTXHnCRCb3rTm/A3f/M3lWMOPvhg3H333Xj00UcLxx577LHCX+VVWLNmDdatW4ff//73Pa91LmP58uVgjBXUiu3bt5e+f6tXr3aOD4IAy5Yt229rnQuYzPvpwoknnogvfelLU708jxp485vfjG9961v4yU9+ggMPPHCmlzOrsXHjRmzfvh3HH3+82ZckCX7yk5/gU5/6FCYmJsAYm8EVzj6sWbMGRx11VGbfkUce6ZNNKnDFFVfgyiuvNJzgmGOOwZ/+9CdcddVV85sILV++HMuXL+867qSTTsLu3bvx85//HM985jMBAHfccQd2796NZz/72bWvt2PHDmzZsqXvwjpRFOH444/HzTffjHPPPdfsv/nmm3HOOec4zznppJPw7W9/O7PvpptuwgknnIAwDPfremc7JvN+uvCrX/2q734XZxpCCLz5zW/G9ddfj1tuuQWHHHLITC9p1uMFL3gB7rnnnsy+V7/61TjiiCPw9re/3ZMgB57znOcUyjI88MADWLdu3QytaPZj7969oDRrd2aM9ZQ+P6+zxoQQ4kUvepE49thjxe233y5uv/12ccwxx4izzz47M+bwww8X3/jGN4QQMsPh7//+78Vtt90mHnroIfGjH/1InHTSSeJJT3qSGB4enokfYUbx1a9+VYRhKD7/+c+Le++9V1x22WVicHBQbNq0SQghxJVXXikuvvhiM/7BBx8UAwMD4m1ve5u49957xec//3kRhqH42te+NlM/wqxCr+/nxz/+cXH99deLBx54QPzmN78RV155pQAgvv71r8/Uj9CX+B//43+IRYsWiVtuuUVs3brVPPbu3TvTS5tT8Flj1fj5z38ugiAQH/rQh8Tvf/978eUvf1kMDAyIL33pSzO9tFmLSy65RDzpSU8S3/nOd8RDDz0kvvGNb4jly5eLf/zHf6w9x7wnQjt27BAXXXSRWLBggViwYIG46KKLCqnIAMS1114rhBBi79694vTTTxcrVqwQYRiKgw46SFxyySVi8+bN07/4WYJ/+7d/E+vWrRNRFInjjjsukzJ8ySWXiFNPPTUz/pZbbhFPf/rTRRRF4uCDDxbXXHPNNK94dqOX9/Of/umfxJOf/GTRbDbFkiVLxMknnyxuuOGGGVh1fwOA86HvGx714IlQd3z7298WRx99tGg0GuKII44Qn/3sZ2d6SbMaw8PD4q1vfas46KCDRLPZFOvXrxfvete7xMTERO05iBDKyerh4eHh4eHh0WeY13WEPDw8PDw8PDyq4ImQh4eHh4eHR9/CEyEPDw8PDw+PvoUnQh4eHh4eHh59C0+EPDw8PDw8PPoWngh5eHh4eHh49C08EfLw8PDw8PDoW3gi5OHh4eHh4dG38ERoGrFp0yYQQnDXXXfN9FJwyimn4Ctf+UrlGEIIvvnNbwKYXWuvwhe+8AUsXrx4Sue85ZZbQAjBrl27pnReF/7hH/4Bb3nLW/b7dTz6G7Pp81znXmTjfe97H572tKftvwXNYjzvec/DZZddZrYPPvhgfOITnzDb9j17+/btWLFiBR5++OHpXeQcRN8RoS1btuC1r30tDjjgAERRhHXr1uGtb30rduzYMdNLmzZ85zvfwbZt20y33jpYu3Yttm7diqOPPno/rmzf8dd//dd44IEHZnoZk8Y//uM/4tprr8VDDz0000vxmCa86lWvAiEEhBCEYYj169fjH/7hHzA6OjrTS9vvcN2LDj74YPN+DAwM4Oijj8ZnPvOZGVylRJ6EVI3T64+iCE9+8pPxjne8AxMTE1O+pjvvvBN/93d/Z7a3bt2KM888EwCwcuVKXHzxxXjve9875dedb+grIvTggw/ihBNOwAMPPID/+I//wB/+8Ad8+tOfxg9/+EOcdNJJeOKJJ2Z6idOCf/3Xf8WrX/3qQsfeKjDGsHr1agRBsB9Xtu9otVpYuXLlTC9j0li5ciVOP/10fPrTn57ppXhMI170ohdh69atePDBB/HBD34QV199Nf7hH/5hppe131F2L/rABz6ArVu34u6778bLXvYyvOENb8B11103Q6vsHa973euwdetW/OEPf8BHPvIR/Nu//Rve9773Tfl1VqxYgYGBAbO9evVqNBoNs/3qV78aX/7yl7Fz584pv/Z8Ql8RoUsvvRRRFOGmm27CqaeeioMOOghnnnkmfvCDH+Dhhx/Gu971rtJzL7zwwoKC0ul0sHz5clx77bUAgBtvvBEnn3wyFi9ejGXLluHss8/GH//4x9I5XWGcb37zmyCEZPZ9+9vfxvHHH49ms4n169fj/e9/P+I4Nsff97734aCDDkKj0cABBxxQGVp5/PHH8YMf/AAvfelLM/t///vf45RTTkGz2cRRRx2Fm2++OXM8L6XrcNH3v/99PP3pT0er1cJf/MVfYPv27fje976HI488EgsXLsSFF16IvXv3mnmEEPjIRz6C9evXo9Vq4alPfSq+9rWvmeN63h/+8Ic44YQTMDAwgGc/+9m4//77zZhf//rXeP7zn48FCxZg4cKFOP744/GLX/yi9D295ppr8OQnPxlRFOHwww/HF7/4xcxxQgj+z//5Pzj33HMxMDCAww47DN/61rdK30MAuO2223DKKaeg1Wph7dq1eMtb3pL5C/7qq6/GYYcdhmaziVWrVuGv/uqvzLGvfe1rOOaYY9BqtbBs2TKcdtppmXNf+tKX4j/+4z8qr+8xv9BoNLB69WqsXbsWL3/5y3HRRReZEEce8/1eBAALFizA6tWrceihh+KDH/wgDjvssNL3484778QLX/hCLF++HIsWLcKpp56KX/7yl5kxdT7j9957L8466ywMDQ1h1apVuPjii/H4448DkKrdj3/8Y/zLv/yLUXs2bdpU+rMNDAxg9erVOOigg/CXf/mXeOELX4ibbrrJHN+xYwcuvPBCHHjggRgYGMAxxxxT+MyPjo7ila98JYaGhrBmzRp89KMfLVynKjQGAMcccwxWr16N66+/vnStHn1EhJ544gl8//vfxxvf+Ea0Wq3MsdWrV+Oiiy7Cddddh7IetBdddBG+9a1vYc+ePWbf97//fYyOjuIv//IvAchf3Msvvxx33nknfvjDH4JSinPPPRec80mv+/vf/z5e8YpX4C1veQvuvfdefOYzn8EXvvAFfOhDHwIgv1Q//vGP4zOf+Qx+//vf45vf/CaOOeaY0vl++tOfYmBgAEceeaTZxznHeeedB8YYfvazn+HTn/403v72t9da3/ve9z586lOfwm233YYtW7bgggsuwCc+8Ql85StfwQ033ICbb74Zn/zkJ834d7/73bj22mtxzTXX4Le//S3e9ra34RWveAV+/OMfZ+Z917vehY9+9KP4xS9+gSAI8JrXvMYcu+iii3DggQfizjvvxMaNG3HllVciDEPn+q6//nq89a1vxd///d/jN7/5DV7/+tfj1a9+NX70ox9lxr3//e/HBRdcgLvvvhtnnXUWLrroolKF8J577sEZZ5yB8847D3fffTeuu+46/PSnP8Wb3vQmAMAvfvELvOUtb8EHPvAB3H///bjxxhtxyimnAJDS9YUXXojXvOY1uO+++3DLLbfgvPPOy/zePfOZz8SWLVvwpz/9qdb/gcf8Q6vVQqfTcR6bz/eiMjSbzdL3Y2RkBJdccgluvfVW/OxnP8Nhhx2Gs846CyMjI5lxVZ/xrVu34tRTT8XTnvY0/OIXv8CNN96IRx99FBdccAEA4F/+5V9w0kknGaVn69atWLt2ba337de//jX++7//O3OPGh8fx/HHH4/vfOc7+M1vfoO/+7u/w8UXX4w77rjDjLniiivwox/9CNdffz1uuukm3HLLLdi4cWOta9p45jOfiVtvvbXn8/oKk2t8P/fws5/9TAAQ119/vfP4xz72MQFAPProo87j7XZbLF++XPz7v/+72XfhhReK888/v/Sa27dvFwDEPffcI4QQ4qGHHhIAxK9+9SshhBDXXnutWLRoUeac66+/Xtj/Lc997nPFhz/84cyYL37xi2LNmjVCCCE++tGPig0bNoh2u126Dhsf//jHxfr16zP7vv/97wvGmNiyZYvZ973vfS/zfuXX/qMf/UgAED/4wQ/MOVdddZUAIP74xz+afa9//evFGWecIYQQYs+ePaLZbIrbbrstc/3Xvva14sILLyyd94YbbhAAxNjYmBBCiAULFogvfOELzp8v/54++9nPFq973esyY84//3xx1llnmW0A4t3vfrfZ3rNnjyCEiO9973uZNe3cuVMIIcTFF18s/u7v/i4z56233ioopWJsbEx8/etfFwsXLhTDw8OF9W3cuFEAEJs2bXKuXwghdu/eLQCIW265pXSMx/zBJZdcIs455xyzfccdd4hly5aJCy64wDl+Pt+LhBBi3bp14uMf/7gQQohOpyOuvfZaAUBcffXVQggh3vve94qnPvWppfPGcSwWLFggvv3tb5t93T7j//N//k9x+umnZ+bZsmWLACDuv/9+IYQQp556qnjrW9/a9ec69dRTRRiGYnBwUERRJAAISqn42te+VnneWWedJf7+7/9eCCHEyMiIiKJIfPWrXzXHd+zYIVqtVmYN9nulf878d9zb3vY28bznPa/ruvsZfaMIdYNQf5FHUYTNmzdjaGjIPD784Q8jDEOcf/75+PKXvwxA/sX1n//5n7jooovMHH/84x/x8pe/HOvXr8fChQtxyCGHAAA2b9486XVt3LgRH/jABzLr0X+V7N27F+effz7Gxsawfv16vO51r8P111+fkarzGBsbQ7PZzOy77777cNBBB+HAAw80+0466aRa6zv22GPN61WrVmFgYADr16/P7Nu+fTsAKT2Pj4/jhS98Yebn+fd///eCbG/Pu2bNGgAw81x++eX427/9W5x22mn4X//rf1VK/vfddx+e85znZPY95znPwX333Vd6vcHBQSxYsMBcL4+NGzfiC1/4QuZnOOOMM8A5x0MPPYQXvvCFWLduHdavX4+LL74YX/7yl0148KlPfSpe8IIX4JhjjsH555+Pz33uc4X4vVYs7ZCix/zGd77zHQwNDaHZbOKkk07CKaecgk9+8pN9dy/SePvb346hoSG0Wi1ceumluOKKK/D617/eOXb79u14wxvegA0bNmDRokVYtGgR9uzZU/hZqz7jGzduxI9+9KPMz3bEEUcAQOX9pQwXXXQR7rrrLtx+++244IIL8JrXvMaodQCQJAk+9KEP4dhjj8WyZcswNDSEm266yaz5j3/8I9rtduY+vHTpUhx++OE9r6XVavl7SRfMbufrFOLQQw8FIQT33nsvXvaylxWO/+53v8OKFSuwePFiDA0NZdJKly5dCkD+cp966qnYvn07br75ZjSbTePQB4CXvOQlWLt2LT73uc/hgAMOAOccRx99NNrttnNNlNJCKC4v/3LO8f73vx/nnXde4fxms4m1a9fi/vvvx80334wf/OAHeOMb34h//ud/xo9//GNnuGj58uWFL978GgAUvAFlsK+hs17y82g5Xj/fcMMNeNKTnpQZZxv8XPPa57/vfe/Dy1/+ctxwww343ve+h/e+97346le/inPPPde5xvzPIoQo7Ktadx6cc7z+9a93+h8OOuggRFGEX/7yl7jllltw00034T3veQ/e97734c4778TixYtx880347bbbsNNN92ET37yk3jXu96FO+64w3xZabl+xYoVzut7zD88//nPxzXXXIMwDHHAAQeY38c4jvvqXqRxxRVX4FWvehUGBgawZs2ayvvRq171Kjz22GP4xCc+gXXr1qHRaOCkk04q/Kzd7k0veclL8E//9E+F+fUfYr1g0aJFOPTQQwEAX/rSl/CUpzwFn//85/Ha174WAPDRj34UH//4x/GJT3wCxxxzDAYHB3HZZZeZNbvuyZPFE0884e8lXdA3RGjZsmV44QtfiKuvvhpve9vbMj6hbdu24ctf/jIuvfRSAEAQBOaX2Mazn/1srF27Ftdddx2+973v4fzzz0cURQCk+e2+++7DZz7zGTz3uc8FIGPgVVixYgVGRkYwOjqKwcFBACjU9TjuuONw//33O9ej0Wq18NKXvhQvfelLcemll+KII47APffcg+OOO64w9ulPfzq2bduGnTt3YsmSJQCAo446Cps3b8YjjzyCAw44AABw++23V659MjjqqKPQaDSwefNmnHrqqfs014YNG7Bhwwa87W1vw4UXXohrr73WSYSOPPJI/PSnP8UrX/lKs++2226r5Usow3HHHYff/va3lf8nQRDgtNNOw2mnnYb3vve9WLx4Mf7rv/4L5513HggheM5znoPnPOc5eM973oN169bh+uuvx+WXXw4A+M1vfoMwDPGUpzxl0mv0mFsYHBx0/j71271IY/ny5ZXXsXHrrbfi6quvxllnnQVAlkjRJue6OO644/D1r38dBx98cGlmbBRFSJKkp3kBScDe+c534h3veAcuvPBCDAwM4NZbb8U555yDV7ziFQAkEfv9739v7kuHHnoowjDEz372Mxx00EEAgJ07d+KBBx7o+d75m9/8Bs973vN6Xnc/oW+IEAB86lOfwrOf/WycccYZ+OAHP4hDDjkEv/3tb3HFFVdgw4YNeM973lN5PiEEL3/5y/HpT38aDzzwQMZwu2TJEixbtgyf/exnsWbNGmzevBlXXnll5XzPetazMDAwgHe+851485vfjJ///Of4whe+kBnznve8B2effTbWrl2L888/H5RS3H333bjnnnvwwQ9+EF/4wheQJImZ64tf/CJarRbWrVvnvObTn/50rFixAv/93/+Ns88+GwBw2mmn4fDDD8crX/lKfPSjH8Xw8HBlBt1ksWDBAvzDP/wD3va2t4FzjpNPPhnDw8O47bbb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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# make r, theta\n", + "rs = np.linspace(.95, 2.5, num=100)\n", + "thetas = np.deg2rad(np.linspace(-88, 88, num=100))\n", + "# turn that into x,y for plotting\n", + "xs, ys = dipole.rt2xy(*np.meshgrid(rs, thetas.copy()))\n", + "qs, ps = dipole.rt2qp(*np.meshgrid(rs, thetas))\n", + "\n", + "# then the plotting:\n", + "fig, axs = plt.subplots(2,2,figsize=(6,5), sharey='row', height_ratios=[.05, 1])\n", + "\n", + "qc = axs[1,0].pcolor(xs, ys, qs, vmin = -0.8, vmax=0.8, cmap='RdBu_r')\n", + "fig.colorbar(qc, cax=axs[0,0], orientation='horizontal', label ='Q-values (dimensionless)')\n", + "\n", + "pc = axs[1,1].pcolor(xs, ys, ps, vmin = 1, vmax=8, cmap='rainbow')\n", + "fig.colorbar(pc, cax=axs[0,1], orientation='horizontal', label ='P-values (Planet Radii)')\n", + "\n", + "circle0 = plt.Circle((0, 0), 1, color='k', alpha = .7, zorder=-2)\n", + "axs[1, 0].add_patch(circle0)\n", + "axs[1, 0].set_xlim(-0.1, 2.6)\n", + "axs[1, 0].set_ylim(-2.6, 2.6)\n", + "axs[1, 0].set_aspect(1);\n", + "\n", + "circle1 = plt.Circle((0, 0), 1, color='k', alpha = .7, zorder=-2)\n", + "axs[1, 1].add_patch(circle1)\n", + "axs[1, 1].set_xlim(-0.1, 2.6)\n", + "axs[1, 1].set_ylim(-2.6, 2.6)\n", + "axs[1, 1].set_aspect(1);\n", + "\n", + "\n", + "plt.tight_layout()\n", + "\n", + "if save_figs:\n", + " fig.savefig('plots/q-p-dipole-global-plot.png')\n", + "\n", + "plt.show();" + ] + }, + { + "cell_type": "markdown", + "id": "29767ef6-0901-48fc-962c-ea57c44c2506", + "metadata": {}, + "source": [ + "In Aether, both p and q are stored as native coordinate for the dipole grid, normalized to the planet radius in meters.\n" + ] + }, + { + "cell_type": "markdown", + "id": "cc6301bc-92ed-432c-86f0-857ddaacecce", + "metadata": {}, + "source": [ + "# Aether's p,q Values on the Dipole Grid\n", + "\n", + "First, let's get some dipole coordinates:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "1a190f87-6708-43af-94c7-8cdbf6a2cacf", + "metadata": {}, + "outputs": [], + "source": [ + "# Use four blocks:\n", + "origins, extent = dipole.generate_sym_quadtree(4)\n", + "\n", + "# call dipole.main, which returns q & p\n", + "# These values are a bit unreasonable, but it makes the plots more clear.\n", + "qs, ps = dipole.main(alt_minRE=1.01, alt_maxRE=1.3,\n", + " lat_min=15, lat_max=84,\n", + " origins=origins, extent=extent, \n", + " nLatsPerBlock=14, nAltsPerBlock=18)\n", + "\n", + "# get cartesian & spherical coords:\n", + "rs = dipole.qp_solve(qs, ps) #radius\n", + "ts = np.rad2deg(dipole.rq2t(rs, qs)) #theta (magLat)\n", + "\n", + "xs, ys = dipole.qp2xy(qs, ps)\n", + "\n", + "# also want the altitude:\n", + "alts = dipole.r2alt(rs, 6371) #(in km)\n", + "\n", + "n_y = 14\n", + "n_z = 18" + ] + }, + { + "cell_type": "markdown", + "id": "7a8b44e8-896d-488b-baab-a37abbf00da2", + "metadata": {}, + "source": [ + "## Ghost Cells\n", + "\n", + "The dipole grid has 2 ghost cells in each block (or on each node), similar to the spherical grid.\n", + "\n", + "In the longitudinal direction, these behave as expected.\n", + "\n", + "The latitudinal ghost cells take one of two forms:\n", + "- If the node is touching the pole, the final field line is traced from 89$^\\circ$ magnetic latitude. This ghost cell will form a supercell.\n", + "- Othwerwise, nothing special happens and the final two field lines take the same step in invariant latitude as the rest. This means that boundaries between nodes will overlap. So the invariant latitudes of interior field lines will be identical, but the cell locations will not (since the q-values are different).\n", + "\n", + "The altitudinal ghost cells also take two forms:\n", + "- If the node is touching the equator, the last physical cell lies in the same hemisphere as the rest of the cells on that node. The two ghost cells in the altitudinal direction continue to take the same step in q as the previous, thus wrap over the magnetic equator. These ghost cells will line up with the ghost cells from the equator-most node on the opposite hemisphere.\n", + "- Othwerwise, the same step in q is taken and there is nothing special.\n", + "\n", + "\n", + "An image for clarity:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "7ae05677-85d0-48a6-b878-daabb15be856", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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1FlnneWzLjIyUt1yyy1V9vnmm28UoL755hvvsnvvvVf5+/OyZ88eBai5c+dWWQeoKVOmeL8/77zzVLt27VRpaal3WXFxsYqPj/d57rVr1ypAzZ492+f5srKylNVqVRMnTqzlVSv13//+V7Vt21YlJCSoXr16qfz8/Fr38ee7775TgHrkkUeUUkq53W7VqVMn1bFjR+V2u3227dixo8/53LhxY7XnZsqUKVXO5xlnnKEuvvjiKtt6fu579uzxWV7551RQUKAsFou65pprfLb7/vvvFeDz3DNmzFAGg6HKtfTBBx8oQH3xxRd+zoZu0aJFClD/+c9/qqxzOBw+j4o6duyoLBaL2rdvn3dZaWmpio+PV3fddZd32Q033KDCw8PV/v37ffa//PLLVUREhCosLFRKKXXVVVep3r17V9tOpZR69tln/Z47f9atW+fzs65NXa7TW265RXXs2NFnu8rXSyCvRwhRPRkCIUQL9/7773P++efTqlUrTCYTZrOZOXPmsGPHjqC16dixY2zcuJGRI0disVi8y6Oiohg+fLjPtp999hmapjF69GicTqf3kZyczJlnnlnjR9igv/57772Xjz/+mK+++oo//viDQYMGYbPZvNsMGjSIiy++uNZ2e25+u/XWWwF9WMfYsWPZt28fX331VaAvv1GsXbsWu93OTTfd5LN8wIABdOzY0WfZZ599Ro8ePejdu7fPOR46dGitwwSqU1hYiNls9nlUrljSu3dvOnTo4P3eYrHQtWtXnyElX3/9NZdddhmpqak++44dO5aSkhLvpxDnnnsuP/74I/fccw//+9//KC4urnObT8WpXqeVBfv1CNHUSQAWogX76KOPvOWbFixYwNq1a9m4cSO33nordrs9aO0qKCjA7XaTnJxcZV3lZQcOHEApRVJSUpVAtW7dOvLz82s81tSpUxk6dCjnnnsuZ555Jl999RXZ2dkMGjSIgoICjh07xqZNm7zDEqpz5MgR3n//fc4991xat25NYWEhhYWFXHPNNWia5g3HoeLw4cNA1fPpb9mBAwf46aefqpzfqKgolFI1nmNPgK08DjoqKoqNGzeycePGaoeHJCQkVFkWHh5OaWmpz+vwDFeoqF27dj6vc/Lkyfzf//0f69at4/LLLychIYHLLrvspMsEel7Xnj17Atr+VK/Tyur79QjR0sgYYCFasAULFtCpUyfeffddnzGc1dWuPVWe3tzKz+8JKR5xcXFomkZeXl6V56i8LDExEU3TWLVqld9xsLWNjd21axe9e/f2ft+rVy+++eYbLr30UgYPHswFF1yA2WzmrrvuqvF53nnnHUpKStiwYQNxcXFV1i9evJiCggK/6+pTdee4csDyhMvqznHFOrSJiYlYrVa/N6B51lenT58+xMXF8emnnzJ9+nTvcqPRSN++fQH9JraTlZCQ4Hds+R9//OHTNpPJxLhx4xg3bhyFhYWsWLGCRx99lKFDh5KVlRXwOF6Ptm3b0rNnT5YtW0ZJSUmt+5/qdVpZfb8eIVoa6QEWogXTNI2wsDCf8JuXl1elCgRU7Xmriec/88rbJyUlYbFY+Omnn3yWVz5eZGQk5557Lh999JFPT/SRI0f49NNPfba96qqrUEqRk5ND3759qzx69uxZY1t79OjB8uXLfYJgjx49+Oabb9i1axcvvPACzz77LDExMTU+z5w5c4iKiuKrr77im2++8Xk8++yzlJWV8fbbb1e7f3XnrKbt/W3rCa6Vz/GSJUt8vu/Xrx8Wi6VKm9asWVOlt/aqq65i165dJCQk+D3HlSdtqCgsLIyHH36YX375hZkzZwb02urisssu4+uvv/YGXo8333yTiIgIvyX6YmNjufbaa7n33nux2Wzeihl1/Rk8/vjjFBQUcP/996OUqrL+6NGjLFu2DDj167Qm1b0eIUT1pAdYiGbu66+/9vsf4hVXXMFVV13FRx99xD333OOtAvDUU0/Rtm3bKiXBevbsycqVK/n0009p27YtUVFRPpUCKm8Lev3Xyy+/HKPRSK9evQgLC2P06NG88cYbnHbaaZx55pls2LCBhQsXVnmOp556imHDhjF48GDGjx+Py+Vi5syZREZG+ozPPf/887nzzjv561//yqZNm7jooouIjIwkNzeX1atX07NnzxorEPzzn/9kyJAh9O/fn4cffpiMjAxyc3N57733KCkpISkpiRkzZjB06FC/H7WD3oO5YcMG7r77bi699NIq688//3xmz57NnDlz+Nvf/ub3OU477TSsVitvv/02GRkZtGrVinbt2nk/yvd3jhctWsS7775L586dsVgs9OzZk3POOYdu3boxYcIEnE4ncXFxLF68mNWrV/vsHxcXx4QJE3j66ae5/fbbue6668jKymLq1KlVhkA8+OCDfPjhh1x00UU89NBD9OrVC7fbzf79+1m2bBnjx4/nvPPOq/YcT5o0iczMTB555BG+++47rr/+etLS0igrK2P37t28/vrrGI3Gk+q1nDJlCp999hmXXHIJTzzxBPHx8bz99tt8/vnnzJo1y/vGZfjw4fTo0YO+ffvSunVr9u3bx/PPP0/Hjh3p0qWL95wCvPDCC9xyyy2YzWa6detGVFSU32Nfd911PP744zz11FNkZmZy2223cdppp1FSUsL69et59dVXuf766xkyZMgpX6eVBfJ6hBA1COYdeEKIhuOpBlDdw3On+z/+8Q+VlpamwsPDVUZGhnrttdf8Vh3YunWrOv/881VERIRPlQB/VSDKysrU7bffrlq3bq00TfM5XlFRkbr99ttVUlKSioyMVMOHD1d79+6tUgVCKaWWLFmievXqpcLCwlSHDh3UP/7xD79tU0qpN954Q5133nkqMjJSWa1Wddppp6kxY8aoTZs21XqufvzxR3Xttdeq1q1bK5PJpFJSUtRf//pXtW3bNrVz506VmJio0tPTVV5ent/9H3zwQQWorVu3VnuMRx55RAFq8+bNSqmqd/UrpdQ777yj0tPTldls9jkf/l7z3r171ZAhQ1RUVJQCfKoG/Prrr2rIkCEqOjpatW7dWt13333q888/r/JzcrvdasaMGSo1NVWFhYWpXr16qU8//VRdfPHFVSpMHD16VD322GOqW7duKiwsTMXExKiePXuqhx56qNrzUtmSJUvU8OHDVVJSkjKZTCoqKkr17t1bjR8/XmVmZvps27FjR3XllVdWeQ5/bfv555/V8OHDVUxMjAoLC1NnnnlmlWoas2fPVgMGDFCJiYne6+m2225Te/fu9dlu8uTJql27dspgMFQ5X9X59ttv1bXXXqvatm2rzGazio6OVv3791fPPvusKi4u9tk2kOs0kCoQgb4eIYR/mlJ+PrcRQgghhBCimZIxwEIIIYQQokWRACyEEEIIIVoUCcBCCCGEEKJFkQAshBBCCCFaFAnAQgghhBCiRZEALIQQQgghWhQJwEIIIYQQokWRACyEEEIIIVoUCcBCCCGEEKJFkQAshBBCCCFaFAnAQgghhBCiRZEALIQQQgghWhQJwEIIIYQQokWRACyEEEIIIVoUCcBCCCGEEKJFkQAshBBCCCFaFAnAQgghhBCiRZEALIQQQgghWhQJwEII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afBavi2c9ACLemUxG/nw7gFSBUI0Kk+1h+p4PvaurD6rQA4fPpzU1FRee+012rVrh9vtpkePHgF9nF5XBoOhStsdDkednsMzNOPzzz+nffv2PuuqmyK6uvPlb3nFShagl0bzHFMp5RN+Kz6HpmkYjUaWL1/OmjVrWLZsGf/+97/5+9//zvr1671vLGpjtVprXO92u+nTpw9vv/12lXWtW7eu9fmjoqL44YcfWLlyJcuWLeOJJ55g6tSpbNy4sdoefSHqwmCxkLZwYehXgWiiJACLemcxG7n9ws7BboYQjebw4cPs2LGDV199lQsvvBCA1atX17hPWFgYoN+sVtt2lbdp3bo1eXl5PkFy69at3vUxMTG0bduWdevWecelOp1ONm/e7O297d69O+Hh4ezfv9/vcAd/0tPTcTqdbNmyhT59+gDw+++/U1hYGND+Ht27d+fDDz/0af+aNWuIioryhnFN0zj//PM5//zzeeKJJ+jYsSOLFy9m3Lhxfs9JZV26dMFqtfLVV19x++23V1l/9tln8+6779KmTZuTru1uMpkYNGgQgwYNYsqUKcTGxvL1118zcuTIk3o+ISozWCwkHL9BVtQvGQIhhGjyjh49WuVx4MAB7/oDBw743aa+eKoI/Pe//+X333/n66+/Zty4cTXu07FjRzRN47PPPuPQoUPVtictLY3vvvuOnJwc8vPzAb06xKFDh5g1axa7du3ipZde4ssvv/TZ74EHHuAf//gHixcvJjMzk3vuuccnqEZFRTFhwgQeeugh5s+fz65du9iyZQsvvfQS8+fP99uW9PR0Bg0axJ133smGDRvYsmULd955J1artUqPbk3uuecesrKyuO+++8jMzOSTTz5hypQpjBs3DoPBwPr165k+fTqbNm1i//79fPTRRxw6dIiMjAzvOfnpp5/YuXMn+fn5fnu/LRYLkyZNYuLEid5hHevWrWPOnDkA3HTTTSQmJjJixAhWrVrFnj17+Pbbb3nggQfIzq79JqPPPvuMf/3rX2zdupV9+/bx5ptv4na76datW8DnQQgRREoEpKioSAGqqKgo2E0RolkrLS1V27dvV6Wlpaf0PEePHlWAAtTRo0frqXXVW758ucrIyFDh4eGqV69eauXKlQpQixcvVkoptWfPHgWoLVu2ePd58sknVXJystI0Td1yyy1KKaUuvvhi9cADD3i3Wbt2rerVq5cKDw9XFf9kv/LKKyo1NVVFRkaqMWPGqGeeeUZ17NjRu97hcKgHHnhARUdHq9jYWDVu3Dg1ZswYNWLECO82brdbvfDCC6pbt27KbDar1q1bq6FDh6pvv/222tf5xx9/qMsvv1yFh4erjh07qoULF6o2bdqo//znP95tKr5uj5iYGDV37lzv9ytXrlTnnHOOCgsLU8nJyWrSpEnK4XAopZTavn27Gjp0qGrdurUKDw9XXbt2Vf/+97+9+x48eFANHjxYtWrVSgHqm2++8dtWl8ulnn76adWxY0dlNptVhw4d1PTp073rc3Nz1ZgxY1RiYqIKDw9XnTt3VnfccYf37/wtt9zic74q/mxWrVqlLr74YhUXF6esVqvq1auXevfdd6s9b/V1XQshahZoXpOpkAMUqlMhC9Hc1NeUsaE+E1xzkZ2dTWpqKitWrKj2hjMhUyEL0VhkKmQhhBD17uuvv+bo0aP07NmT3NxcJk6cSFpamtTAFUI0KRKARciwO1xSPUKIEOdwOHj00UfZvXs3UVFRDBgwgLfffrtK1QchhM5tt0slhxAkAViEBLvDxZ9fWcP23GKMmoZLKRZvyeHDuwdICBYihAwdOpShQ4cGuxlCNAluu529N96oT2lsNILLRdGSJaQtXCghOMikCoQICQvW7WN7brE+5blboRRszy1mwbp9wW6aaKIiIyNRSqGUkvG/QoigKFi0SA+/SoHTCUpRtiOTgkWLgt20Fk8CsAgJWbYSjJXKKBk1jSybzKwkhBCiaXJkZes9vxUZjfpyEVQSgEVISI2PwFWpIIlLKVLjI4LUItEcKKXIzMys1xnfhBAiUObUFKg8aYvLpS8XQSUBWISE0f060r1ttD7luUFD06B722hG9+sY7KaJJkopxcMPP0xGRgYPP/ywhGAhRKOLu+EGwjPS0f9zM4GmEZ6RQdwNNwS7aS2e3AQnQoLFbOTDuwdIFQhRLzzhd/bs2QDer88++2ydZiyryK3c7LLtAuC0+NMwaNJ/EDKUG47qPxtanQbysxEhwmCxkLZwoVSBCEESgEXIsJiN3H5h52A3QzRxlcOvR32EYCGEqCuDxULC2LHBboaoRN4mCyGajerCr8fs2bNDejjEvHnziI2NbfDjDBw4kAcffLDBj9PQKp+vqdP/Re+zzg5eg4QQTYYEYCFEs1Bb+PUI9RDcHDRWkBdCiJMlAVgI0eQFGn49JAQLIUTLJgFYCNGk1TX8etQ1BLvdThzOUsocxzhctB+32+mzfuDAgfztb3/jb3/7G7GxsSQkJPDYY4/5PH9BQQFjxowhLi6OiIgILr/8cn777bcaj/vpp5/Sp08fLBYLnTt3Ztq0aTidzmq3dzqd3H///d42TJo0iVtuuYWrr7660utxM3HiROLj40lOTmbq1Kk+6/fv38+IESNo1aoV0dHRjBo1igMHDnjX//jjj1xyySVERUURHR1Nnz592LRpEytXruSvf/0rRUVFaJqGpmlVnruiJUuW0LdvXywWC4mJiYwcOdK7rry8nIkTJ9K+fXsiIyM577zzWLlyZZXncLudlDtKcbocuFzl3p/NypUrOffcc4mMjCQ2Npbzzz+ffftkch0hhARgIUQTdrLh18NfCHYrd5WH01XOXttv2JUTB24OOI+y27YTp6vcuw3A/PnzMZlMrF+/nn/9618899xzvP76697nHjt2LJs2bWLJkiWsXbsWpRRXXHEFDofDb/v+97//MXr0aO6//362b9/Oq6++yrx583jmmWeqfU0zZ87k7bffZu7cuXz//fcUFxfz8ccfV9lu/vz5REZGsn79embNmsWTTz7J8uXLAf28Xn311dhsNr799luWL1/Orl27uP76673733TTTaSkpLBx40Y2b97MI488gtlsZsCAATz//PNER0eTm5tLbm4uEyZM8NvWzz//nJEjR3LllVeyZcsWvvrqK/r27etd/9e//pXvv/+eRYsW8dNPP3HdtdcybNgwfvt1p1754fh531fwG2XKiQuFQ7nZa9tJeVkJV199NRdfdBE//biVtWu+584775QbIIUQOiUCUlRUpABVVFQU7KYI0ayVlpaq7du3q9LS0hq3c7vdavz48Qo45cf48eOV2+1WSin1a/6vVR7b8n5Um3M3V3lsy/vRu825A85Vp3U9zfs8Sik1adIklZGRoT/vr78qQH3//ffe9fn5+cpqtar33ntPKaXU3LlzVUxMjHf9hRdeqKZPn+7zut966y3Vtm3bas9LUlKSevbZZ73fO51O1aFDBzVixAjvsosvvlhdcMEFPvudc845atKkSUoppZYtW6aMRqPav3+/d/22bdsUoDZs2KCUUioqKkrNmzfPbxsqv47q9O/fX910001+1/3+++9K0zSVk5Nz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X7+e6667jptvvpnNmzdz+umn88gjjwS06e5z8ng8zJgxg+TkZNavX8/y5cuZN29eyD5MmDCBzz//POKx0NDQ6CUIDQ0NjcOMq6++WkyfPl3U1NSIxMREsXv3brFnzx5hMplETU2NmD59urj66qvD7l9dXS0AsWXLFiGEEE899ZTIyckRNpvN1+avf/2rAERpaakQQoh///vfAhAff/yxr80///lPAfj2O/nkk8XChQsDXuv//u//RH5+vu8xIFatWhXQZv78+WL06NG+x/369RPz5s2LeDw6798dGzZsEIBoamoSQnS8t/r6+oB2p556qrjtttt8jwcMGCCWLVvW7WsvW7ZMDBgwwPc4Pz9fPProo77HTqdTFBQUiOnTpwshhGhubhYmk0msXbs24DjXX3+9uPzyy8O+j9GjR4uHHnooYNvll18upk2bFrDt0ksvFRkZGb7H3X1O77//vjAYDKKiosL3/EcffRTys7vjjjvEaaedFraPGhoavRND/KS3hoaGxsFhNps5//zzef755xFCcP7552M2m4Pa/fTTT9x333189dVXWCwWX+S3rKyMkSNHsnPnTo477jhMJpNvnwkTJoR8zeOOO873d35+PiAdAYqKiti0aRNff/21L5II8va/3W6ntbWV5OTkbt9TdXU1Bw4c4Mwzz4xsECKgtLSUBx54gM2bN1NXVxfw/keMGNFjrxOKhoYGKioqmDx5sm+bwWBg/PjxvjSI7du3Y7fbOfvsswP2dTgcQeks/thstoDPDGDHjh1cdNFFAdsmT57MmjVrfI+7+5x27txJYWEheXl5vufDzYekpCRaW1vD9lFDQ6N3oglgDQ2Nw5rrrrvOlx/7xBNPhGxz4YUXUlhYyF//+lf69euHx+Nh5MiROBwOQOafenNavYhOOapejEaj72/vPl5B6fF4ePDBB7n44ouD9uss1MKRlJQUUbtIaWlpYerUqUydOpUXX3yR3NxcysrKOOecc3zv/2DQ6XRBY+V0OlUdwzt+//znP+nfv3/Ac4mJiWH3M5vNQQvQwn1unV+vq88p1HwIR11dHbm5uRG11dDQ6D1oAlhDQ+OwZtq0aT4hd8455wQ9X1tby44dO3jmmWc4+eSTAfjiiy8C2gwbNoyXXnqJtrY2n+DauHGj6r4cf/zx7Ny5s8t8XaPRiNvtDvt8WloaAwcO5JNPPvEtTjsYvvvuOywWC48++iiFhYVA8HtLSEgA6LJf3nad2+Tm5lJZWRkgGr0LBwEyMjLIz8/nq6++4pRTTgHA5XKxadMmjj/+eABGjBhBYmIiZWVlnHrqqRG/t7Fjx7J9+/aAbSNGjOCrr74K2Nb5cXef07BhwygrK6Oqqoq+ffsChM3X3rp1K6eddlrEfdbQ0OgdaAJYQ0PjsEav17Njxw7f353JysoiJyeH5cuXk5+fT1lZGbNnzw5oc8UVVzBv3jxuvPFGZs+eTVlZGUuWLAGIOBIIcP/993PBBRdQWFjIzJkz0el0fPvtt2zZssW3EMsrbk888UQSExPJysoKOs4DDzzATTfdRJ8+fTj33HNpamriyy+/5A9/+EPY17bZbAHCE6S9WlFREQkJCfzlL3/hpptuYuvWrQHevgADBgxAURT+8Y9/cN5555GUlERqamrQawwcOJD//Oc/XHbZZSQmJmI2mznttNOoqalh8eLFXHLJJaxZs4b333+f9PR033633XYbjz76KEcffTTDhw/nscceC/AcTktL4+677+aOO+7A4/Fw0kkn0djYyNq1a0lNTeXqq68O+Z7POeccfvvb3+J2u32f/a233sqUKVNYvHgxM2bM4MMPPwxIf4jkczr77LMZMmQIV199NYsXL6apqcm3CM5/PrS2trJp0yYWLlwY9nPR0NDopcQv/VhDQ0MjOryL4MLReRHcRx99JIYPHy4SExPFcccdJz799NOgBU1ffvmlOO6440RCQoIYN26cePnllwUgvvvuOyFE6IVipaWlAhC7d+/2bVuzZo2YMmWKSEpKEunp6WLChAli+fLlvuffeecdcdRRRwmDweBbKBZqIdnTTz8thg4dKoxGo8jPzxd/+MMfwr7f+fPnCyDo59RTTxVCCPHyyy+LgQMHisTERDF58mTxzjvvBCzwE0KIhx56SOTl5QlFUXxj13kR3Lp168Rxxx0nEhMThf/Xx1NPPSUKCwtFSkqKuOqqq8SCBQsCFsE5nU5x2223ifT0dJGZmSnuvPNOcdVVVwV8hh6PR/zpT3/yvefc3FxxzjnniM8++yzs+3a5XKJ///5izZo1AdufffZZUVBQIJKSksSFF14olixZErAITojuP6cdO3aIE088USQkJIhhw4aJd999VwABr/Xyyy+LoUOHhu2fhoZG70URIoKEKQ0NDY0jjJdeeolrr72WhoaGHs/L1eg5nnzySd5++20++OCDmL7Ol19+yUknncSPP/7IkCFDALkw7vbbb+eKK66I6WtraGj0PFoKhIaGhgbwwgsvMHjwYPr3788333zDrFmz+NWvfqWJ317OjTfeSH19PU1NTT1atW7VqlWkpqZy9NFH8+OPP3Lbbbdx4okn+sRvdXU1l1xyCZdffnmPvaaGhsahQ4sAa2hoaACLFy/mySefpLKykvz8fGbMmMGCBQsisi7T+Pnxwgsv8PDDD7Nv3z7MZjNnnXUWS5cu7ZUlqzU0NNSjCWANDQ0NDQ0NDY0jCq0UsoaGhoaGhoaGxhGFJoA1NDQ0NDQ0NDSOKDQBrKGhoaGhoaGhcUShCWANDQ0NDQ0NDY0jCk0Aa2hoaGhoaGhoHFFoAlhDQ0NDQ0NDQ+OIQhPAGhoaGhoaGhoaRxSaANbQ0NDQ0NDQ0Dii0ASwhoaGhoaGhobGEcX/A5RE/QHus/GpAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, axs = plt.subplots(1, 1, figsize=(8,6))\n", + "\n", + "for n in range(4):\n", + " axs.scatter(ts[n], alts[n], s=12)\n", + "\n", + "# Doing this manually (not looping) since each node is different:\n", + "# (interior) latitude ghost cells:\n", + "axs.scatter(0,-1000, marker='x', color='k', s=105, label='latitude ghost cells') # only to get label\n", + "axs.scatter(ts[0, -2:, :], alts[0, -2:, :], marker='x', alpha = 0.7, s=105, color='blue')\n", + "axs.scatter(ts[1, :2, :], alts[1, :2, :], marker='x', alpha = 0.7, s=105, color='orange')\n", + "axs.scatter(ts[2, -2:, :], alts[2, -2:, :], marker='x', alpha = 0.7, s=105, color='green')\n", + "axs.scatter(ts[3, :2, :], alts[3, :2, :], marker='x', alpha = 0.7, s=105, color='red')\n", + "\n", + "axs.scatter(0,-1000, marker='+', color='k', s=105, label='altitude ghost cells')\n", + "axs.scatter(ts[1, :, -2:], alts[1, :, -2:], marker='+', alpha = 0.7, s=125, color='orange')\n", + "axs.scatter(ts[2, :, -2:], alts[2, :, -2:], marker='+', alpha = 0.7, s=125, color='green')\n", + "\n", + "axs.scatter(0,-1000, marker='D', color='k', s=105, label='pole ghost cells')\n", + "axs.scatter(ts[0, :2, :], alts[0, :2, :], marker='D', alpha = 0.7, s=100, color='blue')\n", + "axs.scatter(ts[3, -2:, :], alts[3, -2:, :], marker='D', alpha = 0.7, s=100, color='red')\n", + "\n", + "axs.legend()\n", + "\n", + "axs.set_ylim(-100, 6000)\n", + "\n", + "fig.suptitle(\"Latitude & Altitude Ghost Cells\")\n", + "axs.set_xlabel(\"Magnetic Latitude (deg)\")\n", + "axs.set_ylabel(\"Altitude (km)\")\n", + "\n", + "if save_figs:\n", + " fig.savefig(\"plots/ghost-cells-dipole.png\")\n", + "\n", + "plt.show();" + ] + }, + { + "cell_type": "markdown", + "id": "97273c1d-6c47-4509-b639-f8f53a5c2de0", + "metadata": {}, + "source": [ + "## Corners and cell centers\n", + "\n", + "The corners and centers look a little confusing. They are not automatically generated by the python script, so these plots were made using actual model outputs. \n", + "\n", + "The parameters used in this run are:\n", + "\n", + "```json\n", + "\n", + " \"ionGrid\": {\n", + " \"Shape\": \"dipole4\",\n", + " \"nLonsPerBlock\": 14,\n", + " \"nLatsPerBlock\" : 20,\n", + " \"nAlts\":30,\n", + " \"AltRange\":[80,1500],\n", + " \"LatRange\":[7, 87]\n", + " },\n", + "\n", + "```\n", + "\n", + "Some notes:\n", + "- Cell centers are the larger dots, and the corners are the smaller dots.\n", + "- In each panel, dashed lines are drawn between the $\\hat{j}$ and/or $\\hat{k}$ corners for clarity.\n", + "- Horizontal, solid, black lines are drawn at 0 and 80 km (min_alt)\n", + "- This will be mirrored in the southern hemisphere\n", + "\n", + "First, a look at the midlatitudes:\n", + "\n" + ] + }, + { + "attachments": { + "94817fae-2328-4a62-986d-bf5f4c049ff5.png": { + "image/png": "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\n8CfCuqROGkJ7rMGr2XbmzBnS6bT6AjsdIfm4m3OT2XnuQCdYLKiui3w+H36/n4aGBk0dEYlEgqWl\nJWw2m6Z1XyCbVnv+/HmSySTd3d00NDRoOv6NzM7OMj09TVtbW97t3fUiGAxy5coVJEmitbWV9vZ2\nXe0pJ61g9GNdXFwkHA7T0dGhW8HqQlhaWmJ0dBSr1UpfX19RaYVKEI/HmZ+fp62tTXNbFhcXGRsb\no6qqit7eXs3GHRkZwefz0dbWpqzzfhVymuharS85t05NTZRKpTh79iwABw4ceEWNOC10kZlCqCQb\noSaUiYkOqNWW2WiUy3GamKhFOdf9UopkMkk6nV5Ry0I1bC5Cr/kGAFUV15xXGugin8/H0tKS5ivE\nFRUVtLW1ae68gmz0VzKZXNHGXk9aW1vZvXs3Ho+xC9hLksTk5CSSJNHY2Ki78wrKSysY/VgbGxvp\n7OwsCecVkKs7lclkchGFejI6Osrc3FwuNVdLamtraW5uVqb+XoHjQnZOVpucJnKS8+qorYnsdnuu\ne7FcT1NrzBRCpVleE+rf7i29mlAmJjqhdFtmo1Iux2liohbL637de+resqn7pRThcBjI1odSu+V2\ndrxs/RH3G0/AxB+rroskSSIYDAIYLipOTRYWFoDsA7dRHraLSmPUCEEQ2L59O7Ozs2zZskVvc3KU\nk1YolWOVJImpqSkaGhp0qe2UL5s3b+bSpUssLCzQ0tKi63XY1NTExMQECwsLmjuzbTYbHR0dmo4J\n1+870WiUdDqteuSZHppIPv8zmTW6wqqMmUJoYmJiYmJiYrIOjKw91rItnU7nnFh1dXWq2/Hyyy8T\nj8fp6enRZLxIJMLg4CBWq1XTlubz8/PYbDZqa2s1cQwuJ5lMcu7cOQD6+vpyq+N6sLCwgMvl0q29\nuomJWszMzDA9PY3NZmPXrl26Xmc3Y3h4GL/fT11dHT09PTf/gEpkMhnOnj2LKIrs2LGD6upq3WzR\nkosXLxKNRjVL5xZFkZmZGSKRCNu3b1f9vidJ0ppjmCmEJiYmJiYmJiYmimGz2airq9PEmZROp4nH\n4wCqF7OVkdM2ampqNHNeSZLE1atXGRkZ0SWlIpVKUVVVRU1Nja4P1YlEgomJCS5cuEAsFtPNjpsh\niiKXL1/G7/frbYpJCdHS0kJVVRXpdJrLly+TTqf1NmlN2tvbEQQBv99PKKR9Fz4Zq9WaK34/Pz+v\n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\n0ygbQ6stds+pIo49PT3o6+sjKXOidGBZLBZF38MozE4z0Al8/g2fBwCUKvrnP7UDa25uDmfPnkUi\nkTBsK51O49FHH1UOBUZx+fJlPPLIIyRjE0URjz/+ONnY0uk0rly5gpWVFRJ7qVQK8/PzSjaMUbCS\nCj1p+5vxpMi2a5BppBbNOAzb63fCgcWyr9xu94Z1bLt4TCwWA1DNTjKynrDDmZrxxeNxyLLcsFOU\nFltqUMuLjHJUNjaj3GNhYQEcKvA6ANuz1rN5DPCi2mdHzYsikQguXbqEUqkEm82GiYkJTc6/YDCI\nvr4+0kYy9a5xN/AiCthsNvT19WkqFTOZTJiYmIDL5UKlUsHk5CSWl5dJORFQLcFyuVyGA5eiJAJt\nwP980/8ErMDK8oqhe0gl+SCKIsrlMs6fP4/HH3+chOcuLi7ikUceUXT3amEymRSZBDUaguVyGQ8/\n/DAeffRRQ2NjTqTp6WmcPXsWy8vLum3VYnl5GZOTk1v0rliWrVYdrNXVVSwuLiKfz6v+HbbO1Ns/\n4vE4IpEIisWipnHUw07wIsMZWP/5n/+54f//5V/+BYFAAA899BBe+MIXQpZlfOpTn8Jf/uVf4tix\nYwCA//N//g+CwSC+/OUv4+1vfzuSySS++MUv4q677sJv/dZvAQC+9KUvoa+vD/fddx9e8YpXqB/Q\nb/y7oewVoEquSqUSSqUSiR6W2WwmFQpk4xNF0fD4tov4UWU5aYlctgJlBhYVUQMA9B0Df91jQKkE\n6WXvBwwKplM61ziOA2QZ8uoPgN7fN9Qh0Wq1wuVybbu432xiHgKeiArWQgAwk5jb8BkTK2X/bcTW\nZrtG4XA4SOY+UJ33Dyw80LwN+1XAjQduhPyRKtl4+3PebshWbaSRgpRSdg2ktAVAKTuhmGflchml\nUonsoFEoFJBKpcgEoLPZLNbW1iDLMkkTiHQ6jYWFBV2dfzbDSGR8x2CQEzmdzoa6lv39/Zp1R/Q6\nsBix3vzMqLVG2XobjUbR2dlpeM6ZTCaUSiVVPIsd1Bp1iqXkMcyeKIpIJpNYWVlBe3t7S02aRqDg\nHrFYDNlsFqY9L0XgppdDcjiAV57UbQ/Y6KBgWbCG7AGQw/djzmpFYX1O+nw+DA4OarbtdDohiiJJ\nc4pm6+1u4UVGIQgCXC6X5mwcs9mMsbExLCwsYG1tDSsrK0gkEiiXy/jl6i9xzTXX7JrM6GMTxyD/\n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\nwhdWu0srws9+9jPceuut+PznP49XXnkF73znO3HuuediYmJitbu2KmzdujXnPjh06NBqd2nFiMVi\n2LFjB+69917F17/5zW/i29/+Nu6991689NJLaG1txfvf/35EIpEV7unKUG48AOBDH/pQzv3y5JNP\nrmAPV5bf//73uOmmm/DnP/8ZzzzzDNLpND7wgQ8gFovJ76mWe4TookKILsqF6KLyEF1EdBFAdBHR\nRacguugUq66JxDOQb37zm2JfX5/8/ZNPPinSNC1OT0/L137yk5+IVqtVDIVCq9HFFeGBBx4Qa2tr\nFV8DIP7iF79Y0f6sNsXGY63eHxI9PT3id77zndXuxqrwd3/3d+KNN96Yc23Tpk3iHXfcsUo9Wj3u\nuusucceOHavdjaogf34UBEFsbW0Vv/GNb8jXksmkWFtbK953332r0MOVRWm9uPrqq8ULL7xwVfpT\nDczPz4sAxN///veiKFb/PUJ0UQaii3IhukgZoouILhJFoouyIbooF6KLcllpTXTae2ApEQqF0NDQ\nIH//pz/9CYODg2hvb5evffCDH0QqlcLLL7+8Gl2sCm6++WY0NTXhzW9+M+677z4IgrDaXVoVyP0B\n3H333WhsbMTOnTvx1a9+dU2ECbAsi5dffhkf+MAHcq5/4AMfwIsvvrhKvVpdTpw4gfb2dvT19eHy\nyy/HyMjIanepKhgdHcXc3FzOvWK1WvGud71rzd4rAPC73/0OLS0tGBgYwPXXX4/5+fnV7tKKEQqF\nAEDWGtV+jxBdpA6iizKQ+4PoomyILiK6KJ9qX/NWi7Wqi1ZaE5l0t1BlDA8P49/+7d/wL//yL/K1\nubk5eDyenPfV19fDYrFgbm5upbtYFXzlK1/B3//938Nut+O3v/0tPvvZz2JxcXHNuEhns9bvj09/\n+tPYvXs36uvr8de//hV33nknRkdH8cMf/nC1u7asLC4uguf5gs/e4/Gsic89n7e85S148MEHMTAw\nAK/Xi3/+53/G2972Nhw5cgSNjY2r3b1VRboflO6V8fHx1ejSqnPuuefi0ksvRU9PD0ZHR7F//368\n973vxcsvvwyr1bra3VtWRFHEbbfdhne84x0YHBwEUN33CNFF6iC66BRr/f4guojoIoDoolJU85q3\nWqxVXbQamqhqPbCUEufl/zt48GDOz8zMzOBDH/oQLr30Ulx33XU5r1EUVfA7RFFUvF6NVDIepfjC\n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\nTkSuQmCC\n" + } + }, + "cell_type": "markdown", + "id": "945adde8-905b-4009-aee0-db0963977a75", + "metadata": {}, + "source": [ + "![midlatitude_corner_connections.png](attachment:94817fae-2328-4a62-986d-bf5f4c049ff5.png)" + ] + }, + { + "attachments": { + "f2d75913-95bf-43e3-8611-47a2a8eb4c28.png": { + "image/png": "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\n" + } + }, + "cell_type": "markdown", + "id": "c93cd416-bf6e-4998-8cb4-a63d5b5fdaf2", + "metadata": {}, + "source": [ + "And then a look at the high latitude region. Note the limits on the axis are slightly different. \n", + "\n", + "![highlatitude_corner_connections.png](attachment:f2d75913-95bf-43e3-8611-47a2a8eb4c28.png)" + ] + }, + { + "cell_type": "markdown", + "id": "34b944a0-ac97-4063-b89a-41d4e78da2da", + "metadata": {}, + "source": [ + "\n", + "\n", + "## Order of points\n", + "\n", + "The order of points in the dipole grid is the same as the spherical grid. Most simply, the field lines are arranged in the order of increasing invariant latitude & from lowest to highest altitude.\n", + "\n", + "Where this gets complicated is that the actual values are not necessarily increasing. For example, the altitude of the ghost cells at the ends of field lines touching the equator is not increasing anymore, since the field lines begin curving back towards the center of the planet. Further, since q=0 at the equator the k-coordinate of all points in the southern hemisphere (grid cells with negative values of magnetic latitude) will have negative k-coordinates. \n", + "\n", + "The vertical solver does not like negative dk values, so all dk are made positive.\n", + "\n", + "To help illustrate this, here is a plot where the color of each point is its index along the j or k axis:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "42aa573f-d79a-400c-950d-b6259b4683d7", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA08AAAIVCAYAAAAJXMQ/AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3XmcHEX5+PFPdfecO7N37psQIIQcXOEGQ+QURA45BAEVFQEPQEH4IiCgCOhPFAW55D7lMoCCnOEKkBASCJBA7nOz9+7s3N1dvz96dnZnZzZZQkIS8rxfr+XF1FR318xupubpqnpKaa01QgghhBBCCCHWydjcDRBCCCGEEEKIrYEET0IIIYQQQgjRBxI8CSGEEEIIIUQfSPAkhBBCCCGEEH0gwZMQQgghhBBC9IEET0IIIYQQQgjRBxI8CSGEEEIIIUQfSPAkhBBCCCGEEH0gwZMQQgghhBBC9IEET0KIbdrdd9+NUopZs2ZttHMuXboUpRR33313vuzKK69EKbXRrrE5vPTSS+yxxx6UlZWhlOKpp576XMe/+uqrKKV49dVX82VnnnkmI0eO3Kjt7KnU72NL8Hn+JkaOHMmZZ565aRvUQ6nfzeZohxBCbEkkeBJCiC/BWWedxYwZMzZ3MzaY1poTTzwRn8/HtGnTmDFjBgcddNAXPu9vfvMbnnzyyY3Qwq3P1v43IYQQ2yJrczdACCG2BUOHDmXo0KGbuxkbbPXq1TQ3N3PssccyderUjXbe0aNHb7RzbS0SiQThcHir/5sQQohtkYw8CSFED2eeeSaRSISFCxdy5JFHEolEGDZsGBdeeCHpdLqg7urVqznxxBOJRqNUVFRw0kknUVdXV3TO3qZoPfjgg+yzzz5EIhEikQiTJk3izjvvLKjz4osvMnXqVMrLywmHw+y333689NJLBXUaGhr40Y9+xLBhwwgEAvTr14/99tuPF198cb2v94033mDq1KlEo1HC4TD77rsvzz77bEHbO7/kX3zxxSil1jvVbv78+Rx++OGEw2Fqa2s5++yzicViRfVKTQ1TSnHeeedx6623ssMOOxAIBNh55515+OGHi46fN28exxxzDFVVVQSDQSZNmsQ999yz3tcM8Nlnn/Gd73yH/v37EwgEGDt2LH//+9/7dGxrays/+MEPqK6uJhKJ8I1vfIPFixejlOLKK6/M1+v8vc+ePZsTTjiBqqqqfMBY6m8im81y0UUXMXDgQMLhMPvvvz/vvvtun9oEkE6nueqqqxg7dizBYJCamhqmTJnCW2+9la+jtebmm29m0qRJhEIhqqqqOOGEE1i8eHGfr9PJdV2uueYadtxxR0KhEJWVlUyYMIG//OUvn/tcQgixNZCRJyGEKCGbzfLNb36TH/zgB1x44YW89tprXH311VRUVHD55ZcDkEwm+frXv87q1au59tpr2WGHHXj22Wc56aST+nSNyy+/nKuvvprjjjuOCy+8kIqKCubNm8eyZcvyde6//35OP/10jjnmGO655x58Ph+33norhx12GM8//3x+FOi73/0us2fP5ne/+x077LADra2tzJ49m6ampnW2Yfr06RxyyCFMmDCBO++8k0AgwM0338zRRx/NQw89xEknncRZZ53FxIkTOe644/jpT3/Kd77zHQKBQK/nXLt2LQcddBA+n4+bb76ZAQMG8MADD3Deeef16X0BmDZtGq+88gpXXXUVZWVl3HzzzZxyyilYlsUJJ5wAwIIFC9h3333p378/f/3rX6mpqeH+++/nzDPPZO3atVx00UW9nv/jjz9m3333Zfjw4fzpT39i4MCBPP/88/zsZz+jsbGRK664otdjXdfl6KOPZtasWVx55ZXstttuzJgxg8MPP7zXY4477jhOPvlkzj77bOLxeK/1fvjDH3Lvvffyy1/+kkMOOYR58+Zx3HHHlQw8e7JtmyOOOILXX3+dX/ziFxx88MHYts3bb7/N8uXL2XfffQH48Y9/zN13383PfvYzrrvuOpqbm7nqqqvYd999mTt3LgMGDFjvtTpdf/31XHnllVx22WUceOCBZLNZ5s+fT2tra5/PIYQQWxUthBDbsLvuuksDeubMmfmyM844QwP60UcfLah75JFH6h133DH/+JZbbtGA/ve//11Q74c//KEG9F133ZUvu+KKK3T3j9zFixdr0zT1qaee2mvb4vG4rq6u1kcffXRBueM4euLEiXry5Mn5skgkon/xi1/07UV3s/fee+v+/fvrWCyWL7NtW++yyy566NCh2nVdrbXWS5Ys0YC+4YYb1nvOiy++WCul9Jw5cwrKDznkEA3oV155JV92xhln6BEjRhTUA3QoFNJ1dXUFbdppp5309ttvny87+eSTdSAQ0MuXLy84/ogjjtDhcFi3trYWtL377+Owww7TQ4cO1W1tbQXHnnfeeToYDOrm5uZeX9+zzz6rAX3LLbcUlF977bUa0FdccUW+rPP3fvnllxedp+ffxCeffKIBff755xfUe+CBBzSgzzjjjF7bpLXW9957rwb07bff3mudGTNmaED/6U9/KihfsWKFDoVC+qKLLsqXlfrdjBgxoqAdRx11lJ40adI62yWEEF8lMm1PCCFKUEpx9NFHF5RNmDChYFTolVdeIRqN8s1vfrOg3ne+8531nv+FF17AcRzOPffcXuu89dZbNDc3c8YZZ2Dbdv7HdV0OP/xwZs6cmR/FmDx5MnfffTfXXHMNb7/9Ntlsdr1tiMfjvPPOO5xwwglEIpF8uWmafPe732XlypUsWLBgvefp6ZVXXmHcuHFMnDixoLwv70unqVOnFoyAmKbJSSedxMKFC1m5ciUAL7/8MlOnTmXYsGEFx5555pkkEolekzGkUileeukljj32WMLhcMF7e+SRR5JKpXj77bd7bdv06dMBOPHEEwvKTznllF6POf7449f9gvHeN4BTTz21oPzEE0/EstY/UeS///0vwWCQ73//+73WeeaZZ1BKcdpppxW87oEDBzJx4sSCTIh9MXnyZObOncs555zD888/T3t7++c6XgghtjYSPAkhRAnhcJhgMFhQFggESKVS+cdNTU0lpzgNHDhwvedvaGgAWGfCgLVr1wJwwgkn4PP5Cn6uu+46tNY0NzcD8Mgjj3DGGWdwxx13sM8++1BdXc3pp59ecv1Vp5aWFrTWDBo0qOi5wYMH51/j59XU1FTyPejL+7Kuup1lnW1qamraoLY3NTVh2zY33XRT0ft65JFHAtDY2Nhr25qamrAsi+rq6oLydU13K9XOUueF4tduWRY1NTXrPb6hoYHBgwdjGL137WvXrkVrzYABA4pe+9tvv73O113KJZdcwh//+EfefvttjjjiCGpqapg6depGTf0vhBBbElnzJIQQG6impqbkYv51BSyd+vXrB8DKlSuLRk461dbWAnDTTTex9957l6zT+YW9traWG2+8kRtvvJHly5czbdo0fv3rX1NfX89zzz1X8tiqqioMw2DNmjVFz61evbqgDZ9HTU1NyfegL+/Luup2lnUGEjU1NRvU9qqqqvzoWm8jf6NGjeq1bTU1Ndi2TXNzc0EAta7X15f9nDpfV11dHUOGDMmX27bdpyC2X79+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pcI4c+YMqlatihUrVqBTp06BDoeoSOyXrgz7pdLFvsn/2DeVLTzzRKXGYrFg8+bN6NGjh25+jx49sGbNmgBFRVS49PR0AEB0dHSAIyGi0sB+icoj9k1lC5MnKjVnz56FzWZDtWrVdPOrVauGU6dOBSgqIu+klJg0aRI6dOiAxo0bBzocIioF7JeovGHfVPZcl8nTtGnTIIQo8t+mTZsCHWaFIYTQTUspPeYRBdrYsWOxfft2fPnll4EOha5D7JeuLfZLVF6wbyp7DIEOIBDGjh2LQYMGFVmnZs2a1yaYCiwmJgaqqnr8mnf69GmPX/2IAmncuHFYvHgxVq5ciRo1agQ6HLoOsV+6NtgvUXnCvqlsui6Tp5iYGMTExAQ6jArPZDKhVatWWLp0KQYMGOCcv3TpUvTr1y+AkRHZSSkxbtw4LFq0CMuXL0etWrUCHRJdp9gvXRvsl6g8YN9Utl2XyVNJpKam4vz580hNTYXNZkNycjIA4MYbb0RYWFhggysHJk2ahGHDhqF169Zo164d5s6di9TUVDz66KOBDq1cyszMxMGDB53TKSkpSE5ORnR0NBITEwMYWfk0ZswYfPHFF/jxxx8RHh7u/DU6MjISwcHBAY6OyDv2S1eH/ZL/sW/yL/ZNZZykIo0YMUIC8Pi3bNmyQIdWbsyaNUsmJSVJk8kkW7ZsKVesWBHokMqtZcuWeT0eR4wYEejQyiVv+xKA/PTTTwMdGlGh2C9dPfZL/sW+yb/YN5VtfM4TERERERGRD67L0faIiIiIiIhKiskTERERERGRD5g8ERERERER+YDJExERERERkQ+YPBEREREREfmAyRMREREREZEPmDwRERERERH5gMkTERERERGRD5g8ERERERER+YDJExERERERkQ+YPBEREREREfmAyRMREREREZEPmDwRERERERH5gMkTERERERGRD5g8ERERERER+YDJExERERERkQ+YPBEREREREfmAyRMREREREZEPmDwRERERERH5gMkTERERERGRD5g8ERERERER+YDJExERERERkQ+YPBEREREREfmAyRMREREREZEPmDwRERERERH5gMkTERERERGRD5g8ERERERER+YDJExERERERkQ+YPBEREREREfmAyRMREREREZEPmDwRERERERH5gMkTERERERGRD5g8ERERERER+YDJExERERER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jAcffNCZyAHF9+vulixZgoEDB6JPnz7YunUr/vjjD93f+IEHHsBff/2Fr776Ctu3b8c999yDXr164cCBA4W2SWWAJHJz+vRpCUDu2LFDSillSkqKBCC3bt0qpZRy2bJlEoC8cOGCbrnOnTvLCRMmOKeTkpLk22+/raszdepU2axZM928t99+WyYlJTmn4+Li5MyZM53TeXl5skaNGrJfv35SSikzMzNlUFCQXLNmja6dhx56SA4ePLjQ7WrWrJl86aWXdPM+/fRTGRkZKfft2ycTExPluHHjpKZpHssOGDBAjhw5stC23bdrxIgRMikpSVqtVue8e+65R953331SSin37dsnAch169Y5y/fs2SMBOPfZH3/8ISMiImROTo5uXTfccIP88MMPndOjR4+WdevWlUOHDpWNGzeW2dnZhcY5d+5cWalSJZmZmemct2TJEqkoijx16pSUUspFixbJ4j4ann/+edmjRw/dvGPHjkkAct++fV6XcT+uPvzwQxkeHi7PnTvntf7UqVNlSEiIvHTpknPek08+KW+66aZC4xo8eLC85ZZbvJb5cty4H9uO44OIAse9b3G3YcMGCUBmZGRIKStWH1XYtrRo0UJOmzat0LZGjBjhjEdK+7Z36NBBV6dNmzZy8uTJUkopf/vtN6mqqjx27Jiz/JdffpEA5KJFi6SUUn788ceyXr16uj4yNzdXBgcHy99++805r0+fPrJjx46ye/fu8rbbbvPapzo8++yzHm3OmjVLhoWFSZvNJqX03P/eDBs2TI4aNUo3b9WqVVJRlEL7RPfj5plnnpG1atWSFovFa/3i+nVv2rVrJ4cOHeq17ODBg1IIIU+cOKGb3717d/nMM89IKT37IG/HJ117vHCUcOjQITz//PNYt24dzp496/zlPzU19ZrfmJmeno60tDS0a9fOOc9gMKB169bOyyJ2796NnJwc3HbbbbplLRYLWrRoUWjb2dnZzrNJ7vM7dOiAwYMHe/2FEgCCg4Nx+fLlEm1Lo0aNoKqqczouLs556cKePXuc2+VQv3593TXqmzdvRmZmpse9VNnZ2brLCN544w00btwYX3/9NTZt2uR1Gx327NmDZs2aITQ01DnvlltugaZp2LdvH6pVq+bTtm3evBnLli1DWFiYR9mhQ4dQt27dYo+r5ORktGjRAtHR0YWup2bNmrp7FOLi4jwu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ly7JcePGyfj4eGk0GmVCQoIcOnSoTE1NlcuWLZMGg0GuWrXKWf/o0aMyMjJSzp49u9BYt2/fLrt27SqDgoJkdHS0fPjhh503zErp24ARUkq5f/9+OWDAABkVFSWDg4Nl/fr15cSJE503/hZ3XEkp5ZEjR+Rdd90lIyIiZEhIiGzdurVcv369130qpW83Di9fvly2b99ems1mGRUVJXv27Om82bq444YDRhCVPe59yxdffCFr1qwpzWazbNeunVy8eHGF7aO8DRgxatQo+cgjjxS5z7wNGOE+6Ea/fv2c+0ZK+0BGHTp0kCaTSdatW1f++uuvHp/ZaWlpcvjw4TImJkaazWZZu3Zt+fDDD8v09HQ5f/58GRoaKvfv3++sv2nTJmkymeSSJUsKjXX58uWyTZs20mQyydjYWDl58mSZl5fnLPflc19K+wAQt912mwwLC5OhoaGyadOmcvr06c5yX46bbdu2yR49esiQkBAZHh4uO3bsKA8dOuR1n0rp2a97891338nmzZtLk8kkY2Ji5MCBA51lFotFvvDCC7JmzZrSaDTK2NhYOWDAALl9+3YpJQeMKKuElF4udCWqoGbPno0ff/wRv/32m0/1c3NzUadOHXz55Ze45ZZbSjk6IiK6nrn3Ub/99ht69+6NnJwcmEwmnDlzBvXr18emTZtQq1atAEdLdH3iPU90XRk1ahQuXLiAjIwMn540f/ToUUyZMoWJExERlTrXPury5cv48ccfUadOHed9XCkpKZg9ezYTJ6IA4pknIiIiojKmVatWyMjIwOzZs/16zy0RXR0mT0RERERERD7gaHtEREREREQ+YPJERERERETkAyZPREREREREPmDyRERERERE5AMmT0RERERERD5g8kREREREROQDJk9EREREREQ+YPJERERERETkg/8HXqmOnO3bMAkAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, axs = plt.subplots(1,2, figsize=(10,6))\n", + "\n", + "# The weird indexing and adding/subtracting just makes the plot look better\n", + "# Ignore some ghost cells, make colorbar clip extrema, etc.\n", + "\n", + "for i in range(4):\n", + " for j in range(n_y):\n", + " ax0 = axs[0].scatter(xs[i, j, :-2], ys[i, j, :-2], s=12, \n", + " c=range(n_z-2), vmin=0, vmax=n_z-3,\n", + " cmap='plasma') # distinct colormap\n", + "\n", + " for j in range(2, n_z-2):\n", + " ax1 = axs[1].scatter(xs[i, :, j], ys[i, :, j], s=12, \n", + " c=range(n_y), vmin=1, vmax=n_y-2, \n", + " zorder=4-i) # reverse order points are drawn in\n", + "\n", + "circle0 = plt.Circle((0, 0), 1, color='k', alpha = .7, zorder=0)\n", + "circle1 = plt.Circle((0, 0), 1, color='k', alpha = .7, zorder=0)\n", + "axs[0].add_patch(circle0)\n", + "axs[1].add_patch(circle1)\n", + "axs[0].set_aspect(1);\n", + "axs[1].set_aspect(1);\n", + "fig.colorbar(ax0, ax=axs[0], orientation='horizontal', label='altitude (k) index of each cell')\n", + "fig.colorbar(ax1, ax=axs[1], orientation='horizontal', label='latitude (j) index of each cell')\n", + "\n", + "fig.suptitle(\"Indices of dipole grid cells\")\n", + "\n", + "if save_figs:\n", + " fig.savefig(\"plots/order-of-cells-dipole.png\")\n", + " \n", + "plt.show();" + ] + }, + { + "cell_type": "markdown", + "id": "025f5263-732e-41f2-9a5d-fae07190afe3", + "metadata": {}, + "source": [ + "Since altitude is negative in the southern hemisphere and the k-coordinate is decreasing in the northern hemisphere, the actual sign of the d_k distances may not be intuitive. Internally, we take the absolute value of dk.\n", + "\n", + "If there are any other questions, contact Aaron B and this file can be updated with more plots :)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:interactive]", + "language": "python", + "name": "conda-env-interactive-py" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/edu/examples/Dipole/dipole.py b/edu/examples/Dipole/dipole.py new file mode 100755 index 00000000..f188a3ea --- /dev/null +++ b/edu/examples/Dipole/dipole.py @@ -0,0 +1,296 @@ +import matplotlib.pyplot as plt +import numpy as np + +#### Set inputs #### + +# To save plot, change last line of the code, otherwise it is just shown + +# Number of lats/alts (without ghost cells) +nLatsPerBlock_in = 12 +nAltsPerBlock_in = 12 + +# in degrees, where to begin & end grid between (90,0) +# Grid is mirrored across N/S hemisphere +max_blat = 85 +min_blat = 12 + +# In km (above surface) +min_alt = 80 +max_alt = 800 + +# Number of "blocks" to simulate - i.e. # of processors in Aether run (must be >4 & even) +nBlocks = 6 + +nGCs = 2 + +# consts: +Re_KM = 6371 # in km +cPI = np.pi + + +######## ~~~~~~~~~~~~~~~~~~~~ ######## +# OUTLINE: +# - constants & inputs (above) +# - def main (the function to create the grid) +# - def all conversions +# - def the ploting function +# - Run script: +# - make the grid as Aether would +# - call the plotting function + +def main(alt_minRE, alt_maxRE, lat_min, lat_max, origins, extent, nLatsPerBlock, nAltsPerBlock): + + pcenters = np.zeros([len(origins), nLatsPerBlock, nAltsPerBlock]) + qcenters = np.zeros([len(origins), nLatsPerBlock, nAltsPerBlock]) + + # Loop through QT's origins + for n, origin in enumerate(origins): + close_this_block = False + isSouth = False + # If we're in south hemisphere, flip everything. WIll be undone later. + if origin < -0.01: + isSouth = True + origin = -1*origin - extent + + lat0 = (2*(lat_max - lat_min))*origin + dlat = extent * (2*(lat_max - lat_min)) / (nLatsPerBlock - nGCs*2) + + # Put latitudes down evenly (centers & corners) + # - This forms the invariant latitudes which field lines must pass thru + lat1d = [] + lat1d_co = [] + pcenters1d = np.empty(nLatsPerBlock) + qs = np.empty((nLatsPerBlock, nAltsPerBlock)) + pcenters2d = np.empty((nLatsPerBlock, nAltsPerBlock)) + + for i in range(nLatsPerBlock): + lat1d.append(lat0 + (i - nGCs + 0.5) * dlat + lat_min) + + # IF touching pole, put last ghost cell at 89.9 degrees & the 2nd to last 1/2 way there. + if origin + extent > 0.49: + lat1d[-1] = 89.9 + lat1d[-2] = (lat1d[-1] + lat1d[-2]) /2 + + for i in range(nLatsPerBlock): + pcenters1d[i] = alt_minRE / (np.sin(cPI/2 - np.deg2rad(lat1d[i]))**2) + # Easier to save later if we get this: + pcenters2d[i, :] = alt_minRE / (np.sin(cPI/2 - np.deg2rad(lat1d[i]))**2) + + # Corners (only used here to determine if we need to close > 1 block per hemisphere) + for i in range(nLatsPerBlock+1): + lat1d_co.append(lat0 + (i - nGCs) * dlat + lat_min) + pcorners = alt_minRE / np.sin(cPI/2 - np.deg2rad(lat1d_co)) **2 + + ## Determine if field lines should close. There are two conditions: + # - If the lowest l-shell in this block < altMin + if np.min(pcorners) < alt_maxRE: + close_this_block = True + # - Or if we are touching the equator + if origin < 0.01: # NH equator + close_this_block + True + if np.abs(extent + origin) < 0.01: # SH equator + close_this_block = True + + ## Setting up the q-values... + + # The idea here is that we either want the field line to close (wrap over equator) + # or to have its boundaries entirely within min/max alt. + # We do not want field lines ending before max_alt, and vice-versa. + # By definition, q=0 at the equator and +/- infinity at the N/S poles, so: + # - Q_max is obtained from the minimum altitude point on the highest latitude field line + q_max_center = rp2q(alt_minRE, pcenters1d[-1]) + if close_this_block: + q_min_center = 0 # if the block is closed, q_min = 0. This is the equator! + else: + # If open, q_min is the highest altitude point on the lowest latitude field line + q_min_center = rp2q(alt_maxRE, pcenters1d[0]) + + + delQ = (q_max_center - q_min_center) / (nAltsPerBlock - nGCs*2) + for iAlt in range(nAltsPerBlock): + qs[:, iAlt] = ((q_min_center + (iAlt - nGCs + 0.5) * delQ)) + + # If we were in South hemisphere, multiply by -1 + # And put data in the same order as we get back from Aether + if isSouth: + qs = -1.0*qs + pcenters2d = np.flip(pcenters2d, axis=0) + + qcenters[n,:] = np.flip(qs, axis=1) + pcenters[n,:] = pcenters2d + + return qcenters, pcenters + + +#### Useful Functions for conversions: #### +#### - Not all used... +#### - Format: in2out, in as few letters as necessary +#### example: cart to geo "xy2rt": (x,y) --> (r, theta) + +## NOTE: theta for the dipole coordinate system is defined as co-latitude, not latitude +## Thus, we do (cPI-theta) for rt2(q/p). +## Then things are kept as-is, until conversion back to spherical when +## colatitude is again considered + +def rt2q(r, t): + return np.cos(cPI/2 - t)/r**2 + +def rt2p(r, t): + return r/(np.sin(cPI/2 - t)**2) + +def rt2qp(r, t): + q = rt2q(r, t) + p = rt2p(r, t) + return q, p + +def rt2xy(r, t): + x = r*np.cos(t) + y = r*np.sin(t) + return x, y + + +def rq2t(r,q): + return np.arcsin(q * r**2) +def rp2t(r, p): + return np.arccos(np.sqrt(r/p)) + +def rp2q(r, p): + return np.sqrt((1-r/p)/r**4) + +def qp2xy(q, p): + r_ = qp_solve(q, p) + t_ = rq2t(r_, q) + return rt2xy(r_, t_) + +def tp2r(t, p): + return p * (np.cos(t)**2) + +def alt2r(alt, re): + return (alt + re)/re + +def r2alt(r, re): + return r*re - re + + +def qp_solve(q, p): + """Solve for radius given (q,p) dipole coordinates + Methodology from 0) then + if (index(EIE_NameOfAuroralModel,'hpi') > 0) then call read_conductance_model(iError) IsFound_AuroralModel = .true. endif - if (index(EIE_NameOfAuroralModel,'pem') > 0) then + if (index(EIE_NameOfAuroralModel,'pem') > 0) then call read_conductance_model(iError) IsFound_AuroralModel = .true. endif - if (index(EIE_NameOfAuroralModel,'fta') > 0) then + if (index(EIE_NameOfAuroralModel,'fta') > 0) then + IsFound_AuroralModel = .true. + endif + if (index(EIE_NameOfAuroralModel,'zero') > 0) then + IsFound_AuroralModel = .true. + endif + if (index(EIE_NameOfAuroralModel,'none') > 0) then IsFound_AuroralModel = .true. endif - if (iDebugLevel > 4) write(*,*) "=====> Back from read conductance" if (index(EIE_NameOfEFieldModel,'amie') > 0) then diff --git a/ext/IE/EIE_IoLibrary.f90 b/ext/IE/EIE_IoLibrary.f90 index dde39c9f..f4af865e 100644 --- a/ext/IE/EIE_IoLibrary.f90 +++ b/ext/IE/EIE_IoLibrary.f90 @@ -281,6 +281,7 @@ subroutine IO_GetPotential(PotentialOut, iError) real, dimension(IOi_NeednMLTs,IOi_NeednLats) :: ValueOut real, dimension(IOi_NeednMLTs,IOi_NeednLats), intent(out) :: PotentialOut real :: Filler = 0.0 + integer :: iLat, iMlt iError = 0 @@ -302,6 +303,27 @@ subroutine IO_GetPotential(PotentialOut, iError) call IO_GetNonGridBasedPotential(ValueOut, iError) + ! In Weimer, there are sometimes 0 potentials. I don't know why. + if (maxval(abs(IOr2_NeedLats)) > 80.0) then + + do iMlt = 2, IOi_NeednMLTs - 1 + do iLat = 2, IOi_NeednLats - 1 + if (ValueOut(iMlt, iLat) == 0.0) then + if (ValueOut(iMlt, iLat - 1)*ValueOut(iMlt, iLat + 1) > 0) then + ! this is a "hole" in the potential, since the potential is + ! the same sign both above and below the current point. + ValueOut(iMlt, iLat) = ( & + ValueOut(iMlt - 1, iLat) + & + ValueOut(iMlt, iLat - 1) + & + ValueOut(iMlt + 1, iLat) + & + ValueOut(iMlt, iLat + 1))/4.0 + endif + endif + enddo + enddo + + endif + if (iError == 0) then PotentialOut = ValueOut else @@ -604,6 +626,14 @@ subroutine IO_GetElectronDiffuseAurora(EFluxOut, AveEOut, iError) endif + if ((index(EIE_NameOfAuroralModel,'zero') > 0) .or. & + (index(EIE_NameOfAuroralModel,'none') > 0)) then + iError = 0 + AveEOut = 3.0 + EFluxOut = 1e-9 + endif + + endif end subroutine IO_GetElectronDiffuseAurora diff --git a/ext/IE/mh86.f b/ext/IE/mh86.f index 35785c53..87548c6a 100644 --- a/ext/IE/mh86.f +++ b/ext/IE/mh86.f @@ -105,14 +105,12 @@ SUBROUTINE MHEMODL (RMLAT,RMLT,HP,BY,BZ,MODL,ET,EP,EPOT) TIME = RMLTLON/15. TIME = RMLT - 20 IF (TIME .GT. TMX) THEN - TIME = TIME - 24. - GO TO 20 - ENDIF - 30 IF (TIME .LT. TMN) THEN - TIME = TIME + 24. - GO TO 30 - ENDIF + do while (time > tmx) + time = time - 24.0 + enddo + do while (time < tmn) + time = time + 24.0 + enddo H = SIGN (1.,RMLAT) RMLA = MIN(MAX(ABS(RMLAT),RMLAMN(MODL)), RMLAMX(MODL)) @@ -255,8 +253,9 @@ SUBROUTINE MHINIT (MODL,IUN,IPR,ISTAT) ENDIF READ (IUN,*) NLABS - DO 10 I=1,NLABS - 10 READ (IUN,'(A)',END=998,ERR=999) LABELS + DO I=1,NLABS + READ (IUN,'(A)',END=998,ERR=999) LABELS + enddo READ (IUN,*,END=998,ERR=999) KFIT IF (KFIT .NE. 2) THEN @@ -297,8 +296,9 @@ SUBROUTINE MHINIT (MODL,IUN,IPR,ISTAT) IF (MODL .EQ. 2) THEN C Reverse the sign of BETA for MHS to conform to MHI convention - DO 20 I=1,NBETA - 20 BETA(I,NDX,MODL) = -BETA(I,NDX,MODL) + DO I=1,NBETA + BETA(I,NDX,MODL) = -BETA(I,NDX,MODL) + enddo ENDIF ENDDO C 30 IF (IPR .EQ. 1) WRITE (6,'(''MHINIT: Read ''A,'' pars: I MODL BY B @@ -392,10 +392,11 @@ SUBROUTINE GETFIT (NDX,MODL,TIME,RMLA,DFIT,ESFIT,EEFIT,ISTAT) DFIT = 0.0 DDXFIT = 0. DDYFIT = 0. - DO 30 I=1,NBETA - DFIT = DFIT + BETA(I,NDX,MODL)*F(1,1,I) - DDXFIT = DDXFIT + BETA(I,NDX,MODL)*F(2,1,I)/Y - 30 DDYFIT = DDYFIT + BETA(I,NDX,MODL)*F(1,2,I) + DO I=1,NBETA + DFIT = DFIT + BETA(I,NDX,MODL)*F(1,1,I) + DDXFIT = DDXFIT + BETA(I,NDX,MODL)*F(2,1,I)/Y + DDYFIT = DDYFIT + BETA(I,NDX,MODL)*F(1,2,I) + enddo DDYFIT = -DDYFIT DFIT = -DFIT/1000. ESFIT = -DDYFIT @@ -422,10 +423,11 @@ SUBROUTINE BASPRC (TX,TY,NX,NY,KX,KY,X,Y,F) NDERIV = MIN0 (3,KX-1,KY-1) N = NX*NY - DO 10 I=1,N - DO 10 J=1,9 - 10 F(J,I) = 0. - + DO I=1,N + DO J=1,9 + F(J,I) = 0. + enddo + enddo XP = MOD (X,TX(NX+1)) CALL INTERV (TX, NX+KX, XP, ILEFTX, MFLAG) YP = Y @@ -449,24 +451,25 @@ SUBROUTINE BASPRC (TX,TY,NX,NY,KX,KY,X,Y,F) CALL BSPLVD (TY, KY, YP, ILEFTY, A, VALY, NDERIV) NPX = NX - (KX-1) - DO 20 MX=1,KX - IX = LFTMKX + MX - IF (IX .GE. NX-(KX-2)) IX = IX-NX+(KX-1) - - DO 30 MY=1,KY - IY = LFTMKY + MY - 1 - IF (IY .GT. 0) THEN - DO 40 JX=1,3 - LX = MX + KX*(JX-1) - DO 50 JY=1,3 - J = JX + (JY-1)*3 - LY = MY + KY*(JY-1) - I = IX + (IY-1)*NPX - 50 F(J,I) = VALX(LX)*VALY(LY) - 40 CONTINUE - ENDIF - 30 CONTINUE - 20 CONTINUE + DO MX=1,KX + IX = LFTMKX + MX + IF (IX .GE. NX-(KX-2)) IX = IX-NX+(KX-1) + + DO MY=1,KY + IY = LFTMKY + MY - 1 + IF (IY .GT. 0) THEN + DO JX=1,3 + LX = MX + KX*(JX-1) + DO JY=1,3 + J = JX + (JY-1)*3 + LY = MY + KY*(JY-1) + I = IX + (IY-1)*NPX + F(J,I) = VALX(LX)*VALY(LY) + enddo + enddo + ENDIF + enddo + enddo RETURN END @@ -631,14 +634,15 @@ SUBROUTINE BSPLVD ( T, K, X, LEFT, A, DBIATX, NDERIV ) C ORDER BEFORE BSPLVB IS CALLED TO PUT VALUES FOR THE NEXT C HIGHER ORDER ON TOP OF IT. IDERIV = MHIGH - DO 15 M=2,MHIGH + DO M=2,MHIGH JP1MID = 1 - DO 11 J=IDERIV,K + DO J=IDERIV,K DBIATX(J,IDERIV) = DBIATX(JP1MID,1) - 11 JP1MID = JP1MID + 1 + JP1MID = JP1MID + 1 + enddo IDERIV = IDERIV - 1 CALL BSPLVB(T,KP1-IDERIV,2,X,LEFT,DBIATX) - 15 CONTINUE + enddo C C AT THIS POINT, B(LEFT-K+I, K+1-J)(X) IS IN DBIATX(I,J) FOR C I=J,...,K AND J=1,...,MHIGH ('=' NDERIV). IN PARTICULAR, THE @@ -647,15 +651,17 @@ SUBROUTINE BSPLVD ( T, K, X, LEFT, A, DBIATX, NDERIV ) C RATE THEIR B-REPR. BY DIFFERENCING, THEN EVALUATE AT X. C JLOW = 1 - DO 20 I=1,K - DO 19 J=JLOW,K - 19 A(J,I) = 0. + DO I=1,K + DO J=JLOW,K + A(J,I) = 0. + enddo JLOW = I - 20 A(I,I) = 1. + A(I,I) = 1. + enddo C AT THIS POINT, A(.,J) CONTAINS THE B-COEFFS FOR THE J-TH OF THE C K B-SPLINES OF INTEREST HERE. C - DO 40 M=2,MHIGH + DO M=2,MHIGH KP1MM = KP1 - M FKP1MM = FLOAT(KP1MM) IL = LEFT @@ -665,14 +671,16 @@ SUBROUTINE BSPLVD ( T, K, X, LEFT, A, DBIATX, NDERIV ) C B-SPLINES FROM THOSE FOR PRECEDING DERIVATIVE BY DIFFERENCING C AND STORE AGAIN IN A(.,J) . THE FACT THAT A(I,J) = 0 FOR C I .LT. J IS USED. - DO 25 LDUMMY=1,KP1MM + DO LDUMMY=1,KP1MM FACTOR = FKP1MM/(T(IL+KP1MM) - T(IL)) C THE ASSUMPTION THAT T(LEFT).LT.T(LEFT+1) MAKES DENOMINATOR C IN FACTOR NONZERO. - DO 24 J=1,I - 24 A(I,J) = (A(I,J) - A(I-1,J))*FACTOR + DO J=1,I + A(I,J) = (A(I,J) - A(I-1,J))*FACTOR + enddo IL = IL - 1 - 25 I = I - 1 + I = I - 1 + enddo C C FOR I=1,...,K, COMBINE B-COEFFS A(.,I) WITH B-SPLINE VALUES C STORED IN DBIATX(.,M) TO GET VALUE OF (M-1)ST DERIVATIVE OF @@ -681,12 +689,15 @@ SUBROUTINE BSPLVD ( T, K, X, LEFT, A, DBIATX, NDERIV ) C OF ORDER M THERE IS SAFE SINCE THE REMAINING B-SPLINE DERIVAT- C IVES OF THE SAME ORDER DO NOT USE THIS VALUE DUE TO THE FACT C THAT A(J,I) = 0 FOR J .LT. I . - 30 DO 40 I=1,K + 30 DO I=1,K SUM = 0. JLOW = MAX0(I,M) - DO 35 J=JLOW,K - 35 SUM = A(J,I)*DBIATX(J,M) + SUM - 40 DBIATX(I,M) = SUM + DO J=JLOW,K + SUM = A(J,I)*DBIATX(J,M) + SUM + enddo + DBIATX(I,M) = SUM + enddo + enddo 99 RETURN END @@ -772,10 +783,11 @@ SUBROUTINE BSPLVB ( T, JHIGH, INDEX, X, LEFT, BIATX ) DELTAR(J) = T(LEFT+J) - X DELTAL(J) = X - T(LEFT+1-J) SAVED = 0. - DO 26 I=1,J + DO I=1,J TERM = BIATX(I)/(DELTAR(I) + DELTAL(JP1-I)) BIATX(I) = SAVED + DELTAR(I)*TERM - 26 SAVED = DELTAL(JP1-I)*TERM + SAVED = DELTAL(JP1-I)*TERM + enddo BIATX(JP1) = SAVED J = JP1 IF (J .LT. JHIGH) GO TO 20 diff --git a/include/advance.h b/include/advance.h index 541dd683..1f287c4b 100644 --- a/include/advance.h +++ b/include/advance.h @@ -33,14 +33,20 @@ bool advance(Planets &planet, - Grid &gGrid, - Times &time, - Euv &euv, - Neutrals &neutrals, - Ions &ions, - Chemistry &chemistry, - Electrodynamics &electrodynamics, - Indices &indices, - Logfile &logfile); + Grid &gGrid, + Grid &mGrid, + Times &time, + Euv &euv, + Neutrals &neutrals, + Neutrals &neutralsMag, + Ions &ions, + Ions &ionsMag, + Chemistry &chemistry, + Chemistry &chemistryMag, + Electrodynamics &electrodynamics, + Electrodynamics &electrodynamicsMag, + Indices &indices, + Logfile &logfile, + Logfile &logfileMag); #endif // INCLUDE_ADVANCE_H_ diff --git a/include/aether.h b/include/aether.h index 35be5d59..ec51bdc2 100644 --- a/include/aether.h +++ b/include/aether.h @@ -4,6 +4,8 @@ #ifndef INCLUDE_AETHER_H_ #define INCLUDE_AETHER_H_ +const float aether_version = 0.6; + /// The armadillo library is to allow the use of 3d cubes and other /// array types, with array math built in. This eliminates loops! #include @@ -78,9 +80,11 @@ using json = nlohmann::json; #include "cubesphere.h" #include "sphere.h" #include "quadtree.h" +#include "dipole.h" // not done #include "grid.h" +#include "init_mag_grid.h" // Contains the neutral states and derived quantities #include "neutrals.h" @@ -139,4 +143,7 @@ using json = nlohmann::json; // not commented #include "external_msis.h" +// To hold all the test functions +#include "test.h" + #endif // INCLUDE_AETHER_H_ diff --git a/include/aurora.h b/include/aurora.h index 75889cc9..5a14ce8e 100644 --- a/include/aurora.h +++ b/include/aurora.h @@ -12,16 +12,16 @@ **/ void read_aurora(Neutrals &neutrals, - Ions &ions); + Ions &ions); arma_vec calculate_fang(float eflux, // in ergs/cm2/s - float avee, // in keV - float Ebin, // eV - arma_vec rhoH, - std::vector Ci, - float dE, // eV - arma_vec H, - bool DoDebug); + float avee, // in keV + float Ebin, // eV + arma_vec rhoH, + std::vector Ci, + float dE, // eV + arma_vec H, + bool DoDebug); /********************************************************************** * brief Read in a file containing information about splitting ionization @@ -31,8 +31,8 @@ arma_vec calculate_fang(float eflux, // in ergs/cm2/s * param ions the class that contains all info about the ions **/ -void calc_aurora(Grid grid, - Neutrals &neutrals, - Ions &ions); +void calc_aurora(Grid &grid, + Neutrals &neutrals, + Ions &ions); #endif // INCLUDE_AURORA_H_ diff --git a/include/bfield.h b/include/bfield.h index df64fac8..a7535f2c 100644 --- a/include/bfield.h +++ b/include/bfield.h @@ -11,18 +11,18 @@ struct bfield_info_type { }; arma_vec get_magnetic_pole(int IsNorth, - Planets planet); + Planets planet); bfield_info_type get_bfield(precision_t lon, precision_t lat, precision_t alt, - bool DoDebug, + bool DoDebug, Planets planet); bfield_info_type get_dipole(precision_t lon, precision_t lat, precision_t alt, - bool DoDebug, + bool DoDebug, Planets planet); #endif // INCLUDE_BFIELD_H_ diff --git a/include/calc_euv.h b/include/calc_euv.h index 561930a2..4380529c 100644 --- a/include/calc_euv.h +++ b/include/calc_euv.h @@ -21,16 +21,16 @@ // ------------------------------------------------------------------------- bool calc_euv(Planets planet, - Grid grid, - Times time, - Euv &euv, - Neutrals &neutrals, - Ions &ions, - Indices indices); + Grid &grid, + Times time, + Euv &euv, + Neutrals &neutrals, + Ions &ions, + Indices indices); void calc_ionization_heating(Euv euv, - Neutrals &neutrals, - Ions &ions); + Neutrals &neutrals, + Ions &ions); #endif // INCLUDE_CALC_EUV_H_ diff --git a/include/calc_grid_derived.h b/include/calc_grid_derived.h index f66f2fa2..5d9c755a 100644 --- a/include/calc_grid_derived.h +++ b/include/calc_grid_derived.h @@ -7,7 +7,7 @@ #include // ---------------------------------------------------------------------------- -// +// // ---------------------------------------------------------------------------- std::vector calc_bin_edges(std::vector centers); @@ -16,4 +16,17 @@ arma_vec calc_bin_edges(arma_vec centers); std::vector calc_bin_widths(std::vector centers); arma_vec calc_bin_widths(arma_vec centers); +// ---------------------------------------------------------------------------- +// A helper function for mapping grids +// ---------------------------------------------------------------------------- +bool grid_match(Grid &gGrid, + Grid &mGrid, + Quadtree gQuadtree, + Quadtree mQuadtree); + +bool get_data_from_other_grid(Grid &gGrid, + Grid &mGrid, + arma_cube &gData, + arma_cube &mData); + #endif // INCLUDE_CALC_GRID_DERIVED_H_ diff --git a/include/calc_momentum_friction.h b/include/calc_momentum_friction.h index 24a6e9ef..6d302fb7 100644 --- a/include/calc_momentum_friction.h +++ b/include/calc_momentum_friction.h @@ -4,11 +4,8 @@ #ifndef INCLUDE_CALC_MOMENTUM_FRICTION_H_ #define INCLUDE_CALC_MOMENTUM_FRICTION_H_ -arma_vec neutral_friction_one_cell(int64_t iLong, int64_t iLat, int64_t iAlt, - arma_vec &vels, - Neutrals &neutrals); +#include "../include/aether.h" -void calc_neutral_friction(Neutrals &neutrals); /********************************************************************** \brief Calculate acceleration due to ion drag @@ -17,7 +14,6 @@ void calc_neutral_friction(Neutrals &neutrals); \param dt The change in time \param report allow reporting to occur **/ -void calc_ion_collisions(Neutrals &neutrals, - Ions &ions); +void calc_ion_collisions(Neutrals &neutrals, Ions &ions); #endif // INCLUDE_CALC_MOMENTUM_FRICTION_H_ diff --git a/include/chemistry.h b/include/chemistry.h index c201aa91..dcbfac88 100644 --- a/include/chemistry.h +++ b/include/chemistry.h @@ -72,7 +72,7 @@ class Chemistry { /// type of formula to use for reaction rate: int type; /// name of the reaction - std::string name; + std::string name; }; @@ -87,31 +87,31 @@ class Chemistry { void calc_chemistry(Neutrals &neutrals, Ions &ions, Times time, - Grid grid); + Grid &grid); void calc_chemical_sources(Neutrals &neutrals, Ions &ions); private: - bool search(std::string name, - json &headers, + bool search(std::string name, + json &headers, std::vector &error); - bool check_chemistry_file(json &headers, - std::vector> csv, + bool check_chemistry_file(json &headers, + std::vector> csv, Report &report); int read_chemistry_file(Neutrals neutrals, Ions ions); - reaction_type interpret_reaction_line(Neutrals neutrals, - Ions ions, - std::vector line, - json headers); + reaction_type interpret_reaction_line(const Neutrals &neutrals, + const Ions &ions, + const std::vector &line, + const json &headers); - void find_species_id(std::string name, - Neutrals neutrals, - Ions ions, + void find_species_id(const std::string &name, + const Neutrals &neutrals, + const Ions &ions, int &id_, bool &IsNeutral); diff --git a/include/collisions.h b/include/collisions.h index 1a59a19c..98b1173c 100644 --- a/include/collisions.h +++ b/include/collisions.h @@ -11,6 +11,6 @@ #include "ions.h" void calc_ion_neutral_coll_freq(Neutrals &neutrals, - Ions &ions); + Ions &ions); #endif // INCLUDE_COLLISIONS_H_ diff --git a/include/constants.h b/include/constants.h index 474eb8f4..16183e9d 100644 --- a/include/constants.h +++ b/include/constants.h @@ -6,6 +6,18 @@ #include +// ------------------------------------------------------------------------- +// Define some constants for the code so that all functions understand +// stuff +// These are not physical constants, but are useful references +// ------------------------------------------------------------------------- + +const int iSphere_ = 1; +const int iCubesphere_ = 2; +const int iDipole_ = 3; +const std::string neutralType_ = "neuGrid"; +const std::string ionType_ = "ionGrid"; + // ------------------------------------------------------------------------- // Physical Constants // - Naming standards: @@ -65,7 +77,7 @@ const double cJULIAN2000 = 2451545.0; // ------------------------------------------------------------------------- const precision_t cPI = 3.141592653589793; -const precision_t cTWOPI = 2*cPI; +const precision_t cTWOPI = 2 * cPI; // ------------------------------------------------------------------------- // Conversion Constants: @@ -75,8 +87,8 @@ const precision_t cTWOPI = 2*cPI; // - Names are all UPPER CASE otherwise // ------------------------------------------------------------------------- -const precision_t cDtoR = cPI/180.0; -const precision_t cRtoD = 180.0/cPI; +const precision_t cDtoR = cPI / 180.0; +const precision_t cRtoD = 180.0 / cPI; // ------------------------------------------------------------------------- // converting time between seconds and other units of time: @@ -99,7 +111,7 @@ const double cMtoS = 60.0; const double cStoM = 1.0 / cMtoS; // MilliSeconds <-> Seconds: -const double cMStoS = 1.0/1000.0; +const double cMStoS = 1.0 / 1000.0; const double cStoMS = 1000.0; // ------------------------------------------------------------------------- diff --git a/include/cubesphere.h b/include/cubesphere.h index 0342dd6b..ecca2aed 100644 --- a/include/cubesphere.h +++ b/include/cubesphere.h @@ -15,32 +15,32 @@ namespace CubeSphere { /// The normalized origins of each face of the cube (i.e. corner) static const arma_mat ORIGINS = { - {-1.0, -1.0, -1.0}, - { 1.0, -1.0, -1.0}, - { 1.0, 1.0, -1.0}, - {-1.0, 1.0, -1.0}, - {-1.0, -1.0, -1.0}, - { 1.0, -1.0, 1.0}, + {-1.0, -1.0, -1.0}, + { 1.0, -1.0, -1.0}, + { 1.0, 1.0, -1.0}, + {-1.0, 1.0, -1.0}, + {-1.0, -1.0, -1.0}, + { 1.0, -1.0, 1.0} }; /// Normalized right steps in cube static const arma_mat RIGHTS = { - { 2.0, 0.0, 0.0}, - { 0.0, 2.0, 0.0}, - {-2.0, 0.0, 0.0}, - { 0.0, -2.0, 0.0}, - { 0.0, 2.0, 0.0}, - { 0.0, 2.0, 0.0} + { 2.0, 0.0, 0.0}, + { 0.0, 2.0, 0.0}, + {-2.0, 0.0, 0.0}, + { 0.0, -2.0, 0.0}, + { 0.0, 2.0, 0.0}, + { 0.0, 2.0, 0.0} }; /// Normalized right steps in cube static const arma_mat UPS = { - { 0.0, 0.0, 2.0}, - { 0.0, 0.0, 2.0}, - { 0.0, 0.0, 2.0}, - { 0.0, 0.0, 2.0}, - { 2.0, 0.0, 0.0}, - {-2.0, 0.0, 0.0} + { 0.0, 0.0, 2.0}, + { 0.0, 0.0, 2.0}, + { 0.0, 0.0, 2.0}, + { 0.0, 0.0, 2.0}, + { 2.0, 0.0, 0.0}, + {-2.0, 0.0, 0.0} }; } // CubeSphere:: diff --git a/include/dipole.h b/include/dipole.h new file mode 100644 index 00000000..9ad2f8a4 --- /dev/null +++ b/include/dipole.h @@ -0,0 +1,81 @@ +// Copyright 2020, the Aether Development Team (see doc/dev_team.md for members) +// Full license can be found in License.md + +#ifndef INCLUDE_DIPOLE_H_ +#define INCLUDE_DIPOLE_H_ + +#include "aether.h" +#include + +/************************************************* + * \brief A namespace with all (4-root) dipole grid logic. + *************************************************/ +namespace Dipole4 { + +/// The normalized origins of each node (i.e. corner) +static const arma_mat ORIGINS = { + { 0.0, -0.5, 0.0}, + { 0.0, -0.25, 0.0}, + { 0.0, 0.0, 0.0}, + { 0.0, 0.25, 0.0} +}; + +/// Normalized right steps in node +static const arma_mat RIGHTS = { + {2.0, 0.0, 0.0}, + {2.0, 0.0, 0.0}, + {2.0, 0.0, 0.0}, + {2.0, 0.0, 0.0} +}; + +/// Normalized up steps in node +static const arma_mat UPS = { + {0.0, 0.25, 0.0}, + {0.0, 0.25, 0.0}, + {0.0, 0.25, 0.0}, + {0.0, 0.25, 0.0} +}; + +}; + + +/************************************************* + * \brief A namespace with all (6-root) dipole grid logic. + *************************************************/ + +namespace Dipole6 { + +/// The normalized origins of each face of the cube (i.e. corner) +static const arma_mat ORIGINS = { + { 0.0, -0.5, 0.0}, + { 0.0, -1.0 / 3.0, 0.0}, + { 0.0, -1.0 / 6.0, 0.0}, + { 0.0, 0.0, 0.0}, + { 0.0, 1.0 / 6.0, 0.0}, + { 0.0, 1.0 / 3.0, 0.0} +}; + +/// Normalized right steps in cube +static const arma_mat RIGHTS = { + { 2.0, 0.0, 0.0}, + { 2.0, 0.0, 0.0}, + { 2.0, 0.0, 0.0}, + { 2.0, 0.0, 0.0}, + { 2.0, 0.0, 0.0}, + { 2.0, 0.0, 0.0} +}; + +/// Normalized right steps in cube +static const arma_mat UPS = { + { 0.0, 1.0 / 6.0, 0.0}, + { 0.0, 1.0 / 6.0, 0.0}, + { 0.0, 1.0 / 6.0, 0.0}, + { 0.0, 1.0 / 6.0, 0.0}, + { 0.0, 1.0 / 6.0, 0.0}, + { 0.0, 1.0 / 6.0, 0.0} +}; + +} + + +#endif // INCLUDE_DIPOLE_H_ diff --git a/include/electrodynamics.h b/include/electrodynamics.h index 13a631ab..40cd5555 100644 --- a/include/electrodynamics.h +++ b/include/electrodynamics.h @@ -54,7 +54,7 @@ class Electrodynamics { This does the following: - initialize all variables to missing values - - read in file if it exists + - read in file if it exists **/ Electrodynamics(Times time); @@ -66,12 +66,12 @@ class Electrodynamics { \param time need current time \param ions Going to set the potential and aurora **/ - + bool update(Planets planet, - Grid gGrid, - Times time, - Indices &indices, - Ions &ions); + Grid gGrid, + Times time, + Indices &indices, + Ions &ions); /************************************************************** @@ -85,7 +85,7 @@ class Electrodynamics { **/ bool check_times(double inputStartTime, double inputEndTime); - + /************************************************************** \brief used in advance.cpp to get potential, eflux, avee @@ -95,9 +95,9 @@ class Electrodynamics { **/ std::tuple get_electrodynamics(arma_cube magLat, - arma_cube magLocalTime); + arma_mat, + arma_mat> get_electrodynamics(arma_cube magLat, + arma_cube magLocalTime); /************************************************************** \brief Gets interpolation indices @@ -105,7 +105,7 @@ class Electrodynamics { Performs 2d interpolation over search vector to get indices \param vals the 2d array that needs indices - \param search The vector of values to interpolate over + \param search The vector of values to interpolate over **/ arma_mat get_interpolation_indices(arma_mat vals, arma_vec search); @@ -121,7 +121,7 @@ class Electrodynamics { \param time the time requested. **/ - + void set_time(double time); /************************************************************** @@ -195,7 +195,7 @@ class Electrodynamics { \param value Value to assign to Kp index **/ void set_kp(precision_t value); - + /************************************************************** \brief Get 2D electric potential on specified grid @@ -209,7 +209,7 @@ class Electrodynamics { with the potentials in the grids **/ arma_cube get_potential(arma_cube magLat, - arma_cube magLocalTime); + arma_cube magLocalTime); /************************************************************** \brief Get 2D electron energy flux on specified grid @@ -266,13 +266,13 @@ class Electrodynamics { with the ion avee in the grids **/ arma_mat get_ion_avee(); - + /********************************************************************** \brief Check to see if internal state of class is ok **/ - + bool is_ok(); - + private: /// This is the interpolation method for time: @@ -284,7 +284,7 @@ class Electrodynamics { /// Use the next value: const int iNext_ = 2; // Use the closest value: - const int iClosest_ = 3; + const int iClosest_ = 3; /// Interpolate: const int iInterp_ = 4; @@ -307,7 +307,7 @@ class Electrodynamics { /// A 2d array of magnetic local times needed. Can set interpolation /// coefficients in all of the grids when this is called: arma_mat mlts_needed; - + /// These are all indices that may be needed by sub-models: precision_t imf_bx_needed; precision_t imf_by_needed; @@ -340,11 +340,11 @@ class Electrodynamics { /// If we don't read in an electrodynamics file, then this should be /// set to an auroral model to use. Need to add model types. std::string auroral_model_to_use; - + /// Set the interpolation indices as a float. For each interpolation index, - /// the integer portion is the current index, and the decimal part is the + /// the integer portion is the current index, and the decimal part is the /// percentage of the distance between the current index and the next - /// index. For example, a distance midway between index 45 and 46 + /// index. For example, a distance midway between index 45 and 46 /// would give an interpolation index of 45.5. /// For time, we are assuming that all grids have the same times or that /// there are no overlaps in time, I think. @@ -378,22 +378,22 @@ class Electrodynamics { /// Potential at current time: arma_mat potential_current; - + /// Vector of 2d electron energy flux (in ergs/cm2/s): std::vector energy_flux; /// Said energy flux at the current time: arma_mat energy_flux_current; - + /// Vector of 2d electron average energy (in keV): std::vector average_energy; /// Average energy at current time: arma_mat average_energy_current; - + /// Vector of 2d ion energy flux (in ergs/cm2/s): std::vector ion_energy_flux; /// ion energy flux at current time: arma_mat ion_energy_flux_current; - + /// Vector of 2d ion average energy (in keV): std::vector ion_average_energy; /// ion average energy at current time: @@ -401,7 +401,7 @@ class Electrodynamics { /// Set to 1 if ion precipitation is included, else set to 0: int DoesIncludeIonPrecip; - + /// This sets the priority of the grid. The higher the number, the /// more important it is, so it should overwrite any regions of /// a lower priority grid. For example, you could have a global @@ -419,28 +419,28 @@ class Electrodynamics { /// is outside of the mlt range of the grid, then the /// interpolation index should be set to -1: arma_mat mlts_indices; - + }; - + /// As described above, a structure containing the grid-based /// values of electrodynamics as a function of time. This is /// vector, because we can have nested grids, or, in theory, the /// grid could change as a function of time. You can then search /// for the apropriate grid in space and time. std::vector input_electrodynamics; - + /// Because each grid has a priority, we need to go through them in /// priority order, this is the sorted indices list, so that /// grid_order[0] points to the input_electrodynamics with the /// lowest priority, grid_order[1] points to the 2nd lowest, etc. std::vector grid_order; - + /// Number of input grids for electrodynamics: int nElectrodynamicsGrids; - + /// An internal variable to hold the state of the class bool IsOk; - + /************************************************************** \brief Reads a netcdf file that has the electrodynamics specification @@ -469,13 +469,13 @@ class Electrodynamics { grids, so that the values are overwritten. To keep it "functional", we pass in the last round of values and those are moved into the output values and then the overlapping region is - overwritten (e.g., in the get_potential function, the + overwritten (e.g., in the get_potential function, the grids need to be cycled through calling get_values with the potential on that grid and the interpolation indices for the grid. \param values_current the pot/eflux/avee/etc from input_electrodynamics grid - + \param lats_indices the interpolation indices for the current grid latitudes @@ -483,8 +483,8 @@ class Electrodynamics { grid mlts \param values_old the output of this function for the last grid - **/ - + **/ + arma_mat get_values(arma_mat matToInterpolateOn, int rows, int cols); void set_all_indices_for_ie(Times time, Indices &indices); diff --git a/include/euv.h b/include/euv.h index 138e74f3..dca2825a 100644 --- a/include/euv.h +++ b/include/euv.h @@ -8,7 +8,7 @@ * \class Euv * * \brief Defines the Extreme Ultraviolet radiation above the atmosphere - * + * * The Euv class defines the EUV environment above the atmosphere. It * does this through the use of a CSV file that contains a bunch of * information. Namely: @@ -18,7 +18,7 @@ * * \author Aaron Ridley * - * \date 2021/03/28 + * \date 2021/03/28 * **************************************************************/ @@ -27,12 +27,12 @@ class Euv { -public: + public: /// whether to actuall use euv at all: bool doUse; - - /// number of wavelengths in spectrum: + + /// number of wavelengths in spectrum: int nWavelengths; // number of lines in the EUV CSV file: @@ -59,10 +59,10 @@ class Euv { /// EUV Spectrum, lower wavelength of the bins: std::vector wavelengths_short; - + /// EUV Spectrum, upper wavelength of the bins: std::vector wavelengths_long; - + /// EUV Spectrum, energy of bin: std::vector wavelengths_energy; @@ -81,7 +81,7 @@ class Euv { std::vector solomon_hfg_c1; std::vector solomon_hfg_c2; std::vector solomon_hfg_fref; - + /// NEUVAC model linear coefficients (1-3): std::vector neuvac_s1; std::vector neuvac_s2; @@ -93,6 +93,11 @@ class Euv { /// NEUVAC model intercept: std::vector neuvac_int; + + // To avoid having to start from 0 each iteration: + int fism_prev_index = 0; + // Declare this so it is not passed between function: + index_file_output_struct fismData; // -------------------------------------------------------------------- // Functions: @@ -115,6 +120,19 @@ class Euv { \param indices Need the F107 and F107a **/ bool solomon_hfg(Times time, Indices indices); + + /********************************************************************** + \brief returns the FISM spectrum for a given time + + Unlike the other EUV models ([N]EUVAC, Solomon, etc.), the spectrum + is read from a file (stored in fismData). This does the same thing + as get_index, however FISM is not stored in Indices since it can + have variable # of bins + + \param time The times within the model (dt is needed) + **/ + + bool get_fism(Times time); /********************************************************************** \brief Compute the EUV spectrum given F107 and F107a (new version) @@ -135,7 +153,7 @@ class Euv { Reads through each row in the EUV CSV file and figures out whether the row is abs, ion, diss, and then figures out which neutral it is - acting on and which neutral or ion results from the action + acting on and which neutral or ion results from the action (e.g. O + photon -> O+, identifies O as ionization "loss" and O+ as an ionization "source") @@ -147,20 +165,31 @@ class Euv { /********************************************************************** \brief Check to see if internal state of class is ok **/ - + bool is_ok(); - -private: + + private: /********************************************************************** \brief Read in the EUV CSV file Read in the EUV CSV file that describes all of the wavelengths and - cross sections (and any other EUV - related things that are a + cross sections (and any other EUV - related things that are a function of wavelength) **/ bool read_file(); + /********************************************************************** + \brief Read in the FISM file + + Read in the CSV file with FISM data. This can be made with + srcPython/fism.py. The data are read into a index_file_output_struct, + where each row is one time, and each col is a "variable". These should + match the number of bins in the provided EUV file. + **/ + index_file_output_struct read_fism(std::string fism_filename); + + /********************************************************************** \brief Interprets the EUV CSV rows and returns the relevant row @@ -172,8 +201,8 @@ class Euv { \return values The values in the CSV row that matches the item (and item2) **/ bool slot_euv(std::string item, - std::string item2, - std::vector &values); + std::string item2, + std::vector &values); /// An internal variable to hold the state of the class bool IsOk; diff --git a/include/external_msis.h b/include/external_msis.h index d6285456..764557c5 100644 --- a/include/external_msis.h +++ b/include/external_msis.h @@ -8,13 +8,13 @@ * \class Msis * * \brief create an interface to the msis model - * + * * MSIS is a neutral model of the atmosphere, written in - * fortran and provided by NRL. + * fortran and provided by NRL. * * \author Aaron Ridley * - * \date 2023/04/30 + * \date 2023/04/30 * **************************************************************/ @@ -27,20 +27,20 @@ class Msis { bool set_f107(precision_t f107in, precision_t f107ain); bool set_ap(precision_t apin); bool set_locations(arma_vec longitude, - arma_vec latitude, - arma_vec altitude); + arma_vec latitude, + arma_vec altitude); bool set_locations(arma_mat longitude, - arma_mat latitude, - arma_mat altitude); + arma_mat latitude, + arma_mat altitude); bool set_locations(arma_cube longitude, - arma_cube latitude, - arma_cube altitude); + arma_cube latitude, + arma_cube altitude); arma_vec get_vec(std::string value); arma_mat get_mat(std::string value); arma_cube get_cube(std::string value); bool is_valid_species(std::string value); bool is_ok(); - + private: int iYear, iDay; @@ -54,10 +54,10 @@ class Msis { arma_cube altKm; std::vector msis_results; - bool didChange = true; + bool didChange = true; json value_lookup; bool isCompiled; - + bool reset_interface_variable_sizes(); bool reset_results(); }; diff --git a/include/file_input.h b/include/file_input.h index 460a6fe6..ee127f7e 100644 --- a/include/file_input.h +++ b/include/file_input.h @@ -31,9 +31,9 @@ std::vector> read_csv(std::ifstream &file_ptr); \param csvLines a matrix of strings **/ json put_csv_in_json_w_name(std::vector> - csvLines); + csvLines); json put_csv_in_json_wo_name(std::vector> - csvLines); + csvLines); /************************************************************** @@ -46,8 +46,8 @@ std::vector> read_ssv(std::ifstream &file_ptr); /************************************************************** \brief Reads either a comma-separated time or series of lines describing time - format is either - y, m, d, h, m, s, ms + format is either + y, m, d, h, m, s, ms or y m diff --git a/include/grid.h b/include/grid.h index 908cdee6..0f7a79c7 100644 --- a/include/grid.h +++ b/include/grid.h @@ -7,21 +7,91 @@ #include #include "mpi.h" +// ---------------------------------------------------------------------------- +// This structure needs to be defined outside of the grid, since we can just +// pass this stuff to the solver. +// ---------------------------------------------------------------------------- + +struct cubesphere_chars { + // For convenience, store the grid size: + int64_t nXt, nYt, nGCs; + int64_t iXfirst_, iXlast_; + int64_t iYfirst_, iYlast_; + + // These are for Ronchi et al., JCP 124, 93-114, 1996 + arma_mat X, Y, Z, C, D, d; + // These are the only things that depend on altitude: + arma_cube dlx, dln, dS; + // In theory, the radius is just a 1D vector: + arma_vec R; + // xi is the LR direction + // nu is the UD direction + arma_mat xi, nu; + // for the equal-angle grid, we can just use these: + precision_t dxi, dnu; + arma_mat Apn, Apx, Atn, Atx; + arma_mat Axt, Axp, Ant, Anp; + + // These are for computing normals to the cell edges (horizontal) + arma_mat nXiLon; + arma_mat nXiLat; + arma_mat nNuLon; + arma_mat nNuLat; + arma_mat lat, lon; +}; + + // ---------------------------------------------------------------------------- // Grid class // ---------------------------------------------------------------------------- +struct interp_coef_t { + // The point is inside the cube of: + // [iRow, iRow+1], [iCol, iCol+1] [iAlt, iAlt+1] + uint64_t iRow; + uint64_t iCol; + uint64_t iAlt; + // The coefficients along row, column and altitude + precision_t rRow; + precision_t rCol; + precision_t rAlt; + // Whether the point is within this grid or not + bool in_grid; + // If this is set to true: + bool above_grid, below_grid; + // do interpolation in lat and lon, but extrapolate in altitude +}; + +struct grid_to_grid_t { + int64_t iProcTo; + int64_t nPts; + int64_t nPtsReceive; + std::vector interpCoefs; + std::vector valueToSend; + std::vector valueToReceive; +}; + class Grid { + public: + int iGridShape_ = -1; + // The index and coefficient used for interpolation + // Each point is processed by the function set_interpolation_coefs and stored + // in the form of this structure. + // If the point is out of the grid, in_grid = false and all other members are undefined -public: + std::vector gridToGridCoefs; + arma::Cube gridToGridMap; - // Armidillo Cube Versions: + // Armadillo Cube Versions: // Cell Center Coordinates arma_cube geoLon_scgc, geoX_scgc; arma_cube geoLat_scgc, geoY_scgc; arma_cube geoAlt_scgc, geoZ_scgc; arma_cube geoLocalTime_scgc; + // This is an array for testing things: + arma_cube test_scgc; + // Reference coordinate arma_cube refx_scgc, refy_scgc; @@ -61,13 +131,60 @@ class Grid { arma_cube g11_upper_Down, g12_upper_Down, g21_upper_Down, g22_upper_Down; arma_cube sqrt_g_Down; - // These define the magnetic grid: - // Armidillo Cube Versions: - arma_cube magLon_scgc, magX_scgc; + cubesphere_chars cubeC, cubeL, cubeD; + + // The magnetic latitude and altitude need to be defined better. This should be the angle between + // magnetic equator and the point, but sometimes it is invariant latitude. + // These define the magnetic grid (only defined for a dipole grid): + // The magnetic latitude is the angle between the magnetic equator and the point. arma_cube magLat_scgc, magY_scgc; + // This is the same as radius. arma_cube magAlt_scgc, magZ_scgc; + // These exist for all grid types: + // Invariant latitude is the magnetic latitude that the field line hits at the lowest altitude. + // This is basically the L-shell, but models want it expressed as latitude and not L-shell. + arma_cube magInvLat_scgc; + arma_cube magLon_scgc, magX_scgc; + // This is the angle from the sun, to the magnetic pole to the point. arma_cube magLocalTime_scgc; + // Dipole coordinates: + // Phi => Longitude + // P => L-shell + // Q => Distance along field line + arma_cube magP_scgc; + arma_cube magQ_scgc; + + // And the corners/edges for the magnetic grid: + arma_cube magLon_Left; + arma_cube magLon_Corner; + + arma_cube magLat_Down; + arma_cube magLat_Below; + arma_cube magLat_Corner; + + arma_cube magAlt_Down; + arma_cube magAlt_Below; + arma_cube magAlt_Corner; + + arma_cube magP_Corner; + arma_cube magQ_Corner; + arma_cube magInvLat_Corner; + + // Masks to either access the non-physical (ghost) cells, or ignore them - use with + // .elem()). Together they *should* hold the indices of all cells. + arma::uvec isTooLowCell, isPhysicalCell; + // (bool values whether altitude is valid) + arma_cube UseThisCell; + // Matrices whose elements denote the altitude index of the interiormost ghost cell + // in the k-up and k-down direction (altitude for geo grids, q for dipole). + arma_mat first_lower_gc, first_upper_gc; + precision_t altitude_lower_bc; + + // Whether to close field lines on dipole grid (Always false for geo grids) + bool IsClosed; + bool setNorthAsDown, setSouthAsDown; + // These are the locations of the magnetic poles: // ll -> lat, lon, radius independent arma_vec mag_pole_north_ll; @@ -100,23 +217,86 @@ class Grid { std::vector rad_unit_vcgc; arma_cube gravity_potential_scgc; std::vector gravity_vcgc; + arma_cube gravity_mag_scgc; std::vector cent_acc_vcgc; arma_cube sza_scgc; arma_cube cos_sza_scgc; + // dalt should be the altitudinal change along the third dimension, + // but is really the distance between grid points. arma_cube dalt_center_scgc; arma_cube dalt_lower_scgc; arma_cube dalt_ratio_scgc; arma_cube dalt_ratio_sq_scgc; + // dr is the radial change along the third dimension, which is + // primarily needed for building a hydrostatic solution + arma_cube dr_edge; + + // i, j, k are the three directions, so these are the grid spacing + // between the cell centers in each direction, aligned with the grid + arma_cube i_center_scgc; + arma_cube j_center_scgc; + arma_cube k_center_scgc; + + // edges are defined in the direction of the coordinate, shifted -half + // a cell in that direction. + arma_cube i_edge_scgc; + arma_cube j_edge_scgc; + arma_cube k_edge_scgc; + + // corners are defined as shifted by -half a cell in each direction + arma_cube i_corner_scgc; + arma_cube j_corner_scgc; + arma_cube k_corner_scgc; + + // native distances in native units: + arma_cube di_center_scgc; + arma_cube dj_center_scgc; + arma_cube dk_center_scgc; + + // native distance in meters + arma_cube di_center_m_scgc; + arma_cube dj_center_m_scgc; + arma_cube dk_center_m_scgc; + + // Gradients on the edges really only have to be between cells, so they + // can be defined at the interfaces (n-1 of them) + arma_cube di_edge; + arma_cube dj_edge; + arma_cube dk_edge; + // in meters: + arma_cube di_edge_m; + arma_cube dj_edge_m; + arma_cube dk_edge_m; + + // These are for stretched grids: + arma_cube di_ratio; + arma_cube di_ratio_sq; + arma_cube di_one_minus_r2; + arma_cube dj_ratio; + arma_cube dj_ratio_sq; + arma_cube dj_one_minus_r2; + arma_cube dk_ratio; + arma_cube dk_ratio_sq; + arma_cube dk_one_minus_r2; + arma_cube MeshCoefm2; arma_cube MeshCoefm1; arma_cube MeshCoefp0; arma_cube MeshCoefp1; arma_cube MeshCoefp2; + // This is for a one-sided 3rd order gradient for the bottom boundary: + + arma_cube MeshCoef1s3rdp1; + arma_cube MeshCoef1s3rdp2; + arma_cube MeshCoef1s3rdp3; + arma_cube MeshCoef1s3rdp4; + arma_cube MeshCoef1s3rdp5; + arma_cube dlon_center_scgc; arma_cube dlon_center_dist_scgc; @@ -127,47 +307,114 @@ class Grid { // Vector of dx dy of different altitudes arma_vec drefx, drefy; + /// These are switching to the LR and DU directions for generalized coords + /// They are also in radians + + arma_cube x_Center, y_Center; + arma_cube x_Left, y_Down; + + /// these are center-to-center distances in the LR (X) and DU (Y) directions: + arma_cube dx_Center, dy_Center; + /// need dx on the lower / upper edges, don't need them on the left/right + arma_cube dx_Down; + /// need dy on the left / right edges: + arma_cube dy_Left; + /// cell area (in radians^2) + arma_cube cell_area; + std::vector bfield_vcgc; arma_cube bfield_mag_scgc; std::vector bfield_unit_vcgc; - Grid(int nX_in, int nY_in, int nZ_in, int nGCs_in); + Grid(std::string gridtype); + void set_variable_sizes(); - int get_IsGeoGrid(); + bool get_IsGeoGrid(); + std::string get_gridtype(); bool get_HasBField(); - void set_IsGeoGrid(int value); + void set_IsGeoGrid(bool value); + void set_IsExperimental(bool value); + bool get_IsExperimental(); + + void set_IsDipole(bool value); + bool get_IsDipole(); + bool get_IsClosed(); int64_t get_nPointsInGrid(); int64_t get_nX(); int64_t get_nY(); int64_t get_nZ(); + int64_t get_nX(bool includeGCs); + int64_t get_nY(bool includeGCs); + int64_t get_nZ(bool includeGCs); int64_t get_nLons(); int64_t get_nLats(); int64_t get_nAlts(); + int64_t get_nLons(bool includeGCs); + int64_t get_nLats(bool includeGCs); + int64_t get_nAlts(bool includeGCs); + int64_t get_nGCs(); - void fill_grid(Planets planet); + bool get_HasXdim(); + bool get_HasYdim(); + bool get_HasZdim(); + bool get_Is0D(); + bool get_Is1Dx(); + bool get_Is1Dy(); + bool get_Is1Dz(); + + //void fill_grid(Planets planet); void correct_xy_grid(Planets planet); void calc_sza(Planets planet, Times time); void calc_gse(Planets planet, Times time); void calc_mlt(); + void calc_xyz(Planets planet); void calc_grid_spacing(Planets planet); void calc_alt_grid_spacing(); void calc_lat_grid_spacing(); void calc_long_grid_spacing(); + void calc_maglong_grid_spacing(); + void calc_i_grid_spacing(); + void calc_j_grid_spacing(); + void calc_k_grid_spacing(); + void fill_grid_radius(Planets planet); void calc_rad_unit(Planets planet); void calc_gravity(Planets planet); bool init_geo_grid(Quadtree quadtree, - Planets planet); + Planets planet); void create_sphere_connection(Quadtree quadtree); void create_sphere_grid(Quadtree quadtree); void create_cubesphere_connection(Quadtree quadtree); void create_cubesphere_grid(Quadtree quadtree); + + // These two go together, since one builds the angles and the + // other scales by the radius: + void init_cubesphere_grid(Quadtree quadtree, + arma_vec dr, + arma_vec du, + arma_vec ll, + precision_t left_off, + precision_t down_off, + cubesphere_chars &cubeX); + void scale_cube_by_radius(cubesphere_chars &cubeX); + + void convert_vector_xn_to_ll(arma_mat aXi, + arma_mat aNu, + arma_mat &aLon, + arma_mat &aLat, + cubesphere_chars grid); + void convert_vector_ll_to_xn(arma_mat aLon, + arma_mat aLat, + arma_mat &aXi, + arma_mat &aNu, + cubesphere_chars grid); + void create_altitudes(Planets planet); void fill_grid_bfield(Planets planet); bool read_restart(std::string dir); @@ -175,6 +422,34 @@ class Grid { void report_grid_boundaries(); void calc_cent_acc(Planets planet); + void create_dipole_connection(Quadtree quadtree); + + // Make mag-field grid: + bool init_dipole_grid(Quadtree quadtree_ion, Planets planet); + // Support functions: + void calc_dipole_grid_spacing(Planets planet); + + void calc_alt_dipole_grid_spacing(); + void calc_lat_dipole_grid_spacing(); + void calc_long_dipole_grid_spacing(); + void fill_field_lines(arma_vec baseLats, precision_t min_altRe, + precision_t Gamma, Planets planet, + bool isCorner); + void dipole_alt_edges(Planets planet, precision_t min_altRe); + // get the latitude spacing given the quadtree start & size, and the latitude limits + // extent: quadtree up + // origin: quadtree origin + // upper_lim: upper latitude limit (input) + // lower_lim: lower latitude limit (from min_apex) + // nLats: number of latitudes (nY) + // spacing_factor: (not supported yet), so always 1.0. Will adjust baselat spacing, eventually. + arma_vec baselat_spacing(precision_t extent, + precision_t origin, + precision_t upper_lim, + precision_t lower_lim, + // int16_t nLats, + precision_t spacing_factor); + // Update ghost cells with values from other processors void exchange(arma_cube &data, const bool pole_inverse); @@ -182,6 +457,7 @@ class Grid { bool IsLatLonGrid; bool IsCubeSphereGrid; + bool IsDipole; bool DoesTouchNorthPole; bool DoesTouchSouthPole; /// The processor to the East/Right/X+: @@ -192,17 +468,26 @@ class Grid { int iProcYp; /// The processor to the South/Down/Y-: int iProcYm; + // This is special, since message passing in the z direction will only be + // between closed magnetic field lines, so we don't need a +/- (p/m): + int iProcZ; + + bool isExchangeInitialized = false; arma_vec edge_Xp; arma_vec edge_Yp; arma_vec edge_Xm; arma_vec edge_Ym; + // again, z will only be in one + arma_vec edge_Z; int64_t iRoot; int64_t iRootXp; int64_t iRootXm; int64_t iRootYp; int64_t iRootYm; + // again, z will only be in one + int64_t iRootZ; struct messages_struct { int64_t iFace; @@ -216,8 +501,8 @@ class Grid { /// Variables needed for asynchronous message passing MPI_Request requests; - precision_t* buffer; - precision_t* rbuffer; + precision_t *buffer; + precision_t *rbuffer; // For cubesphere. these are needed for interpolation // when the cells go onto a different face: @@ -230,13 +515,13 @@ class Grid { bool gcInterpolationSet = false; messages_struct make_new_interconnection(int64_t iDir, - int64_t nVars, - int64_t iProc_to, - arma_vec edge_center, - bool IsPole, - bool DoReverseX, - bool DoReverseY, - bool XbecomesY); + int64_t nVars, + int64_t iProc_to, + arma_vec edge_center, + bool IsPole, + bool DoReverseX, + bool DoReverseY, + bool XbecomesY); bool send_one_face(int64_t iFace); bool send_one_var_one_face(int64_t iFace); @@ -255,7 +540,38 @@ class Grid { */ bool set_interpolation_coefs(const std::vector &Lons, const std::vector &Lats, - const std::vector &Alts); + const std::vector &Alts, + bool areLocsGeo = true, + bool areLocsIJK = true); + + /** + * \brief Set the interpolation coefficients + * \param Lons The longitude of points + * \param Lats The latitude of points + * \param Alts The altitude of points + * \pre This instance is an geo grid + * \pre Lons, Lats and Alts have the same size + * \return list of interpolation coefficients + */ + + std::vector get_interpolation_coefs( + const std::vector &Lons, + const std::vector &Lats, + const std::vector &Alts); + + /** + * \brief Set the interpolation coefficients for the dipole grid + * \param Lons The longitude of points + * \param Lats The latitude of points + * \param Alts The altitude of points + * \pre Lons, Lats and Alts have the same size + * \return true if the function succeeds, false if the instance is not a + * mag grid or the size of Lons, Lats and Alts are not the same. + */ + bool set_dipole_interpolation_coefs(const std::vector &Lons, + const std::vector &Lats, + const std::vector &Alts); + /** * \brief Create a map of geographic locations to data and do the interpolation * \param data The value at the positions of geoLon, geoLat, and geoAlt @@ -265,16 +581,33 @@ class Grid { * an empty vector if the data is not the same size as the geo grid. */ std::vector get_interpolation_values(const arma_cube &data) const; + std::vector get_interpolation_values(arma_cube data, + std::vector coefArray); private: - - int IsGeoGrid; + bool IsGeoGrid; bool HasBField; + bool IsExperimental; + bool IsMagGrid; + std::string gridType; int64_t nX, nLons; int64_t nY, nLats; int64_t nZ, nAlts; + // These logicals define the dimensionality of the grid: + bool Is0D = false; + bool Is1Dx = false; + bool Is1Dy = false; + bool Is1Dz = false; + bool Is2Dxy = false; + bool Is2Dxz = false; + bool Is2Dyz = false; + bool Is3D = false; + bool HasXdim = true; + bool HasYdim = true; + bool HasZdim = true; + int nGCs; // number of ghostcells // interpolation members @@ -316,41 +649,58 @@ class Grid { bool col_min_exclusive; bool col_max_exclusive; }; + // The struct representing the range of a dipole grid (in magnetic coordinates) + struct dipole_range { + precision_t lon_min; + precision_t lon_max; + precision_t dLon; + precision_t lat_min; + precision_t lat_max; + precision_t dLat; + precision_t alt_min; + precision_t alt_max; + }; + // Return the index of the last element that has altitude smaller than or euqal to the input + uint64_t search_altitude(const precision_t alt_in) const; // The index and coefficient used for interpolation // Each point is processed by the function set_interpolation_coefs and stored // in the form of this structure. // If the point is out of the grid, in_grid = false and all other members are undefined - struct interp_coef_t { - // The point is inside the cube of [iRow, iRow+1], [iCol, iCol+1], [iAlt, iAlt+1] - uint64_t iRow; - uint64_t iCol; - uint64_t iAlt; - // The coefficients along row, column and altitude - precision_t rRow; - precision_t rCol; - precision_t rAlt; - // Whether the point is within this grid or not - bool in_grid; - }; - - // Return the index of the last element that has altitude smaller than or euqal to the input - uint64_t search_altitude(const precision_t alt_in) const; + //struct interp_coef_t { + // // The point is inside the cube of [iRow, iRow+1], [iCol, iCol+1], [iAlt, iAlt+1] + // uint64_t iRow; + // uint64_t iCol; + // uint64_t iAlt; + // // The coefficients along row, column and altitude + // precision_t rRow; + // precision_t rCol; + // precision_t rAlt; + // // Whether the point is within this grid or not + // bool in_grid; + //}; // Calculate the range of a spherical grid void get_sphere_grid_range(struct sphere_range &sr) const; // Calculate the range of a cubesphere grid void get_cubesphere_grid_range(struct cubesphere_range &cr) const; + // Calculate the range of a dipole grid + void get_dipole_grid_range(struct dipole_range &dr) const; // Helper function for set_interpolation_coefs - void set_interp_coef_sphere(const sphere_range &sr, - const precision_t lon_in, - const precision_t lat_in, - const precision_t alt_in); - void set_interp_coef_cubesphere(const cubesphere_range &cr, - const precision_t lon_in, - const precision_t lat_in, - const precision_t alt_in); + struct interp_coef_t get_interp_coef_sphere(const sphere_range &sr, + const precision_t lon_in, + const precision_t lat_in, + const precision_t alt_in); + struct interp_coef_t get_interp_coef_cubesphere(const cubesphere_range &cr, + const precision_t lon_in, + const precision_t lat_in, + const precision_t alt_in); + // (note these are magnetic coordinates) + struct interp_coef_t get_interp_coef_dipole(const dipole_range &dr, + const precision_t lon_in, + const precision_t lat_in, + const precision_t alt_in); // Processed interpolation coefficients std::vector interp_coefs; @@ -373,4 +723,4 @@ class Grid { MPI_Comm grid_comm; }; -#endif // INCLUDE_GRID_H_ +#endif // INCLUDE_GRID_H_ diff --git a/include/indices.h b/include/indices.h index 0c58b216..1e1b6ba0 100644 --- a/include/indices.h +++ b/include/indices.h @@ -20,7 +20,7 @@ * \author Aaron Ridley * - * \date 2021/04/16 + * \date 2021/04/16 **************************************************************/ #include @@ -34,10 +34,10 @@ struct index_file_output_struct { /// number of times read in: int64_t nTimes; - + /// array of times that correspond to the values: std::vector times; - + /// number of variables read in: int nVars; @@ -62,9 +62,9 @@ void print_index_file_output_struct(index_file_output_struct contents); class Indices { -// ----------------------------------------------------------------------- -// Public functions and variables -// ----------------------------------------------------------------------- + // ----------------------------------------------------------------------- + // Public functions and variables + // ----------------------------------------------------------------------- public: @@ -88,10 +88,10 @@ class Indices { /************************************************************** \brief a series of functions that return the internal index number - In order to keep track of which index is which, the class uses + In order to keep track of which index is which, the class uses constants. These functions return these constants. The user doesn't really need to know about the constants, but they have to get the - constant (when reading the file, for example) and then provide that + constant (when reading the file, for example) and then provide that to the set index function. Conversely, we could create a bunch of set_ functions (such as the set_f107 function below). We figured that this minor inconvience is easier than making a bunch of set_ @@ -112,13 +112,17 @@ class Indices { int get_au_index_id(); int get_al_index_id(); + json get_all_indices(double time); + bool restart_file(std::string dir, bool DoRead, double time); + + /************************************************************** \brief Return the indices index of the variable name \param name the name of the variable to find the index for **/ - + int lookup_index_id(std::string name); - + /************************************************************** \brief This function sets the f107, does an 81 day ave, sets f107a too \param f107_contents contents from the f107 file (time, f107, etc.) @@ -134,9 +138,9 @@ class Indices { \param missing value for missing data **/ bool set_index(int index_id, - std::vector time, - std::vector values, - precision_t missing); + std::vector time, + std::vector values, + precision_t missing); /************************************************************** \brief set the index array into the indices class @@ -146,10 +150,10 @@ class Indices { \param missing value for missing data **/ bool set_index(std::string index_name, - std::vector timearray, - std::vector indexarray, - precision_t missing); - + std::vector timearray, + std::vector indexarray, + precision_t missing); + /************************************************************** \brief Perturbs the indices requested by user input **/ @@ -164,30 +168,44 @@ class Indices { **/ void perturb_index(int iIndex, int seed, json style, bool DoReport); + /************************************************************** + \brief Re-Perturbs the specific indices based on old values and the new value + \param iIndex which index to perturb + \param unperturbedValue unperturbed value (value read in at start)) + \param perturbedValue value that the code has now + \param newValue value that the restart index file contains + **/ + + void reperturb_index(int iIndex, + precision_t unperturbedValue, + precision_t perturbedValue, + precision_t newValue); + + /************************************************************** \brief The general function that returns the index value at the time \param time the time in seconds that the index is requested at \param the index to return (i.e., one of the constants defined above) **/ - precision_t get_index(double time, int index); + precision_t get_index(double time, int index, bool useNonperturbed = false); /************************************************************** * \brief Get the name of the indices at the specified index * \param iIndex which index to get name * \return The string of name if the function succeeds, empty string if iIndex is out of range **/ - std::string get_name(int iIndex); + std::string get_name(int iIndex); /************************************************************** \brief Return the number of the indices vector **/ int all_indices_array_size(); -// ----------------------------------------------------------------------- -// Private functions and variables -// ----------------------------------------------------------------------- + // ----------------------------------------------------------------------- + // Private functions and variables + // ----------------------------------------------------------------------- -private: + private: /// structure containing information about the specific index: struct index_time_pair { @@ -197,12 +215,17 @@ class Indices { /// a vector of values for the index: std::vector values; + std::vector originals; /// a vector of times for the values: std::vector times; /// the name of the index as a string: std::string name; + + bool didPerturb; + bool isAddPerturb; + bool isConstantPerturb; }; /// the vector that contains all of the indices vectors: diff --git a/include/init_mag_grid.h b/include/init_mag_grid.h new file mode 100644 index 00000000..415978a1 --- /dev/null +++ b/include/init_mag_grid.h @@ -0,0 +1,28 @@ +// Copyright 2020, the Aether Development Team (see doc/dev_team.md for members) +// Full license can be found in License.md + + +#ifndef INCLUDE_INIT_MAG_GRID_H_ +#define INCLUDE_INIT_MAG_GRID_H_ + +#include "aether.h" +#include "planets.h" +#include "grid.h" + +bool init_dipole_grid(Grid &mGrid, Planets planet); + +// Analytic solution to get from q,p dipole coords to r,theta +// q coordinate along b-field line +// p l-shell +// return (r,theta) +std::pair qp_to_r_theta(precision_t q, precision_t p); + +// convert mag to geographic +std::vector mag_to_geo(arma_cube magLon, + arma_cube magLat, + arma_cube magAlt, + Planets planet); + + +#endif // INCLUDE_INIT_GEO_GRID_H_ + diff --git a/include/inputs.h b/include/inputs.h index 7c1d94fc..793859ed 100644 --- a/include/inputs.h +++ b/include/inputs.h @@ -7,162 +7,762 @@ #include #include +/* + This is the input class for Aether. It handles all of the specification of + parameters and inputs into Aether. Some major features: + - Aether handles a lot of inputs and outputs in json and CSV files + - The settings variable is the main variable for controlling the settings + - The settings variable is a json (like a python dictionary) + - This class uses public "get" functions to access settings, which are private + - The get functions have a naming standard that depends on the structure of the json +*/ + class Inputs { -public: + public: + + int iVerbose; + int iVerboseProc; + int iTimingDepth; + + // ------------------------------ + // Grid inputs: + + struct grid_input_struct { + // Set the grid size (per block) + // nX is nLonsPerBlock or nXsPerBlock + // nY is nLatsPerBlock or nYsPerBlock + // nZ is nAlts or nZs + int64_t nX, nY, nZ; + + // min and max latitude to simulate: + precision_t lat_min, lat_max; + // min and max longitude to simulate: + precision_t lon_min, lon_max; + + // The shape of the grid can be specified: + // - "sphere", sets grid.iGridShape_ = iSphere_ + // - "cubesphere", sets grid.iGridShape_ = iCubesphere_ + // - "dipole", sets grid.iGridShape_ = iDipole_ + std::string shape; + + // Minimum altitude to simulate: + precision_t alt_min; + // Some grids allow the specification of the maximum altitude: + precision_t alt_max; + + // Can specify the delta-altitude in either km or in scale-heights. + // daltKm is used if there is a uniform grid + // daltScale (0-1, typical) is used non-uniform + precision_t daltKm, daltScale; + // if IsUniformAlt is false, the code uses a temperature profile to + // build an altitude profile of scale heights and uses these scale + // heights to build the grid. + bool IsUniformAlt; + // Only needed for Mag Field grid: + // min_apex (not used) and LatStretch is used + // as lat = min_lat + dlat where dlat = acos(cos(lat^stretch))^(1/stretch) + precision_t min_apex, LatStretch, FieldLineStretch, max_blat; + + // Some grid shapes allow specification of altitudes based on a file: + std::string alt_file; + }; + + grid_input_struct get_grid_inputs(std::string gridtype); + + + + + /********************************************************************** + \brief + \param + **/ Inputs() {} + + /********************************************************************** + \brief + \param + **/ Inputs(Times &time); + + /********************************************************************** + \brief + \param + **/ int read(Times &time); + + /********************************************************************** + \brief + \param + **/ bool read_inputs_json(Times &time); + + /********************************************************************** + \brief + \param + **/ bool set_verbose(json in); + + // -------------------------------------------------------------------- + // get functions: + // - These functions offer access to specific parts of the settings json. + // - They call the general functions that check whether the key(s) exists. + // - If the key does not exist, an error flag (in report) is set. + // - + // -------------------------------------------------------------------- + + // --------------------- + // Debugging information + // --------------------- + + /********************************************************************** + \brief returns settings["Debug"]["iVerbose"] + \param none + **/ int get_verbose(); + + /********************************************************************** + \brief returns settings["Debug"]["iProc"] + \param none + **/ int get_verbose_proc(); - precision_t get_dt_euv(); - bool get_include_photoelectrons(); + + /********************************************************************** + \brief returns settings["Debug"]["dt"] + \param none + **/ precision_t get_dt_report(); + + // --------------------- + // Output information + // --------------------- + + + /********************************************************************** + \brief returns the size of settings["Outputs"]["type"] + \param none + **/ precision_t get_n_outputs(); + + /********************************************************************** + \brief returns settings["Outputs"]["dt"][iOutput] + \param iOutput int specifying which output file type to report on + **/ precision_t get_dt_output(int iOutput); + + /********************************************************************** + \brief returns settings["Outputs"]["type"][iOutput] + \param iOutput int specifying which output file type to report on + **/ std::string get_type_output(int iOutput); + + /********************************************************************** + \brief returns settings["Euv"]["dt"] + \param none + **/ + precision_t get_dt_euv(); + + /********************************************************************** + \brief returns settings["Euv"]["IncludePhotoElectrons"] + \param none + **/ + bool get_include_photoelectrons(); + + + /********************************************************************** + \brief returns settings["Electrodynamics"]["DiffuseAurora"] + \param none + **/ std::string get_diffuse_auroral_model(); + + /********************************************************************** + \brief returns settings[" + \param + **/ std::string get_potential_model(); + + /********************************************************************** + \brief returns settings[" + \param + **/ std::string get_electrodynamics_dir(); + + /********************************************************************** + \brief returns settings[" + \param + **/ std::string get_electrodynamics_file(); + + /********************************************************************** + \brief returns settings[" + \param + **/ std::string get_electrodynamics_north_file(); + + /********************************************************************** + \brief returns settings[" + \param + **/ std::string get_electrodynamics_south_file(); + + /********************************************************************** + \brief returns settings[" + \param + **/ precision_t get_euv_heating_eff_neutrals(); + + /********************************************************************** + \brief returns settings[" + \param + **/ std::string get_euv_model(); + + /********************************************************************** + \brief returns settings[" + \param + **/ std::string get_euv_file(); + + /********************************************************************** + \brief returns settings[" + \param + **/ + std::string get_euv_fismfile(); + + /********************************************************************** + \brief returns settings[" + \param + **/ bool get_euv_douse(); + + /********************************************************************** + \brief returns settings[" + \param + **/ std::string get_aurora_file(); + + /********************************************************************** + \brief returns settings[" + \param + **/ std::string get_chemistry_file(); + + /********************************************************************** + \brief returns settings[" + \param + **/ std::string get_indices_lookup_file(); + + /********************************************************************** + \brief returns settings[" + \param + **/ std::vector get_omniweb_files(); + + /********************************************************************** + \brief returns settings[" + \param + **/ int get_number_of_omniweb_files(); + + /********************************************************************** + \brief returns settings[" + \param + **/ std::string get_f107_file(); + + /********************************************************************** + \brief returns settings[" + \param + **/ std::string get_planet(); + + /********************************************************************** + \brief returns settings[" + \param + **/ std::string get_planetary_file(); + + /********************************************************************** + \brief returns settings[" + \param + **/ std::string get_planet_species_file(); + + /********************************************************************** + \brief returns settings[" + \param + **/ std::string get_collision_file(); + + /********************************************************************** + \brief returns settings[" + \param + **/ bool get_do_calc_bulk_ion_temp(); + + /********************************************************************** + \brief returns settings[" + \param + **/ precision_t get_eddy_coef(); + + /********************************************************************** + \brief returns settings[" + \param + **/ precision_t get_eddy_bottom(); + + /********************************************************************** + \brief returns settings[" + \param + **/ precision_t get_eddy_top(); + + /********************************************************************** + \brief returns settings[" + \param + **/ bool get_use_eddy_momentum(); + + /********************************************************************** + \brief returns settings[" + \param + **/ bool get_use_eddy_energy(); + + /********************************************************************** + \brief returns settings[" + \param + **/ std::string get_bfield_type(); + + /********************************************************************** + \brief returns settings[" + \param + **/ bool get_do_restart(); + + /********************************************************************** + \brief returns settings[" + \param + **/ std::string get_restartout_dir(); + + /********************************************************************** + \brief returns settings[" + \param + **/ std::string get_restartin_dir(); + + /********************************************************************** + \brief returns settings[" + \param + **/ precision_t get_dt_write_restarts(); + + /********************************************************************** + \brief returns settings[" + \param + **/ int get_original_seed(); + + /********************************************************************** + \brief returns settings[" + \param + **/ int get_updated_seed(); + + /********************************************************************** + \brief returns settings[" + \param + **/ void set_seed(int seed); + + /********************************************************************** + \brief returns settings[" + \param + **/ bool write_restart(); - json get_perturb_values(); + + /********************************************************************** + \brief returns settings[" + \param + **/ + json get_perturb_values(); + + /********************************************************************** + \brief returns settings[" + \param + **/ bool get_do_lat_dependent_radius(); + + /********************************************************************** + \brief returns settings[" + \param + **/ bool get_do_J2(); + + /********************************************************************** + \brief returns settings[" + \param + **/ bool get_check_for_nans(); + + /********************************************************************** + \brief returns settings[" + \param + **/ bool get_nan_test(); + + /********************************************************************** + \brief returns settings[" + \param + **/ std::string get_nan_test_variable(); - + + /********************************************************************** + \brief returns settings[" + \param + **/ bool get_is_cubesphere(); + /********************************************************************** + \brief returns settings[" + \param + **/ bool get_NO_cooling(); + + /********************************************************************** + \brief returns settings[" + \param + **/ bool get_O_cooling(); + /********************************************************************** + \brief returns settings["Sources"]["Ions"]["IncludePhotoElectronHeating"] + \param none + **/ + bool get_do_photoelectron_heating(); + + /********************************************************************** + \brief returns settings["Sources"]["Ions"]["IncludeIonizationHeating"] + \param none + **/ + bool get_do_ionization_heating(); + + /********************************************************************** + \brief returns settings["Sources"]["Ions"]["IncludeElectronIonCollisionalHeating"] + \param none + **/ + bool get_do_electron_ion_collisional_heating(); + + /********************************************************************** + \brief returns settings["Sources"]["Ions"]["IncludeElectronNeutralElasticCollisionalHeating"] + \param none + **/ + bool get_do_electron_neutral_elastic_collisional_heating(); + + /********************************************************************** + \brief returns settings["Sources"]["Ions"]["IncludeElectronNeutralInelasticCollisionalHeating"] + \param none + **/ + bool get_do_electron_neutral_inelastic_collisional_heating(); + + + /********************************************************************** + \brief returns settings["Sources"]["Ions"]["IncludeThermoelectricHeating"] + \param none + **/ + bool get_do_thermoelectric_heating(); + + /********************************************************************** + \brief returns settings[" + \param + **/ + bool get_use_centripetal(); + + /********************************************************************** + \brief returns settings[" + \param + **/ + bool get_use_coriolis(); + + /********************************************************************** + \brief returns settings[" + \param + **/ bool get_cent_acc(); + /********************************************************************** + \brief returns settings[" + \param + **/ std::string get_student_name(); + + /********************************************************************** + \brief returns settings[" + \param + **/ bool get_is_student(); - + + + /********************************************************************** + \brief returns settings[" + \param + **/ json get_initial_condition_types(); + + /********************************************************************** + \brief returns settings[" + \param + **/ json get_boundary_condition_types(); + + /********************************************************************** + \brief returns settings[" + \param + **/ std::string get_advection_neutrals_vertical(); + std::string get_advection_neutrals_horizontal(); + bool get_advection_neutrals_bulkwinds(); + bool get_advection_neutrals_implicitfriction(); - // ------------------------------ - // Grid inputs: + std::string get_advection_ions_along(); - struct grid_input_struct { - std::string alt_file; - bool IsUniformAlt; - precision_t alt_min; - precision_t dalt; - precision_t lat_min; - precision_t lat_max; - precision_t lon_min; - precision_t lon_max; - }; + /********************************************************************** + \brief returns settings[" + \param + **/ + int get_nLons(std::string gridtype); - grid_input_struct get_grid_inputs(); + /********************************************************************** + \brief returns settings[" + \param + **/ + int get_nLats(std::string gridtype); - int get_nLonsGeo(); - int get_nLatsGeo(); - int get_nAltsGeo(); + /********************************************************************** + \brief returns settings[" + \param + **/ + int get_nAlts(std::string gridtype); - int get_nBlocksLonGeo(); - int get_nBlocksLatGeo(); + /********************************************************************** + \brief returns settings[gridtype, "shape"] + \param + **/ + std::string get_grid_shape(std::string gridtype); + /********************************************************************** + \brief returns settings[" + \param + **/ int get_nMembers(); - int iVerbose; - int iVerboseProc; - int iTimingDepth; - + /********************************************************************** + \brief returns settings[" + \param + **/ std::string get_logfile(); + + /********************************************************************** + \brief returns settings[" + \param + **/ + std::string get_logfile(int64_t iLog); + + /********************************************************************** + \brief returns settings[" + \param + **/ std::vector get_species_vector(); + + /********************************************************************** + \brief returns settings[" + \param + **/ bool get_logfile_append(); + + /********************************************************************** + \brief returns settings[" + \param + **/ precision_t get_logfile_dt(); // Satellites + + /********************************************************************** + \brief returns settings[" + \param + **/ std::vector get_satellite_files(); + + /********************************************************************** + \brief returns settings[" + \param + **/ std::vector get_satellite_names(); + + /********************************************************************** + \brief returns settings[" + \param + **/ std::vector get_satellite_dts(); - + + /********************************************************************** + \brief returns settings[" + \param + **/ + json get_tests(); + // General get_setting functions with error checks: + + /********************************************************************** + \brief + \param + **/ std::string get_setting_str(std::string key1); + + /********************************************************************** + \brief + \param + **/ std::string get_setting_str(std::string key1, std::string key2); + + /********************************************************************** + \brief + \param + **/ std::string get_setting_str(std::string key1, std::string key2, std::string key3); + + /********************************************************************** + \brief + \param + **/ json get_setting_json(std::string key1); + + /********************************************************************** + \brief + \param + **/ json get_setting_json(std::string key1, std::string key2); + + /********************************************************************** + \brief + \param + **/ bool get_setting_bool(std::string key1); + + /********************************************************************** + \brief + \param + **/ bool get_setting_bool(std::string key1, std::string key2); + + /********************************************************************** + \brief + \param + **/ bool get_setting_bool(std::string key1, std::string key2, std::string key3); + + /********************************************************************** + \brief + \param + **/ precision_t get_setting_float(std::string key1); + + /********************************************************************** + \brief + \param + **/ precision_t get_setting_float(std::string key1, std::string key2); + + /********************************************************************** + \brief + \param + **/ int64_t get_setting_int(std::string key1); + + /********************************************************************** + \brief + \param + **/ int64_t get_setting_int(std::string key1, std::string key2); + + /********************************************************************** + \brief + \param + **/ std::vector get_setting_intarr(std::string key1); + + /********************************************************************** + \brief + \param + **/ + std::vector get_setting_intarr(std::string key1, std::string key2); + + /********************************************************************** + \brief + \param + **/ std::vector get_setting_timearr(std::string key1); // Check settings functions: + + /********************************************************************** + \brief + \param + **/ bool check_settings(std::string key1); + + /********************************************************************** + \brief + \param + **/ bool check_settings(std::string key1, std::string key2); + + /********************************************************************** + \brief + \param + **/ std::string check_settings_str(std::string key1); + + /********************************************************************** + \brief + \param + **/ std::string check_settings_str(std::string key1, std::string key2); + + /********************************************************************** + \brief + \param + **/ precision_t check_settings_pt(std::string key1, std::string key2); - + /********************************************************************** \brief Check to see if internal state of class is ok **/ - bool is_ok(); - -private: + private: + + // This is the main variable that contains all of the settings in Aether: json settings; - + + // These are a bunch of misc strings that should go away: std::string euv_file = "UA/inputs/euv.csv"; std::string aurora_file = "UA/inputs/aurora_earth.csv"; std::string chemistry_file = "UA/inputs/chemistry_earth.csv"; @@ -191,7 +791,7 @@ class Inputs { std::string restart_in_directory = "UA/restartIn"; bool DoRestart; - + precision_t dt_euv; precision_t dt_report; @@ -200,13 +800,16 @@ class Inputs { int nAltsGeo; int updated_seed; - + /// An internal variable to hold the state of the class bool isOk; std::vector missing_settings; }; +// This makes the input variable a global variable, so it can be used +// without passing it to every function. This is done because the +// input class is needed by almost all functions within Aether extern Inputs input; #endif // INCLUDE_INPUTS_H_ diff --git a/include/ions.h b/include/ions.h index 17a0adea..0a19f6e0 100644 --- a/include/ions.h +++ b/include/ions.h @@ -7,6 +7,20 @@ #include #include +/************************************************************** + * \class Ions + * + * \brief Defines the ion states + * + * The Ion class defines the ion states as well as a bunch + * of derived states and source/loss terms. + * + * \author Aaron Ridley + * + * \date 2021/03/28 + * + **************************************************************/ + class Ions { public: @@ -15,65 +29,183 @@ class Ions { // species of ion. We will then have a vector of these species. int64_t nSpecies = 8; - + struct species_chars { + + /// Name of the species std::string cName; + + /// Mass of the species precision_t mass; + + /// Charge of the species int charge; - int DoAdvect; + /// Vibrational levels of the species + int vibe; + /// Advect or don't advect the species + bool DoAdvect; + + /// Ion neutral collision frequncies (calculated): + std::vector nu_ion_neutral_vcgc; + + /// Ion - Neutral collision frequency coeffient (non-resonant): std::vector nu_ion_neutral_coef; + + /// Whether the collision frequency is resonant of not: std::vector nu_is_resonant; - std::vector nu_ion_ion; - std::vector nu_ion_electron; + /// A bunch of parameters for calculating resonant collisions: std::vector nu_in_res_temp_min; std::vector nu_in_res_coef1; std::vector nu_in_res_coef2; std::vector nu_in_res_tn_frac; std::vector nu_in_res_ti_frac; - std::vector nu_ion_neutral_vcgc; - + /// Ion - Ion Collision frequencies: + std::vector nu_ion_ion; + + /// Ion - Electron collision frequencies: + std::vector nu_ion_electron; + // Sources and Losses: + /// Number density of species (/m3) arma_cube density_scgc; + arma_cube newDensity_scgc; + + /// For all below: + /// Index 0 = x/longitudinal component of velocity + /// Index 1 = y/latitudinal + /// Index 2 = z/altitudinal/along the field line + + /// Parallel velocity of species (m/s) std::vector par_velocity_vcgc; + + /// Perpendicular velocity of the species (m/s) std::vector perp_velocity_vcgc; + /// Total velocity of the species (m/s) + /// - this is the parallel + perpendicular together + /// and can be used on the spherical grid for advection + std::vector velocity_vcgc; + + /// Temperature of the given species: arma_cube temperature_scgc; + + /// Conduction source term: arma_cube conduction_scgc; + /// Ionization source term: arma_cube ionization_scgc; - + /// Total chemical sources and losses: arma_cube sources_scgc; arma_cube losses_scgc; + + // Heating terms: + /// Bulk collisional heating with neutrals and electrons (K/s) + arma_cube heating_neutral_friction_scgc; + arma_cube heating_electron_friction_scgc; + + /// Bulk collisional heating with neutrals and electrons (K/s) + arma_cube heating_neutral_heat_transfer_scgc; + arma_cube heating_electron_heat_transfer_scgc; + + /// Total heating sources + arma_cube heating_sources_total; + + /// Specific heat (constant volume): + arma_cube Cv_scgc; + + /// Heat Conduction: + arma_cube lambda; + }; // bulk quantities (states): + /// Bulk Density, which is the electron density (/m3): arma_cube density_scgc; + + /// Bulk velocity (m/s): std::vector velocity_vcgc; + + /// Bulk Temperature (K): arma_cube temperature_scgc; + + /// Bulk conduction term for the ions arma_cube conduction_scgc; + + /// Electron temperature arma_cube electron_temperature_scgc; + /// Bulk mass density of the ions + arma_cube rho_scgc; + + /// Mean major mass of the ions: + arma_cube mean_major_mass_scgc; + + /// cMax is the sound speed + speed in each direction: + std::vector cMax_vcgc; + + /// Bulk sound speed of the ions: + arma_cube sound_scgc; + + /// Bulk gamma of the ions: + arma_cube gamma_scgc; + // This is the vector that will contain all of the different species: std::vector species; + // Heating terms: + /// Bulk collisional heating with neutrals and electrons (K/s) + arma_cube heating_neutral_friction_scgc; + arma_cube heating_electron_friction_scgc; + + /// Bulk collisional heating with neutrals and electrons (K/s) + arma_cube heating_neutral_heat_transfer_scgc; + arma_cube heating_electron_heat_transfer_scgc; + + /// Total heating sources + arma_cube heating_sources_total; + + /// Specific heat (constant volume): + arma_cube Cv_scgc; + + /// Heat Conduction (bulk): + arma_cube lambda; + // Electrodynamics: + /// Electric potential: arma_cube potential_scgc; + /// Electric field: std::vector efield_vcgc; + /// E x B drift velocity (electron velocity): std::vector exb_vcgc; + /// Energy flux of diffuse electron aurora (mW/m2, tbc): arma_mat eflux; + /// Average energy of diffuse electron aurora (keV, tbc): arma_mat avee; + // Some variables that we are going to use in calc_ion_v: + std::vector gravity_vcgc; + std::vector wind_acc; + std::vector total_acc; + std::vector efield_acc; + std::vector a_par; + std::vector a_perp; + std::vector a_x_b; + std::vector grad_Pi_plus_Pe; + arma_cube rho, nuin, nuin_sum, Nie, sum_rho; + arma_cube top, bottom; + + /// Number of species to advect: int nSpeciesAdvect; - + /// IDs of species to advect: std::vector species_to_advect; - + // names and units const std::string density_name = "Neutral Bulk Density"; const std::string density_unit = "/m3"; @@ -88,28 +220,251 @@ class Ions { const std::string potential_name = "Potential"; const std::string potential_unit = "Volts"; - - // ------------------------------ + + // -------------------------------------------------------------------- // Functions: - Ions(Grid grid, Planets planet); - species_chars create_species(Grid grid); + /********************************************************************** + \brief Initialize the ions + \param grid The grid to define the ions on + \param planet contains information about the species to simulate + **/ + Ions(Grid &grid, Planets planet); + + /********************************************************************** + \brief Creates the variables within the species_chars structure + \param grid The grid to define the ions on + **/ + species_chars create_species(Grid &grid); + + /********************************************************************** + \brief + \param planet contains information about the species to simulate + **/ int read_planet_file(Planets planet); - void init_ion_temperature(Neutrals neutrals, Grid grid); + + /********************************************************************** + \brief Initialize the ion temperature (to the neutral temperature) + \param neutrals the neutral class to grab the temperature from + \param grid The grid that the ions are defined on + **/ + void init_ion_temperature(Neutrals neutrals, Grid &grid); + + /********************************************************************** + \brief Sets the floor of the ion densities, just in case! + \param none + **/ void set_floor(); + + /********************************************************************** + \brief Sum the ion component densities to calculate the electron density + \param none + **/ void fill_electrons(); - int get_species_id(std::string name); - void calc_efield(Grid grid); - void calc_exb_drift(Grid grid); - void calc_ion_drift(Neutrals neutrals, - Grid grid, + + /********************************************************************** + \brief Calculates the sound speed of the ions + \param none + **/ + void calc_sound_speed(); + + /********************************************************************** + \brief Calculates cMax of the ions + \param none + **/ + void calc_cMax(); + + /********************************************************************** + \brief Calculate the individual and bulk specific heats + **/ + void calc_specific_heat(); + + /********************************************************************** + \brief Calculate the individual and bulk thermal conductivities + **/ + void calc_lambda(); + + /********************************************************************** + \brief Sets the boundary conditions of the ions + \param grid The grid that the ions are defined on + \param time The time class to get dt and the current time + \param indices The indices class to get different indices that may be needed + **/ + bool set_bcs(Grid &grid, Times time, Indices indices); + + /********************************************************************** + \brief Sets the upper boundary conditions for the ions + \param grid The grid that the ions are defined on + **/ + bool set_upper_bcs(Grid &grid); + + /********************************************************************** + \brief Sets the lower boundary condition for the ions + \param grid The grid that the ions are defined on + \param time The time class to get dt and the current time + \param indices The indices class to get different indices that may be needed + **/ + bool set_lower_bcs(Grid &grid, Times time, Indices indices); + + /********************************************************************** + \brief Advect the ions along the 3rd dimension (could be altitude) + \param grid The grid that the ions are defined on + \param time The time class to get dt and the current time + **/ + bool advect_vertical(Grid &grid, Times time); + + /********************************************************************** + \brief Get the ID of the ion species with the given name + \param name a string that describes the species + **/ + int get_species_id(const std::string &name)const; + + /********************************************************************** + \brief Calculates the electric field + \param grid The grid that the ions are defined on + **/ + void calc_efield(Grid &grid); + + /********************************************************************** + \brief Calculates the E x B drift + \param grid The grid that the ions are defined on + **/ + void calc_exb_drift(Grid &grid); + + /********************************************************************** + \brief Calculate the ion drift + \param neutrals these are needed for the collision terms + \param grid The grid that the ions are defined on + \param dt the delta-t for the current time + **/ + void calc_ion_drift(Neutrals &neutrals, + Grid &grid, precision_t dt); + + /********************************************************************** + \brief Calculate the ion + electron pressure gradient + \param iIon which ion to act upon + \param grid this is the grid to solve the equation on + **/ std::vector calc_ion_electron_pressure_gradient(int64_t iIon, - Grid grid); - void calc_ion_temperature(Neutrals neutrals, Grid grid, Times time); - void calc_electron_temperature(Neutrals neutrals, Grid grid); - bool check_for_nonfinites(); + Grid grid); + + /********************************************************************** + \brief Calculates the ion temperature(s) on the given grid + \param neutrals these are needed for the collision terms + \param grid this is the grid to solve the equation on + \param time the time class to know dt + **/ + void calc_ion_temperature(const Neutrals &neutrals, Grid &grid, Times time); + + /********************************************************************** + \brief Calculates the electron temperature on the given grid + \param neutrals these are needed for the collision terms + \param grid this is the grid to solve the equation on + \param time the time class to know dt + **/ + void calc_electron_temperature(Neutrals neutrals, Grid &grid, Times time); + + /********************************************************************** + /// @brief Calculate epsilon + /// @details intermediate variable used in photoelectron & ionization heating + /// From (Smithro & Solomon, 2008). + /// @param neutrals + /// @return epsilon + **/ + arma_cube calc_epsilon(Neutrals &neutrals); + + /********************************************************************** + \brief Calculates photoelectron heating + \details Based on (Swartz & Nisbet, 1972) & (Smithro & Solomon, 2008) + Uses equations 9-12 from (Zhu & Ridley, 2016) + https://doi.org/10.1016/j.jastp.2016.01.005 + \param epsilon + \return Qphe + **/ + arma_cube calc_photoelectron_heating(arma_cube epsilon); + + /********************************************************************** + \brief Calculates auroral heating + \details NOTE: in GITM this is solved separately for ion precipitation & auroral + ionization. In Aether these are both in ions.species[iIon].ionization_scgc... + \param epsilon + \return Qaurora + **/ + arma_cube calc_ionization_heating(arma_cube epsilon); + + /********************************************************************** + \brief Calculates electron-ion (elastic) collisional heating + \details From Schunk and Nagy 2009, and Bei-Chen Zhang and Y. Kamide 2003 + - This differs slightly from the GITM implementation, which assumes several ion species are present. + Instead, here we use each ion species for the sum. + - electon-ion collision frequency (from Schunk and Nagy 2009) = 5.45E-5 + - This is capable of handling BOTH the bulk & individual ion temperatures + \return vector + **/ + std::vector calc_electron_ion_collisions(); + + /********************************************************************** + \brief Calculates electron-neutral elastic collisional heating + \details From Schunk and Nagy 2009 + \param neutrals + \return vector + **/ + std::vector calc_electron_neutral_elastic_collisions( + Neutrals &neutrals); + + /********************************************************************** + \brief Calculates the electron-neutral inelastic collisional heating + \details From Schunk and Nagy 2009 pages 277, 282. + This includes N2, O2 rotation, fine structure, O(1D) exitation & vibration, N2 vibration. + See equation 15 from (Zhu, Ridley, Deng, 2016) https://doi.org/10.1016/j.jastp.2016.01.005 + \param neutrals + \return vector + **/ + std::vector calc_electron_neutral_inelastic_collisions( + Neutrals &neutrals); + + /********************************************************************** + \brief Calculate the thermoelectric current (same at all altitudes) + \details Use eq. 6 of https://doi.org/10.1016/j.jastp.2016.01.005 + - Since we do not know e- parallel velocity, the dipole needs to do it this way too. + \param grid + \return arma_mat JParaAlt + **/ + arma_mat calc_thermoelectric_current(Grid &grid); + + /********************************************************************** + \brief Check all of the variables for nonfinites, such as nans + \param none + **/ + bool check_for_nonfinites(std::string location); + + /********************************************************************** + \brief Run through a test of an arma_cube to see if it contains nans + \param variable this is the variable to check + **/ void nan_test(std::string variable); - bool restart_file(std::string dir, bool DoRead); + + /********************************************************************** + \brief Read or write to the restart file + \param dir the directory to read or write from/to + \param DoRead whether to read (true) or write (false) + **/ + bool restart_file(std::string dir, std::string cGridtype, bool DoRead); + + /********************************************************************** + \brief Exchange messages between processors + \param grid The grid to define the ions on + **/ + // bool exchange(Grid &grid); + bool exchange_old(Grid &grid); + + /********************************************************************** + \brief Vertical advection solver - Rusanov + \param grid The grid to define the neutrals on + \param time contains information about the current time + **/ + void solver_vertical_rusanov(Grid &grid, Times time); + }; #endif // INCLUDE_IONS_H_ diff --git a/include/logfile.h b/include/logfile.h index 56620c94..f413a209 100644 --- a/include/logfile.h +++ b/include/logfile.h @@ -5,7 +5,7 @@ #define INCLUDE_LOGFILE_H_ /************************************************************** - * + * * logfile.h: * * Write the logfile @@ -19,7 +19,7 @@ /** * The class Satellite is used to track the satellites * Given any time, the user can obtain the geographic location of the satellite - * + * * ASSUMPTION : The satellite csv layout is the same as the following * year mon day hr min sec lon lat alt x y z vx vy vz * (int) (int) (int) (int) (int) (int) (degree) (degree) (km) (km) (km) (km) (km/s) (km/s) (km/s) @@ -27,11 +27,11 @@ class Satellite { -public: + public: /** * \brief Initialize the satellite class - * The name of the satellite is not allowed to have any characters which can + * The name of the satellite is not allowed to have any characters which can * terminate the read of a string including white space' ', endline'\n', and '\t' * Different satellites must have different names (not only input file names) * \param csv_in The path to the satellite csv file @@ -69,7 +69,7 @@ class Satellite { // DEBUG void print(); -private: + private: // The name of the satellite std::string name; @@ -93,15 +93,15 @@ class Satellite { class Logfile { -public: + public: /** * \brief Initialize the Logfile. * The logfile will output all indicies and specified neutrals and ions * every dt time. */ - Logfile(Indices &indices); - + Logfile(Indices &indices, int64_t iLog); + /** * \brief Close the file stream if not append */ @@ -117,7 +117,7 @@ class Logfile { Grid &gGrid, Times &time); -private: + private: // The name of logfile std::string logfileName; @@ -133,7 +133,7 @@ class Logfile { bool doAppend; // A randomly chosen point for test - std::vector lla {2,2,2}; + std::vector lla {2, 2, 2}; }; #endif // INCLUDE_LOGFILE_H_ diff --git a/include/neutrals.h b/include/neutrals.h index be0c0a01..5d96b473 100644 --- a/include/neutrals.h +++ b/include/neutrals.h @@ -11,7 +11,7 @@ * \class Neutrals * * \brief Defines the neutral states - * + * * The Neutrals class defines the neutrals states as well as a bunch * of derived states and source/loss terms. The initial temperature * structure as well as the lower boundary densities can be set @@ -19,7 +19,7 @@ * * \author Aaron Ridley * - * \date 2021/03/28 + * \date 2021/03/28 * **************************************************************/ @@ -47,12 +47,12 @@ class Neutrals { precision_t vibe; /// Advect this species? (1 = yes, 0 = no) - int DoAdvect; + bool DoAdvect; /// Number density of species (/m3) arma_cube density_scgc; arma_cube newDensity_scgc; - + /// Velocity of each species (m/s). For all below: /// Index 0 = longitudinal component of velocity /// Index 1 = latitudinal @@ -60,18 +60,23 @@ class Neutrals { std::vector velocity_vcgc; std::vector newVelocity_vcgc; - /// Acceleration of each species (m/s^2) + /// Acceleration of each species (m/s^2) due to friction term std::vector acc_neutral_friction; - + + /// Coefficient for the friction term (sum of friction coefs with others) + arma_cube neutral_friction_coef; + /// Acceleration of each species based on Eddy contribution. /// Only in vertical direction. arma_cube acc_eddy; - + /// Acceleration of each species due to ion drag. std::vector acc_ion_drag; - + /// concentration (density of species / total density) arma_cube concentration_scgc; + // mass concentration (mass * density of species / rho) + arma_cube mass_concentration_scgc; /// Diffusion through other neutral species: std::vector diff0; @@ -99,7 +104,7 @@ class Neutrals { std::vector iEuvPeiId_; /// Which ion species results from the ionization? std::vector iEuvPeiSpecies_; - + int nAuroraIonSpecies; std::vector iAuroraIonSpecies_; float Aurora_Coef; @@ -122,7 +127,7 @@ class Neutrals { /// Chemistry source rate (/m3/s) arma_cube sources_scgc; - + /// Chemistry loss rate (/m3/s) arma_cube losses_scgc; @@ -140,7 +145,7 @@ class Neutrals { /// sound speed + abs(bulk velocity (m/s)) std::vector cMax_vcgc; - + /// bunk temperature (K) arma_cube temperature_scgc; arma_cube newTemperature_scgc; @@ -169,7 +174,10 @@ class Neutrals { /// Eddy Diffusion arma_cube kappa_eddy_scgc; - /// O cooling + /// Viscosity + arma_cube viscosity_scgc; + + /// O cooling arma_cube O_cool_scgc; /// NO cooling @@ -183,6 +191,15 @@ class Neutrals { // Source terms: + // Bulk acceleration due to collisions with ions: + std::vector acc_ion_collisions; + + // Bulk acceleration due to coriolis + std::vector acc_coriolis; + + // Total bulk acceleration + std::vector acc_sources_total; + /// Bulk neutral thermal conduction temperature change rate (K/s) arma_cube conduction_scgc; @@ -192,6 +209,15 @@ class Neutrals { /// Bulk neutral chemical heating temperatuare change (K/s) arma_cube heating_chemical_scgc; + // Bulk neutral collisional heating with ions (K/s) + arma_cube heating_ion_friction_scgc; + + // Bulk neutral collisional heating with ions (K/s) + arma_cube heating_ion_heat_transfer_scgc; + + // Total heating sources + arma_cube heating_sources_total; + /// Nuetral gas direct absorption heating efficiency (~5%) precision_t heating_efficiency; @@ -199,10 +225,11 @@ class Neutrals { std::vector initial_altitudes; std::vector initial_temperatures; int64_t nInitial_temps = 0; - + precision_t altitude_of_bc; + /// Number of species to advect: int nSpeciesAdvect; - + /// IDs of species to advect: std::vector species_to_advect; @@ -216,6 +243,10 @@ class Neutrals { std::string temperature_name = "Temperature"; std::string temperature_unit = "K"; + // Keep track of whether the aurora species have been initialized: + bool auroraInitialized = false; + + // -------------------------------------------------------------------- // Functions: @@ -226,7 +257,7 @@ class Neutrals { \param time contains information about the current time \param indices used to help set initial conditions **/ - Neutrals(Grid grid, + Neutrals(Grid &grid, Planets planet, Times time, Indices indices); @@ -235,12 +266,12 @@ class Neutrals { \brief Creates the variables within the species_chars structure \param grid The grid to define the neutrals on **/ - species_chars create_species(Grid grid); + species_chars create_species(Grid &grid); /********************************************************************** \brief Read in the planet-specific file - This file specifies the species to model, their masses, + This file specifies the species to model, their masses, diffusion coefficients and all of the other things needed for specifying the neutrals. @@ -254,7 +285,7 @@ class Neutrals { \param time contains information about the current time \param indices used to help set initial conditions **/ - bool initial_conditions(Grid grid, + bool initial_conditions(Grid &grid, Times time, Indices indices); @@ -272,13 +303,18 @@ class Neutrals { **/ void fill_with_hydrostatic(int64_t iStart, int64_t iEnd, - Grid grid); + Grid &grid); void fill_with_hydrostatic(int64_t iSpecies, int64_t iStart, int64_t iEnd, - Grid grid); + Grid &grid); + /********************************************************************** + \brief Limit the density to a floor and a ceiling + **/ + void clamp_density(); + /********************************************************************** \brief Calculate the bulk mass density from individual species densities **/ @@ -288,28 +324,39 @@ class Neutrals { \brief Calculate the scale heights for the individual species \param grid The grid to define the neutrals on **/ - void calc_scale_height(Grid grid); + void calc_scale_height(Grid &grid); + /********************************************************************** + \brief Calculate the viscosity coefficient + **/ + void calc_viscosity(); + /********************************************************************** \brief Calculate the eddy diffusion coefficient in valid pressure **/ void calc_kappa_eddy(); - + /********************************************************************** \brief Calculate the concentration for each species (species ndensity / total ndensity) **/ void calc_concentration(); - + + /********************************************************************** + \brief Calculate the density of each species from the mass concentration + for each species and rho (ndensity = con * rho / mass) + **/ + void calc_density_from_mass_concentration(); + /********************************************************************** \brief Calculate the bulk mean major mass **/ void calc_mean_major_mass(); - + /********************************************************************** \brief Calculate the mean pressure **/ void calc_pressure(); - + /********************************************************************** \brief Calculate bulk velocity **/ @@ -331,25 +378,24 @@ class Neutrals { void calc_cMax(); /********************************************************************** - \brief Calculate dt (cell size / cMax) in each direction, and take min - \param dt returns the neutral time-step + \brief Calculate the chapman integrals for the individual species \param grid The grid to define the neutrals on **/ - precision_t calc_dt(Grid grid); - precision_t calc_dt_cubesphere(Grid grid); + void calc_chapman(Grid &grid); /********************************************************************** - \brief Calculate the chapman integrals for the individual species + \brief Calculate the neutral bulk vertical thermal conduction \param grid The grid to define the neutrals on + \param time The times within the model (dt is needed) **/ - void calc_chapman(Grid grid); + void update_temperature(Grid &grid, Times time); /********************************************************************** - \brief Calculate the neutral bulk vertical thermal conduction + \brief Calculate the neutral bulk horizontal viscosity \param grid The grid to define the neutrals on \param time The times within the model (dt is needed) **/ - void calc_conduction(Grid grid, Times time); + void update_horizontal_velocity(Grid &grid, Times time); /********************************************************************** \brief Calculate the O radiative cooling @@ -364,8 +410,10 @@ class Neutrals { /********************************************************************** \brief Add all of the neutral source terms to each of the equations \param time The times within the model (dt is needed) + \param planet Need things like rotation rate + \param grid Need things like radius **/ - void add_sources(Times time); + void add_sources(Times time, Planets planet, Grid &grid); /********************************************************************** \brief Set boundary conditions for the neutrals @@ -373,7 +421,7 @@ class Neutrals { \param time contains information about the current time \param indices used to help set initial conditions **/ - bool set_bcs(Grid grid, + bool set_bcs(Grid &grid, Times time, Indices indices); @@ -383,7 +431,7 @@ class Neutrals { \param time contains information about the current time \param indices used to help set initial conditions **/ - bool set_lower_bcs(Grid grid, + bool set_lower_bcs(Grid &grid, Times time, Indices indices); @@ -393,25 +441,25 @@ class Neutrals { \param time contains information about the current time \param indices used to help set initial conditions **/ - bool set_upper_bcs(Grid grid); + bool set_upper_bcs(Grid &grid); /********************************************************************** \brief Set boundary conditions for the neutrals \param iDir direction of the BC to set \param grid The grid to define the neutrals on **/ - bool set_horizontal_bcs(int64_t iDir, Grid grid); + bool set_horizontal_bcs(int64_t iDir, Grid &grid); /********************************************************************** \brief Get the species ID number (int) given the species name (string) \param name string holding the species name (e.g., "O+") **/ - int get_species_id(std::string name); + int get_species_id(const std::string &name) const; /***************************************************************************** \brief Checks for nans and +/- infinities in density, temp, and velocity **/ - bool check_for_nonfinites(); + bool check_for_nonfinites(std::string location); /********************************************************************** \brief Checks for nans in the specified variable @@ -423,7 +471,7 @@ class Neutrals { \param dir directory to write restart files \param DoRead read the restart files if true, write if false **/ - bool restart_file(std::string dir, bool DoRead); + bool restart_file(std::string dir, std::string cGridtype, bool DoRead); /********************************************************************** \brief Exchange messages between processors @@ -435,9 +483,9 @@ class Neutrals { /********************************************************************** \brief add eddy contributions to vertical acceleration \param grid The grid to define the neutrals on - **/ + **/ void vertical_momentum_eddy(Grid &grid); - + /********************************************************************** \brief Exchange one face for the NEUTRALS @@ -456,28 +504,27 @@ class Neutrals { **/ bool exchange_one_face(int iReceiver, int iSender, - precision_t *buffer, - int64_t iTotalSize, - int nG, int iDir); + precision_t *buffer, + int64_t iTotalSize, + int nG, int iDir); bool pack_one_face(int iReceiver, - precision_t *buffer, - int nG, int iDir, - bool IsPole); + precision_t *buffer, + int nG, int iDir, + bool IsPole); bool unpack_one_face(int iSender, - precision_t *buffer, - int nG, int iDir, - bool DoReverseX, - bool DoReverseY, - bool XbecomesY); + precision_t *buffer, + int nG, int iDir, + bool DoReverseX, + bool DoReverseY, + bool XbecomesY); /********************************************************************** - \brief Vertical advection solver - Rusanov + \brief Vertical advection solver - Rusanov \param grid The grid to define the neutrals on \param time contains information about the current time **/ - - void solver_vertical_rusanov(Grid grid, + void solver_vertical_rusanov(Grid &grid, Times time); /********************************************************************** @@ -485,9 +532,155 @@ class Neutrals { \param grid The grid to define the neutrals on \param time contains information about the current time **/ + bool advect_vertical(Grid &grid, Times time); + + /********************************************************************** + \brief Calculate the neutral friction in one cell using an implicit solver + \param iLong the longitude index + \param iLat the lat index + \param iAlt the altitude index + \param dt time step + \param vels updated velocity, which acts as a source term for the implicit solve + **/ + arma_vec calc_friction_one_cell(int64_t iLong, int64_t iLat, int64_t iAlt, + precision_t dt, arma_vec &vels); + + /********************************************************************** + \brief Calculate the neutral friction in all cells (calls one_cell above) + \param dt time step + **/ + void calc_neutral_friction_implicit(precision_t dt); + + /********************************************************************** + \brief Calculate the neutral friction coefficients for semi-implicit solver + **/ + void calc_neutral_friction_coefs(); + + /********************************************************************** + \brief Residuals for **fluid motion** horizontally with Rusanov + \brief It actually updates the weighted residuals (-1/Area*R) for efficiency + + \param grid + \param time + \param states + **/ + std::vector residual_horizontal_rusanov(std::vector& states, + Grid& grid, Times& time, int64_t iAlt); + + /********************************************************************** + \brief Solves for **fluid motion** horizontally with RK4 + + \param grid + \param time + \param report + **/ + void solver_horizontal_RK4(Grid& grid, Times& time); + + /********************************************************************** + \brief Solves for **fluid motion** horizontally with RK1 + + \param grid + \param time + \param report + **/ + void solver_horizontal_RK1(Grid& grid, Times& time); + void solver_horizontal_RK1_rochi(Grid& grid, Times& time); + + /********************************************************************** + \brief Call the correct horizontal advection scheme with CE eqn + \param grid The grid to define the neutrals on + \param time contains information about the current time + **/ + bool advect_horizontal(Grid& grid, Times& time); + + /********************************************************************** + \brief Solves for fluid motion (pure advect) horizontally with Rusanov + + \param grid + \param time + **/ + void solver_horizontal_rusanov_advection(Grid& grid, Times& time); + void advect_sphere(Grid &grid, Times &time); + + /********************************************************************** + \brief Solves for fluid motion (pure advect) horizontally with RK1 + + \param grid + \param time + **/ + void solver_horizontal_RK1_advection(Grid& grid, Times& time); + + /********************************************************************** + \brief Solves for fluid motion (pure advect) horizontally with RK2 + + \param grid + \param time + **/ + void solver_horizontal_RK2_advection(Grid& grid, Times& time); + + /********************************************************************** + \brief Solves for fluid motion (pure advect) horizontally with RK4 + + \param grid + \param time + **/ + void solver_horizontal_RK4_advection(Grid& grid, Times& time); + + /********************************************************************** + \brief Residuals for fluid motion (pure advect) horizontally with HLLE + \brief It actually updates the weighted residuals (-1/Area*R) for efficiency + + \param grid + \param time + \param states + **/ + std::vector residual_horizontal_hlle_advection( + std::vector& states, Grid& grid, Times& time); + + /********************************************************************** + \brief Residuals for fluid motion (pure advect) horizontally with Rusanov + \brief It actually updates the weighted residuals (-1/Area*R) for efficiency + + \param grid + \param time + \param states + **/ + std::vector residual_horizontal_rusanov_advection( + std::vector& states, Grid& grid, Times& time); + + /********************************************************************** + \brief Call the horizontal advection scheme with only advection + \param grid The grid to define the neutrals on + \param time contains information about the current time + **/ + bool advect_horizontal_advection(Grid& grid, Times& time); + + /********************************************************************** + \brief Setup initial condition for the cosine bell test + \brief For advection test + \param grid The grid to define the neutrals on + \param time contains information about the current time + \param indices used to help set initial conditions + \param planet planet data for extracting the radius + **/ + bool cosine_bell_ic(Grid grid, + Times time, + Indices indices, + Planets planet); + + /********************************************************************** + \brief Setup initial condition for the blob test + \brief For Actual Cubesphere fluid solver + \param grid The grid to define the neutrals on + \param time contains information about the current time + \param indices used to help set initial conditions + \param planet planet data for extracting the radius + **/ + bool blob_ic(Grid grid, + Times time, + Indices indices, + Planets planet); - bool advect_vertical(Grid grid, Times time); - }; #endif // INCLUDE_NEUTRALS_H_ diff --git a/include/output.h b/include/output.h index f7ce1004..2dc3d7cd 100644 --- a/include/output.h +++ b/include/output.h @@ -9,7 +9,7 @@ /************************************************************** * \class Output * \brief A containing to allow storage of variables for output - * + * * Writing output is a multi-step process now: * 1. Create a container to store the variables you want to output * 2. Define the variables to output within the container @@ -17,13 +17,13 @@ * 4. Write the output * * \author Aaron Ridley - * \date 2021/10/21 + * \date 2021/10/21 **************************************************************/ class OutputContainer { public: - + /********************************************************************** \brief initialize the output container **/ @@ -63,8 +63,8 @@ class OutputContainer { \param value the array of the data to output **/ void store_variable(std::string name, - std::string unit, - arma_cube value); + std::string unit, + arma_cube value); /********************************************************************** \brief store a variable to the list of variables to output @@ -74,9 +74,9 @@ class OutputContainer { \param value the array of the data to output **/ void store_variable(std::string name, - std::string long_name, - std::string unit, - arma_cube value); + std::string long_name, + std::string unit, + arma_cube value); /********************************************************************** \brief Get an arma_cube from the Container @@ -119,16 +119,22 @@ class OutputContainer { **/ void set_version(float in_version); + /********************************************************************** + \brief set the number of ghost cells in Aether + \param in_nGCs the number of ghostcells in the grid + **/ + void set_nGhostCells(int in_nGCs); + /********************************************************************** \brief write a file with the information in the container **/ bool write(); - + /********************************************************************** \brief write a json header file with the information in the container **/ bool write_container_header(); - + /********************************************************************** \brief write a binary file with the information in the container **/ @@ -143,27 +149,27 @@ class OutputContainer { \brief write a netcdf file with the information in the container **/ bool write_container_netcdf(); - + /********************************************************************** \brief read from a file an load into the container **/ bool read(); - + /********************************************************************** \brief display information contained in the container **/ void display(); - + /********************************************************************** \brief read a netcdf file - put the information in the container **/ bool read_container_netcdf(); - + /********************************************************************** - \brief clears the vector of variables + \brief clears the vector of variables **/ void clear_variables(); - + private: /// User can set the directory for output @@ -191,12 +197,16 @@ class OutputContainer { /// The time of the data std::vector itime; + /// The version of the code / data / whatever: float version; + /// The number of Ghost Cells: + int nGCs; + /// The frequency of the output for this particular container: float dt_output; - + /// This is to allow the user to select different output formats int output_type; @@ -204,7 +214,7 @@ class OutputContainer { const int binary_type = 0; const int netcdf_type = 1; const int hdf5_type = 2; - + }; /********************************************************************** @@ -228,12 +238,12 @@ class OutputContainer { **/ bool output(const Neutrals &neutrals, - const Ions &ions, - const Grid &grid, - Times time, - const Planets &planet); + const Ions &ions, + Grid &grid, + Times time, + const Planets &planet); void output_binary_3d(std::ofstream &binary, - arma_cube value); + arma_cube value); #endif // INCLUDE_OUTPUT_H_ diff --git a/include/parallel.h b/include/parallel.h index 53c64705..1a363569 100644 --- a/include/parallel.h +++ b/include/parallel.h @@ -4,7 +4,7 @@ #ifndef INCLUDE_PARALLEL_H_ #define INCLUDE_PARALLEL_H_ -/// Need MPI (message passing interface) to do parallel stuff: +/// Need MPI (message passing interface) to do parallel stuff: #include "mpi.h" /// number of processors in whole simulation @@ -30,11 +30,12 @@ extern std::string cGrid; /// communicator for all of aether extern MPI_Comm aether_comm; +extern MPI_Comm aether_member_comm; /********************************************************************** \brief initialize mpi and figure out ensembles and grid blocks **/ -bool init_parallel(Quadtree &quadtree); +bool init_parallel(Quadtree &quadtree, Quadtree &quadtree_ion); /********************************************************************** \brief Pack variables for message passing @@ -50,10 +51,10 @@ bool init_parallel(Quadtree &quadtree); **/ bool pack_border(const arma_cube &value, - precision_t *packed, - int64_t *iCounter, - int64_t nG, - int iDir); + precision_t *packed, + int64_t *iCounter, + int64_t nG, + int iDir); /********************************************************************** \brief Unpack variable buffer after message pass @@ -71,16 +72,16 @@ bool pack_border(const arma_cube &value, **/ bool unpack_border(arma_cube &value, - precision_t *packed, - int64_t *iCounter, - int64_t nG, - int iDir, - bool DoReverseX, - bool DoReverseY, - bool XbecomesY); + precision_t *packed, + int64_t *iCounter, + int64_t nG, + int iDir, + bool DoReverseX, + bool DoReverseY, + bool XbecomesY); /********************************************************************** - \brief initialize the grid variables to set up ghostcell message passing + \brief initialize the grid variables to set up ghostcell message passing \param grid the grid to set up message passing on \param nVarsToPass how many variables to pass **/ @@ -95,8 +96,8 @@ bool exchange_sides_init(Grid &grid, int64_t nVarsToPass); **/ bool exchange_one_var(Grid &grid, - arma_cube &var_to_pass, - bool doReverseSignAcrossPole); + arma_cube &var_to_pass, + bool doReverseSignAcrossPole); /********************************************************************** \brief test the exchange messages one var function diff --git a/include/planets.h b/include/planets.h index 36edafc7..25ab1aa8 100644 --- a/include/planets.h +++ b/include/planets.h @@ -15,11 +15,11 @@ class Planets { -// ----------------------------------------------------------------------- -// Public functions and variables -// ----------------------------------------------------------------------- + // ----------------------------------------------------------------------- + // Public functions and variables + // ----------------------------------------------------------------------- -public: + public: // -------------------------------------------------------------------- // Functions: @@ -92,7 +92,7 @@ class Planets { /********************************************************************** \brief Returns the location of the center of the dipole (in meters) **/ - std::vector get_dipole_center(); + std::vector get_dipole_center(); /********************************************************************** \brief Returns the rotation angle of the dipole in longitude (radians) @@ -110,7 +110,7 @@ class Planets { precision_t get_dipole_strength(); /********************************************************************** - \brief Returns omega (rotation rate) of the planet + \brief Returns omega (rotation rate) of the planet **/ precision_t get_omega(); @@ -118,27 +118,32 @@ class Planets { \brief returns neutrals json for neutral density BCs **/ json get_neutrals(); - + /********************************************************************** \brief returns neutral temperature json for temperature ICs **/ json get_temperatures(); - + /********************************************************************** \brief returns ions json for ion density characteristics **/ json get_ions(); - + + /********************************************************************** + \brief returns altitude of the density boundary condition: + **/ + precision_t get_altitude_of_bc(); + /********************************************************************** \brief Check to see if internal state of class is ok **/ - + bool is_ok(); -// ----------------------------------------------------------------------- -// Private functions and variables -// ----------------------------------------------------------------------- - + // ----------------------------------------------------------------------- + // Private functions and variables + // ----------------------------------------------------------------------- + private: /// A structure to describe the planetary characteristics for each planet @@ -214,7 +219,7 @@ class Planets { /// Dipole tilt from the rotation axis (co-latitude of pole) (radians) precision_t dipole_tilt; /// Offset of the dipole center from the geographic center of planet - std::vector dipole_center{ 0.0, 0.0, 0.0 }; + std::vector dipole_center{ 0.0, 0.0, 0.0 }; //J2 value precision_t J2; @@ -250,10 +255,14 @@ class Planets { /// Information about the initial temperature of the planet json temperatures; - + /// Information about the ions of the planet json ions; + /// This is needed to specify at what altitude the densities + /// are specified: + precision_t altitude_of_bc; + /// An internal variable to hold the state of the class bool IsOk; diff --git a/include/quadtree.h b/include/quadtree.h index 877d5bf2..d098efcc 100644 --- a/include/quadtree.h +++ b/include/quadtree.h @@ -9,14 +9,14 @@ /************************************************************** * \class Quadtree * - * \brief Defines the quadtree for blocks - * + * \brief Defines the quadtree for blocks + * * Aether is logically an i, j, k grid structure. Aether does domain * decomposition on the (i, j) coordinates and each processor works on * the full domain of the k dimension. (e.g., nn spherical * coordinates, i = longitude, j = latitude, and k = altitude.) The * quadtree takes the (i, j) dimensions and makes blocks out of them. - * + * * In the quadtree there are a number of root nodes, which are then * divided into 2 x 2 blocks. Each of those can then be subdivided * into 2 x 2 blocks. Each block resides on a separate processor. @@ -32,13 +32,13 @@ * * \author Aaron Ridley * - * \date 2022/07/05 + * \date 2022/07/05 * **************************************************************/ class Quadtree { -public: + public: /// number of blocks in each direction: const uint64_t nLR = 2; @@ -86,7 +86,7 @@ class Quadtree { /// Number of root nodes: int64_t nRootNodes; - + /// The quadtree root nodes: std::vector root_nodes; @@ -98,16 +98,16 @@ class Quadtree { arma_vec limit_high = {0.0, 0.0, 0.0}; /// For the given processor, the side that it is on: uint64_t iSide = -1; - + /********************************************************************** \brief Initializes the quadtree **/ - Quadtree(); + Quadtree(std::string gridtype); /********************************************************************** \brief Builds the quadtree **/ - void build(); + void build(std::string gridtype); /********************************************************************** \brief Makes a new node on the quadtree, recursively @@ -119,18 +119,18 @@ class Quadtree { \param iSide basically the root node, or the side of the cubesphere **/ qtnode new_node(arma_vec lower_left_norm_in, - arma_vec size_right_norm_in, - arma_vec size_up_norm_in, - uint64_t &iProc_in_out, - uint64_t depth_in, - uint64_t iSide); + arma_vec size_right_norm_in, + arma_vec size_up_norm_in, + uint64_t &iProc_in_out, + uint64_t depth_in, + uint64_t iSide); /********************************************************************** \brief Get different vectors from the node \param node which node to get the vector from \param which defines the vector to get: LL = lower left; - SR = size in the right/left direction; + SR = size in the right/left direction; SU = size in the up/down direction; MID = mid point of the node; **/ @@ -154,26 +154,26 @@ class Quadtree { int64_t find_root(arma_vec point); /********************************************************************** - \brief If the point is outside of the normalized limits of the + \brief If the point is outside of the normalized limits of the quadtree, this tries to put the point back into the domain \param point the x, y, z normalized coordinate of the point. **/ arma_vec wrap_point_sphere(arma_vec point); /********************************************************************** - \brief If the point is outside of the normalized limits of the + \brief If the point is outside of the normalized limits of the quadtree, this tries to put the point back into the domain \param point the x, y, z normalized coordinate of the point. **/ arma_vec wrap_point_cubesphere(arma_vec point); - + /********************************************************************** \brief Check to see if internal state of class is ok **/ - + bool is_ok(); -private: + private: /// Defines whether the quadtree state is ok: bool IsOk = true; @@ -181,7 +181,9 @@ class Quadtree { bool IsSphere = false; /// Defines whether the quadtree is a cubesphere or not: bool IsCubeSphere = false; - + /// Defines whether the quadtree is a dipole or not: + bool IsDipole = false; + }; #endif // INCLUDE_QUADTREE_H_ diff --git a/include/read_collision_file.h b/include/read_collision_file.h index 64a9fb91..a11d1c85 100644 --- a/include/read_collision_file.h +++ b/include/read_collision_file.h @@ -7,27 +7,27 @@ #include "../include/aether.h" void read_collision_file(Neutrals &neutrals, - Ions &ions); + Ions &ions); void parse_nu_in_table(std::vector> csv, - Neutrals &neutrals, - Ions &ions); + Neutrals &neutrals, + Ions &ions); void parse_resonant_nu_in_table(std::vector> csv, - Neutrals &neutrals, - Ions &ions); + Neutrals &neutrals, + Ions &ions); void parse_bst_in_table(std::vector> csv, - Neutrals &neutrals, - Ions &ions); + Neutrals &neutrals, + Ions &ions); void parse_diffexp_in_table(std::vector> csv, - Neutrals &neutrals); + Neutrals &neutrals); void parse_diff0_in_table(std::vector> csv, Neutrals &neutrals); void check_collision_frequncies(Ions ions, - Neutrals neutrals); + Neutrals neutrals); #endif // INCLUDE_COLLISION_FILE_H_ diff --git a/include/read_indices_files.h b/include/read_indices_files.h index bd20e2f1..52bd6449 100644 --- a/include/read_indices_files.h +++ b/include/read_indices_files.h @@ -17,7 +17,7 @@ /********************************************************************** \brief Reads in all of the indices files and stores them in Indices - This function goes through all of the input indices files and + This function goes through all of the input indices files and reads in the files, then stores the values into the Indices class. At this point, it can read in the following file types: 1. NGDC F10.7 files. @@ -32,7 +32,7 @@ bool read_and_store_indices(Indices &indices); \param f107_file the f10.7 file to read in **/ index_file_output_struct read_f107_file(std::string f107_file, - Indices indices); + Indices indices); /********************************************************************** \brief Read the OMNIWeb file format and store in the index_file struct @@ -40,7 +40,7 @@ index_file_output_struct read_f107_file(std::string f107_file, \param indices needed to get the indices index for each variable **/ index_file_output_struct read_omni_file(std::string omni_file, - Indices indices); + Indices indices); /********************************************************************** \brief This code compares a string to return the variable index diff --git a/include/report.h b/include/report.h index e29696eb..894cadce 100644 --- a/include/report.h +++ b/include/report.h @@ -23,16 +23,17 @@ #include #include #include +#include #include "aether.h" class Report { -// ----------------------------------------------------------------------- -// Public functions and variables -// ----------------------------------------------------------------------- + // ----------------------------------------------------------------------- + // Public functions and variables + // ----------------------------------------------------------------------- -public: + public: // Functions: @@ -146,9 +147,9 @@ class Report { \param cFunctionName **/ void student_checker_function_name(bool isStudent, - std::string cStudentName, - int iFunctionNumber, - std::string cFunctionName); + std::string cStudentName, + int iFunctionNumber, + std::string cFunctionName); /************************************************************** \brief Starts timer and reports when entering a function, if applicable @@ -179,10 +180,10 @@ class Report { **/ void times(); -// ----------------------------------------------------------------------- -// Private functions and variables -// ----------------------------------------------------------------------- -private: + // ----------------------------------------------------------------------- + // Private functions and variables + // ----------------------------------------------------------------------- + private: /// global verbose level of the code int iVerbose; @@ -211,6 +212,8 @@ class Report { precision_t timing_total; /// This is the start-gate for the timer unsigned long long timing_start; + + struct timeval timing_start_new; /// This is the level of the function that is then compared to verbose int iLevel; /// This is a string that holds all of the function names above this one @@ -250,6 +253,8 @@ class Report { std::string error; }; + struct timeval start, end; + //Vector of error structs std::vector error_list; }; diff --git a/include/sizes.h b/include/sizes.h index ff10b6b2..5a02b9cb 100644 --- a/include/sizes.h +++ b/include/sizes.h @@ -7,7 +7,7 @@ // This is the file that defines the number of grid points in each // direction. The entire code is based on these numbers, so you need // to recompile if you change these numbers. -// +// // These are temporary and will eventually be removed. // This is for the geographic grid: diff --git a/include/solvers.h b/include/solvers.h index 3a20e3d4..14743b02 100644 --- a/include/solvers.h +++ b/include/solvers.h @@ -9,55 +9,135 @@ #include using namespace arma; -arma_vec solver_conduction(arma_vec value, - arma_vec lambda, - arma_vec front, - precision_t dt, - arma_vec dx); +struct projection_struct { + arma_mat gradLR; + arma_mat gradDU; + arma_mat R; + arma_mat L; + arma_mat U; + arma_mat D; + arma_mat grad_edge_LR; + arma_mat grad_edge_DU; +}; + +arma_vec limiter_mc(arma_vec &left, arma_vec &right, int64_t nPts, + int64_t nGCs); +arma_vec calc_grad_1d(arma_vec &values, + arma_vec &x, + int64_t nPts, + int64_t nGCs); +arma_mat calc_grad(arma_mat values, arma_mat x, int64_t nGCs, bool DoX); + + +projection_struct project_to_edges(arma_mat &values, + arma_mat &x_centers, arma_mat &x_edges, + arma_mat &y_centers, arma_mat &y_edges, + int64_t nGCs); + +namespace Cubesphere_tools { +/* +struct projection_struct { + arma_mat gradLR; + arma_mat gradDU; + arma_mat R; + arma_mat L; + arma_mat U; + arma_mat D; +}; +*/ +arma_vec limiter_mc(arma_vec &left, arma_vec &right, int64_t nPts, + int64_t nGCs); +void print(arma_vec values); +arma_vec calc_grad_1d(arma_vec &values, arma_vec &x, int64_t nPts, + int64_t nGCs); +arma_mat calc_grad(arma_mat values, arma_mat x, int64_t nGCs, bool DoX); + +arma_mat project_from_left(arma_mat values, arma_mat gradients, + arma_mat x_centers, arma_mat x_edges, int64_t nGCs); +arma_mat project_from_right(arma_mat values, arma_mat gradients, + arma_mat x_centers, arma_mat x_edges, int64_t nGCs); +arma_vec limiter_value(arma_vec projected, arma_vec values, int64_t nPts, + int64_t nGCs); +//projection_struct project_to_edges(arma_mat &values, arma_mat &x_centers, +// arma_mat &x_edges, arma_mat &y_centers, arma_mat &y_edges, int64_t nGCs); +} + + +arma_vec solver_conduction( + arma_vec value, + arma_vec lambda, + arma_vec front, + arma_vec source, + arma_vec dx, + precision_t dt, + int64_t nGCs, + bool return_diff = false, + arma_vec source2 = arma_vec()); arma_cube solver_chemistry(arma_cube density, - arma_cube source, - arma_cube loss, - precision_t dt); + arma_cube source, + arma_cube loss, + precision_t dt); + +arma_mat solver_chemistry(arma_mat density, + arma_mat source, + arma_mat loss, + precision_t dt); + +std::vector coriolis(std::vector velocity, + precision_t rotation_rate, + arma_cube lat_scgc); /// Set flag values that indicate whether the previous, next, closest, /// or an interpolated value should be used. const int iPrevious_ = 1; const int iNext_ = 2; -const int iClosest_ = 3; +const int iClosest_ = 3; const int iInterp_ = 4; double interpolate_1d(double outX, - std::vector inXs, - std::vector inValues); + std::vector inXs, + std::vector inValues); double interpolate_1d_get_index_doubles(double intime, - std::vector times); + std::vector times); // Overloading the interpolation function: double interpolate_1d_w_index(std::vector values, - double interpolation_index, - int interpolation_type); + double interpolation_index, + int interpolation_type); double interpolate_1d_w_index(std::vector values, - double interpolation_index, - int interpolation_type); + double interpolation_index, + int interpolation_type); double interpolate_1d_w_index(std::vector values, - float interpolation_index, - int interpolation_type); + float interpolation_index, + int interpolation_type); double interpolate_1d_w_index(arma_vec values, - double interpolation_index, - int interpolation_type); + double interpolation_index, + int interpolation_type); fmat interpolate_1d_w_index(std::vector values, - double interpolation_index, - int interpolation_type); + double interpolation_index, + int interpolation_type); + +arma_cube calc_gradient_lon(arma_cube value, Grid &grid); +arma_cube calc_gradient_lat(arma_cube value, Grid &grid); +arma_cube calc_gradient_alt(arma_cube value, Grid &grid); +std::vector calc_gradient_vector(arma_cube value_scgc, Grid &grid); +std::vector calc_gradient_cubesphere(arma_cube value, Grid &grid); +std::vector calc_gradient_dipole(arma_cube value, Grid grid); +arma_cube calc_gradient_alt_4th(arma_cube value, Grid &grid); +arma_mat project_onesided_alt_3rd(arma_cube value, Grid &grid, int64_t iAlt); -arma_cube calc_gradient_lon(arma_cube value, Grid grid); -arma_cube calc_gradient_lat(arma_cube value, Grid grid); -arma_cube calc_gradient_alt(arma_cube value, Grid grid); -std::vector calc_gradient_vector(arma_cube value_scgc, Grid grid); -std::vector calc_gradient_cubesphere(arma_cube value, Grid grid); -arma_cube calc_gradient_alt_4th(arma_cube value, Grid grid); +// Calculate 4th-order gradients in the native coordinate system: +arma_cube calc_gradient4o_i(arma_cube value, Grid &grid); +arma_cube calc_gradient4o_j(arma_cube value, Grid &grid); +arma_cube calc_gradient4o_k(arma_cube value, Grid &grid); + +// Calculate 2nd-order gradients in the native coordinate system: +arma_cube calc_gradient2o_i(arma_cube value, Grid &grid); +arma_cube calc_gradient2o_j(arma_cube value, Grid &grid); +arma_cube calc_gradient2o_k(arma_cube value, Grid &grid); // interpolation in 1D precision_t linear_interpolation(const precision_t y0, @@ -71,7 +151,18 @@ precision_t interpolate_unit_cube(const arma_cube &data, const precision_t zRatio); precision_t limiter_mc(precision_t dUp, - precision_t dDown, - precision_t beta); + precision_t dDown, + precision_t beta); + + + /********************************************************************** + \brief Calculate dt (cell size / cMax) in each direction, and take min + \param dt returns the neutral time-step + \param grid The grid to define the neutrals on + **/ + precision_t calc_dt(Grid &grid, std::vector cMax_vcgc); + precision_t calc_dt_sphere(Grid &grid, std::vector cMax_vcgc); + precision_t calc_dt_cubesphere(Grid &grid, std::vector cMax_vcgc); + precision_t calc_dt_vertical(Grid &grid, std::vector cMax_vcgc); #endif // INCLUDE_SOLVERS_H_ diff --git a/include/sphere.h b/include/sphere.h index e050dbeb..b2483752 100644 --- a/include/sphere.h +++ b/include/sphere.h @@ -8,25 +8,95 @@ #include /************************************************* - * \brief A namespace with all quad sphere grid logic. + * \brief A namespace with all (1-root) sphere grid logic. *************************************************/ namespace Sphere { - /// The normalized origins of each face of the cube (i.e. corner) - static const arma_mat ORIGINS = { - { 0.0, -0.5, 0.0} - }; +/// The normalized origins of each face of the cube (i.e. corner) +static const arma_mat ORIGINS = { + { 0.0, -0.5, 0.0} +}; + +/// Normalized right steps in cube +static const arma_mat RIGHTS = { + {2.0, 0.0, 0.0} +}; + +/// Normalized right steps in cube +static const arma_mat UPS = { + {0.0, 1.0, 0.0} +}; + +}; + +/************************************************* + * \brief A namespace with all (4-root) sphere grid logic. + *************************************************/ +namespace Sphere4 { + +/// The normalized origins of each node (i.e. corner) +static const arma_mat ORIGINS = { + { 0.0, -0.5, 0.0}, + { 0.0, -0.25, 0.0}, + { 0.0, 0.0, 0.0}, + { 0.0, 0.25, 0.0} +}; + +/// Normalized right steps in node +static const arma_mat RIGHTS = { + {2.0, 0.0, 0.0}, + {2.0, 0.0, 0.0}, + {2.0, 0.0, 0.0}, + {2.0, 0.0, 0.0} +}; - /// Normalized right steps in cube - static const arma_mat RIGHTS = { - {2.0, 0.0, 0.0} - }; +/// Normalized up steps in node +static const arma_mat UPS = { + {0.0, 0.25, 0.0}, + {0.0, 0.25, 0.0}, + {0.0, 0.25, 0.0}, + {0.0, 0.25, 0.0} +}; - /// Normalized right steps in cube - static const arma_mat UPS = { - {0.0, 1.0, 0.0} - }; +}; +/************************************************* + * \brief A namespace with all (6-root) sphere grid logic. + *************************************************/ +namespace Sphere6 { + +/// The normalized origins of each face of the cube (i.e. corner) +static const arma_mat ORIGINS = { + {0.0, -0.5, 0.0}, + {1.0, -0.5, 0.0}, + {0.0, -0.5 + 1.0 / 3.0, 0.0}, + {1.0, -0.5 + 1.0 / 3.0, 0.0}, + {0.0, -0.5 + 2.0 / 3.0, 0.0}, + {1.0, -0.5 + 2.0 / 3.0, 0.0} }; +/// Normalized right steps in cube +static const arma_mat RIGHTS = { + { 1.0, 0.0, 0.0}, + { 1.0, 0.0, 0.0}, + { 1.0, 0.0, 0.0}, + { 1.0, 0.0, 0.0}, + { 1.0, 0.0, 0.0}, + { 1.0, 0.0, 0.0} +}; + +/// Normalized right steps in cube +static const arma_mat UPS = { + { 0.0, 1.0 / 3.0, 0.0}, + { 0.0, 1.0 / 3.0, 0.0}, + { 0.0, 1.0 / 3.0, 0.0}, + { 0.0, 1.0 / 3.0, 0.0}, + { 0.0, 1.0 / 3.0, 0.0}, + { 0.0, 1.0 / 3.0, 0.0} +}; + +} // CubeSphere:: + + + #endif // INCLUDE_SPHERE_H_ diff --git a/include/test.h b/include/test.h new file mode 100644 index 00000000..3b021a68 --- /dev/null +++ b/include/test.h @@ -0,0 +1,18 @@ +// Copyright 2020, the Aether Development Team (see doc/dev_team.md for members) +// Full license can be found in License.md + +#ifndef INCLUDE_TEST_H_ +#define INCLUDE_TEST_H_ + +#include "aether.h" + + +// Gradient tests +// Cubesphere is not done nor tested +bool test_gradient(Planets planet, Quadtree quadtree, json test_config, + Grid gGrid, Grid mGrid); +bool test_gradient_cubesphere(Planets planet, Quadtree quadtree, Grid grid); +bool test_gradient_ijk(Planets planet, Grid grid, bool debug); + + +#endif \ No newline at end of file diff --git a/include/times.h b/include/times.h index 2f7665d1..12b891e0 100644 --- a/include/times.h +++ b/include/times.h @@ -5,7 +5,7 @@ #define INCLUDE_TIMES_H_ /************************************************************** - * + * * times.h: * * Functions that are assocuated with keeping track of time in @@ -20,7 +20,7 @@ class Times { -public: + public: /************************************************************** \brief Initialize the Times class @@ -61,7 +61,7 @@ class Times { \brief Sets the start, restart, and current times. This sets the start time, restart time, and current time to - the input time, and initializes iStep and dt, then calls + the input time, and initializes iStep and dt, then calls increment_time, which derives a bunch of other variables. \param itime year, month, day, hour, minute, second, millisecond vector @@ -96,6 +96,8 @@ class Times { \brief Returns the current time as a string (year, month...) Returns the current time as a string of format YYYYMMDD_HHMMSS + + \param useSeconds if false, replace seconds with 0 **/ std::string get_YMD_HMS(); @@ -159,16 +161,21 @@ class Times { \brief Get the current time as an array **/ std::vector get_iCurrent(); - + + /************************************************************** + \brief Get the current simulation time (sec since start) + **/ + double get_simulation_time(); + /********************************************************************** \brief Read / Write restart files for time \param dir directory to write restart files \param DoRead read the restart files if true, write if false **/ - bool restart_file(std::string dir, bool DoRead); + bool restart_file(std::string dir, bool DoRead); + + private: -private: - // ------------------------------------------------------------- // These variables are for keeping track of the time. All in seconds // since reference time (except where noted). @@ -205,7 +212,7 @@ class Times { /// Universal time in hours precision_t ut; - + /// in weird JPL units precision_t orbittime; @@ -220,13 +227,13 @@ class Times { /// This is day of year (and NOT real Julian Day!) int jDay; - + /// This is Julian day double julian_day; /// represented as YYMMDD std::string sYMD; - + /// represented as HHMMSS std::string sHMS; diff --git a/include/tools.h b/include/tools.h index edc1f379..24a7fbe5 100644 --- a/include/tools.h +++ b/include/tools.h @@ -8,11 +8,11 @@ // Structure for a 2x2 matrix for a cubesphere: // ---------------------------------------------------------------------------- -struct mat_2x2{ - arma_mat A11; - arma_mat A12; - arma_mat A21; - arma_mat A22; +struct mat_2x2 { + arma_mat A11; + arma_mat A12; + arma_mat A21; + arma_mat A22; }; // ----------------------------------------------------------------------------- @@ -23,9 +23,9 @@ struct mat_2x2{ // ----------------------------------------------------------------------------- bool find_interpolation_coefficients(arma_vec inX, - arma_vec outX, - arma_vec &outIndex, - arma_vec &outRatio); + arma_vec outX, + arma_vec &outIndex, + arma_vec &outRatio); // ----------------------------------------------------------------------------- // This takes the index and ratio determined in the above function and @@ -33,8 +33,8 @@ bool find_interpolation_coefficients(arma_vec inX, // ----------------------------------------------------------------------------- arma_vec interpolate1d(arma_vec inY, - arma_vec &index, - arma_vec &ratio); + arma_vec &index, + arma_vec &ratio); // ----------------------------------------------------------------------------- // Set all of the ghost cells to a constant value that is fed in. @@ -42,14 +42,15 @@ arma_vec interpolate1d(arma_vec inY, // ----------------------------------------------------------------------------- void set_gcs_to_value(arma_cube &var_scgc, - precision_t value, - int64_t nGCs); + precision_t value, + int64_t nGCs); // ---------------------------------------------------------------------------- // Fix corners in an arma cube // - basically fill in the corners with values near them // ---------------------------------------------------------------------------- +void fill_horizontal_ghostcels(arma_cube &values, int64_t nGCs); void fill_corners(arma_cube &values, int64_t nGCs); // ----------------------------------------------------------------------------- @@ -64,6 +65,15 @@ std::string add_cmember(std::string inString); // ---------------------------------------------------------------------- void display_vector(arma_vec vec); +void display_matrix(std::string, arma_mat mat); +void display_cube(std::string, arma_cube values); + +// ---------------------------------------------------------------------- +// Display an armadillo vector with a strong name in front +// ---------------------------------------------------------------------- + +void display_vector(std::string, arma_vec vec); +void display_vector(std::string, std::vector vec); // ---------------------------------------------------------------------- // synchronize a (boolean) variable across all processors @@ -94,39 +104,39 @@ precision_t sync_mean_across_all_procs(precision_t value); // ---------------------------------------------------------------------- std::vector get_normal_random_vect(double mean, - double std, - int64_t nValues, - int seed); + double std, + int64_t nValues, + int seed); // ---------------------------------------------------------------------- // Generate a vector of uniformly distributed random unsigned ints // ---------------------------------------------------------------------- std::vector get_random_unsigned_vect(int64_t nValues, - int seed); + int seed); // ---------------------------------------------------------------------- // Make a vector of arma cubes: // ---------------------------------------------------------------------- std::vector make_cube_vector(int64_t nLons, - int64_t nLats, - int64_t nAlts, - int64_t nComps); + int64_t nLats, + int64_t nAlts, + int64_t nComps); // ---------------------------------------------------------------------- // Take the dot product between two armadilo cubes // ---------------------------------------------------------------------- arma_cube dot_product(std::vector vec1, - std::vector vec2); + std::vector vec2); // ---------------------------------------------------------------------- // Take the cross product between two arma cubes // ---------------------------------------------------------------------- std::vector cross_product(std::vector vec1, - std::vector vec2); + std::vector vec2); // ---------------------------------------------------------------------- // Convert an armadillo vector to a c++ vector @@ -213,7 +223,8 @@ bool is_approx_equal(arma_vec &vec1, arma_vec &vec2, precision_t tol); //------------------------------------------------------------- // Overload col vector function with row vec //------------------------------------------------------------- -bool is_approx_equal(Row &vec1, Row &vec2, precision_t tol); +bool is_approx_equal(Row &vec1, Row &vec2, + precision_t tol); //------------------------------------------------------------- // Checks whether a vector is constant (all values the same) @@ -227,7 +238,8 @@ bool is_approx_constant(arma_vec &vec, precision_t tol); // u and v are spherical velocities // u1 and u2 are contravariant velocities // -------------------------------------------------------------------------- -void sphvect2ref(arma_mat& u, arma_mat& v, arma_mat& u1, arma_mat& u2, mat_2x2 &A_inv_mat); +void sphvect2ref(arma_mat& u, arma_mat& v, arma_mat& u1, arma_mat& u2, + mat_2x2 &A_inv_mat); // -------------------------------------------------------------------------- // Convert spherical vector (velocities) to reference (contravariant) vector @@ -235,7 +247,8 @@ void sphvect2ref(arma_mat& u, arma_mat& v, arma_mat& u1, arma_mat& u2, mat_2x2 & // u and v are spherical velocities // u1 and u2 are contravariant velocities // -------------------------------------------------------------------------- -void refvect2sph(arma_mat &u1, arma_mat &u2, arma_mat &u, arma_mat &v, mat_2x2 &A_mat); +void refvect2sph(arma_mat &u1, arma_mat &u2, arma_mat &u, arma_mat &v, + mat_2x2 &A_mat); //----------------------------------------------------------------------- // Checks if armacube(s) has all finite values, if not, adds them to @@ -286,5 +299,36 @@ std::vector indef_vector(arma_cube cube); // -------------------------------------------------------------------------- arma_vec sphere_to_cube(precision_t lon_in, precision_t lat_in); +// Used for dipole gradients & distances. +// Probably needs to be moved. +arma_cube delTheta(arma_cube magLat); + +//////////////////////////////////////////// +// convert cell coordinates to geographic // +//////////////////////////////////////////// +std::vector mag_to_geo(arma_cube magLon, arma_cube magLat, + arma_cube magAlt, + Planets planet); + +//////////////////////////////////////////// +// convert mag coordinates to dipole ijk // +//////////////////////////////////////////// +std::vector mag_to_ijk(precision_t mlon, + precision_t mlat, + precision_t radius, + precision_t planet_radius); + + +//////////////////////////////////////////// +// convert cell coordinates to geographic // +//////////////////////////////////////////// +std::vector geo_to_mag(arma_cube glon, + arma_cube glat, + arma_cube radius, + Planets &planet) ; + + +arma_cube vec2cube(std::vector ivec); + #endif // INCLUDE_TOOLS_H_ diff --git a/include/transform.h b/include/transform.h index a56313b7..91b275cf 100644 --- a/include/transform.h +++ b/include/transform.h @@ -14,32 +14,39 @@ std::string mklower(std::string inString); std::string mkupper(std::string inString); void copy_cube_to_array(arma_cube cube_in, - float *array_out); + precision_t *array_out); void copy_mat_to_array(arma_mat mat_in, - float *array_out, - bool isFortran); -void copy_array_to_mat(float *array_in, + precision_t *array_out, + bool isFortran); +void copy_array_to_mat(precision_t *array_in, arma_mat &mat_out, bool isFortran); -void copy_vector_to_array(std::vector vector_in, - int64_t nElements, - float *array_out); +void copy_vector_to_array(std::vector vector_in, + int64_t nElements, + precision_t *array_out); // This is needed when sending strings to Fortran. // We do this by copying the ascii numbers into an integer array, // then in fortran copy them back into a character array. int* copy_string_to_int(std::string inString); +arma_cube calc_magnitude(std::vector xyz); std::vector transform_llr_to_xyz_3d(std::vector llr); -std::vector rotate_around_x_3d(std::vector XYZ_in, precision_t angle); -std::vector rotate_around_y_3d(std::vector XYZ_in, precision_t angle); -std::vector rotate_around_z_3d(std::vector XYZ_in, precision_t angle); +std::vector transform_xyz_to_llr_3d(std::vector xyz); +std::vector rotate_around_x_3d(std::vector XYZ_in, + precision_t angle); +std::vector rotate_around_y_3d(std::vector XYZ_in, + precision_t angle); +std::vector rotate_around_z_3d(std::vector XYZ_in, + precision_t angle); void transform_llr_to_xyz(precision_t llr_in[3], precision_t xyz_out[3]); -void transform_rot_z(precision_t xyz_in[3], precision_t angle_in, precision_t xyz_out[3]); -void transform_rot_y(precision_t xyz_in[3], precision_t angle_in, precision_t xyz_out[3]); -void transform_float_vector_to_array(std::vector input, +void transform_rot_z(precision_t xyz_in[3], precision_t angle_in, + precision_t xyz_out[3]); +void transform_rot_y(precision_t xyz_in[3], precision_t angle_in, + precision_t xyz_out[3]); +void transform_float_vector_to_array(std::vector input, precision_t output[3]); void transform_vector_xyz_to_env(precision_t xyz_in[3], @@ -53,6 +60,13 @@ void vector_diff(precision_t vect_in_1[3], precision_t vect_in_2[3], precision_t vect_out[3]); +// ----------------------------------------------------------------------- +// Simple 3-element vector addition +// ----------------------------------------------------------------------- + +void vector_add(precision_t vect_in_1[3], + precision_t vect_in_2[3], + precision_t vect_out[3]); #endif // INCLUDE_TRANSFORM_H_ diff --git a/share/run/UA/inputs/acheron.in b/share/run/UA/inputs/acheron.in new file mode 100755 index 00000000..4c8adbf1 --- /dev/null +++ b/share/run/UA/inputs/acheron.in @@ -0,0 +1,55 @@ + +This is the input file for the planet Acheron. It is basically +meant to be an experimental planet. As a starting point, +Acheron will be a single neutral species (O) and +a single ion species (O+) planet. + +The base altitude of Acheron is 1000 km. + +name is the character string that identifies the species + +O(3P) is the base state of neutral atomic oxygen and is called O. + +Vibration is the degrees of freedom for the atom/molecule + +thermal conduction is typically: +Lambda = (N1 * A1 * T^c1 + N2 * A2 * T^c2 + ... ) / (N1+N2+...) +thermal_cond is the A for the particular species +thermal_exp is the c for the particular species + +mass is in amu + +advect is whether the species is advected or not + +BC is a density that is used in the lowest boundary cell if you + want a constant boundary condition. + Set to a real value to use this. + Set to a negative number if you want to use a different BC. + In this example file, the values are from 96.87 km Jan 1, 2013 + O_1D is made up. + + +#NEUTRALS +name, mass, vibration, thermal_cond, thermal_exp, advect, BC +O, 16, 5, 5.6e-4, 0.69, 1, 5.0e17 + + +Here we can input a temperature profile for the initial condition: + - below the lowest altitude, it will use the lowest alt + - above the highest alt, it will use the highest alt + - in between, linear interpolation + - altitudes in km + +#TEMPERATURE +alt, temp +1000.0, 200.0 +1500.0, 1000.0 +2000.0, 1000.0 + +O+ is O+(4S) is the base state of O+, but is just called O+ +O+ has excited states of O+(2D) and O+(2P). + +#IONS +name, mass, charge, advect +O+, 16, 1, 1 + diff --git a/share/run/UA/inputs/aether.json.acheron b/share/run/UA/inputs/aether.json.acheron new file mode 100755 index 00000000..7b3d77d5 --- /dev/null +++ b/share/run/UA/inputs/aether.json.acheron @@ -0,0 +1,58 @@ + +{ + "Debug" : { + "iVerbose" : 0, + "iFunctionVerbose" : { + "Grid::create_altitudes": 0}, + "dt" : 10.0, + "check_for_nans" : true + }, + + "Planet" : { + "name" : "acheron", + "file": "UA/inputs/acheron.in"}, + + "PlanetFile" : "UA/inputs/acheron.in", + + "ChemistryFile" : "UA/inputs/chemistry_acheron.csv", + + "Electrodynamics" : { + "Potential" : "zero", + "DiffuseAurora" : "none"}, + + "Logfile" : { + "species" : ["O", "O+"]}, + + "AuroraFile" : "UA/inputs/aurora_acheron.csv", + + "Advection" : { + "Neutrals" : { + "Vertical" : "hydro", + "Horizontal" : "default"}}, + + "Sources" : { + "Grid" : { + "Cent_acc" : false }}, + + "EndTime" : [2011, 3, 21, 0, 0, 0], + + "CubeSphere" : { + "is" : false}, + + "GeoBlockSize" : { + "nLons" : 144, + "nLats" : 72, + "nAlts" : 1}, + + "GeoGrid" : { + "MinAlt" : 1000.0, + "dAlt" : 0.25, + "IsUniformAlt" : false}, + + "Outputs" : { + "type" : ["states"], + "dt" : [900] }, + + "DoCalcBulkIonTemp" : false + +} diff --git a/share/run/UA/inputs/aurora_acheron.csv b/share/run/UA/inputs/aurora_acheron.csv new file mode 100755 index 00000000..613fb01b --- /dev/null +++ b/share/run/UA/inputs/aurora_acheron.csv @@ -0,0 +1 @@ +O,O+,1.0 diff --git a/share/run/UA/inputs/aurora_earth.csv b/share/run/UA/inputs/aurora_earth.csv index bdb78e96..5b58c444 100644 --- a/share/run/UA/inputs/aurora_earth.csv +++ b/share/run/UA/inputs/aurora_earth.csv @@ -1,3 +1,5 @@ N2,N2+,0.92 O2,O2+,1.00 -O,O+,0.56 +O,O+,0.224 +O,O+_2D,0.224 +O,O+_2P,0.112 diff --git a/share/run/UA/inputs/aurora_earth_simple.csv b/share/run/UA/inputs/aurora_earth_simple.csv new file mode 100644 index 00000000..1bea2b2c --- /dev/null +++ b/share/run/UA/inputs/aurora_earth_simple.csv @@ -0,0 +1,3 @@ +N2,N2+,0.92 +O2,O2+,1 +O,O+,0.56 \ No newline at end of file diff --git a/share/run/UA/inputs/chemistry_acheron.csv b/share/run/UA/inputs/chemistry_acheron.csv new file mode 100644 index 00000000..44913d10 --- /dev/null +++ b/share/run/UA/inputs/chemistry_acheron.csv @@ -0,0 +1,3 @@ +name,loss1,loss2,loss3,->,source1,source2,source3,rate,temp dependent,Temp range,branching,heat,uncertainty,Numerator,Denominator,Exponent,Piecewise,Min,Max,FormulaType +reaction,name,name,name,goes to,name,name,name,mks,,,ratio,eV,,K,T,dimensionless,T,K,K,, +R1,O+,e-,,,O,,,1.00E-15,,,,0,0.1,,,,,,,, diff --git a/share/run/UA/inputs/chemistry_earth_richards.csv b/share/run/UA/inputs/chemistry_earth_richards.csv index 52882a32..a814dfdd 100644 --- a/share/run/UA/inputs/chemistry_earth_richards.csv +++ b/share/run/UA/inputs/chemistry_earth_richards.csv @@ -1,57 +1,62 @@ -name,loss1,loss2,loss3,->,source1,source2,source3,rate,temp dependent,Temp range,branching,heat,,uncertainty,,,,,Numerator,Denominator,Exponent,Piecewise,Min,Max,FormulaType,eol -reaction,name,name,name,goes to,name,name,name,mks,,,ratio,eV,,,,,,,K,T,dimensionless,T,K,K,"1: (numerator/temp)^exponent, 2: temp*exp(numerator/temp)", -R1,O+,N2,,,NO+,N,,1.20E-18,,,1,1.1,,0.1,,,,no validated,,,,,,,, -R2,He+,N2,,,He,N,N+,7.80E-16,,,1,0.28,,0.1,Anichich,1993,,gitm,,,,,,,, -R3,He+,N2,,,He,N2+,,5.20E-16,,,1,0,,0.1,,,,no heating?,,,,,,,, -R4,He+,NO,,,He,N+,O,1.35E-15,,,1,0,,0.1,,,,,,,,,,,, -R5,He+,NO,,,He,O+,N,1.00E-16,,,1,0,,0.1,,,,,,,,,,,, -R6,He+,O2,,,He,O+_2D,O,2.37E-16,,,1,0,,0.1,Bischof and Linder,1986,,,,,,,,,, -R7,He+,O2,,,He,O+_2P,O,6.04E-17,,,1,0,,0.1,,,,,,,,,,,, -R8,He+,O2,,,He,O+_4S,O,2.39E-17,,,1,0,,0.1,,,,,,,,,,,, -R9,He+,O2,,,He,O+,O_1D,4.60E-17,,,1,0,,0.1,,,,,,,,,,,, -R10,He+,O2,,,He,O2+,,9.20E-18,,,1,0,,0.1,,,,,,,,,,,, -R11,He+,e-,,,He,,,4.80E-18,(250/Te)^0.7,,1,0,,0.1,,,,gitm,250,Te,0.7,,,,1, -R12,N,NO,,,N2,O,,3.40E-17,,,1,3.25,,0.1,Lee at al.,1978a+b,,gitm,,,,,,,, -R13,N,O2,,,NO,O,,1.50E-20,Tn*exp(-3270/Tn),,1,1.385,,0.1,Baulch et al,1994,,gitm,-3270,Tn,,,,,2, -R14,N,O2,,,NO,O_1S,,2.50E-17,,,1,0,,0.1,Kopp et al,1977,,??,,,,,,,, -R15,N+,NO,,,N2+,O,,8.33E-17,(300/Ti)^0.24,,1,2.2,,0.1,Fahey et al,1981,,gitm (n branch),300,Ti,0.24,,,,1, -R16,N+,NO,,,NO+,N,,4.72E-16,(300/Ti)^0.24,,1,3.4,,0.1,Anicich,1993,,gitm (n branch),300,Ti,0.24,,,,1, -R17,N+,O,,,O+,N,,2.20E-18,,,1,0.93,,0.1,Constantinides et al. (1979) + Bates (1989),,,gitm (n branch),,,,,,,, -R18,N+,O2,,,NO+,O_1D,,5.50E-16,(300/Ti)^0.45,Ti<=1000,0.36,4.71,,0.1,Dotan et al. (1997) + OKeefe et al. (1986),,,gitm (n branch),300,Ti,0.45,Ti,0,1000,1, -R18,,,,,,,,9.50E-16,,Ti>1000,,,,0.1,,,,,,,,,1000,,, -R19,N+,O2,,,NO+,O_3P,,5.50E-16,(300/Ti)^0.45,Ti<=1000,0.09,6.67,,0.1,,,,gitm (n branch),300,Ti,0.45,Ti,0,1000,1, -R19,,,,,,,,9.50E-16,,Ti>1000,,,,0.1,,,,,,,,,1000,,, -R20,N+,O2,,,O+_4S,NO,,5.50E-16,(300/Ti)^0.45,Ti<=1000,0.05,2.31,,0.1,,,,gitm (n branch),300,Ti,0.45,Ti,0,1000,1, -R20,,,,,,,,9.50E-16,,Ti>1000,,,,0.1,,,,,,,,,1000,,, -R21,N+,O2,,,O2+,N_2D,,5.50E-16,(300/Ti)^0.45,Ti<=1000,0.15,0.1,,0.1,,,,gitm (n branch),300,Ti,0.45,Ti,0,1000,1, -R21,,,,,,,,9.50E-16,,Ti>1000,,,,0.1,,,,,,,,,1000,,, -R22,N+,O2,,,O2+,N_4S,,5.50E-16,(300/Ti)^0.45,Ti<=1000,0.35,2.5,,0.1,,,,gitm (n branch),300,Ti,0.45,Ti,0,1000,1, -R22,,,,,,,,9.50E-16,,Ti>1000,,,,0.1,,,,,,,,,1000,,, -R23,N2+,e-,,,N_2D,N_2D,,1.39E-13,(300/Te)^0.39,,0.56,1.04,,0.1,,,,gitm,300,Te,0.39,,,,1, -R24,N2+,e-,,,N,N,,2.20E-13,(300/Te)^0.39,,0.44,5.77,,0.1,Zipf,1980,,gitm,300,Te,0.39,,,,1, -R25,N2+,N_4S,,,N2,N+,,1.10E-17,,,1,2.48,,0.1,Ferguson,1973,,gitm,,,,,,,, -R26,N2+,NO,,,N2,NO+,,3.60E-16,,,1,6.33,,0.1,Scott et al.,1999,,gitm,,,,,,,, -R27,N2+,O,,,NO+,N_2D,,1.33E-16,(300/Ti)^0.44,Ti<=1500,1,0.7,,0.1,Scott et al.,1999,,gitm,300,Ti,0.44,Ti,0,1500,1, -R27,,,,,,,,6.55E-17,(Ti/1500)^0.2,Ti>1500,,,,0.1,,,,,1500,Ti,-0.2,,1500,,1, -R29,N2+,O,,,O+,N2,,7.00E-18,(300/Ti)^0.23,,1,1.96,,0.1,McFarland et al,1974,,gitm,300,Ti,0.23,,,,1, -R30,N2+,O2,,,O2+,N2,,5.10E-17,(300/Ti)^1.16,Ti<=1000,1,3.53,,0.1,Scott et al.,1999,,gitm,300,Ti,1.16,Ti,0,1000,1, -R30,,,,,,,,1.26E-17,(Ti/1000)^0.67,Ti>1000,,,,0.1,,,,,1000,Ti,-0.67,,1000,,1, -R31,NO+,e-,,,N_2D,O,,3.40E-13,(300/Te)^0.85,,1,0,,0.1,Vejby-Christensen et al. (1998) and,,,,300,Te,0.85,,,,1, -R32,NO+,e-,,,N,O,,6.00E-14,(300/Te)^0.85,,1,0,,0.1,Torr and Torr,1979,,,300,Te,0.85,,,,1, -R33,O+,H,,,O,H+,,6.40E-16,,,1,0,,0.1,Anicich,1993,,,,,,,,,, -R34,O+,N_2D,,,N+,O,,1.30E-16,,,1,0,,0.1,Constantinides et al. (1979) + Bates (1989),,,,,,,,,,, -R35,O+,N2,,,NO+,N,,1.20E-18,,,1,0,,0.1,St.-Maurice and Torr (1978) + Hierl et al. (1997),,,,,,,,,,, -R36,O+,NO,,,NO+,O,,7.00E-19,(300/Ti)^-0.87,,1,4.36,,0.1,Dotan and Viggiano,1999,,gitm,300,Ti,-0.87,,,,1, -R37,O+,O2,,,O2+,O,,1.60E-17,(300/Ti)^0.52,Ti<=900,1,1.55,,0.1,,,,gitm,300,Ti,0.52,Ti,0,900,1, -R37,,,,,,,,9.00E-18,(Ti/900)^0.92,Ti>900,,,,0.1,,,,,900,Ti,-0.92,,900,,1, -R38,O+_2D,O2,,,O2+,O,,7.00E-17,,,1,4.865,,0.1,,,,gitm,,,,,,,, -R39,O+_2P,O2,,,O2+,O,,1.30E-16,,,1,6.54,,0.1,,,,gitm,,,,,,,, -R40,O+_2P,O2,,,O+,O2,,1.30E-16,,,1,5.016,,0.1,,,,gitm,,,,,,,, -R41,O2+,e-,,,O,O,,1.95E-13,(300/Te)^0.70,Ti<=1200,1,4.595,(BR averaged),0.1,Mehr and Biondi,1969,<--- Ti or Ti???,gitm,300,Te,0.7,Ti,0,1200,1, -R41,,,,,,,,7.39E-14,(1200/Te)^0.56,Ti>1200,,,,0.1,,,,,1200,Te,0.56,,1200,,1, -R42,O2+,N_2D,,,NO+,O,,1.80E-16,,,1,6.519,,0.1,Goldan,1966,,gitm,,,,,,,, -R43,O2+,N_2D,,,N+,O,O,8.65E-17,,,1,0,,0.1,O'Keefe,1986,<--- doesn't balance!,?????,,,,,,,, -R44,O2+,N_2P,,,N,O2+,,2.20E-18,,,1,3.565,,0.1,Zipf,1980,,gitm,,,,,,,, -R45,O2+,N,,,NO+,O,,1.00E-16,,,1,4.21,,0.1,Scott,1999,,gitm,,,,,,,, -R46,O2+,NO,,,NO+,O2+,,4.50E-16,,,1,2.813,,0.1,Midey and Viggiano,1999,,gitm,,,,,,,, - +name,loss1,loss2,loss3,->,source1,source2,source3,rate,temp dependent,Temp range,branching,heat,uncertainty,notes1,notes2,notes3,verification,Numerator,Denominator,Exponent,Piecewise,Min,Max,FormulaType,na,eol +reaction,name,name,name,goes to,name,name,name,mks,na,na,ratio,eV,na,na,na,na,na,K,T,dimensionless,T,K,K,1: (numerator/temp)^exponent,2: temp*exp(numerator/temp),eol +R2,He+,N2,,,He,N,N+,7.80E-16,,,1,0.28,0.1,Anichich,1993,,gitm,,,,,,,,,eol +R3,He+,N2,,,He,N2+,,5.20E-16,,,1,0,0.1,,,,no heating?,,,,,,,,,eol +R4,He+,NO,,,He,N+,O,1.35E-15,,,1,0,0.1,,,,,,,,,,,,,eol +R5,He+,NO,,,He,O+,N,1.00E-16,,,1,0,0.1,,,,,,,,,,,,,eol +R6,He+,O2,,,He,O+_2D,O,2.37E-16,,,1,0,0.1,Bischof and Linder,1986,,,,,,,,,,,eol +R7,He+,O2,,,He,O+_2P,O,6.04E-17,,,1,0,0.1,,,,,,,,,,,,,eol +R8,He+,O2,,,He,O+,O,9.70E-16,,,1,0,0.1,,,,,,,,,,,,,eol +R9,He+,O2,,,He,O+,O_1D,4.60E-17,,,1,0,0.1,,,,,,,,,,,,,eol +R10,He+,O2,,,He,O2+,,9.20E-18,,,1,0,0.1,,,,,,,,,,,,,eol +R11,He+,e-,,,He,,,4.80E-18,(250/Te)^0.7,,1,0,0.1,,,,gitm,250,Te,0.7,,,,1,,eol +R12,N,NO,,,N2,O,,3.40E-17,,,1,3.25,0.1,Lee at al.,1978a+b,,gitm,,,,,,,,,eol +R13,N,O2,,,NO,O,,1.50E-20,Tn*exp(-3270/Tn),,1,1.385,0.1,Baulch et al,1994,,gitm,-3270,Tn,,,,,2,,eol +R14,N,O2,,,NO,O_1S,,2.50E-17,,,1,0,0.1,Kopp et al,1977,,??,,,,,,,,,eol +R15,N+,NO,,,N2+,O,,8.33E-17,(300/Ti)^0.24,,1,2.2,0.1,Fahey et al,1981,,gitm (n branch),300,Ti,0.24,,,,1,,eol +R16,N+,NO,,,NO+,N,,4.72E-16,(300/Ti)^0.24,,1,3.4,0.1,Anicich,1993,,gitm (n branch),300,Ti,0.24,,,,1,,eol +R17,N+,O,,,O+,N,,2.20E-18,,,1,0.93,0.1,Constantinides et al. (1979) + Bates (1989),,,gitm (n branch),,,,,,,,,eol +R18,N+,O2,,,NO+,O_1D,,5.50E-16,(300/Ti)^0.45,Ti<=1000,0.36,4.71,0.1,Dotan et al. (1997) + OKeefe et al. (1986),,,gitm (n branch),300,Ti,0.45,Ti,0,1000,1,,eol +R18,,,,,,,,9.50E-16,,Ti>1000,,,0.1,,,,,,,,,1000,,,,eol +R19,N+,O2,,,NO+,O_3P,,5.50E-16,(300/Ti)^0.45,Ti<=1000,0.09,6.67,0.1,,,,gitm (n branch),300,Ti,0.45,Ti,0,1000,1,,eol +R19,,,,,,,,9.50E-16,,Ti>1000,,,0.1,,,,,,,,,1000,,,,eol +R20,N+,O2,,,O+,NO,,5.50E-16,(300/Ti)^0.45,Ti<=1000,0.05,2.31,0.1,,,,gitm (n branch),300,Ti,0.45,Ti,0,1000,1,,eol +R20,,,,,,,,9.50E-16,,Ti>1000,,,0.1,,,,,,,,,1000,,,,eol +R21,N+,O2,,,O2+,N_2D,,5.50E-16,(300/Ti)^0.45,Ti<=1000,0.15,0.1,0.1,,,,gitm (n branch),300,Ti,0.45,Ti,0,1000,1,,eol +R21,,,,,,,,9.50E-16,,Ti>1000,,,0.1,,,,,,,,,1000,,,,eol +R22,N+,O2,,,O2+,N_4S,,5.50E-16,(300/Ti)^0.45,Ti<=1000,0.35,2.5,0.1,,,,gitm (n branch),300,Ti,0.45,Ti,0,1000,1,,eol +R22,,,,,,,,9.50E-16,,Ti>1000,,,0.1,,,,,,,,,1000,,,,eol +R23,N2+,e-,,,N_2D,N_2D,,1.39E-13,(300/Te)^0.39,,0.56,1.04,0.1,,,,gitm,300,Te,0.39,,,,1,,eol +R24,N2+,e-,,,N,N,,2.20E-13,(300/Te)^0.39,,0.44,5.77,0.1,Zipf,1980,,gitm,300,Te,0.39,,,,1,,eol +R25,N2+,N_4S,,,N2,N+,,1.10E-17,,,1,2.48,0.1,Ferguson,1973,,gitm,,,,,,,,,eol +R26,N2+,NO,,,N2,NO+,,3.60E-16,,,1,6.33,0.1,Scott et al.,1999,,gitm,,,,,,,,,eol +R27,N2+,O,,,NO+,N_2D,,1.33E-16,(300/Ti)^0.44,Ti<=1500,1,0.7,0.1,Scott et al.,1999,,gitm,300,Ti,0.44,Ti,0,1500,1,,eol +R27,,,,,,,,6.55E-17,(Ti/1500)^0.2,Ti>1500,,,0.1,,,,,1500,Ti,-0.2,,1500,,1,,eol +R29,N2+,O,,,O+,N2,,7.00E-18,(300/Ti)^0.23,,1,1.96,0.1,McFarland et al,1974,,gitm,300,Ti,0.23,,,,1,,eol +R30,N2+,O2,,,O2+,N2,,5.10E-17,(300/Ti)^1.16,Ti<=1000,1,3.53,0.1,Scott et al.,1999,,gitm,300,Ti,1.16,Ti,0,1000,1,,eol +R30,,,,,,,,1.26E-17,(Ti/1000)^0.67,Ti>1000,,,0.1,,,,,1000,Ti,-0.67,,1000,,1,,eol +R31,NO+,e-,,,N_2D,O,,3.40E-13,(300/Te)^0.85,,1,0,0.1,Vejby-Christensen et al. (1998) and,,,,300,Te,0.85,,,,1,,eol +R32,NO+,e-,,,N,O,,6.00E-14,(300/Te)^0.85,,1,0,0.1,Torr and Torr,1979,,,300,Te,0.85,,,,1,,eol +R33,O+,H,,,O,H+,,6.40E-16,,,1,0,0.1,Anicich,1993,,,,,,,,,,,eol +R34,O+,N_2D,,,N+,O,,1.30E-16,,,1,0,0.1,Constantinides et al. (1979) + Bates (1989),,,,,,,,,,,,eol +R35,O+,N2,,,NO+,N,,1.20E-18,(300/Ti)^-0.45,Ti<=1000,1,0,0.1,St.-Maurice and Torr (1978) + Hierl et al. (1997),,,,300,Ti,-0.45,Ti,0,1000,1,,eol +R35,,,,,,,,7.90E-19,(Ti/1000)^2.12,Ti>1000,1,0,0.1,,,,,1000,Ti,2.12,,1000,,1,,eol +R36,O+,NO,,,NO+,O,,7.00E-19,(300/Ti)^-0.87,,1,4.36,0.1,Dotan and Viggiano,1999,,gitm,300,Ti,-0.87,,,,1,,eol +R37,O+,O2,,,O2+,O,,1.60E-17,(300/Ti)^0.52,Ti<=900,1,1.55,0.1,,,,gitm,300,Ti,0.52,Ti,0,900,1,,eol +R37,,,,,,,,9.00E-18,(Ti/900)^0.92,Ti>900,,,0.1,,,,,900,Ti,-0.92,,900,,1,,eol +R38,O+_2D,O2,,,O2+,O,,7.00E-17,,,1,4.865,0.1,,,,gitm,,,,,,,,,eol +R39,O+_2P,O2,,,O2+,O,,1.30E-16,,,1,6.54,0.1,,,,gitm,,,,,,,,,eol +R40,O+_2P,O2,,,O+,O2,,1.30E-16,,,1,5.016,0.1,,,,gitm,,,,,,,,,eol +R41,O2+,e-,,,O,O,,1.95E-13,(300/Te)^0.70,Ti<=1200,1,4.595,0.1,Mehr and Biondi,1969,<--- Ti or Ti???,gitm,300,Te,0.7,Ti,0,1200,1,,eol +R41,,,,,,,,7.39E-14,(1200/Te)^0.56,Ti>1200,,,0.1,,,,,1200,Te,0.56,,1200,,1,,eol +R42,O2+,N_2D,,,NO+,O,,1.80E-16,,,1,6.519,0.1,Goldan,1966,,gitm,,,,,,,,,eol +R43,O2+,N_2D,,,N+,O,O,8.65E-17,,,1,0,0.1,O'Keefe,1986,<--- doesn't balance!,?????,,,,,,,,,eol +R44,O2+,N_2P,,,N,O2+,,2.20E-18,,,1,3.565,0.1,Zipf,1980,,gitm,,,,,,,,,eol +R45,O2+,N,,,NO+,O,,1.00E-16,,,1,4.21,0.1,Scott,1999,,gitm,,,,,,,,,eol +R46,O2+,NO,,,NO+,O2+,,4.50E-16,,,1,2.813,0.1,Midey and Viggiano,1999,,gitm,,,,,,,,,eol +R47,O+_2D,,,,O+,,,7.70E-05,,,1,0,0.1,,,,gitm,,,,,,,,,eol +R48,O+_2P,,,,O+,,,4.70E-02,,,1,0,0.1,,,,gitm,,,,,,,,,eol +R49,O+_2D,O,,,O+,O,,1.00E-17,,,1,1.655,0.1,,,,gitm,,,,,,,,,eol +R49,O+_2P,O,,,O+,O,,4.00E-16,,,1,5,0.1,,,,gitm,,,,,,,,,eol +R49,O+_2D,e-,,,O+,e-,,6.03E-14,(300/Te)^0.5,,1,1.655,0.1,,,,gitm,300,Te,0.5,,,,1,,eol +R49,O+_2P,e-,,,O+,e-,,3.03E-14,(300/Te)^0.5,,1,5,0.1,,,,gitm,300,Te,0.5,,,,1,,eol \ No newline at end of file diff --git a/share/run/UA/inputs/chemistry_earth_simple.csv b/share/run/UA/inputs/chemistry_earth_simple.csv new file mode 100644 index 00000000..d20ccb0e --- /dev/null +++ b/share/run/UA/inputs/chemistry_earth_simple.csv @@ -0,0 +1,30 @@ +name,loss1,loss2,loss3,->,source1,source2,source3,rate,temp dependent,Temp range,branching,heat,uncertainty,,Numerator,Denominator,Exponent,Piecewise,Min,Max,FormulaType,eol +reaction,name,name,name,goes to,name,name,name,mks,,,ratio,eV,,,K,T,dimensionless,T,K,K,"1: (numerator/temp)^exponent, 2: temp*exp(numerator/temp)",eol +R23,N2+,e-,,,N_2D,N_2D,,1.39E-13,(300/Te)^0.39,,0.56,1.04,0.1,gitm,300,Te,0.39,,,,1,eol +R24,N2+,e-,,,N,N,,2.20E-13,(300/Te)^0.39,,0.44,5.77,0.1,gitm,300,Te,0.39,,,,1,eol +R26,N2+,NO,,,N2,NO+,,3.60E-16,,,1,6.33,0.1,gitm,,,,,,,,eol +R27,N2+,O,,,NO+,N_2D,,1.33E-16,(300/Ti)^0.44,Ti<=1500,1,0.7,0.1,gitm,300,Ti,0.44,Ti,0,1500,1,eol +R27,,,,,,,,6.55E-17,(Ti/1500)^0.2,Ti>1500,,,0.1,,1500,Ti,-0.2,,1500,,1,eol +R29,N2+,O,,,O+,N2,,7.00E-18,(300/Ti)^0.23,,1,1.96,0.1,gitm,300,Ti,0.23,,,,1,eol +R30,N2+,O2,,,O2+,N2,,5.10E-17,(300/Ti)^1.16,Ti<=1000,1,3.53,0.1,gitm,300,Ti,1.16,Ti,0,1000,1,eol +R30,,,,,,,,1.26E-17,(Ti/1000)^0.67,Ti>1000,,,0.1,,1000,Ti,-0.67,,1000,,1,eol +R31,NO+,e-,,,N_2D,O,,3.40E-13,(300/Te)^0.85,,1,0.38,0.1,gitm,300,Te,0.85,,,,1,eol +R32,NO+,e-,,,N,O,,6.00E-14,(300/Te)^0.85,,1,2.77,0.1,gitm,300,Te,0.85,,,,1,eol +R35,O+,N2,,,NO+,N,,1.20E-18,,,1,1.1,0.1,,,,,,,,,eol +R36,O+,NO,,,NO+,O,,7.00E-19,(300/Ti)^-0.87,,1,4.36,0.1,gitm,300,Ti,-0.87,,,,1,eol +R37,O+,O2,,,O2+,O,,1.60E-17,(300/Ti)^0.52,Ti<=900,1,1.55,0.1,gitm,300,Ti,0.52,Ti,0,900,1,eol +R37,,,,,,,,9.00E-18,(Ti/900)^0.92,Ti>900,,,0.1,,900,Ti,-0.92,,900,,1,eol +R41,O2+,e-,,,O,O,,1.95E-13,(300/Te)^0.70,Ti<=1200,1,50,0.1,gitm,300,Te,0.7,Ti,0,1200,1,eol +R41,,,,,,,,7.39E-14,(1200/Te)^0.56,Ti>1200,,,0.1,,1200,Te,0.56,,1200,,1,eol +R46,O2+,NO,,,NO+,O2,,4.50E-16,,,1,2.813,0.1,gitm,,,,,,,,eol +R15,N+,NO,,,N2+,O,,8.33E-17,(300/Ti)^0.24,,1,2.2,0.1,gitm (n branch),300,Ti,0.24,,,,1,eol +R16,N+,NO,,,NO+,N,,4.72E-16,(300/Ti)^0.24,,1,3.4,0.1,gitm (n branch),300,Ti,0.24,,,,1,eol +R17,N+,O,,,O+,N,,2.20E-18,,,1,0.93,0.1,gitm (n branch),,,,,,,,eol +R19,N+,O2,,,NO+,O,,5.50E-16,(300/Ti)^0.45,Ti<=1000,0.09,6.67,0.1,gitm (n branch),300,Ti,0.45,Ti,0,1000,1,eol +R19,,,,,,,,9.50E-16,,Ti>1000,,,0.1,,,,,,1000,,,eol +R20,N+,O2,,,O+,NO,,5.50E-16,(300/Ti)^0.45,Ti<=1000,0.05,2.31,0.1,gitm (n branch),300,Ti,0.45,Ti,0,1000,1,eol +R20,,,,,,,,9.50E-16,,Ti>1000,,,0.1,,,,,,1000,,,eol +R21,N+,O2,,,O2+,N_2D,,5.50E-16,(300/Ti)^0.45,Ti<=1000,0.15,0.1,0.1,gitm (n branch),300,Ti,0.45,Ti,0,1000,1,eol +R21,,,,,,,,9.50E-16,,Ti>1000,,,0.1,,,,,,1000,,,eol +R22,N+,O2,,,O2+,N_4S,,5.50E-16,(300/Ti)^0.45,Ti<=1000,0.35,2.5,0.1,gitm (n branch),300,Ti,0.45,Ti,0,1000,1,eol +R22,,,,,,,,9.50E-16,,Ti>1000,,,0.1,,,,,,1000,,,eol \ No newline at end of file diff --git a/share/run/UA/inputs/defaults.json b/share/run/UA/inputs/defaults.json index 724a0bcc..5e61f466 100644 --- a/share/run/UA/inputs/defaults.json +++ b/share/run/UA/inputs/defaults.json @@ -1,125 +1,191 @@ - { - "Debug" : { - "iVerbose" : 0, - "doInheritVerbose" : false, - "dt" : 60.0, - "TimingPercent" : 1.0, - "iTimingDepth" : 5, - "iProc" : 0, - "iFunctionVerbose" : { - "Grid::create_altitudes": 0}, - "check_for_nans" : false, - "nan_test" : { - "insert" : false, - "variable" : "temperature_scgc"} }, - - "InitialConditions" : { - "type" : "Planet"}, - - "BoundaryConditions" : { - "type" : "Planet"}, - - "Advection" : { - "Neutrals" : { - "Vertical" : "rusanov", - "Horizontal" : "default"}, - "Ions" : { - "Along" : "rusanov", - "Across" : "default"} }, - - "Student" : { - "name" : "", - "is" : false }, - - "Planet" : { - "name" : "earth", - "file": "UA/inputs/earth.in"}, - - "BField" : "dipole", - - "Electrodynamics" : { - "Potential" : "weimer", - "DiffuseAurora" : "fta", - "Dir" : "UA/inputs/ext/ie/", - "File" : ""}, - - "Euv" : { - "doUse" : true, - "Model" : "euvac", - "File" : "UA/inputs/euv.csv", - "IncludePhotoElectrons" : true, - "HeatingEfficiency" : 0.05, - "dt" : 60.0}, - - "DoCalcBulkIonTemp" : false, - - "Eddy" : { - "Coefficient" : 50.0, - "BottomPressure" : 0.01, - "TopPressure" : 0.005, - "UseInEnergy": true, - "UseInMomentum": true}, - - "StartTime" : [2011, 3, 20, 0, 0, 0], - "EndTime" : [2011, 3, 20, 0, 10, 0], - - "GeoBlockSize" : { - "nLons" : 36, - "nLats" : 36, - "nAlts" : 50}, - - "GeoGrid" : { - "MinLat" : -90.0, - "MaxLat" : 90.0, - "MinLon" : 0.0, - "MaxLon" : 360.0, - "MinAlt" : 100.0, - "dAlt" : 5.0, - "AltFile" : "", - "IsUniformAlt" : true}, - - "CubeSphere" : { - "is" : false}, - - "Oblate" : { - "isOblate" : false, - "isJ2" : false}, - - "Ensembles" : { - "nMembers" : 1}, - - "Sources" : { - "Grid" : { - "Cent_acc" : true }, - "Neutrals" : { - "NO_cool" : false, - "O_cool": false } }, - - "Seed" : 0, - - "F107File" : "UA/inputs/f107.txt", - "ChemistryFile" : "UA/inputs/chemistry_earth_richards.csv", - "CollisionsFile" : "UA/inputs/ion_neutral_collision_frequencies.csv", - "PlanetCharacteristicsFile" : "UA/inputs/orbits.csv", - "AuroraFile" : "UA/inputs/aurora_earth.csv", - "IndicesLookupFile" : "UA/inputs/indices_lookup.json", - - "OnmiwebFile" : [""], - - "Logfile" : { - "name" : "UA/output/log.txt", - "append" : false, - "dt" : 10.0, - "species" : ["O2", "O2+"]}, - - "Outputs" : { - "type" : ["states", "grid"], - "dt" : [900, -1]}, - - "Restart" : { - "do" : false, - "OutDir" : "UA/restartOut", - "InDir" : "UA/restartIn", - "dt" : 3600.0} -} + "Debug": { + "iVerbose": 0, + "doInheritVerbose": false, + "dt": 60.0, + "TimingPercent": 1.0, + "iTimingDepth": 5, + "iProc": 0, + "iFunctionVerbose": { + "Grid::create_altitudes": 0 + }, + "check_for_nans": false, + "nan_test": { + "insert": false, + "variable": "temperature_scgc" + } + }, + "InitialConditions": { + "type": "Planet" + }, + "BoundaryConditions": { + "type": "Planet" + }, + "Advection": { + "Neutrals": { + "Vertical": "rusanov", + "Horizontal": "fv", + "useBulkWinds": true, + "useImplicitFriction": true + }, + "Ions": { + "Along": "rusanov", + "Across": "default" + } + }, + "Student": { + "name": "", + "is": false + }, + "Planet": { + "name": "earth", + "file": "UA/inputs/earth.in" + }, + "BField": "dipole", + "Electrodynamics": { + "Potential": "weimer", + "DiffuseAurora": "fta", + "Dir": "UA/inputs/ext/ie/", + "File": "" + }, + "Euv": { + "doUse": true, + "Model": "euvac", + "File": "UA/inputs/euv.csv", + "IncludePhotoElectrons": true, + "HeatingEfficiency": 0.05, + "dt": 60.0 + }, + "DoCalcBulkIonTemp": false, + "Eddy": { + "Coefficient": 50.0, + "BottomPressure": 0.01, + "TopPressure": 0.005, + "UseInEnergy": true, + "UseInMomentum": true + }, + "StartTime": [ + 2011, + 3, + 20, + 0, + 0, + 0 + ], + "EndTime": [ + 2011, + 3, + 20, + 0, + 10, + 0 + ], + "neuGrid": { + "Shape": "sphere4", + "LatRange": [ + -90.0, + 90.0 + ], + "nLatsPerBlock": 18, + "LonRange": [ + 0.0, + 360.0 + ], + "nLonsPerBlock": 20, + "nAlts": 40, + "MinAlt": 100.0, + "dAltkm": 5.0, + "dAltScale": 0.25, + "IsUniformAlt": true, + "AltFile": "" + }, + "ionGrid": { + "Shape": "dipole4", + "nLonsPerBlock": 36, + "nLatsPerBlock": 18, + "nAlts": 100, + "AltFile": "", + "dAltScale": 0.25, + "IsUniformAlt": false, + "MinAlt": 80.0, + "LatRange": [ + 10, + 80 + ], + "AltRange": [ + 80.0, + 1000 + ], + "LonRange": [ + 0.0, + 360.0 + ] + }, + "Oblate": { + "isOblate": false, + "isJ2": false + }, + "Ensembles": { + "nMembers": 1 + }, + "Sources": { + "Grid": { + "Coriolis": true, + "Cent_acc": true + }, + "Neutrals": { + "NO_cool": false, + "O_cool": false + }, + "Ions": { + "IncludePhotoElectronHeating": true, + "IncludeIonizationHeating": true, + "IncludeElectronIonCollisionalHeating": true, + "IncludeElectronNeutralElasticCollisionalHeating": true, + "IncludeElectronNeutralInelasticCollisionalHeating": true, + "IncludeThermoelectricHeating": false + } + }, + "Seed": 0, + "F107File": "UA/inputs/f107.txt", + "ChemistryFile": "UA/inputs/chemistry_earth_richards.csv", + "CollisionsFile": "UA/inputs/ion_neutral_collision_frequencies.csv", + "PlanetCharacteristicsFile": "UA/inputs/orbits.csv", + "AuroraFile": "UA/inputs/aurora_earth.csv", + "IndicesLookupFile": "UA/inputs/indices_lookup.json", + "OmniwebFile": [ + "UA/inputs/omni_20110319.txt" + ], + "Logfile": { + "name": [ + "UA/output/log_geo.txt", + "UA/output/log_mag.txt" + ], + "append": false, + "dt": 10.0, + "species": [ + "O2", + "O2+" + ] + }, + "Outputs": { + "type": [ + "states", + "grid" + ], + "dt": [ + 900, + -1 + ] + }, + "Restart": { + "do": false, + "OutDir": "UA/restartOut", + "InDir": "UA/restartIn", + "dt": 3600.0 + }, + "DoTests": { + "test_gradient": false, + "exit_on_fail": true + } +} \ No newline at end of file diff --git a/share/run/UA/inputs/earth.in b/share/run/UA/inputs/earth.in index e8f4432b..812097d7 100644 --- a/share/run/UA/inputs/earth.in +++ b/share/run/UA/inputs/earth.in @@ -25,13 +25,15 @@ BC is a density that is used in the lowest boundary cell if you In this example file, the values are from 96.87 km Jan 1, 2013 O_1D is made up. +#ALTITUDE_OF_BC +96.87 #NEUTRALS name, mass, vibration, thermal_cond, thermal_exp, advect, BC -O, 16, 5, 5.6e-4, 0.69, 1, 5.0e17 +O, 16, 5, 5.6e-4, 0.69, 1, 7.3e17 N, 14, 5, 5.6e-4, 0.69, 1, 2.5e11 -O2, 32, 7, 3.6e-4, 0.69, 1, 4.0e18 -N2, 28, 7, 3.6e-4, 0.69, 1, 1.7e19 +O2, 32, 7, 3.6e-4, 0.69, 1, 0.4e19 +N2, 28, 7, 3.6e-4, 0.69, 1, 0.8e19 NO, 30, 7, 3.6e-4, 0.69, 1, 5.4e14 He, 4, 5, 5.6e-4, 0.69, 1, 1.5e14 N_2D, 14, 5, 5.6e-4, 0.69, 0, 2.5e9 @@ -40,7 +42,6 @@ H, 1, 5, 5.6e-4, 0.69, 0, 3.0e13 O_1D, 16, 5, 5.6e-4, 0.69, 0, 1.0e10 CO2, 46, 7, 3.6e-4, 0.69, 0, 4.5e15 - Here we can input a temperature profile for the initial condition: - below the lowest altitude, it will use the lowest alt - above the highest alt, it will use the highest alt @@ -57,12 +58,12 @@ O+ is O+(4S) is the base state of O+, but is just called O+ O+ has excited states of O+(2D) and O+(2P). #IONS -name, mass, charge, advect -O+, 16, 1, 1 -O2+, 32, 1, 0 -N2+, 28, 1, 0 -NO+, 30, 1, 0 -N+, 14, 1, 0 -He+, 4, 1, 1 -O+_2D, 16, 1, 0 -O+_2P, 16, 1, 0 +name, mass, charge, vibration, advect +O+, 16, 1, 5, 1 +O2+, 32, 1, 7, 0 +N2+, 28, 1, 7, 0 +NO+, 30, 1, 7, 1 +N+, 14, 1, 5, 0 +He+, 4, 1, 5, 0 +O+_2D, 16, 1, 5, 0 +O+_2P, 16, 1, 5, 0 diff --git a/share/run/UA/inputs/earth_simple.in b/share/run/UA/inputs/earth_simple.in new file mode 100644 index 00000000..94a75ac8 --- /dev/null +++ b/share/run/UA/inputs/earth_simple.in @@ -0,0 +1,60 @@ + +name is the character string that identifies the species + +O(3P) is the base state of neutral atomic oxygen and is called O. +O(1D) is an excited state of oxygen and is NOT INCLUDED +N(4S) is the base state of neutral atomic nitrogen and is called N. +N(2D) is an excited state of nitrogen and is called N_2D +N(2P) is an excited state of nitrogen and is called N_2P + +Vibration is the degrees of freedom for the atom/molecule + +thermal conduction is typically: +Lambda = (N1 * A1 * T^c1 + N2 * A2 * T^c2 + ... ) / (N1+N2+...) +thermal_cond is the A for the particular species +thermal_exp is the c for the particular species + +mass is in amu + +advect is whether the species is advected or not + +BC is a density that is used in the lowest boundary cell if you + want a constant boundary condition. + Set to a real value to use this. + Set to a negative number if you want to use a different BC. + In this example file, the values are from 96.87 km Jan 1, 2013 + O_1D is made up. + + +#NEUTRALS +name, mass, vibration, thermal_cond, thermal_exp, advect, BC +O, 16, 5, 5.6e-4, 0.69, 1, 7.3e17 +N, 14, 5, 5.6e-4, 0.69, 1, 2.5e11 +O2, 32, 7, 3.6e-4, 0.69, 1, 0.4e19 +N2, 28, 7, 3.6e-4, 0.69, 1, 0.8e19 +NO, 30, 7, 3.6e-4, 0.69, 1, 5.4e14 +N_2D, 14, 5, 5.6e-4, 0.69, 0, 2.5e9 +N_2P, 14, 5, 5.6e-4, 0.69, 0, 2.5e7 + +Here we can input a temperature profile for the initial condition: + - below the lowest altitude, it will use the lowest alt + - above the highest alt, it will use the highest alt + - in between, linear interpolation + - altitudes in km + +#TEMPERATURE +alt, temp +100.0, 200.0 +200.0, 800.0 +300.0, 800.0 + +O+ is O+(4S) is the base state of O+, but is just called O+ +O+ has excited states of O+(2D) and O+(2P) - NOT INCLUDED! + +#IONS +name, mass, charge, vibration, advect +O+, 16, 1, 5, 1 +O2+, 32, 1, 7, 0 +N2+, 28, 1, 7, 0 +NO+, 30, 1, 7, 0 +N+, 14, 1, 5, 0 diff --git a/share/run/UA/inputs/euv.csv b/share/run/UA/inputs/euv.csv index 653acae8..3055b608 100644 --- a/share/run/UA/inputs/euv.csv +++ b/share/run/UA/inputs/euv.csv @@ -10,9 +10,9 @@ O2,O2+,ion,1.00E-22, m2,1.316,2.346,4.139,6.619,8.46,9.89,9.056,10.86,10.88,12.2 O2,O+,ion,1.00E-22, m2,0,1.46,3.368,4.281,4.91,5.9,5.332,5.94,5.93,5.212,4.56,4.703,4.818,4.94,5.347,5.139,4.44,3.88,3.824,1.85,1.03,0.962,0.191,0,0,0,0,0,0,0,0,0,0,0,0,0,0, No Comments O,O,abs,1.00E-22, m2,0.73,1.839,3.732,5.202,6.05,7.08,6.461,7.68,7.7,8.693,9.84,9.687,11.496,11.93,12.127,12.059,12.59,13.09,13.024,13.4,13.4,13.365,17.245,11.46,10.736,4,3.89,3.749,5.091,3.498,4.554,1.315,0,0,0,0,0, Last 5 are questionable O,O+,ion,1.00E-22, m2,0.19,0.486,0.952,1.311,1.539,1.77,1.628,1.92,1.925,2.259,2.559,2.523,3.073,3.34,3.394,3.421,3.65,3.92,3.62,3.61,3.88,4.25,5.128,4.89,6.739,4,3.89,3.749,5.091,3.498,4.554,1.315,0,0,0,0,0, Last 5 are questionable -O,O+2D,ion,1.00E-22, m2,0.206,0.529,1.171,1.762,2.138,2.62,2.325,2.842,2.849,3.446,3.936,3.883,4.896,5.37,5.459,5.427,5.67,6.02,5.91,6.17,6.29,6.159,11.453,6.57,3.997,0,0,0,0,0,0,0,0,0,0,0,0, Last 5 are questionable -O,O+2P,ion,1.00E-22, m2,0.062,0.163,0.348,0.508,0.598,0.71,0.637,0.691,0.693,0.815,0.787,0.859,0.541,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, Last 5 are questionable -O,O+2P*,ion,1.00E-22, m2,0.049,0.13,0.278,0.366,0.412,0.35,0.383,0.307,0.308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, Last 5 are questionable +O,O+_2D,ion,1.00E-22, m2,0.206,0.529,1.171,1.762,2.138,2.62,2.325,2.842,2.849,3.446,3.936,3.883,4.896,5.37,5.459,5.427,5.67,6.02,5.91,6.17,6.29,6.159,11.453,6.57,3.997,0,0,0,0,0,0,0,0,0,0,0,0, Last 5 are questionable +O,O+_2P,ion,1.00E-22, m2,0.062,0.163,0.348,0.508,0.598,0.71,0.637,0.691,0.693,0.815,0.787,0.859,0.541,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, Last 5 are questionable +O,O+_2P*,ion,1.00E-22, m2,0.049,0.13,0.278,0.366,0.412,0.35,0.383,0.307,0.308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, Last 5 are questionable O,O++,ion,1.00E-22, m2,0.088,0.186,0.215,0.11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, Last 5 are questionable N,N,abs,1.00E-22, m2,0.331,0.996,2.49,3.946,4.874,5.725,5.244,6.399,6.413,7.298,8.302,8.15,9.556,10.578,11.016,11.503,11.772,11.778,11.758,11.798,11.212,11.951,12.423,13.265,12.098,11.323,11.244,10.961,11.171,10.294,0.211,0,0,0,0,0,0, Last 5 are questionable N,N+,ion,1.00E-22, m2,0.286,0.878,2.3,3.778,4.787,5.725,5.192,6.399,6.413,7.298,8.302,8.15,9.556,10.578,11.016,11.503,11.772,11.778,11.758,11.798,11.212,11.951,12.423,13.265,12.098,11.323,11.244,10.961,11.171,10.294,0.211,0,0,0,0,0,0, Last 5 are questionable diff --git a/share/run/UA/inputs/euv_59_v2.csv b/share/run/UA/inputs/euv_59_v2.csv new file mode 100644 index 00000000..7f807952 --- /dev/null +++ b/share/run/UA/inputs/euv_59_v2.csv @@ -0,0 +1,43 @@ + Short,,wave,1.0000E+00,Angstroms, 1.0000E+00, 2.0000E+00, 4.0000E+00, 8.0000E+00, 1.6000E+01, 2.3000E+01, 3.2000E+01, 5.0000E+01, 1.0000E+02, 1.5000E+02, 2.0000E+02, 2.5630E+02, 2.8415E+02, 2.5000E+02, 3.0331E+02, 3.0378E+02, 3.0000E+02, 3.6807E+02, 3.5000E+02, 4.0000E+02, 4.6522E+02, 4.5000E+02, 5.0000E+02, 5.5437E+02, 5.8433E+02, 5.5000E+02, 6.0976E+02, 6.2973E+02, 6.0000E+02, 6.5000E+02, 7.0331E+02, 7.0000E+02, 7.6515E+02, 7.7041E+02, 7.8936E+02, 7.5000E+02, 8.0000E+02, 8.5000E+02, 9.0000E+02, 9.7702E+02, 9.5000E+02, 1.0257E+03, 1.0319E+03, 1.0000E+03, 1.0500E+03, 1.1000E+03, 1.1500E+03, 1.2157E+03, 1.2000E+03, 1.2500E+03, 1.3000E+03, 1.3500E+03, 1.4000E+03, 1.4500E+03, 1.5000E+03, 1.5500E+03, 1.6000E+03, 1.6500E+03, 1.7000E+03, from GITM + Long,,wave,1.0000E+00,Angstroms, 2.0000E+00, 4.0000E+00, 8.0000E+00, 1.6000E+01, 2.3000E+01, 3.2000E+01, 5.0000E+01, 1.0000E+02, 1.5000E+02, 2.0000E+02, 2.5000E+02, 2.5630E+02, 2.8415E+02, 3.0000E+02, 3.0331E+02, 3.0378E+02, 3.5000E+02, 3.6807E+02, 4.0000E+02, 4.5000E+02, 4.6522E+02, 5.0000E+02, 5.5000E+02, 5.5437E+02, 5.8433E+02, 6.0000E+02, 6.0976E+02, 6.2973E+02, 6.5000E+02, 7.0000E+02, 7.0331E+02, 7.5000E+02, 7.6515E+02, 7.7041E+02, 7.8936E+02, 8.0000E+02, 8.5000E+02, 9.0000E+02, 9.5000E+02, 9.7702E+02, 1.0000E+03, 1.0257E+03, 1.0319E+03, 1.0500E+03, 1.1000E+03, 1.1500E+03, 1.2000E+03, 1.2157E+03, 1.2500E+03, 1.3000E+03, 1.3500E+03, 1.4000E+03, 1.4500E+03, 1.5000E+03, 1.5500E+03, 1.6000E+03, 1.6500E+03, 1.7000E+03, 1.7500E+03, from GITM + F74113,,,1.0000E+09,/cm2/s, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 1.2000E+00, 4.5000E-01, 4.8000E+00, 3.1000E+00, 4.6000E-01, 2.1000E-01, 1.6790E+00, 8.0000E-01, 6.9000E+00, 9.6500E-01, 6.5000E-01, 3.1400E-01, 3.8300E-01, 2.9000E-01, 2.8500E-01, 4.5200E-01, 7.2000E-01, 1.2700E+00, 3.5700E-01, 5.3000E-01, 1.5900E+00, 3.4200E-01, 2.3000E-01, 3.6000E-01, 1.4100E-01, 1.7000E-01, 2.6000E-01, 7.0200E-01, 7.5800E-01, 1.6250E+00, 3.5370E+00, 3.0000E+00, 4.4000E+00, 1.4750E+00, 3.5000E+00, 2.1000E+00, 2.4670E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, from GITM + AFAC,,,1.0000E+00,, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 1.0017E-02, 7.1250E-03, 1.3375E-02, 1.9450E-02, 2.7750E-03, 1.3768E-01, 2.6467E-02, 2.5000E-02, 3.3333E-03, 2.2450E-02, 6.5917E-03, 3.6542E-02, 7.4083E-03, 7.4917E-03, 2.0225E-02, 8.7583E-03, 3.2667E-03, 5.1583E-03, 3.6583E-03, 1.6175E-02, 3.3250E-03, 1.1800E-02, 4.2667E-03, 3.0417E-03, 4.7500E-03, 3.8500E-03, 1.2808E-02, 3.2750E-03, 4.7667E-03, 4.8167E-03, 5.6750E-03, 4.9833E-03, 3.9417E-03, 4.4167E-03, 5.1833E-03, 5.2833E-03, 4.3750E-03, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, from GITM + NEUV_S1,,,1.0000e+00,slope, 4.7721e-01, 4.8836e-01, 5.1112e-01, 4.6218e-01, 4.4626e-01, 4.5621e-01, 4.6444e-01, 2.5497e-01, 4.5348e-01, 2.7143e-01, 1.0616e+00, 4.3086e-01, 4.8995e-01, 4.3046e-01, 1.9877e-01, 4.5349e-01, 5.1979e-01, 4.5590e-01, 4.0438e-01, 4.4541e-01, 4.5721e-01, 5.2010e-01, 4.5938e-01, 4.5614e-01, 4.9421e-01, 4.6293e-01, 4.6222e-01, 4.5820e-01, 4.4724e-01, 4.5370e-01, 4.5756e-01, 4.6456e-01, 4.5873e-01, 4.5651e-01, 4.5443e-01, 4.4956e-01, 4.1966e-01, 5.3686e-01, 4.3159e-01, 3.6366e-01, 4.7233e-01, 4.7194e-01, 4.5386e-01, 4.5133e-01, 4.6587e-01, 4.4840e-01, 5.3661e-01, 1.0786e-01, 2.6182e-01, 4.4807e-01, 4.2671e-01, 4.9602e-01, 4.4946e-01, 5.0319e-01, 4.3481e-01, 4.9051e-01, 1.5122e-01, 3.8279e-01, 7.0315e-01,from GITM + NEUV_S2,,,1.0000e+00,slope, -4.7721e-01, -4.8836e-01, -5.1112e-01, -4.6218e-01, -4.4626e-01, -4.5620e-01, -4.6443e-01, -2.5496e-01, -4.5348e-01, -2.7142e-01, -1.0616e+00, -4.3086e-01, -4.8995e-01, -4.3045e-01, -1.9877e-01, -4.5349e-01, -5.1978e-01, -4.5590e-01, -4.0438e-01, -4.4540e-01, -4.5721e-01, -5.2010e-01, -4.5938e-01, -4.5614e-01, -4.9421e-01, -4.6293e-01, -4.6222e-01, -4.5820e-01, -4.4724e-01, -4.5370e-01, -4.5756e-01, -4.6456e-01, -4.5873e-01, -4.5651e-01, -4.5443e-01, -4.4956e-01, -4.1966e-01, -5.3685e-01, -4.3158e-01, -3.6366e-01, -4.7233e-01, -4.7194e-01, -4.5386e-01, -4.5133e-01, -4.6587e-01, -4.4840e-01, -5.3661e-01, -1.0781e-01, -2.6182e-01, -4.4807e-01, -4.2671e-01, -4.9602e-01, -4.4946e-01, -5.0318e-01, -4.3481e-01, -4.9051e-01, -1.5121e-01, -3.8278e-01, -7.0314e-01,from GITM + NEUV_S3,,,1.0000e+00,slope, 4.7721e-01, 4.8836e-01, 5.1112e-01, 4.6218e-01, 4.4626e-01, 4.5621e-01, 4.6444e-01, 2.5496e-01, 4.5348e-01, 2.7143e-01, 1.0616e+00, 4.3086e-01, 4.8995e-01, 4.3045e-01, 1.9877e-01, 4.5349e-01, 5.1979e-01, 4.5590e-01, 4.0438e-01, 4.4541e-01, 4.5721e-01, 5.2010e-01, 4.5938e-01, 4.5614e-01, 4.9421e-01, 4.6293e-01, 4.6222e-01, 4.5820e-01, 4.4724e-01, 4.5370e-01, 4.5756e-01, 4.6456e-01, 4.5873e-01, 4.5651e-01, 4.5443e-01, 4.4956e-01, 4.1966e-01, 5.3685e-01, 4.3158e-01, 3.6366e-01, 4.7233e-01, 4.7194e-01, 4.5386e-01, 4.5133e-01, 4.6587e-01, 4.4840e-01, 5.3661e-01, 1.0783e-01, 2.6182e-01, 4.4807e-01, 4.2671e-01, 4.9602e-01, 4.4946e-01, 5.0319e-01, 4.3481e-01, 4.9051e-01, 1.5121e-01, 3.8278e-01, 7.0314e-01,from GITM + NEUV_l1,,,1.0000e+00,ints, 6.3336e-12, -1.7586e-09, -5.8173e-07, -2.7526e-05, -7.9475e-05, -2.5214e-05, -7.7868e-05, -1.8471e-04, -1.0315e-05, -4.5460e-06, -1.7387e-04, -2.8295e-06, -9.3578e-05, -8.0510e-05, 2.5654e-04, 9.7116e-07, -4.2748e-05, 1.8657e-05, -4.2105e-05, 1.1967e-05, 1.3408e-05, -3.2775e-06, 7.3782e-06, 2.1466e-05, 2.6201e-05, 8.4018e-06, -1.1750e-06, 4.4671e-05, 2.3090e-07, 1.1496e-05, 1.0248e-05, 1.1219e-05, 1.0442e-05, 1.1598e-05, 1.0931e-05, 3.5491e-05, 5.7380e-05, 7.2432e-05, 6.6057e-05, 9.0619e-05, 3.0050e-05, 3.3145e-05, 2.8926e-05, 3.9467e-05, 3.6713e-05, 4.8318e-05, 1.5926e-04, 3.6572e-03, 3.2218e-04, 8.4120e-05, 2.6237e-04, 1.4758e-04, 1.9098e-04, 2.9104e-04, 4.6908e-04, 7.1953e-04, 1.0507e-03, 1.9508e-03, 3.2611e-03,from GITM + NEUV_P1,,,1.0000e+00,powers, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 9.9997e-01, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00,from GITM + NEUV_P2,,,1.0000e+00,powers, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00,from GITM + O2,O2,abs,1.0000E-22,m2, 4.0000E-04, 4.0000E-03, 2.4000E-02, 1.4000E-01, 1.0200E+00, 1.0000E-01, 3.2000E-01, 1.1800E+00, 4.0000E+00, 7.1000E+00, 1.0600E+01, 1.3200E+01, 1.5700E+01, 1.5100E+01, 1.6800E+01, 1.6800E+01, 1.7190E+01, 1.8400E+01, 1.8170E+01, 1.9390E+01, 2.0400E+01, 2.1590E+01, 2.4060E+01, 2.5590E+01, 2.2000E+01, 2.5040E+01, 2.6100E+01, 2.5800E+01, 2.6020E+01, 2.6270E+01, 2.5000E+01, 2.9050E+01, 2.1960E+01, 2.5180E+01, 2.6660E+01, 2.7090E+01, 2.0870E+01, 9.8500E+00, 1.5540E+01, 4.0000E+00, 1.6530E+01, 1.6000E+00, 1.0000E+00, 1.1000E+00, 1.0000E+00, 1.0000E-01, 3.0000E-01, 1.0000E-02, 3.0000E+00, 3.0000E-01, 2.2000E+00, 1.2000E+01, 1.5000E+01, 1.3000E+01, 1.0000E+01, 6.0000E+00, 3.4000E+00, 1.5000E+00, 5.0000E-01, from GITM + O,O,abs,1.0000E-22,m2, 2.0000E-04, 2.0000E-03, 1.2000E-02, 7.0000E-02, 5.1000E-01, 5.0000E-02, 1.6000E-01, 5.9000E-01, 1.6000E+00, 2.9000E+00, 5.3000E+00, 6.0500E+00, 7.1300E+00, 6.6100E+00, 7.6800E+00, 7.7000E+00, 8.6700E+00, 9.9500E+00, 9.6400E+00, 1.1210E+01, 1.1250E+01, 1.1640E+01, 1.1910E+01, 1.2130E+01, 1.2170E+01, 1.1900E+01, 1.2230E+01, 1.2220E+01, 1.2210E+01, 1.0040E+01, 1.1350E+01, 8.0000E+00, 4.1800E+00, 4.1800E+00, 4.2800E+00, 4.2300E+00, 4.3800E+00, 4.1800E+00, 2.1200E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, from GITM + N2,N2,abs,1.0000E-22,m2, 3.0000E-04, 3.0000E-03, 1.5000E-02, 9.0000E-02, 4.8000E-01, 1.1600E+00, 2.4000E-01, 6.0000E-01, 1.9000E+00, 4.4000E+00, 8.0000E+00, 9.7000E+00, 1.0600E+01, 1.0300E+01, 1.1600E+01, 1.1600E+01, 1.3000E+01, 1.8000E+01, 1.7510E+01, 2.1070E+01, 2.1800E+01, 2.1850E+01, 2.4530E+01, 2.4690E+01, 2.3200E+01, 2.2380E+01, 2.3100E+01, 2.3200E+01, 2.3220E+01, 2.9750E+01, 2.6300E+01, 3.0940E+01, 3.5460E+01, 2.6880E+01, 1.9260E+01, 3.0710E+01, 1.5050E+01, 4.6630E+01, 1.6990E+01, 7.0000E-01, 3.6160E+01, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, from GITM + CO2,CO2,abs,1.0000E-22,m2, 3.5800E-03, 3.5800E-03, 3.5800E-03, 3.5800E-01, 3.5800E-01, 3.5800E-01, 3.5800E-01, 1.5500E+00, 4.6200E+00, 9.0900E+00, 1.4360E+01, 1.6510E+01, 1.9020E+01, 1.7520E+01, 2.1490E+01, 2.1590E+01, 2.3570E+01, 2.5270E+01, 2.4870E+01, 2.8270E+01, 2.9530E+01, 3.0250E+01, 3.1490E+01, 3.3200E+01, 3.4200E+01, 3.4910E+01, 3.5300E+01, 3.4300E+01, 3.4450E+01, 3.3700E+01, 2.3520E+01, 3.2830E+01, 9.3840E+01, 6.1940E+01, 2.6490E+01, 3.9830E+01, 1.3980E+01, 4.4670E+01, 5.2080E+01, 4.2870E+01, 5.0310E+01, 1.5100E+01, 1.4200E+01, 1.8240E+01, 1.7400E+01, 4.0800E+01, 8.8200E-01, 4.9600E-02, 8.1000E-02, 3.7300E-01, 7.3900E-01, 6.0700E-01, 5.2400E-01, 5.4400E-01, 4.3100E-01, 2.5800E-01, 1.2600E-01, 4.8000E-02, 1.6000E-02, from GITM + CO,CO,abs,1.0000E-22,m2, 4.1700E-03, 4.1700E-03, 4.1700E-03, 4.1700E-01, 4.1700E-01, 4.1700E-01, 4.1700E-01, 8.7000E-01, 2.3900E+00, 4.6700E+00, 7.0100E+00, 8.6100E+00, 1.0540E+01, 9.4200E+00, 1.1870E+01, 1.1900E+01, 1.3440E+01, 1.5260E+01, 1.4960E+01, 1.7960E+01, 2.0170E+01, 2.0570E+01, 2.1090E+01, 2.1620E+01, 2.2000E+01, 2.1910E+01, 2.2100E+01, 2.2030E+01, 2.1920E+01, 2.1040E+01, 2.3850E+01, 2.5200E+01, 2.6280E+01, 1.5260E+01, 3.3130E+01, 2.0540E+01, 2.2610E+01, 3.6980E+01, 5.0320E+01, 2.8500E+01, 5.2830E+01, 1.3900E+00, 1.3900E+00, 8.5700E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, from GITM + CH4,CH4,abs,1.0000E-22,m2, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 1.6430E-01, 4.2100E-01, 4.5350E-01, 2.0400E-01, 5.9300E-01, 1.4960E+00, 2.7940E+00, 3.8570E+00, 5.0530E+00, 4.3600E+00, 6.0330E+00, 6.0590E+00, 7.8290E+00, 1.0165E+01, 9.7760E+00, 1.4701E+01, 1.8770E+01, 2.1449E+01, 2.4644E+01, 2.7924E+01, 3.1052E+01, 3.0697E+01, 3.3178E+01, 3.5276E+01, 3.4990E+01, 3.9280E+01, 4.1069E+01, 4.2927E+01, 4.5458E+01, 4.5716E+01, 4.6472E+01, 4.5921E+01, 4.8327E+01, 4.8968E+01, 4.8001E+01, 4.1154E+01, 3.8192E+01, 3.2700E+01, 3.0121E+01, 2.9108E+01, 2.8400E+01, 1.8000E+01, 1.9200E+01, 1.7860E+01, 1.8318E+01, 1.9068E+01, 1.2826E+01, 3.2898E+00, 1.2600E-01, 7.9900E-04, 1.4000E-05, 7.0000E-06, 0.0000E+00, 0.0000E+00, 0.0000E+00, from GITM + H2,H2,abs,1.0000E-22,m2, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 1.0000E-02, 8.0000E-02, 2.1000E-01, 4.3000E-01, 6.0000E-01, 8.4000E-01, 7.3000E-01, 1.0200E+00, 1.0200E+00, 1.4200E+00, 1.9400E+00, 1.9000E+00, 3.0300E+00, 3.8700E+00, 4.5000E+00, 5.3600E+00, 6.1700E+00, 7.0200E+00, 6.8600E+00, 7.8100E+00, 8.4600E+00, 8.4500E+00, 9.9000E+00, 1.0730E+01, 1.1370E+01, 1.0760E+01, 8.6400E+00, 7.3400E+00, 8.7500E+00, 8.2500E+00, 4.8000E-01, 1.9000E-01, 0.0000E+00, 5.0000E-02, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, from GITM + HCN,HCN,abs,1.0000E-22,m2, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, from GITM + He,He,abs,1.0000E-22,m2, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 1.4400E-01, 4.7900E-01, 1.1570E+00, 1.6010E+00, 2.1210E+00, 2.5950E+00, 2.3200E+00, 2.9530E+00, 2.9620E+00, 3.5440E+00, 4.2680E+00, 4.1420E+00, 5.4470E+00, 6.5630E+00, 7.2080E+00, 9.5800E-01, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, from GITM + NO,NO,abs,1.0000E-22,m2, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 2.4000E+01, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 2.4000E+01, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 1.0000E+01, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 2.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, from GITM + O2,O2+,ion,1.0000E-22,m2, 4.0000E-04, 4.0000E-03, 2.4000E-02, 1.4000E-01, 1.0200E+00, 1.0000E-01, 3.2000E-01, 1.1800E+00, 4.0000E+00, 7.1000E+00, 1.0600E+01, 1.3200E+01, 1.5700E+01, 1.5100E+01, 1.6800E+01, 1.6800E+01, 1.7190E+01, 1.8400E+01, 1.8170E+01, 1.9390E+01, 2.0400E+01, 2.1590E+01, 2.4060E+01, 2.5590E+01, 2.2000E+01, 2.5040E+01, 2.6100E+01, 2.5800E+01, 2.5940E+01, 2.2050E+01, 2.3000E+01, 2.3810E+01, 8.5900E+00, 9.6900E+00, 1.1050E+01, 9.3900E+00, 6.1200E+00, 4.6900E+00, 9.3400E+00, 2.5000E+00, 1.2220E+01, 1.0000E+00, 0.0000E+00, 2.7000E-01, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, from GITM + O,O+,ion,1.0000E-22,m2, 6.0000E-05, 6.0000E-04, 4.0000E-03, 2.0000E-02, 1.5000E-02, 1.5000E-02, 5.0000E-02, 1.8000E-01, 4.6000E-01, 7.8000E-01, 1.3800E+00, 1.5100E+00, 1.7800E+00, 1.6500E+00, 1.9200E+00, 1.9300E+00, 2.2500E+00, 2.5900E+00, 2.5100E+00, 3.0300E+00, 3.1500E+00, 3.2600E+00, 3.4500E+00, 3.5200E+00, 3.5300E+00, 3.4500E+00, 3.6700E+00, 3.7900E+00, 3.7800E+00, 4.0100E+00, 4.9100E+00, 4.2000E+00, 4.1800E+00, 4.1800E+00, 4.2800E+00, 4.2300E+00, 4.3800E+00, 4.1800E+00, 2.1200E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, from GITM + O,O+2D,ion,1.0000E-22,m2, 6.0000E-05, 6.0000E-04, 4.0000E-03, 2.0000E-02, 1.5000E-02, 1.5000E-02, 5.0000E-02, 1.9000E-01, 5.1000E-01, 9.9000E-01, 1.8600E+00, 2.1200E+00, 2.6400E+00, 2.3800E+00, 2.8400E+00, 2.8500E+00, 3.4700E+00, 3.9800E+00, 3.8600E+00, 4.7100E+00, 5.0600E+00, 5.2400E+00, 5.3600E+00, 5.4600E+00, 5.4800E+00, 5.3600E+00, 5.5000E+00, 5.5000E+00, 5.4900E+00, 5.5200E+00, 6.4400E+00, 3.8000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, from GITM + O,O+2P,ion,1.0000E-22,m2, 7.0000E-05, 7.0000E-04, 4.0000E-03, 3.0000E-02, 2.0000E-02, 2.0000E-02, 6.0000E-02, 2.2000E-01, 6.2000E-01, 1.1300E+00, 2.0700E+00, 2.4200E+00, 2.7100E+00, 2.5800E+00, 2.9200E+00, 2.9300E+00, 2.9500E+00, 3.3800E+00, 3.2800E+00, 3.4800E+00, 3.0400E+00, 3.1400E+00, 3.1000E+00, 3.1500E+00, 3.1600E+00, 3.0900E+00, 3.0600E+00, 2.9300E+00, 2.9300E+00, 5.0000E-01, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, from GITM + N2,N2+,ion,1.0000E-22,m2, 3.0000E-04, 3.0000E-03, 1.5000E-02, 9.0000E-02, 4.8000E-01, 1.1600E+00, 2.4000E-01, 6.0000E-01, 1.9000E+00, 4.4000E+00, 8.0000E+00, 9.7000E+00, 1.0600E+01, 1.0300E+01, 1.1600E+01, 1.1600E+01, 1.3000E+01, 1.8000E+01, 1.7510E+01, 2.1070E+01, 2.1800E+01, 2.1850E+01, 2.4530E+01, 2.4690E+01, 2.3200E+01, 2.2380E+01, 2.3100E+01, 2.3200E+01, 2.3220E+01, 2.5060E+01, 2.3000E+01, 2.3200E+01, 2.3770E+01, 1.8390E+01, 1.0180E+01, 1.6750E+01, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, from GITM + N,N+,ion,1.0000E-22,m2, 0.0000E+00, 0.0000E+00, 1.0000E-01, 5.0000E-01, 1.0000E+00, 1.0000E+00, 1.0000E+00, 2.0000E+00, 2.5000E+00, 3.5000E+00, 4.0000E+00, 5.0000E+00, 5.0000E+00, 6.0000E+00, 6.0000E+00, 6.5000E+00, 8.0000E+00, 7.0000E+00, 1.0000E+01, 1.0000E+01, 1.0000E+01, 1.1000E+01, 1.1500E+01, 1.2000E+01, 1.1000E+01, 1.2000E+01, 1.2000E+01, 1.2000E+01, 1.2000E+01, 1.2000E+01, 1.1000E+01, 1.1000E+01, 1.1000E+01, 1.0000E+01, 1.0000E+01, 1.0000E+01, 1.0000E+01, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, from GITM + CO2,CO2+,ion,1.0000E-22,m2, 1.5500E+00, 1.5500E+00, 1.5500E+00, 1.5500E+00, 1.5500E+00, 1.5500E+00, 1.5500E+00, 1.5500E+00, 4.6200E+00, 9.0900E+00, 1.4320E+01, 1.6110E+01, 1.8600E+01, 1.7140E+01, 2.1390E+01, 2.1440E+01, 2.3630E+01, 2.5560E+01, 2.5520E+01, 2.7170E+01, 2.8760E+01, 3.0680E+01, 3.2602E+01, 3.3210E+01, 3.3860E+01, 3.4960E+01, 3.5300E+01, 3.4300E+01, 3.4570E+01, 3.2290E+01, 2.0860E+01, 2.7490E+01, 8.6320E+01, 5.1770E+01, 2.1680E+01, 3.4090E+01, 1.0930E+01, 7.1400E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, from GITM + CO,CO+,ion,1.0000E-22,m2, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, from GITM + CH4,CH4+,ion,1.0000E-22,m2, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 2.0000E-01, 5.9000E-01, 1.5000E+00, 2.7900E+00, 3.8600E+00, 5.0500E+00, 4.3600E+00, 6.0300E+00, 6.0600E+00, 7.8300E+00, 1.0170E+01, 9.7800E+00, 1.4700E+01, 1.8770E+01, 2.1450E+01, 2.4640E+01, 2.7920E+01, 3.1050E+01, 3.0700E+01, 3.3180E+01, 3.5280E+01, 3.4990E+01, 3.9280E+01, 4.1070E+01, 4.2930E+01, 4.4800E+01, 4.4800E+01, 4.4610E+01, 4.4690E+01, 4.0280E+01, 2.5530E+01, 1.3860E+01, 1.4000E-01, 4.8000E-01, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, from GITM + H2,H2+,ion,1.0000E-22,m2, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 1.0000E-02, 8.0000E-02, 2.0000E-01, 4.0000E-01, 5.5000E-01, 7.5000E-01, 6.5000E-01, 9.0000E-01, 9.0000E-01, 1.3000E+00, 1.7800E+00, 1.7400E+00, 2.8900E+00, 3.7800E+00, 4.0500E+00, 5.2500E+00, 6.0500E+00, 6.9000E+00, 6.7400E+00, 7.6700E+00, 8.3000E+00, 8.2900E+00, 9.7000E+00, 1.0730E+01, 9.7600E+00, 8.6200E+00, 7.0700E+00, 5.0700E+00, 6.6300E+00, 9.0000E-02, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, from GITM + HCN,HCN+,ion,1.0000E-22,m2, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, from GITM + NO,NO+,ion,1.0000E-22,m2, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 2.4000E+01, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 2.4000E+01, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 1.0000E+01, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 2.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, from GITM + O2,O2+,pei,1.0000E+00,, 1.3469E+02, 1.3469E+02, 3.2212E+01, 1.3309E+01, 3.9615E+01, 3.9615E+01, 2.8340E+00, 1.0920E+00, 1.0920E+00, 4.1600E-01, 1.8400E-01, 1.8400E-01, 1.8400E-01, 1.8400E-01, 9.0000E-02, 9.0000E-02, 2.4000E-02, 2.4000E-02, 2.4000E-02, 2.4000E-02, 2.4000E-02, 2.4000E-02, 2.4000E-02, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, from GITM + O2,O+,pei,1.0000E+00,, 7.6136E+01, 7.6136E+01, 1.7944E+01, 6.9810E+00, 2.0338E+01, 2.0338E+01, 1.4370E+00, 5.2100E-01, 5.2100E-01, 1.6300E-01, 5.2000E-02, 5.2000E-02, 5.2000E-02, 5.2000E-02, 1.4000E-02, 1.4000E-02, 1.0000E-03, 1.0000E-03, 1.0000E-03, 1.0000E-03, 1.0000E-03, 1.0000E-03, 1.0000E-03, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, from GITM + N2,N2+,pei,1.0000E+00,, 2.6399E+02, 2.6399E+02, 6.2570E+01, 2.5213E+01, 8.5400E+00, 8.5400E+00, 6.1420E+00, 2.2880E+00, 2.2880E+00, 7.8600E-01, 3.2400E-01, 3.2400E-01, 3.2400E-01, 3.2400E-01, 1.6900E-01, 1.6900E-01, 3.1000E-02, 3.1000E-02, 3.1000E-02, 3.1000E-02, 3.1000E-02, 3.1000E-02, 3.1000E-02, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, from GITM + N2,N+,pei,1.0000E+00,, 7.8674E+01, 7.8674E+01, 1.8310E+01, 6.9480E+00, 2.2950E+00, 2.2950E+00, 1.6470E+00, 1.6470E+00, 5.7100E-01, 1.4600E-01, 3.7000E-02, 3.7000E-02, 3.7000E-02, 3.7000E-02, 8.0000E-03, 8.0000E-03, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, from GITM + CH4,CH4+,pei,1.0000E+00,, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, from GITM + CH4,CH3+,pei,1.0000E+00,, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, from GITM + O,O+,pei,1.0000E+00,, 8.1240E+01, 8.1240E+01, 1.8896E+01, 9.4250E+00, 2.8622E+01, 2.8622E+01, 2.0190E+00, 9.0200E-01, 9.0200E-01, 4.7000E-01, 3.2500E-01, 3.2500E-01, 3.2500E-01, 3.2500E-01, 2.0900E-01, 2.0900E-01, 8.4000E-02, 8.4000E-02, 8.4000E-02, 8.4000E-02, 8.4000E-02, 8.4000E-02, 8.4000E-02, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, from GITM + O,O+2D,pei,1.0000E+00,, 8.8526E+01, 8.8526E+01, 2.0691E+01, 9.3650E+00, 2.8199E+01, 2.8199E+01, 1.9620E+00, 8.5300E-01, 8.5300E-01, 4.1800E-01, 2.5300E-01, 2.5300E-01, 2.5300E-01, 2.5300E-01, 1.4800E-01, 1.4800E-01, 3.4000E-02, 3.4000E-02, 3.4000E-02, 3.4000E-02, 3.4000E-02, 3.4000E-02, 3.4000E-02, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, from GITM + O,O+2P,pei,1.0000E+00,, 4.7358E+01, 4.7358E+01, 1.1007E+01, 4.7720E+00, 1.4556E+01, 1.4556E+01, 1.0140E+00, 4.3600E-01, 4.3600E-01, 2.0300E-01, 1.1600E-01, 1.1600E-01, 1.1600E-01, 1.1600E-01, 6.1000E-02, 6.1000E-02, 9.0000E-03, 9.0000E-03, 9.0000E-03, 9.0000E-03, 9.0000E-03, 9.0000E-03, 9.0000E-03, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, from GITM + N2,N_4S,ped,1.0000E+00,, 2.4500E+02, 2.4500E+02, 5.2052E+01, 2.5255E+01, 9.0490E+00, 9.0490E+00, 6.5320E+00, 2.9090E+00, 2.9090E+00, 1.3710E+00, 7.6400E-01, 7.6400E-01, 7.6400E-01, 7.6400E-01, 5.1500E-01, 5.1500E-01, 1.5700E-01, 1.5700E-01, 1.5700E-01, 1.5700E-01, 1.5700E-01, 1.5700E-01, 1.5700E-01, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, from GITM + O2,O,ped,1.0000E+00,, 8.7864E+01, 8.7864E+01, 2.0318E+01, 1.7821E+01, 5.6969E+01, 5.6969E+01, 4.1130E+00, 2.0410E+00, 2.0410E+00, 1.2710E+00, 9.9600E-01, 9.9600E-01, 9.9600E-01, 9.9600E-01, 7.6200E-01, 7.6200E-01, 6.5300E-01, 6.5300E-01, 6.5300E-01, 6.5300E-01, 6.5300E-01, 6.5300E-01, 6.5300E-01, 1.1000E-02, 1.1000E-02, 1.1000E-02, 1.1000E-02, 1.1000E-02, 1.1000E-02, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, 0.0000E+00, from GITM diff --git a/share/run/UA/inputs/euv_earth_simple.csv b/share/run/UA/inputs/euv_earth_simple.csv new file mode 100644 index 00000000..bfa73dcf --- /dev/null +++ b/share/run/UA/inputs/euv_earth_simple.csv @@ -0,0 +1,14 @@ +Short,,wave,1, Angstroms,50,100,150,200,256.3,284.15,250,303.31,303.78,300,368.07,350,400,465.22,450,500,554.37,584.33,550,609.76,629.73,600,650,703.31,700,765.15,770.41,789.36,750,800,850,900,977.02,950,1025.72,1031.91,1000, No Comments +Long,,wave,1, Angstroms,100,150,200,250,256.3,284.15,300,303.31,303.78,350,368.07,400,450,465.22,500,550,554.37,584.33,600,609.76,629.73,650,700,703.31,750,765.15,770.41,789.36,800,850,900,950,977.02,1000,1025.72,1031.91,1050, No Comments +F74113, , ,1.00E+09, /cm2/s,1.2,0.45,4.8,3.1,0.46,0.21,1.679,0.8,6.9,0.965,0.65,0.314,0.383,0.29,0.285,0.452,0.72,1.27,0.357,0.53,1.59,0.342,0.23,0.36,0.141,0.17,0.26,0.702,0.758,1.625,3.537,3,4.4,1.475,3.5,2.1,2.467, No Comments +AFAC, , ,1, ,1.00E-02,7.13E-03,1.34E-02,1.95E-02,2.78E-03,1.38E-01,2.65E-02,2.50E-02,3.33E-03,2.25E-02,6.59E-03,3.65E-02,7.41E-03,7.49E-03,2.02E-02,8.76E-03,3.27E-03,5.16E-03,3.66E-03,1.62E-02,3.33E-03,1.18E-02,4.27E-03,3.04E-03,4.75E-03,3.85E-03,1.28E-02,3.28E-03,4.77E-03,4.82E-03,5.68E-03,4.98E-03,3.94E-03,4.42E-03,5.18E-03,5.28E-03,4.38E-03, No Comments +N2,N2,abs,1.00E-22, m2,0.72,2.261,4.958,8.392,10.21,10.9,10.493,11.67,11.7,13.857,16.91,16.395,21.675,23.16,23.471,24.501,24.13,22.4,22.787,22.79,23.37,23.339,31.755,26.54,24.662,120.49,14.18,16.487,33.578,16.992,20.249,9.68,2.24,50.988,0,0,0, No Comments +N2,N2+,ion,1.00E-22, m2,0.443,1.479,3.153,5.226,6.781,8.1,7.347,9.18,9.21,11.6,15.35,14.669,20.692,22.1,22.772,24.468,24.13,22.4,22.787,22.79,23.37,23.339,29.235,25.48,15.06,65.8,8.5,8.86,14.274,0,0,0,0,0,0,0,0, No Comments +N2,N+,ion,1.00E-22, m2,0.277,0.782,1.805,3.166,3.42,2.8,3.145,2.49,2.49,2.257,1.56,1.726,0.982,1.06,0.699,0.033,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, No Comments +O2,O2,abs,1.00E-22, m2,1.316,3.806,7.509,10.9,13.37,15.79,14.387,16.8,16.81,17.438,18.32,18.118,20.31,21.91,23.101,24.606,26.04,22.72,26.61,28.07,32.06,26.017,21.919,27.44,28.535,20.8,18.91,26.668,22.145,16.631,8.562,12.817,18.73,21.108,1.63,1.05,1.346, No Comments +O2,O2+,ion,1.00E-22, m2,1.316,2.346,4.139,6.619,8.46,9.89,9.056,10.86,10.88,12.229,13.76,13.418,15.49,16.97,17.754,19.469,21.6,18.84,22.789,24.54,30.07,23.974,21.116,23.75,23.805,11.72,8.47,10.191,10.597,6.413,5.494,9.374,15.54,13.94,1.05,0,0.259, No Comments +O2,O+,ion,1.00E-22, m2,0,1.46,3.368,4.281,4.91,5.9,5.332,5.94,5.93,5.212,4.56,4.703,4.818,4.94,5.347,5.139,4.44,3.88,3.824,1.85,1.03,0.962,0.191,0,0,0,0,0,0,0,0,0,0,0,0,0,0, No Comments +O,O,abs,1.00E-22, m2,0.73,1.839,3.732,5.202,6.05,7.08,6.461,7.68,7.7,8.693,9.84,9.687,11.496,11.93,12.127,12.059,12.59,13.09,13.024,13.4,13.4,13.365,17.245,11.46,10.736,4,3.89,3.749,5.091,3.498,4.554,1.315,0,0,0,0,0, Last 5 are questionable +O,O+,ion,1.00E-22, m2,0.507,1.308,2.749,3.947,4.687,5.45,4.973,5.76,5.775,6.52,7.282,7.265,8.51,8.71,8.853,8.848,9.32,9.94,9.53,9.78,10.17,10.409,16.581,11.46,10.736,4,3.89,3.749,5.091,3.498,4.554,1.315,0,0,0,0,0, +N,N,abs,1.00E-22, m2,0.331,0.996,2.49,3.946,4.874,5.725,5.244,6.399,6.413,7.298,8.302,8.15,9.556,10.578,11.016,11.503,11.772,11.778,11.758,11.798,11.212,11.951,12.423,13.265,12.098,11.323,11.244,10.961,11.171,10.294,0.211,0,0,0,0,0,0, Last 5 are questionable +N,N+,ion,1.00E-22, m2,0.286,0.878,2.3,3.778,4.787,5.725,5.192,6.399,6.413,7.298,8.302,8.15,9.556,10.578,11.016,11.503,11.772,11.778,11.758,11.798,11.212,11.951,12.423,13.265,12.098,11.323,11.244,10.961,11.171,10.294,0.211,0,0,0,0,0,0, Last 5 are questionable \ No newline at end of file diff --git a/share/run/aether.json b/share/run/aether.json index e435a232..6325cc69 100644 --- a/share/run/aether.json +++ b/share/run/aether.json @@ -8,19 +8,25 @@ "iFunctionVerbose" : { "Grid::create_altitudes": 0}, "dt" : 10.0, - "check_for_nans" : false - }, + "check_for_nans" : true}, - "EndTime" : [2011, 3, 20, 0, 10, 0], + "EndTime" : [2011, 3, 20, 0, 1, 0], - "GeoBlockSize" : { - "nLons" : 18, - "nLats" : 18, - "nAlts" : 50}, - - "GeoGrid" : { - "dAlt" : 0.25, - "IsUniformAlt" : false}, + "neuGrid" : { + "Shape": "sphere", + "nLonsPerBlock" : 20, + "nLatsPerBlock" : 18, + "nAlts" : 40, + "dAltScale" : 0.3, + "IsUniformAlt" : false}, + + "ionGrid": { + "Shape": "sphere", + "nLonsPerBlock": 24, + "nLatsPerBlock": 22, + "nAlts": 50, + "dAltScale" : 0.3, + "IsUniformAlt" : false}, "OmniwebFiles" : ["UA/inputs/omni_20110319.txt"], @@ -28,7 +34,7 @@ "Potential" : "Weimer05", "DiffuseAurora" : "fta", "File": "UA/inputs/b20110320n_omni.bin"}, - + "Outputs" : { "type" : ["states", "grid"], "dt" : [900, -1] }, diff --git a/src/add_sources.cpp b/src/add_sources.cpp index ba37b21d..3b53bbf9 100644 --- a/src/add_sources.cpp +++ b/src/add_sources.cpp @@ -10,7 +10,7 @@ // Adds all of the sources to the states. Needs time to get dt. // ----------------------------------------------------------------------------- -void Neutrals::add_sources(Times time) { +void Neutrals::add_sources(Times time, Planets planet, Grid &grid) { std::string function = "add_sources"; static int iFunction = -1; @@ -18,33 +18,121 @@ void Neutrals::add_sources(Times time) { precision_t dt = time.get_dt(); - temperature_scgc = temperature_scgc + - dt * (heating_euv_scgc - + heating_chemical_scgc - + conduction_scgc - - O_cool_scgc - - NO_cool_scgc); + heating_sources_total = heating_euv_scgc + + heating_chemical_scgc + + heating_ion_friction_scgc + + heating_ion_heat_transfer_scgc + - O_cool_scgc + - NO_cool_scgc; - for (int64_t iSpec = 0; iSpec < nSpeciesAdvect; iSpec++) { - species_chars & advected_neutral = species[species_to_advect[iSpec]]; + // Solve the laplace equations using the source terms, + // updating the neutral temperature: + update_temperature(grid, time); - for (int iDir = 0; iDir < 3; iDir++) { + int64_t iDir, iSpec, iSpecies; + double tSim = time.get_simulation_time(); + + /* + // Horizontal winds use bulk winds: + if (input.get_use_coriolis()) + acc_coriolis = coriolis(velocity_vcgc, planet.get_omega(), grid.geoLat_scgc); + + // Vertical winds use species winds: + for (iSpec = 0; iSpec < nSpeciesAdvect; iSpec++) { + // Pick out the advected neutral species: + species_chars & advected_neutral = species[species_to_advect[iSpec]]; + + iDir = 2; // update velocities based on acceleration: // reduce neutral friction until solver is added advected_neutral.velocity_vcgc[iDir] = advected_neutral.velocity_vcgc[iDir] + - dt * (advected_neutral.acc_neutral_friction[iDir] / 4.0 + - advected_neutral.acc_ion_drag[iDir]); + dt * (ramp * grid.cent_acc_vcgc[iDir] + + ramp * acc_coriolis[iDir] + + advected_neutral.acc_neutral_friction[iDir] / 4.0 + + advected_neutral.acc_ion_drag[iDir] + + advected_neutral.acc_eddy); + } + + calc_mass_density(); + // Calculate bulk vertical winds: + velocity_vcgc[2].zeros(); + + for (iSpecies = 0; iSpecies < nSpecies; iSpecies++) + if (species[iSpecies].DoAdvect) { + velocity_vcgc[2] = velocity_vcgc[2] + + species[iSpecies].mass * species[iSpecies].density_scgc % + species[iSpecies].velocity_vcgc[2] / rho_scgc; + } + + + // Add Velocity sources to bulk winds: + for (iDir = 0; iDir < 2; iDir++) { + velocity_vcgc[iDir] = + velocity_vcgc[iDir] + dt * ( + grid.cent_acc_vcgc[iDir] + + acc_coriolis[iDir] + + acc_ion_collisions[iDir]); + acc_sources_total[iDir].zeros(); + } - // eddy acceleration is only in the vertical direction: - if (iDir == 2) + // Apply Viscosity: + update_horizontal_velocity(grid, time); + + // Assign bulk horizontal velocity to all species: + for (iSpecies = 0; iSpecies < nSpecies; iSpecies++) + for (iDir = 0; iDir < 2; iDir++) + species[iSpecies].velocity_vcgc[iDir] = velocity_vcgc[iDir]; + */ + // If we only consider the bulk winds in the horizontal direction: + if (input.get_advection_neutrals_bulkwinds()) { + // Calculate Coriolis: + if (input.get_use_coriolis()) + acc_coriolis = coriolis(velocity_vcgc, planet.get_omega(), grid.geoLat_scgc); + + // Add Velocity sources to bulk winds: + for (int iDir = 0; iDir < 3; iDir++) { + velocity_vcgc[iDir] = velocity_vcgc[iDir] + dt * ( + grid.cent_acc_vcgc[iDir] + + acc_coriolis[iDir] + + acc_ion_collisions[iDir]); + acc_sources_total[iDir].zeros(); + } + + // Apply Viscosity: + update_horizontal_velocity(grid, time); + } else { + for (int64_t iSpec = 0; iSpec < nSpeciesAdvect; iSpec++) { + // Pick out the advected neutral species: + species_chars & advected_neutral = species[species_to_advect[iSpec]]; + + // Calculate Coriolis: + if (input.get_use_coriolis()) + acc_coriolis = coriolis(advected_neutral.velocity_vcgc, + planet.get_omega(), + grid.geoLat_scgc); + + for (int iDir = 0; iDir < 2; iDir++) { + // update velocities based on acceleration: + // reduce neutral friction until solver is added advected_neutral.velocity_vcgc[iDir] = + advected_neutral.velocity_vcgc[iDir] + + dt * (grid.cent_acc_vcgc[iDir] + + acc_coriolis[iDir] + + advected_neutral.acc_neutral_friction[iDir] / 4.0 + + advected_neutral.acc_ion_drag[iDir]); + + // eddy acceleration is only in the vertical direction: + if (iDir == 2) advected_neutral.velocity_vcgc[iDir] = + advected_neutral.velocity_vcgc[iDir] + dt * advected_neutral.acc_eddy; + } } + + calc_bulk_velocity(); } - calc_bulk_velocity(); assign_bulk_velocity(); report.exit(function); diff --git a/src/advance.cpp b/src/advance.cpp index eacd5b4b..ea05dd53 100644 --- a/src/advance.cpp +++ b/src/advance.cpp @@ -12,14 +12,20 @@ bool advance(Planets &planet, Grid &gGrid, + Grid &mGrid, Times &time, Euv &euv, Neutrals &neutrals, + Neutrals &neutralsMag, Ions &ions, + Ions &ionsMag, Chemistry &chemistry, + Chemistry &chemistryMag, Electrodynamics &electrodynamics, + Electrodynamics &electrodynamicsMag, Indices &indices, - Logfile &logfile) { + Logfile &logfile, + Logfile &logfileMag) { bool didWork = true; @@ -35,10 +41,20 @@ bool advance(Planets &planet, report.print(-1, "(1) What function is this " + input.get_student_name() + "?"); - if (didWork & input.get_check_for_nans()) - didWork = neutrals.check_for_nonfinites(); + if (didWork & input.get_check_for_nans()) { + didWork = neutrals.check_for_nonfinites("Top of Advance - neu grid"); + didWork = neutralsMag.check_for_nonfinites("Top of Advance - ion grid"); + } + + // here we are going to grab stuff from the neutral grid and put it on the + // ion grid + didWork = get_data_from_other_grid(gGrid, mGrid, neutrals.temperature_scgc, mGrid.test_scgc); + + json dummy = indices.get_all_indices(time.get_current()); gGrid.calc_sza(planet, time); + mGrid.calc_sza(planet, time); + neutrals.calc_mass_density(); neutrals.calc_mean_major_mass(); neutrals.calc_specific_heat(); @@ -46,12 +62,43 @@ bool advance(Planets &planet, neutrals.calc_pressure(); neutrals.calc_bulk_velocity(); neutrals.calc_kappa_eddy(); + neutrals.calc_viscosity(); neutrals.calc_cMax(); - precision_t dtNeutral = neutrals.calc_dt(gGrid); - precision_t dtIon = 100.0; + neutralsMag.clamp_density(); + neutralsMag.calc_mass_density(); + neutralsMag.calc_mean_major_mass(); + neutralsMag.calc_specific_heat(); + neutralsMag.calc_concentration(); + neutralsMag.calc_pressure(); + didWork = neutralsMag.check_for_nonfinites("Ion Grid: before bulk velocity"); + neutralsMag.calc_bulk_velocity(); + didWork = neutralsMag.check_for_nonfinites("Ion Grid: After bulk velocity"); + + neutralsMag.calc_kappa_eddy(); + neutralsMag.calc_cMax(); + + didWork = neutralsMag.check_for_nonfinites("Ion Grid: After extras"); + + ions.fill_electrons(); + ions.calc_sound_speed(); + ions.calc_cMax(); + ions.calc_specific_heat(); + + ionsMag.fill_electrons(); + ionsMag.calc_sound_speed(); + ionsMag.calc_cMax(); + ionsMag.calc_specific_heat(); + + precision_t dtNeutral = calc_dt(gGrid, neutrals.cMax_vcgc); + precision_t dtIon = calc_dt(gGrid, ions.cMax_vcgc); time.calc_dt(dtNeutral, dtIon); + if (report.test_verbose(1)) + std::cout << "dt in advance : " << time.get_dt() << "\n"; + + didWork = neutralsMag.check_for_nonfinites("Ion Grid: after calc dt"); + // ------------------------------------ // Do advection first : @@ -59,16 +106,79 @@ bool advance(Planets &planet, // first neutrals.calc_scale_height(gGrid); + neutralsMag.calc_scale_height(mGrid); if (didWork) didWork = neutrals.set_bcs(gGrid, time, indices); - if (input.get_nAltsGeo() > 1) + if (didWork) + didWork = ions.set_bcs(gGrid, time, indices); + + if (didWork) + didWork = neutralsMag.set_bcs(mGrid, time, indices); + + if (didWork) + didWork = ionsMag.set_bcs(mGrid, time, indices); + + didWork = neutralsMag.check_for_nonfinites("Ion Grid: set bcs"); + + // advect in the 3rd dimension (vertical), but only if we have it: + if (gGrid.get_nAlts(false) > 1) { neutrals.advect_vertical(gGrid, time); - if (didWork & input.get_check_for_nans()) - didWork = neutrals.check_for_nonfinites(); + if (didWork & input.get_check_for_nans()) + didWork = neutrals.check_for_nonfinites("After Vertical Neutral Advection"); + + // ajr - ions.advect_vertical(gGrid, time); + + if (didWork & input.get_check_for_nans()) + didWork = ions.check_for_nonfinites("After Vertical Ion Advection"); + + } + + // advect in the 3rd dimension (vertical), but only if we have it: + if (mGrid.get_nAlts(false) > 1) { + neutralsMag.advect_vertical(mGrid, time); + + if (didWork & input.get_check_for_nans()) + didWork = neutralsMag.check_for_nonfinites("After Vertical Neutral Advection"); + + // ajr - ionsMag.advect_vertical(mGrid, time); + + if (didWork & input.get_check_for_nans()) + didWork = ionsMag.check_for_nonfinites("After Vertical Ion Advection"); + + } + + // advect in the 1st and 2nd dimensions (horizontal), but only if + // we have those dimensions: + if (gGrid.get_HasXdim() || gGrid.get_HasYdim()) { + neutrals.exchange_old(gGrid); + ions.exchange_old(gGrid); + didWork = neutrals.check_for_nonfinites("Geo Grid: Before Horizontal Advection"); + neutrals.advect_horizontal(gGrid, time); + didWork = neutrals.check_for_nonfinites("Geo Grid: After Horizontal Advection"); + ionsMag.exchange_old(mGrid); + fill_horizontal_ghostcels(neutralsMag.temperature_scgc, mGrid.get_nGCs()); + neutralsMag.set_lower_bcs(mGrid, time, indices); + + //for (int iSpecies = 0; iSpecies < neutralsMag.nSpecies; iSpecies++) + // fill_horizontal_ghostcels(neutralsMag.species[iSpecies].density_scgc, + // mGrid.get_nGCs()); + + //neutralsMag.exchange_old(mGrid); + } + + if (input.get_check_for_nans()) { + didWork = neutrals.check_for_nonfinites("Geo Grid: After Horizontal Advection"); + didWork = neutralsMag.check_for_nonfinites("Ion Grid: After Horizontal Advection"); + + if (!didWork) { + report.exit(function); + return didWork; + } + } // ------------------------------------ // Calculate source terms next: @@ -82,6 +192,15 @@ bool advance(Planets &planet, ions, indices); + if (didWork) + didWork = calc_euv(planet, + mGrid, + time, + euv, + neutralsMag, + ionsMag, + indices); + if (didWork) didWork = electrodynamics.update(planet, gGrid, @@ -89,16 +208,31 @@ bool advance(Planets &planet, indices, ions); + if (didWork) + didWork = electrodynamicsMag.update(planet, + mGrid, + time, + indices, + ionsMag); if (didWork) { calc_ion_neutral_coll_freq(neutrals, ions); + calc_ion_neutral_coll_freq(neutralsMag, ionsMag); ions.calc_ion_drift(neutrals, gGrid, time.get_dt()); + ionsMag.calc_ion_drift(neutralsMag, mGrid, time.get_dt()); calc_aurora(gGrid, neutrals, ions); + calc_aurora(mGrid, neutralsMag, ionsMag); - // Calculate some neutral source terms: - neutrals.calc_conduction(gGrid, time); + // Calculate chemistry on both grids: chemistry.calc_chemistry(neutrals, ions, time, gGrid); + chemistryMag.calc_chemistry(neutralsMag, ionsMag, time, mGrid); + + // We could have some weird results in the non-physical cells, + // so correct them + if (mGrid.IsDipole) + didWork = ionsMag.set_bcs(mGrid, time, indices); + if (input.get_O_cooling()) neutrals.calc_O_cool(); @@ -106,39 +240,55 @@ bool advance(Planets &planet, if (input.get_NO_cooling()) neutrals.calc_NO_cool(); - neutrals.vertical_momentum_eddy(gGrid); calc_ion_collisions(neutrals, ions); - calc_neutral_friction(neutrals); - neutrals.add_sources(time); + neutrals.add_sources(time, planet, gGrid); + neutralsMag.add_sources(time, planet, mGrid); + + if (didWork & input.get_check_for_nans()) { + didWork = neutrals.check_for_nonfinites("Geo Grid: After Add Sources"); + didWork = neutralsMag.check_for_nonfinites("Ion Grid: After Add Sources"); + } + + //ions.calc_ion_temperature(neutrals, gGrid, time); + //ions.calc_electron_temperature(neutrals, gGrid, time); + //ionsMag.calc_ion_temperature(neutralsMag, mGrid, time); + //ionsMag.calc_electron_temperature(neutralsMag, mGrid, time); - ions.calc_ion_temperature(neutrals, gGrid, time); - ions.calc_electron_temperature(neutrals, gGrid); + if (didWork & input.get_check_for_nans()) + didWork = neutrals.check_for_nonfinites("After Vertical Advection"); - if (input.get_is_cubesphere()) - neutrals.exchange_old(gGrid); - else - neutrals.exchange_old(gGrid); + neutrals.exchange_old(gGrid); time.increment_time(); if (time.check_time_gate(input.get_dt_write_restarts())) { report.print(3, "Writing restart files"); - neutrals.restart_file(input.get_restartout_dir(), DoWrite); - ions.restart_file(input.get_restartout_dir(), DoWrite); + neutrals.restart_file(input.get_restartout_dir(), + gGrid.get_gridtype(), + DoWrite); + neutralsMag.restart_file(input.get_restartout_dir(), + mGrid.get_gridtype(), + DoWrite); + ions.restart_file(input.get_restartout_dir(), gGrid.get_gridtype(), DoWrite); + ionsMag.restart_file(input.get_restartout_dir(), mGrid.get_gridtype(), DoWrite); time.restart_file(input.get_restartout_dir(), DoWrite); + indices.restart_file(input.get_restartout_dir(), DoWrite, time.get_current()); } } - if (didWork & input.get_check_for_nans()) - didWork = neutrals.check_for_nonfinites(); - if (didWork) didWork = output(neutrals, ions, gGrid, time, planet); + if (didWork) + didWork = output(neutralsMag, ionsMag, mGrid, time, planet); + if (didWork) didWork = logfile.write_logfile(indices, neutrals, ions, gGrid, time); + if (didWork) + didWork = logfileMag.write_logfile(indices, neutralsMag, ionsMag, mGrid, time); + if (!didWork) report.error("Error in Advance!"); diff --git a/src/aurora.cpp b/src/aurora.cpp index 09a047a6..cd35ad02 100644 --- a/src/aurora.cpp +++ b/src/aurora.cpp @@ -38,6 +38,7 @@ void read_aurora(Neutrals &neutrals, } myFile.close(); + neutrals.auroraInitialized = true; } } @@ -111,7 +112,7 @@ arma_vec calculate_fang_v2(precision_t energy_bin, // ----------------------------------------------------------------------------- // Calculate aurora // ----------------------------------------------------------------------------- -void calc_aurora(Grid grid, +void calc_aurora(Grid &grid, Neutrals &neutrals, Ions &ions) { @@ -125,6 +126,7 @@ void calc_aurora(Grid grid, int64_t nLons = grid.get_nLons(); int64_t nLats = grid.get_nLats(); int64_t nAlts = grid.get_nAlts(); + int64_t nGcs = grid.get_nGCs(); // DENSITY INTEGRAL CALULATION ( done in calc_neutral_derived.cpp line // 170 rho_alt_int_scgc species[iSpecies].rho_alt_int_scgc = @@ -143,7 +145,7 @@ void calc_aurora(Grid grid, }; static std::vector> CiArray; - static bool IsFirstTime = 1; + static bool IsFirstTime = true; // ENERGY BINS AND DE (E in eV) static precision_t min = 100; @@ -153,12 +155,17 @@ void calc_aurora(Grid grid, static int nBins = 101; static arma_vec auroral_energies(nBins); static arma_vec auroral_energy_widths(nBins); - std::vector Ci; + std::vector Ci(8); - if (IsFirstTime) { + if (!neutrals.auroraInitialized) { // Initialize the aurora using the auroral csv file + report.print(1, "Reading aurora file"); read_aurora(neutrals, ions); + } + + if (IsFirstTime) { + report.print(4, "aurora - initializing"); precision_t lnE; for (int64_t iBin = 0; iBin < nBins; iBin++) { @@ -170,7 +177,6 @@ void calc_aurora(Grid grid, auroral_energy_widths = calc_bin_widths(auroral_energies); for (int64_t iBin = 0; iBin < nBins; iBin++) { - lnE = log(auroral_energies(iBin)); // loop through Pij values to get vector of Ci values. This is @@ -181,18 +187,16 @@ void calc_aurora(Grid grid, for (int j = 0; j < 4; j++) tot = tot + Pij.at(i, j) * pow(lnE, j); - Ci.push_back(exp(tot)); + Ci[i] = exp(tot); } CiArray.push_back(Ci); } - IsFirstTime = 0; + IsFirstTime = false; + report.print(4, "aurora - done with init!"); } - if (report.test_verbose(4)) - std::cout << "aurora - done with init!\n"; - arma_vec rhoH1d; arma_cube scale_height; arma_vec ionization1d; @@ -211,21 +215,22 @@ void calc_aurora(Grid grid, weighted_sum.set_size(nAlts); scale_height = cKB * neutrals.temperature_scgc / - (neutrals.mean_major_mass_scgc % abs(grid.gravity_vcgc[2])); + (neutrals.mean_major_mass_scgc % abs(grid.gravity_mag_scgc)); precision_t eflux; precision_t avee; arma_vec diff_num_flux; arma_vec diff_energy_flux; + arma_vec b1d; bool DoDebug = false; - if (report.test_verbose(4)) - std::cout << "aurora - starting main loop!\n"; + report.print(4, "aurora - starting main loop!"); // loop through each altitude and calculate ionization - for (iLon = 0; iLon < nLons ; iLon++) { - for (iLat = 0; iLat < nLats ; iLat++) { + for (iLon = nGcs; iLon < nLons - nGcs; iLon++) { + for (iLat = nGcs; iLat < nLats - nGcs ; iLat++) { + // CHANGE eflux = ions.eflux(iLon, iLat); // in ergs/cm2/s avee = ions.avee(iLon, iLat); // in keV @@ -233,11 +238,12 @@ void calc_aurora(Grid grid, // Step 1: Calculate the height-integrated mass density: rhoH1d.zeros(); + b1d = abs(grid.bfield_unit_vcgc[2].tube(iLon, iLat)); for (iSpecies = 0; iSpecies < neutrals.nSpecies; iSpecies++) { rho_tube = neutrals.species[iSpecies].rho_alt_int_scgc.tube(iLon, iLat); - rhoH1d = rhoH1d + rho_tube; + rhoH1d = rhoH1d + rho_tube / b1d; } // Step 2: Calculate the distribution function: @@ -268,7 +274,7 @@ void calc_aurora(Grid grid, } // /cm3 -> /m3 - ionization1d = ionization1d * pcm3topm3; + ionization1d = ionization1d * pcm3topm3 / 100.0; // Step 5: Distribute ionization among neutrals: // Need to figure out which species get what percentage of the @@ -312,7 +318,6 @@ void calc_aurora(Grid grid, ions.species[iIon_].ionization_scgc.tube(iLon, iLat); ions.species[iIon_].ionization_scgc.tube(iLon, iLat) = ionization_tube + ionization_species; - } // nAuroraIonSpecies } // if nAuroraIonSpecies > 0 } // nSpecies diff --git a/src/calc_chemical_sources.cpp b/src/calc_chemical_sources.cpp index 1f07f13d..8f9c7464 100644 --- a/src/calc_chemical_sources.cpp +++ b/src/calc_chemical_sources.cpp @@ -124,11 +124,11 @@ void Chemistry::calc_chemical_sources(Neutrals &neutrals, else if (piecewiseTemp == "Tn") temp = neutrals.temperature_scgc; - // Limit the reagion to where the temperautre is in the range: - change3d = change3d % (change3d > reactions[iReaction].min); + // zero out the rate when it is outside of the temperature bounds: + change3d.elem( find(temp < reactions[iReaction].min) ).zeros(); if (reactions[iReaction].max > 0) - change3d = change3d % (change3d <= reactions[iReaction].max); + change3d.elem( find(temp > reactions[iReaction].max) ).zeros(); } // Now that the reaction rate is calculated, multiply by the @@ -145,7 +145,7 @@ void Chemistry::calc_chemical_sources(Neutrals &neutrals, } // calculate heat change - chemical_heating += change3d * reactions[iReaction].energy; + chemical_heating = chemical_heating + change3d * reactions[iReaction].energy; // Now that full loss term is calculated, we can then add this // value to the losses: diff --git a/src/calc_chemistry.cpp b/src/calc_chemistry.cpp index 9d8d2eec..7a82845c 100644 --- a/src/calc_chemistry.cpp +++ b/src/calc_chemistry.cpp @@ -13,7 +13,7 @@ void Chemistry::calc_chemistry(Neutrals &neutrals, Ions &ions, Times time, - Grid grid) { + Grid &grid) { int iSpecies; diff --git a/src/calc_dt.cpp b/src/calc_dt.cpp new file mode 100644 index 00000000..be5cd726 --- /dev/null +++ b/src/calc_dt.cpp @@ -0,0 +1,154 @@ +// Copyright 2020, the Aether Development Team (see doc/dev_team.md for members) +// Full license can be found in License.md + +#include "../include/aether.h" + +// -------------------------------------------------------------------------- +// +// -------------------------------------------------------------------------- + + +precision_t calc_dt(Grid &grid, std::vector cMax_vcgc) { + + std::string function = "calc_dt"; + static int iFunction = -1; + report.enter(function, iFunction); + + precision_t dt; + + if (grid.iGridShape_ == iCubesphere_) + dt = calc_dt_cubesphere(grid, cMax_vcgc); + else + dt = calc_dt_sphere(grid, cMax_vcgc); + + report.exit(function); + return dt; +} + +// -------------------------------------------------------------------------- +// +// -------------------------------------------------------------------------- + +precision_t calc_dt_sphere(Grid &grid, std::vector cMax_vcgc) { + + std::string function = "calc_dt_sphere"; + static int iFunction = -1; + report.enter(function, iFunction); + + precision_t dt; + + arma_vec dta(4); + arma_cube dtCube; + + // Longitudinal Direction: + dtCube = grid.di_center_m_scgc / cMax_vcgc[0]; + dta(0) = dtCube.min(); + + // Latitudinal Direction: + dtCube = grid.dj_center_m_scgc / cMax_vcgc[1]; + dta(1) = dtCube.min(); + + // Vertical Direction: + dta(2) = calc_dt_vertical(grid, cMax_vcgc); + + // Set a minimum dt: + dta(3) = 10.0; + + dt = dta.min(); + + if (report.test_verbose(3)) + std::cout << "dt (sphere) for neutrals : " << dt << "\n"; + + if (report.test_verbose(4)) + std::cout << " derived from dt(x, y, z, extra) : " << dta << "\n"; + + report.exit(function); + return dt; +} + +// -------------------------------------------------------------------------- +// +// -------------------------------------------------------------------------- + +precision_t calc_dt_cubesphere(Grid &grid, std::vector cMax_vcgc) { + + std::string function = "calc_dt_sphere"; + static int iFunction = -1; + report.enter(function, iFunction); + + precision_t dt; + arma_vec dta(4); + + // Get some dimensions + int64_t nAlts = grid.get_nAlts(); + int64_t nXs = grid.get_nLons(); + int64_t nYs = grid.get_nLats(); + + // dtx dty for reference coordinate system + arma_cube dtx(nXs, nYs, nAlts); + arma_cube dty(nXs, nYs, nAlts); + + // A dummy constant one matrix + arma_mat dummy_1(nXs, nYs, fill::ones); + + // Loop through altitudes + + for (int iAlt = 0; iAlt < nAlts; iAlt++) { + // Conver cMax to contravariant velocity first + //arma_mat u1 = sqrt( + // cMax_vcgc[0].slice(iAlt) % grid.A11_inv_scgc.slice(iAlt) % + // cMax_vcgc[0].slice(iAlt) % grid.A11_inv_scgc.slice(iAlt) + + // cMax_vcgc[1].slice(iAlt) % grid.A12_inv_scgc.slice(iAlt) % + // cMax_vcgc[1].slice(iAlt) % grid.A12_inv_scgc.slice(iAlt)); + //arma_mat u2 = sqrt( + // cMax_vcgc[0].slice(iAlt) % grid.A21_inv_scgc.slice(iAlt) % + // cMax_vcgc[0].slice(iAlt) % grid.A21_inv_scgc.slice(iAlt) + + // cMax_vcgc[1].slice(iAlt) % grid.A22_inv_scgc.slice(iAlt) % + // cMax_vcgc[1].slice(iAlt) % grid.A22_inv_scgc.slice(iAlt)); + dtx.slice(iAlt) = grid.cubeC.dlx.slice(iAlt) / cMax_vcgc[0].slice(iAlt); + dty.slice(iAlt) = grid.cubeC.dln.slice(iAlt) / cMax_vcgc[1].slice(iAlt); + //dty.slice(iAlt) = grid.drefy(iAlt) * dummy_1 / u2; + } + + // Take minimum dts in each direction: + dta(0) = dtx.min(); + dta(1) = dty.min(); + // Vertical Direction: + dta(2) = calc_dt_vertical(grid, cMax_vcgc); + // Set a minimum dt: + dta(3) = 10.0; + // Take the minimum of all directions: + + dt = dta.min(); + + if (report.test_verbose(3)) + std::cout << "dt (cubesphere) : " << dt << "\n"; + + if (report.test_verbose(4)) + std::cout << " derived from dt(x, y, z, extra) : " << dta << "\n"; + + report.exit(function); + return dt; +} + +// -------------------------------------------------------------------------- +// +// -------------------------------------------------------------------------- + +precision_t calc_dt_vertical(Grid &grid, std::vector cMax_vcgc) { + + std::string function = "calc_dt_vertical"; + static int iFunction = -1; + report.enter(function, iFunction); + + precision_t dt; + + if (grid.get_nZ(false) > 1) { + arma_cube dtz = grid.dk_center_m_scgc / cMax_vcgc[2]; + dt = dtz.min(); + } else + dt = 1e32; + + report.exit(function); + return dt; +} diff --git a/src/calc_electron_temperature.cpp b/src/calc_electron_temperature.cpp index 2489cde9..af646840 100644 --- a/src/calc_electron_temperature.cpp +++ b/src/calc_electron_temperature.cpp @@ -3,14 +3,650 @@ #include "../include/aether.h" + // -------------------------------------------------------------------------- // TODO (#24): this currently just sets the electron temperature to the neutral temperature // -------------------------------------------------------------------------- -void Ions::calc_electron_temperature(Neutrals neutrals, Grid grid) { +void Ions::calc_electron_temperature(Neutrals neutrals, Grid &grid, Times time) { + + std::string function = "Ions::calc_electron_temperature"; + static int iFunction = -1; + report.enter(function, iFunction); + + // Photoelectron, (all) ionization heating terms: + arma_cube epsilon, Qphe, QIonization; + + // electron-ion collisions return a vector of cubes, one for Qe, one for Qi, one for friction: + std::vector Qeic; + arma_cube Qeicm, Qeicp, Qeic_v; + + // (elastic) Electron-neutral collisions: + std::vector Qenc; + arma_cube Qencm, Qencp, Qenc_v; + + // Inelastic electron-neutral collisions: + std::vector Qenc_inelastic; + arma_cube Qrotm, Qrotp, Qf, Qexc, Qvib_O2, Qvib_N2; + + // Thermoelectric Current + arma_mat JParallel; + + int64_t nLons = grid.get_nLons(); + int64_t nLats = grid.get_nLats(); + int64_t nAlts = grid.get_nAlts(); + int64_t nGCs = grid.get_nGCs(); + + // Initialize everything to zero! + epsilon.set_size(nLons, nLats, nAlts); + epsilon.zeros(); + Qphe = epsilon; + QIonization = epsilon; + Qeicm = epsilon; + Qeicp = epsilon; + Qeic_v = epsilon; + Qencm = epsilon; + Qencp = epsilon; + Qenc_v = epsilon; + Qrotm = epsilon; + Qrotp = epsilon; + Qf = epsilon; + Qexc = epsilon; + Qvib_O2 = epsilon; + Qvib_N2 = epsilon; + + report.print(4, "Calculating epsilon"); + + // ============= ADD SOURCES ================= + + + // Needed for both ionization & photoelectron heating: + if (input.get_do_ionization_heating() || input.get_do_photoelectron_heating()) + epsilon = calc_epsilon(neutrals); + + + // Photoelectron heating + if (input.get_do_photoelectron_heating()) { + report.print(4, "Calculating photoelectron heating"); + Qphe = calc_photoelectron_heating(epsilon); + } + + // Ionization heating (includes all ionization sources) + if (input.get_do_ionization_heating()) { + report.print(4, "Calculating ionization heating"); + QIonization = calc_ionization_heating(epsilon); + } + + + // electron-ion collisions + if (input.get_do_electron_ion_collisional_heating()) { + report.print(4, "Calculating electron-ion collisions"); + + Qeic = calc_electron_ion_collisions(); + Qeicp = Qeic[0]; + Qeicm = Qeic[1]; + Qeic_v = Qeic[2]; // Friction + } + + + // electron-neutral Elastic collisions + if (input.get_do_electron_neutral_elastic_collisional_heating()) { + report.print(4, "Calculating electron-neutral elastic collisions"); + + Qenc = calc_electron_neutral_elastic_collisions(neutrals); + Qencp = Qenc[0]; + Qencm = Qenc[1]; + Qenc_v = Qenc[2]; // Friction + } + + + // electron-neutral inelastic collisions + if (input.get_do_electron_neutral_inelastic_collisional_heating()) { + report.print(4, "Calculating electron-neutral inelastic collisions"); + + Qenc_inelastic = calc_electron_neutral_inelastic_collisions(neutrals); + Qrotm = Qenc_inelastic[0]; + Qrotp = Qenc_inelastic[1]; + Qf = Qenc_inelastic[2]; + Qexc = Qenc_inelastic[3]; + Qvib_O2 = Qenc_inelastic[4]; + Qvib_N2 = Qenc_inelastic[5]; + } + + if (input.get_do_thermoelectric_heating()) { + report.print(4, "Calculating thermoelectric heating"); + report.error("Thermoelectric heating is not working yet."); + // Get JPar (Thermoelectric current) + JParallel = calc_thermoelectric_current(grid); + } + + report.print(4, "Calculating electron temperature"); + + arma_cube sources = Qphe + Qencm + Qeicm + Qrotm + Qf + Qexc + Qvib_O2 + Qvib_N2 + + QIonization + Qenc_v + Qeic_v; + arma_cube sources_temp_dependent = Qencp + Qeicp + Qrotp; + + + // ============= CALCULATE TEMPERATURE ================= + arma_vec temp1d(nAlts); + arma_vec lambda1d(nAlts); + arma_vec front1d(nAlts); + arma_vec dalt1d(nAlts); + arma_vec conduction1d(nAlts); + arma_vec sources1d(nAlts); + arma_vec sources_tempdep_1d(nAlts); + arma_vec ratios(nAlts); + arma_vec density_ratio(nAlts); + + // Get the time step size + precision_t dt = time.get_dt(); + + + for (int64_t iLon = nGCs; iLon < nLons - nGCs; iLon++) { + for (int64_t iLat = nGCs; iLat < nLats - nGCs; iLat++) { + temp1d = electron_temperature_scgc.tube(iLon, iLat); + temp1d(0) = neutrals.temperature_scgc(iLon, iLat, 0); + temp1d(1) = neutrals.temperature_scgc(iLon, iLat, 1); + lambda1d = lambda.tube(iLon, iLat); + lambda1d(1) = lambda1d(2); + lambda1d(0) = lambda1d(2); + front1d = 3.0 / 2.0 * cKB * species[nSpecies].density_scgc.tube(iLon, iLat); + dalt1d = grid.dalt_lower_scgc.tube(iLon, iLat); + sources1d = sources.tube(iLon, iLat); + sources1d = sources1d / front1d; + + sources_tempdep_1d = sources_temp_dependent.tube(iLon, iLat); + sources_tempdep_1d = sources_tempdep_1d / front1d; + + conduction1d.zeros(); // reset temp variable to zero + conduction1d = solver_conduction(temp1d, + lambda1d, + front1d, + sources1d, + dalt1d, + dt / 10., + nGCs, + false, + sources_tempdep_1d); + + // The conduction solver gives Tnew-Told, so divide by dt + conduction1d.clamp(200, 6000); + electron_temperature_scgc.tube(iLon, iLat) = conduction1d; + } + } + + // electron_temperature_scgc = neutrals.temperature_scgc; + + report.exit(function); +} + + + +// Since this is used a few times, calculate it separately & pass it to the functions. +// From (Smithro and Solomon, 2008) +arma_cube Ions::calc_epsilon(Neutrals &neutrals) { + + std::string function = "Ions::calc_epsilon"; + static int iFunction = -1; + report.enter(function, iFunction); + + // from Swartz & Nisbet (1972): we need neutral species id's for o2, n2 & o + int64_t inO2 = neutrals.get_species_id("O2"); + int64_t inN2 = neutrals.get_species_id("N2"); + int64_t inO = neutrals.get_species_id("O"); + + if ((inO == -1) || (inN2 == -1) || (inO2 == -1)) + report.error("Could not find O, N2, or O2 in neutrals species list"); + + arma_cube epsilon, x, logx; + + x = density_scgc / (neutrals.species[inO2].density_scgc + + neutrals.species[inN2].density_scgc + + neutrals.species[inO].density_scgc); + // should rarely need to be used: + x.clamp(2e-8, 10.0); + + logx = log(x); + + epsilon = exp(5.342 + 1.056 * logx - pow(4.392e-2 * logx, 2) + - pow(5.9e-2 * logx, 3) - 9.346e-3 * pow(logx, 4) + - 5.755e-4 * pow(logx, 5) - 1.249e-5 * pow(logx, 6) + ) * 1.6e-19; + + report.exit(function); + return epsilon; +} + + + +// -------------------------------------------------------------------------- +// Calculate photoelectron heating +// -------------------------------------------------------------------------- +arma_cube Ions::calc_photoelectron_heating(arma_cube epsilon) { + + std::string function = "Ions::calc_photoelectron_heating"; + static int iFunction = -1; + report.enter(function, iFunction); + + int64_t nIons = nSpecies; + + // Initialize Qphe & IonsIonizationRate (sum of ionization rates) + // to the same size as epsilon and then zero them out: + // (Qphe is the product of epsilon & IonsIonizationRate, so is not zeroed.) + arma_cube Qphe, IonsIonizationRate; + IonsIonizationRate.set_size(epsilon.n_rows, epsilon.n_cols, epsilon.n_slices); + IonsIonizationRate.zeros(); + + for (int64_t iIon = 0; iIon < nIons; iIon++) + IonsIonizationRate += species[iIon].ionization_scgc; + + Qphe = epsilon % IonsIonizationRate; + + report.exit(function); + return Qphe; +} + + +// -------------------------------------------------------------------------- +// Calculate ionization heating +// -------------------------------------------------------------------------- +arma_cube Ions::calc_ionization_heating(arma_cube epsilon) { + + std::string function = "Ions::calc_ionization_heating"; + static int iFunction = -1; + report.enter(function, iFunction); + + int64_t nIons = nSpecies; + + // auroral heating efficiency coefficient + precision_t auroheat = 1.0; + + int64_t iO_3P = get_species_id("O+"); + int64_t iO2P = get_species_id("O2+"); + int64_t iN2P = get_species_id("N2+"); + + arma_cube QIonization = auroheat * epsilon % (species[iO_3P].ionization_scgc + + species[iO2P].ionization_scgc + + species[iN2P].ionization_scgc); + + + report.exit(function); + return QIonization; +} + +// -------------------------------------------------------------------------- +// Calculate electron-ion collisions +// -------------------------------------------------------------------------- +std::vector Ions::calc_electron_ion_collisions() { + + std::string function = "Ions::calc_electron_ion_collisions"; + static int iFunction = -1; + report.enter(function, iFunction); + + arma_cube Qeicp; + Qeicp.set_size(density_scgc.n_rows, density_scgc.n_cols, density_scgc.n_slices); + Qeicp.zeros(); + arma_cube Qeicm = Qeicp; + // Friction things + arma_cube Qeic_v = Qeicp, dv2_ei = Qeicp; + + int64_t nSpecies = nSpecies; + + if (input.get_do_calc_bulk_ion_temp()) { + // This is used when we calculate bulk ion temperature! + report.print(3, "Using bulk ion temperature for electron-ion collisions"); + + // Use all species, not just major species (different from GITM) + for (int64_t iSpecies = 0; iSpecies < nSpecies; iSpecies++) { + Qeicp += species[iSpecies].density_scgc + / (cME + species[iSpecies].mass); + } + + Qeicp = Qeicp % density_scgc * cME * 3.0 * cKB + % (temperature_scgc - electron_temperature_scgc) + * 5.45e-5 / pow(electron_temperature_scgc, 1.5); + } else { + // Individual ion temperatures: + report.print(3, + "Using individual ion temperatures for electron-ion collisions"); + + // Use all species, not just major species (different from GITM) + for (int64_t iSpecies = 0; iSpecies < nSpecies; iSpecies++) { + Qeicp += species[iSpecies].density_scgc + % (species[iSpecies].temperature_scgc - electron_temperature_scgc) + / (cME + species[iSpecies].mass); + } + + Qeicp = Qeicp % density_scgc * cME * 3.0 * cKB + * 5.45e-5 / pow(electron_temperature_scgc, 1.5); + } + + report.print(3, "Calculating frictional heating"); + + // delta velocity **2 btwn e- & ions: + // This uses the bulk ion velocity, not the individual ion velocity. + // (Different from GITM): Uses all species' densities (so just ne), not just o+, o2+, n2+, no+, n+ + for (int64_t iDir = 0; iDir < 3; iDir++) + dv2_ei += pow(velocity_vcgc[iDir] - exb_vcgc[iDir], 2); + + Qeic_v = density_scgc * cME % dv2_ei * 5.45e-5 / pow(electron_temperature_scgc, + 1.5) + % (density_scgc); + + std::vector Qeic = {Qeicp, + Qeicp % electron_temperature_scgc, + Qeic_v + }; + + report.exit(function); + + return Qeic; +} + +// -------------------------------------------------------------------------- +// Calculate electron-neutral elastic collisions +// -------------------------------------------------------------------------- +std::vector Ions::calc_electron_neutral_elastic_collisions( + Neutrals &neutrals) { + + std::string function = "Ions::calc_electron_neutral_elastic_collisions"; + static int iFunction = -1; + report.enter(function, iFunction); + + // initialize & zero the quantities we need: + arma_cube Qenc; + Qenc.set_size(density_scgc.n_rows, density_scgc.n_cols, density_scgc.n_slices); + Qenc.zeros(); + arma_cube Qencp = Qenc; + arma_cube Qencm = Qenc; + // frictional things: + arma_cube dv2_en = Qenc; + arma_cube Qenc_v = Qenc; + + int64_t inO2 = neutrals.get_species_id("O2"); + int64_t inN2 = neutrals.get_species_id("N2"); + int64_t inO = neutrals.get_species_id("O"); + + if ((inO == -1) || (inN2 == -1) || (inO2 == -1)) + report.error("Could not find O, N2, or O2 in neutrals species list"); + + Qenc = density_scgc * cME * 3.0 * cKB % (neutrals.temperature_scgc - + electron_temperature_scgc) + % ((2.33e-11 * neutrals.species[inN2].density_scgc * 1.e-6 + % (1 - 1.21e-4 * electron_temperature_scgc) + % electron_temperature_scgc / (cME + neutrals.species[inN2].mass)) + + (1.82e-10 * neutrals.species[inO2].density_scgc * 1.e-6 + % (1 + 3.60e-2 * pow(electron_temperature_scgc, 0.5)) + % pow(electron_temperature_scgc, 0.5) / (cME + neutrals.species[inO2].mass)) + + (8.90e-11 * neutrals.species[inO].density_scgc * 1.e-6 + % (1 + 5.70e-4 * electron_temperature_scgc) + % pow(electron_temperature_scgc, 0.5) / (cME + neutrals.species[inO].mass)) + ); + report.print(6, "Qenc done"); + Qencp = density_scgc * cME * 3.0 * cKB + % ((2.33e-11 * neutrals.species[inN2].density_scgc * 1.e-6 + % (1 - 1.21e-4 * electron_temperature_scgc) + % electron_temperature_scgc / (cME + neutrals.species[inN2].mass)) + + (1.82e-10 * neutrals.species[inO2].density_scgc * 1.e-6 + % (1 + 3.60e-2 * pow(electron_temperature_scgc, 0.5)) + % pow(electron_temperature_scgc, 0.5) / (cME + neutrals.species[inO2].mass)) + + (8.90e-11 * neutrals.species[inO].density_scgc * 1.e-6 + % (1 + 5.70e-4 * electron_temperature_scgc) + % pow(electron_temperature_scgc, 0.5) / (cME + neutrals.species[inO].mass)) + ); + report.print(6, "Qencp done"); + + // delta velocity **2 btwn e- & neutrals: + for (int64_t iDir = 0; iDir < 3; iDir++) + dv2_en += pow(neutrals.velocity_vcgc[iDir] - exb_vcgc[iDir], 2); + + report.print(6, "dv2 done"); + + Qenc_v = density_scgc * cME % dv2_en + % (2.33e-11 * neutrals.species[inN2].density_scgc * 1.e-6 + % (1 - 1.21e-4 * electron_temperature_scgc) % electron_temperature_scgc * + neutrals.species[inN2].mass + / (cME + neutrals.species[inN2].mass) + + 1.82e-10 * neutrals.species[inO2].density_scgc * 1.e-6 % (1 + 3.60e-2 * pow( + electron_temperature_scgc, 0.5)) + % pow(electron_temperature_scgc, 0.5) * neutrals.species[inO2].mass + / (cME + neutrals.species[inO2].mass) + + 8.90e-11 * neutrals.species[inO].density_scgc * 1.e-6 % + (1 + 5.70e-4 * electron_temperature_scgc) + % pow(electron_temperature_scgc, + 0.5) * neutrals.species[inO2].mass / (cME + neutrals.species[inO2].mass) + ); - electron_temperature_scgc = neutrals.temperature_scgc; + report.print(6, "Qencv done"); + Qencm = Qencp % neutrals.temperature_scgc; + + report.exit(function); + + return std::vector {Qencp, Qencm, Qenc_v}; } +// -------------------------------------------------------------------------- +// Calculate electron-neutral inelasticcollisions +// -------------------------------------------------------------------------- +std::vector Ions::calc_electron_neutral_inelastic_collisions( + Neutrals &neutrals) { + + std::string function = "Ions::calc_electron_neutral_inelastic_collisions"; + static int iFunction = -1; + report.enter(function, iFunction); + + // initialize & zero the quantities we need: + arma_cube Qrot; + Qrot.set_size(density_scgc.n_rows, density_scgc.n_cols, density_scgc.n_slices); + Qrot.zeros(); // N2, O2 roration (Shunk & Nagy pp. 277) + arma_cube Qrotp = Qrot; + arma_cube Qrotm = Qrot; + arma_cube Qf = Qrot; //fine structure heating rate (Shunk & Nagy pp. 282) + arma_cube Qfp = Qrot, Qfm = Qrot; + arma_cube Qexc = Qrot; // O(1D) exitation + arma_cube Qexcp = Qrot, Qexcm = Qrot; + arma_cube Qvib_O2 = Qrot; // O2 vibration + arma_cube logQ = Qrot, Qvib_O2p = Qrot, Qvib_O2m = Qrot; + arma_cube Qvib_N2 = Qrot; // N2 vibration (Pavlov, 1998a) + + int64_t inO2 = neutrals.get_species_id("O2"); + int64_t inN2 = neutrals.get_species_id("N2"); + int64_t inO = neutrals.get_species_id("O"); + + if ((inO == -1) || (inN2 == -1) || (inO2 == -1)) + report.error("Could not find O, N2, or O2 in neutrals species list"); + + // some aliases for common quantities + arma_cube ne = density_scgc; + arma_cube Te = electron_temperature_scgc; + arma_cube Ti = temperature_scgc; + arma_cube Tn = neutrals.temperature_scgc; + arma_cube no2 = neutrals.species[inO2].density_scgc; + arma_cube nn2 = neutrals.species[inN2].density_scgc; + arma_cube no = neutrals.species[inO].density_scgc; + + // Make sure (Ti && Te) > Tn everywhere (from GITM): + arma::uvec Ti_mask = find(Ti <= Tn); + arma::uvec Te_mask = find(Te <= Tn); + Ti.elem(Ti_mask) = Tn.elem(Ti_mask) * 1.0001; + Te.elem(Te_mask) = Tn.elem(Te_mask) * 1.0001; + + // N2, O2 rotation (Shunk & Nagy pp. 277) + Qrot = 3.5e-14 * ne * 1.e-6 % nn2 * 1.e-6 % (Tn - Te) / (pow(Te, 0.5)) + + 5.2e-15 * ne * 1.e-6 % no2 * 1.e-6 % (Tn - Te) / (pow(Te, 0.5)); + Qrot = Qrot * 1.6e-13; // eV cm-3 s -> J m-3 + + Qrotp = 3.5e-14 * ne * 1.e-6 % nn2 * 1.e-6 / (pow(Te, 0.5)) // N2 + + 5.2e-15 * ne * 1.e-6 % no2 * 1.e-6 / (pow(Te, 0.5)); // O2 + Qrotp = Qrotp * 1.6e-13; + Qrotm = Qrotp % Tn; + + // fine strcture heating rate by Shunk and Nagy Page 282 + Qf = 0.0; + arma_cube Dfine = 5.0 + exp(-326.6 / Tn) + 3.0 * exp(-227.7 / Tn); + arma_cube s10 = 8.249e-16 * pow(Te, 0.6) % exp(-227.7 / Tn); + Qf = ne % no * 1.e-12 / Dfine % (s10 % (1. - exp(98.9 * (1 / Te - 1 / Tn))) + + 1.191e-11 * (1. - exp(326.6 * (1 / Te - 1 / Tn))) + + 1.863e-11 * (1. - exp(227.7 * (1 / Te - 1 / Tn)))); + Qf = -Qf * 1.6e-13; // eV cm-3 s-1 -> J m-3 s-1 + + Qfp = 0.0; + Qfm = Qf; + + // O(1D) excitation + arma_cube te_exc = Te.clamp(0.0, 18000.0); + arma_cube dexc = 2.4e4 + 0.3 * (te_exc - 1500.) - 1.947e-5 * + (te_exc - 1500.) % (te_exc - 4000.); + Qexc = 1.57e-12 * ne % no * 1.e-12 % exp(dexc % (te_exc - 3000.) / 3000. / + te_exc) + % (exp(-22713 * (te_exc - Tn) / te_exc / Tn) - 1); + Qexc = Qexc * 1.6e-13; // eV cm-3 s-1 -> J m-3 s-1 + + Qexcp = 0.0; + Qexcm = Qexc; + + // O2 vibration: + + // Calculated differently from GITM, but the result is the same... + // GITM clamped e- temp before calculating, but that makles things really hard here. + // Instead we will use all Te's, and then limit the outputs after. + + logQ = (5.0148e-31 * pow(Te, 9) - 1.5346e-26 * pow(Te, 8) + + 2.0127e-22 * pow(Te, 7) - 1.4791e-18 * pow(Te, 6) + + 6.6865e-15 * pow(Te, 5) - 1.9228e-11 * pow(Te, 4) + + 3.5187e-8 * pow(Te, 3) - 3.996e-5 * pow(Te, 2) + + 0.0267 * Te - 19.9171); + // GITM's Te_6000 was used when 300 300) { + logQv0(0) = Av0L + Bv0L * tte + Cv0L * pow(tte, 2) + Dv0L * pow(tte, + 3) + Fv0L * pow(tte, 4) - 16.0; + Qvib_N2(iLon, iLat, iAlt) = (1.0 - exp(-3353.0 / ttn)) * exp10(logQv0(0)) + * (1.0 - exp(3353.0 * (1.0 / tte - 1.0 / ttn))); + } else if (tte > 1500) { + logQv0 = Av0 + Bv0 * tte + Cv0 * pow(tte, 2) + Dv0 * pow(tte, + 3) + Fv0 * pow(tte, 4) - 16.0; + logQv1 = Av1 + Bv1 * tte + Cv1 * pow(tte, 2) + Dv1 * pow(tte, + 3) + Fv1 * pow(tte, 4) - 16.0; + + for (int iLevel = 0; iLevel < 10; iLevel++) { + Qvib_N2(iLon, iLat, iAlt) += (1.0 - exp(-3353.0 / ttn)) * exp10(logQv0(iLevel)) + * (1.0 - exp((iLevel + 1) * 3353.0 * (1.0 / tte - 1.0 / ttn))); + } + + for (int iLevel = 0; iLevel < 8; iLevel++) { + // GITM did this loop from 2-9, which is out of bounds, so we correct for iLevel here) + Qvib_N2(iLon, iLat, iAlt) += (1.0 - exp(-3353.0 / ttn)) * exp(-3353.0 / ttn) + * exp10(logQv1(iLevel)) + * (1.0 - exp((iLevel + 2) * 3353.0 * (1.0 / tte - 1.0 / ttn))); + } + } + } + } + } + + Qvib_N2 = -ne % nn2 * 1.e-12 % Qvib_N2 * 1.6e-13; + + report.exit(function); + report.print(6, "Qenc done"); + + return std::vector {Qrotm, Qrotp, Qf, Qexc, Qvib_O2, Qvib_N2}; +} + +arma_mat Ions::calc_thermoelectric_current(Grid &grid) { + + std::string function = "Ions::calc_thermoelectric_current"; + static int iFunction = -1; + report.enter(function, iFunction); + + std::vector JTotal; + + arma_mat JParallel; + JParallel.set_size(density_scgc.n_rows, density_scgc.n_cols); + JParallel.zeros(); + + // with the dipole, the field-aligned current is in the k^ direction + // But we do not solve for e- velocity (and exb is 0 parallel to B), so we cannot do this: + // if (grid.iGridShape_ == iDipole_){ + // for (int64_t iAlt = 0; iAlt < ions.density_scgc.n_slices; iAlt++){ + // JParallel += (ions.density_scgc.slice(iAlt) * cE % (ions.velocity_vcgc[2].slice(iAlt) - ions.exb_vcgc[2].slice(iAlt))) + // * grid.dalt_center_scgc[iAlt]; + // } + // } + + // else{ + // We need to solve for J_Parallel with Equation (6) of (Zhu et al., 2016) + // http://dx.doi.org/10.1016/j.jastp.2016.01.005 - using \nabla \dot J + JTotal.push_back(cE * density_scgc % (velocity_vcgc[0] - exb_vcgc[0])); + JTotal.push_back(cE * density_scgc % (velocity_vcgc[1] - exb_vcgc[1])); + JTotal.push_back(cE * density_scgc % (velocity_vcgc[2] - exb_vcgc[2])); + + arma_cube JuTotalDotB = dot_product(JTotal, grid.bfield_vcgc); + arma_cube divJperp; + + divJperp.set_size(density_scgc.n_rows, density_scgc.n_cols, + density_scgc.n_slices); + divJperp.zeros(); + + for (int64_t iDir = 0; iDir < 3; iDir ++) { + divJperp += calc_gradient_vector(JTotal[iDir], grid)[iDir]; + divJperp -= calc_gradient_vector(JuTotalDotB, + grid)[iDir] % grid.bfield_unit_vcgc[iDir]; + divJperp -= calc_gradient_vector(JuTotalDotB, grid)[iDir] % JuTotalDotB; + } + + for (int64_t iAlt = 0; iAlt < density_scgc.n_slices; iAlt++) + JParallel -= divJperp.slice(iAlt) % grid.dalt_center_scgc.slice(iAlt); + report.exit(function); + return JParallel; +} \ No newline at end of file diff --git a/src/calc_euv.cpp b/src/calc_euv.cpp index 09be872e..e03f045c 100644 --- a/src/calc_euv.cpp +++ b/src/calc_euv.cpp @@ -14,7 +14,7 @@ // ----------------------------------------------------------------------------- bool calc_euv(Planets planet, - Grid grid, + Grid &grid, Times time, Euv &euv, Neutrals &neutrals, @@ -49,6 +49,9 @@ bool calc_euv(Planets planet, didWork = euv.neuvac(time, indices); else if (euvModel == "hfg") didWork = euv.solomon_hfg(time, indices); + else if (euvModel == "fism"){ + didWork = euv.get_fism(time); + } if (didWork) euv.scale_from_1au(planet, time); @@ -146,7 +149,8 @@ void calc_ionization_heating(Euv euv, if (neutrals.species[iSpecies].iEuvIonSpecies_[iPei] == neutrals.species[iSpecies].iEuvIonSpecies_[iIonization]) { j_ = neutrals.species[iSpecies].iEuvIonId_[iPei]; - ionization2d[iWave] *= (1 + euv.waveinfo[j_].values[iWave]); + ionization2d *= (1 + euv.waveinfo[j_].values[iWave]); + std::cout << "here in the ipei loop\n"; } } @@ -156,6 +160,7 @@ void calc_ionization_heating(Euv euv, iIon = neutrals.species[iSpecies].iEuvIonSpecies_[iIonization]; ions.species[iIon].ionization_scgc.slice(iAlt) = ions.species[iIon].ionization_scgc.slice(iAlt) + ionization2d; + } // iIonization } // iSpecies } // iWave diff --git a/src/calc_ion_drift.cpp b/src/calc_ion_drift.cpp index 93a139d0..4add34be 100644 --- a/src/calc_ion_drift.cpp +++ b/src/calc_ion_drift.cpp @@ -7,16 +7,14 @@ // Calculate the electric field from the potential // -------------------------------------------------------------------------- -void Ions::calc_efield(Grid grid) { +void Ions::calc_efield(Grid &grid) { // efield = - grad(potential) - efield_vcgc = calc_gradient_vector(potential_scgc, grid); - - for (int64_t iComp = 0; iComp < 3; iComp++) - efield_vcgc[iComp] = -efield_vcgc[iComp]; + efield_vcgc = calc_gradient_vector(-1.0 * potential_scgc, grid); // Remove component along b-field (should be zero, anyways!) - arma_cube edotb = dot_product(efield_vcgc, grid.bfield_unit_vcgc); + arma_cube edotb; + edotb = dot_product(efield_vcgc, grid.bfield_unit_vcgc); for (int64_t iComp = 0; iComp < 3; iComp++) efield_vcgc[iComp] = @@ -27,13 +25,19 @@ void Ions::calc_efield(Grid grid) { // Calculate the E x B drift from the electric field and magnetic field // -------------------------------------------------------------------------- -void Ions::calc_exb_drift(Grid grid) { +void Ions::calc_exb_drift(Grid &grid) { + std::string function = "Ions::calc_exb"; + static int iFunction = -1; + report.enter(function, iFunction); + arma_cube bmag2 = (grid.bfield_mag_scgc) % (grid.bfield_mag_scgc); exb_vcgc = cross_product(efield_vcgc, grid.bfield_vcgc); for (int64_t iComp = 0; iComp < 3; iComp++) exb_vcgc[iComp] = exb_vcgc[iComp] / bmag2; + + report.exit(function); } // -------------------------------------------------------------------------- @@ -42,6 +46,10 @@ void Ions::calc_exb_drift(Grid grid) { std::vector Ions::calc_ion_electron_pressure_gradient(int64_t iIon, Grid grid) { + + std::string function = "Ions::elec_ion_pressure_gradient"; + static int iFunction = -1; + report.enter(function, iFunction); std::vector pressure_gradient_vcgc; arma_cube total_pressure_scgc; @@ -57,6 +65,7 @@ std::vector Ions::calc_ion_electron_pressure_gradient(int64_t iIon, cKB; pressure_gradient_vcgc = calc_gradient_vector(total_pressure_scgc, grid); + report.exit(function); return pressure_gradient_vcgc; } @@ -65,14 +74,17 @@ std::vector Ions::calc_ion_electron_pressure_gradient(int64_t iIon, // Calculate the ion drift // -------------------------------------------------------------------------- -void Ions::calc_ion_drift(Neutrals neutrals, - Grid grid, +void Ions::calc_ion_drift(Neutrals &neutrals, + Grid &grid, precision_t dt) { std::string function = "Ions::calc_ion_drift"; static int iFunction = -1; report.enter(function, iFunction); + // CHANGE !!! + dt = dt / 10.0; + int64_t nX = grid.get_nX(); int64_t nY = grid.get_nY(); int64_t nZ = grid.get_nZ(); @@ -86,33 +98,21 @@ void Ions::calc_ion_drift(Neutrals neutrals, report.print(5, "going into calc_exb_drift"); calc_exb_drift(grid); - std::vector gravity_vcgc = make_cube_vector(nX, nY, nZ, 3); - std::vector wind_forcing = make_cube_vector(nX, nY, nZ, 3); - std::vector total_forcing = make_cube_vector(nX, nY, nZ, 3); - int64_t iIon, iNeutral, iDim; + int64_t iComp; - std::vector grad_Pi_plus_Pe; - arma_cube rho, rho_nuin, nuin_sum, Nie, sum_rho; - arma_cube top, bottom; - - nuin_sum.set_size(nX, nY, nZ); nuin_sum.zeros(); - - sum_rho.set_size(nX, nY, nZ); sum_rho.zeros(); fill_electrons(); - for (int64_t iComp = 0; iComp < 3; iComp++) + for (iComp = 0; iComp < 3; iComp++) velocity_vcgc[iComp].zeros(); for (iIon = 0; iIon < nSpecies; iIon++) { - for (int64_t iComp = 0; iComp < 3; iComp++) { + for (iComp = 0; iComp < 3; iComp++) species[iIon].perp_velocity_vcgc[iComp].zeros(); - species[iIon].par_velocity_vcgc[iComp].zeros(); - } if (species[iIon].DoAdvect) { @@ -126,46 +126,46 @@ void Ions::calc_ion_drift(Neutrals neutrals, // This is assuming that the 3rd dim is radial. // Want actual gravity for 3rd dim - for (iDim = 0; iDim < 3; iDim ++) - gravity_vcgc[iDim] = species[iIon].mass * - grid.gravity_vcgc[iDim] % species[iIon].density_scgc; + for (iComp = 0; iComp < 3; iComp ++) { + gravity_vcgc[iComp] = grid.gravity_vcgc[iComp]; + grad_Pi_plus_Pe[iComp] = grad_Pi_plus_Pe[iComp] / rho; + efield_acc[iComp] = Nie % efield_vcgc[iComp] / rho; + } // Neutral Wind Forcing: report.print(5, "neutral winds"); - for (int64_t iComp = 0; iComp < 3; iComp++) - wind_forcing[iComp].zeros(); + for (iComp = 0; iComp < 3; iComp++) + wind_acc[iComp].zeros(); + + nuin_sum.zeros(); for (iNeutral = 0; iNeutral < neutrals.nSpecies; iNeutral++) { - rho_nuin = rho % species[iIon].nu_ion_neutral_vcgc[iNeutral]; + nuin = species[iIon].nu_ion_neutral_vcgc[iNeutral]; nuin_sum = nuin_sum + species[iIon].nu_ion_neutral_vcgc[iNeutral]; - for (int64_t iComp = 0; iComp < 3; iComp++) { - wind_forcing[iComp] = wind_forcing[iComp] + - rho_nuin % neutrals.velocity_vcgc[iComp]; + for (iComp = 0; iComp < 3; iComp++) { + wind_acc[iComp] = wind_acc[iComp] + + nuin % neutrals.velocity_vcgc[iComp]; } } // Total Forcing (sum everything - this is A_s): - for (int64_t iComp = 0; iComp < 3; iComp++) { - total_forcing[iComp] = + for (iComp = 0; iComp < 3; iComp++) { + total_acc[iComp] = - grad_Pi_plus_Pe[iComp] + gravity_vcgc[iComp] - + wind_forcing[iComp] - + Nie % efield_vcgc[iComp]; + + wind_acc[iComp] + + efield_acc[iComp]; } - std::vector a_par = make_cube_vector(nX, nY, nZ, 3); - std::vector a_perp = make_cube_vector(nX, nY, nZ, 3); - std::vector a_x_b; - if (grid.get_HasBField()) { // With a Planetary Magnetic field - arma_cube a_dot_b = dot_product(total_forcing, grid.bfield_unit_vcgc); + arma_cube a_dot_b = dot_product(total_acc, grid.bfield_unit_vcgc); - for (int64_t iComp = 0; iComp < 3; iComp++) { + for (iComp = 0; iComp < 3; iComp++) { a_par[iComp] = a_dot_b % grid.bfield_unit_vcgc[iComp]; - a_perp[iComp] = total_forcing[iComp] - a_par[iComp]; + a_perp[iComp] = total_acc[iComp] - a_par[iComp]; } a_x_b = cross_product(a_perp, grid.bfield_vcgc); @@ -173,41 +173,64 @@ void Ions::calc_ion_drift(Neutrals neutrals, // With floats, this can become 0, which then makes the // velocity a nan, so the clamp ensures that the bottom is not 0 bottom = - rho_nuin % rho_nuin + + rho % rho % nuin % nuin + Nie % Nie % grid.bfield_mag_scgc % grid.bfield_mag_scgc; bottom.clamp(1e-32, 1e32); - for (int64_t iComp = 0; iComp < 3; iComp++) { - top = rho_nuin % a_perp[iComp] + Nie % a_x_b[iComp]; - species[iIon].perp_velocity_vcgc[iComp] = top / bottom; + for (iComp = 0; iComp < 3; iComp++) { + // I redefined A to be an acceleration instead of a force, which + // then changes the definition of top + top = rho % nuin % a_perp[iComp] + Nie % a_x_b[iComp]; + species[iIon].perp_velocity_vcgc[iComp] = rho % top / bottom; + + // Steady state: + //species[iIon].par_velocity_vcgc[iComp] = + // a_par[iComp] / rho / nuin_sum; + species[iIon].par_velocity_vcgc[iComp] = + (species[iIon].par_velocity_vcgc[iComp] + a_par[iComp] * dt) / + (1 + nuin_sum * dt); + + // These need to change, since they are dependent on the + // grid. Closed, dipole fieldlines should NOT do this!!! + species[iIon].par_velocity_vcgc[iComp].slice(nZ - 1).zeros(); + species[iIon].par_velocity_vcgc[iComp].slice(nZ - 2).zeros(); + species[iIon].par_velocity_vcgc[iComp].slice(nZ - 3) = + species[iIon].par_velocity_vcgc[iComp].slice(nZ - 4); + species[iIon].par_velocity_vcgc[iComp].clamp(-100, 100); + } } else { // No Planetary Magnetic field - for (int64_t iComp = 0; iComp < 3; iComp++) { - a_par[iComp] = total_forcing[iComp]; + for (iComp = 0; iComp < 3; iComp++) { + a_par[iComp] = total_acc[iComp]; // Steady state: - species[iIon].par_velocity_vcgc[iComp] = - a_par[iComp] / rho / nuin_sum; //species[iIon].par_velocity_vcgc[iComp] = - // (species[iIon].par_velocity_vcgc[iComp] + a_par[iComp] * dt / rho) / - // (1 + nuin_sum * dt); + // a_par[iComp] / rho / nuin_sum; + species[iIon].par_velocity_vcgc[iComp] = + (species[iIon].par_velocity_vcgc[iComp] + a_par[iComp] * dt / rho) / + (1 + nuin_sum * dt); + species[iIon].par_velocity_vcgc[iComp].clamp(-100, 100); + } } // Calculate the mass-weighted average total velocity sum_rho = sum_rho + rho; - for (int64_t iComp = 0; iComp < 3; iComp++) { + for (iComp = 0; iComp < 3; iComp++) { + species[iIon].velocity_vcgc[iComp] = + species[iIon].perp_velocity_vcgc[iComp] + + species[iIon].par_velocity_vcgc[iComp]; velocity_vcgc[iComp] = velocity_vcgc[iComp] + - rho % (species[iIon].perp_velocity_vcgc[iComp] + - species[iIon].par_velocity_vcgc[iComp]); + rho % (species[iIon].velocity_vcgc[iComp]); } } // if DoAdvect } // for iIon - for (int64_t iComp = 0; iComp < 3; iComp++) + // This is the mass weighted total bulk velocity: + for (iComp = 0; iComp < 3; iComp++) velocity_vcgc[iComp] = velocity_vcgc[iComp] / sum_rho; report.exit(function); diff --git a/src/calc_ion_temperature.cpp b/src/calc_ion_temperature.cpp index 3ddd3627..24bc2a8e 100644 --- a/src/calc_ion_temperature.cpp +++ b/src/calc_ion_temperature.cpp @@ -11,7 +11,7 @@ // Initialize the ion temperature - set equal to the neutral temperature // -------------------------------------------------------------------------- -void Ions::init_ion_temperature(Neutrals neutrals, Grid grid) { +void Ions::init_ion_temperature(Neutrals neutrals, Grid &grid) { int64_t iIon; @@ -27,6 +27,17 @@ void Ions::init_ion_temperature(Neutrals neutrals, Grid grid) { temperature_scgc = neutrals.temperature_scgc; + // For electron temperature, we need to check if some species are present or not. + // Do this check now & warn if needed: + if ((neutrals.get_species_id("O") == -1) + || (neutrals.get_species_id("O2") == -1) + || (neutrals.get_species_id("N2") == -1)) { + if (input.get_do_photoelectron_heating() + || input.get_do_ionization_heating() + || input.get_do_electron_neutral_elastic_collisional_heating()) + report.error("Your electron temperature sources require neutral O, O2, and N2 to be present."); + } + return; } @@ -34,23 +45,28 @@ void Ions::init_ion_temperature(Neutrals neutrals, Grid grid) { // Calculate the ion temperature // -------------------------------------------------------------------------- -void Ions::calc_ion_temperature(Neutrals neutrals, Grid grid, +void Ions::calc_ion_temperature(const Neutrals &neutrals, Grid &grid, Times time) { std::string function = "Ions::calc_ion_temperature"; static int iFunction = -1; report.enter(function, iFunction); - int64_t iIon, iLon, iLat, nSpecs; + int64_t iIon, iLon, iLat, nSpecs, jIon; int64_t nLons = grid.get_nLons(); int64_t nLats = grid.get_nLats(); int64_t nAlts = grid.get_nAlts(); + int64_t nGCs = grid.get_nGCs(); + precision_t Mi, Mj; arma_vec temp1d(nAlts); arma_vec lambda1d(nAlts); arma_vec front1d(nAlts); arma_vec dalt1d(nAlts); arma_vec conduction1d(nAlts); + arma_vec sources1d(nAlts); + arma_vec ratios(nAlts); + arma_vec density_ratio(nAlts); arma_cube tempT(nLons, nLats, nAlts); arma_cube tempD(nLons, nLats, nAlts); @@ -58,21 +74,7 @@ void Ions::calc_ion_temperature(Neutrals neutrals, Grid grid, // Get the time step size precision_t dt = time.get_dt(); - for (iIon = 0; iIon < nSpecs; iIon++) - species[iIon].temperature_scgc = - neutrals.temperature_scgc; - - temperature_scgc = neutrals.temperature_scgc; - - report.exit(function); - return; - - // Loop over all species or assume only bulk calculation - if (input.get_do_calc_bulk_ion_temp()) - // First ion species only, currently is O+ - nSpecs = 1; - else - nSpecs = nSpecies; + nSpecs = nSpecies; if (report.test_verbose(4)) { std::cout << "Bulk ion temp flag: " << input.get_do_calc_bulk_ion_temp() ? @@ -80,46 +82,78 @@ void Ions::calc_ion_temperature(Neutrals neutrals, Grid grid, std::cout << " so 'number of ions' is " << nSpecs << "\n"; } - // Loop over all species or assume only bulk calculation - for (iIon = 0; iIon < nSpecs; iIon++) { - for (iLon = 0; iLon < nLons; iLon++) { - for (iLat = 0; iLat < nLats; iLat++) { - - // --------------------------------------------------------------------- - // Calculate heat flux (conduction) in 1D; loop over all lat,lon - // --------------------------------------------------------------------- - temp1d = species[iIon].temperature_scgc.tube(iLon, iLat); - lambda1d = 25.0 * pow(cKB, 2) * pow(temp1d, 2.5) / species[iIon].mass - / species[iIon].nu_ion_ion[iIon] / 8.0; - lambda1d = 25.0 * cKB * pow(temp1d, 2.5) * (cKB / species[iIon].mass) - / species[iIon].nu_ion_ion[iIon] / 8.0; - front1d = 2.0 / species[iIon].density_scgc.tube(iLon, iLat) - / cKB / 3.0; - dalt1d = grid.dalt_lower_scgc.tube(iLon, iLat); + calc_lambda(); + // ------------------------------------------------- + // This is for calculating the bulk temperature: + // ------------------------------------------------- + if (input.get_do_calc_bulk_ion_temp()) { + for (iLon = nGCs; iLon < nLons - nGCs; iLon++) { + for (iLat = nGCs; iLat < nLats - nGCs; iLat++) { + temp1d = temperature_scgc.tube(iLon, iLat); + lambda1d = lambda.tube(iLon, iLat); + lambda1d(1) = lambda1d(2); + lambda1d(0) = lambda1d(2); + front1d = 3.0 / 2.0 * cKB * density_scgc.tube(iLon, iLat); + dalt1d = grid.dk_edge_m.tube(iLon, iLat); + sources1d = (heating_neutral_friction_scgc.tube(iLon, iLat) + + heating_neutral_heat_transfer_scgc.tube(iLon, iLat)); + sources1d = sources1d / front1d; conduction1d.zeros(); // reset temp variable to zero - - conduction1d = solver_conduction(temp1d, lambda1d, front1d, dt, dalt1d); - + conduction1d = solver_conduction(temp1d, + lambda1d, + front1d, + sources1d, + dalt1d, + dt / 10., + nGCs, + false); // The conduction solver gives Tnew-Told, so divide by dt - conduction_scgc.tube(iLon, iLat) = conduction1d / dt; - - } // Lats - } // Lons - - // ------------------------------------------------------------------------- - // Add temperature terms together to advance ion temperature - // As more temperature terms get coded, they are added to the parenthesis - // for inclusion in the advancement of the ion temperature - // ------------------------------------------------------------------------- - if (!input.get_do_calc_bulk_ion_temp()) { - species[iIon].temperature_scgc = species[iIon].temperature_scgc + - dt * (conduction_scgc); + conduction1d.clamp(200, 5000); + temperature_scgc.tube(iLon, iLat) = conduction1d; + } } - } // Ions - if (!input.get_do_calc_bulk_ion_temp()) { - // Use the density averaged temperature to fill the bulk temperature + for (iIon = 0; iIon < nSpecies; iIon++) + species[iIon].temperature_scgc = temperature_scgc; + + } else { + + // ------------------------------------------------- + // This is for calculating the individual temperature: + // ------------------------------------------------- + + for (iIon = 0; iIon < nSpecies; iIon++) { + for (iLon = nGCs; iLon < nLons - nGCs; iLon++) { + for (iLat = nGCs; iLat < nLats - nGCs; iLat++) { + temp1d = species[iIon].temperature_scgc.tube(iLon, iLat); + temp1d(0) = neutrals.temperature_scgc(iLon, iLat, 0); + temp1d(1) = neutrals.temperature_scgc(iLon, iLat, 1); + lambda1d = species[iIon].lambda.tube(iLon, iLat); + lambda1d(1) = lambda1d(2); + lambda1d(0) = lambda1d(2); + front1d = 3.0 / 2.0 * cKB * species[iIon].density_scgc.tube(iLon, iLat); + dalt1d = grid.dk_edge_m.tube(iLon, iLat); + sources1d = (species[iIon].heating_neutral_friction_scgc.tube(iLon, iLat) + + species[iIon].heating_neutral_heat_transfer_scgc.tube(iLon, iLat)); + sources1d = sources1d / front1d; + + conduction1d.zeros(); // reset temp variable to zero + conduction1d = solver_conduction(temp1d, + lambda1d, + front1d, + sources1d, + dalt1d, + dt / 10., + nGCs, + false); + + conduction1d.clamp(200, 5000); + species[iIon].temperature_scgc.tube(iLon, iLat) = conduction1d; + } // Lats + } // Lons + } // Ions + tempT.zeros(); tempD.zeros(); @@ -133,15 +167,6 @@ void Ions::calc_ion_temperature(Neutrals neutrals, Grid grid, temperature_scgc = tempT / tempD; } - if (input.get_do_calc_bulk_ion_temp()) { - // Add temperature terms together to advance bulk ion temperature - temperature_scgc = temperature_scgc + dt * (conduction_scgc); - - // Use the bulk ion temperature to fill all ion specie temperatures - for (iIon = 0; iIon < nSpecies; iIon++) - species[iIon].temperature_scgc = temperature_scgc; - } - report.exit(function); return; } diff --git a/src/calc_neutral_derived.cpp b/src/calc_neutral_derived.cpp index 32ca53fe..0ac6e4b5 100644 --- a/src/calc_neutral_derived.cpp +++ b/src/calc_neutral_derived.cpp @@ -6,6 +6,23 @@ #include "aether.h" +// ---------------------------------------------------------------------- +// Calculate viscosity +// ---------------------------------------------------------------------- + +void Neutrals::calc_viscosity() { + + std::string function = "Neutrals::calc_viscosity"; + static int iFunction = -1; + report.enter(function, iFunction); + + viscosity_scgc = 0.00013 * sqrt(temperature_scgc % + mean_major_mass_scgc / cKB); + + report.exit(function); + return; +} + // ---------------------------------------------------------------------- // Calculate eddy diffusion coefficient // ---------------------------------------------------------------------- @@ -30,6 +47,26 @@ void Neutrals::calc_kappa_eddy() { return; } + +// ---------------------------------------------------------------------- +// Calculate mass density and number density: +// ---------------------------------------------------------------------- + +void Neutrals::clamp_density() { + + std::string function = "Neutrals::clamp_density"; + static int iFunction = -1; + report.enter(function, iFunction); + + int64_t iSpecies; + + for (iSpecies = 0; iSpecies < nSpecies; iSpecies++) + species[iSpecies].density_scgc.clamp(1.0, 1e32); + + report.exit(function); + return; +} + // ---------------------------------------------------------------------- // Calculate mass density and number density: // ---------------------------------------------------------------------- @@ -66,9 +103,33 @@ void Neutrals::calc_concentration() { static int iFunction = -1; report.enter(function, iFunction); - for (int64_t iSpecies = 0; iSpecies < nSpecies; iSpecies++) + for (int64_t iSpecies = 0; iSpecies < nSpecies; iSpecies++) { species[iSpecies].concentration_scgc = species[iSpecies].density_scgc / density_scgc; + species[iSpecies].mass_concentration_scgc = + species[iSpecies].mass * species[iSpecies].density_scgc / rho_scgc; + } + + report.exit(function); + return; +} + +// ---------------------------------------------------------------------- +// Calculate densities from mass concentration +// Assuming mass density calculation is accurate... +// ---------------------------------------------------------------------- + +void Neutrals::calc_density_from_mass_concentration() { + + std::string function = "Neutrals::calc_density_from_mass_concentration"; + static int iFunction = -1; + report.enter(function, iFunction); + + for (int64_t iSpecies = 0; iSpecies < nSpecies; iSpecies++) { + species[iSpecies].density_scgc = + rho_scgc % species[iSpecies].mass_concentration_scgc / + species[iSpecies].mass; + } report.exit(function); return; @@ -157,11 +218,18 @@ void Neutrals::assign_bulk_velocity() { static int64_t iSpecies, iDir; - // If you don't advect a species, then fill with bulk velocity: - for (iSpecies = 0; iSpecies < nSpecies; iSpecies++) - if (!species[iSpecies].DoAdvect) + if (input.get_advection_neutrals_bulkwinds()) { + // assume every species is advected with the bunk velocity: + for (iSpecies = 0; iSpecies < nSpecies; iSpecies++) for (iDir = 0; iDir < 3; iDir++) species[iSpecies].velocity_vcgc[iDir] = velocity_vcgc[iDir]; + } else { + // If you don't advect a species, then fill with bulk velocity: + for (iSpecies = 0; iSpecies < nSpecies; iSpecies++) + if (!species[iSpecies].DoAdvect) + for (iDir = 0; iDir < 3; iDir++) + species[iSpecies].velocity_vcgc[iDir] = velocity_vcgc[iDir]; + } report.exit(function); return; @@ -171,7 +239,7 @@ void Neutrals::assign_bulk_velocity() { // Calculate scale heights of different species //---------------------------------------------------------------------- -void Neutrals::calc_scale_height(Grid grid) { +void Neutrals::calc_scale_height(Grid &grid) { int64_t nAlts = grid.get_nAlts(); @@ -181,53 +249,53 @@ void Neutrals::calc_scale_height(Grid grid) { for (iSpecies = 0; iSpecies < nSpecies; iSpecies++) { species[iSpecies].scale_height_scgc = cKB * temperature_scgc / - (species[iSpecies].mass * abs(grid.gravity_vcgc[2])); + (species[iSpecies].mass * abs(grid.gravity_mag_scgc)); } // If we have eddy diffusion, the scale-heights need to be adjusted, // since all of the scale heights should be the same in the region // where eddy diffusion is dominant. + /* + if (input.get_use_eddy_momentum()) { + // We need the mean major mass in the bottom-most cell, which we + // assume is the region where the atmosphere is well-mixed: + + // sum mass densities and densities to calculate mean major mass: + precision_t mTotal = 0.0, dTotal = 0.0, mmm; + // Need the mass density and the number density in the bottom slice: + arma_mat mSlice, dSlice; + + for (iSpecies = 0; iSpecies < nSpecies; iSpecies++) { + mSlice = + species[iSpecies].mass * + species[iSpecies].density_scgc.slice(0); + dSlice = + species[iSpecies].density_scgc.slice(0); + mTotal = mTotal + accu(mSlice); + dTotal = dTotal + accu(dSlice); + } - if (input.get_use_eddy_momentum()) { - // We need the mean major mass in the bottom-most cell, which we - // assume is the region where the atmosphere is well-mixed: - - // sum mass densities and densities to calculate mean major mass: - precision_t mTotal = 0.0, dTotal = 0.0, mmm; - // Need the mass density and the number density in the bottom slice: - arma_mat mSlice, dSlice; - - for (iSpecies = 0; iSpecies < nSpecies; iSpecies++) { - mSlice = - species[iSpecies].mass * - species[iSpecies].density_scgc.slice(0); - dSlice = - species[iSpecies].density_scgc.slice(0); - mTotal = mTotal + accu(mSlice); - dTotal = dTotal + accu(dSlice); - } + mmm = mTotal / dTotal; + mmm = sync_mean_across_all_procs(mmm); - mmm = mTotal / dTotal; - mmm = sync_mean_across_all_procs(mmm); + // bulk scale height, assuming well mixed atmosphere: + arma_cube bulkH = + cKB * temperature_scgc / + (mmm * abs(grid.gravity_mag_scgc)); - // bulk scale height, assuming well mixed atmosphere: - arma_cube bulkH = - cKB * temperature_scgc / - (mmm * abs(grid.gravity_vcgc[2])); - - // percentage will go from 1 = use bulk scale, to 0 = use individual - arma_cube percentage = kappa_eddy_scgc / input.get_eddy_coef(); - arma_cube one = percentage; - one.ones(); - arma_cube omp = one - percentage; - - for (iSpecies = 0; iSpecies < nSpecies; iSpecies++) { - species[iSpecies].scale_height_scgc = - omp % species[iSpecies].scale_height_scgc + - percentage % bulkH; - } - } + // percentage will go from 1 = use bulk scale, to 0 = use individual + arma_cube percentage = kappa_eddy_scgc / input.get_eddy_coef(); + arma_cube one = percentage; + one.ones(); + arma_cube omp = one - percentage; + for (iSpecies = 0; iSpecies < nSpecies; iSpecies++) { + species[iSpecies].scale_height_scgc = + omp % species[iSpecies].scale_height_scgc + + percentage % bulkH; + } + } + */ return; } @@ -326,7 +394,7 @@ void Neutrals::calc_cMax() { report.exit(function); return; } - +/* // ---------------------------------------------------------------------- // Calculate dt primarily for the spherical grid // ---------------------------------------------------------------------- @@ -339,7 +407,7 @@ precision_t Neutrals::calc_dt(Grid grid) { precision_t dt; - if (input.get_is_cubesphere()) + if (grid.iGridShape_ == iCubesphere_) dt = calc_dt_cubesphere(grid); else { int iDir; @@ -353,7 +421,7 @@ precision_t Neutrals::calc_dt(Grid grid) { arma_cube dty = grid.dlat_center_dist_scgc / cMax_vcgc[1]; dta(1) = dty.min(); - if (input.get_nAltsGeo() > 1) { + if (grid.get_nAlts(false) > 1) { arma_cube dtz = grid.dalt_center_scgc / cMax_vcgc[2]; dta(2) = dtz.min(); } else @@ -422,7 +490,7 @@ precision_t Neutrals::calc_dt_cubesphere(Grid grid) { dta(0) = dtx.min(); dta(1) = dty.min(); - if (input.get_nAltsGeo() > 1) { + if (grid.get_nAlts(false) > 1) { arma_cube dtz = grid.dalt_center_scgc / cMax_vcgc[2]; dta(2) = dtz.min(); } else @@ -441,6 +509,7 @@ precision_t Neutrals::calc_dt_cubesphere(Grid grid) { report.exit(function); return dt; } +*/ //---------------------------------------------------------------------- // Calculate the altitude integral of the different species for EUV @@ -449,7 +518,7 @@ precision_t Neutrals::calc_dt_cubesphere(Grid grid) { // this is taken from Smith and Smith, JGR 1972, vol. 77, page 3592 // ---------------------------------------------------------------------- -void Neutrals::calc_chapman(Grid grid) { +void Neutrals::calc_chapman(Grid &grid) { int64_t iAlt, iLon, iLat; @@ -503,30 +572,32 @@ void Neutrals::calc_chapman(Grid grid) { for (int iSpecies = 0; iSpecies < nSpecies; iSpecies++) { - species[iSpecies].scale_height_scgc = - cKB * temperature_scgc / - (species[iSpecies].mass * abs(grid.gravity_vcgc[2])); + calc_scale_height(grid); xp3d = grid.radius_scgc / species[iSpecies].scale_height_scgc; y3d = sqrt(0.5 * xp3d) % abs(grid.cos_sza_scgc); - iAlt = nAlts - 1; - - integral3d.fill(0.0); + integral3d.fill(1.0); + iAlt = nAlts - 1; integral3d.slice(iAlt) = species[iSpecies].density_scgc.slice(iAlt) % species[iSpecies].scale_height_scgc.slice(iAlt); - for (iAlt = nAlts - 1; iAlt >= 0; iAlt--) { - if (iAlt < nAlts - 1) { - integral3d.slice(iAlt) = integral3d.slice(iAlt + 1) + - species[iSpecies].density_scgc.slice(iAlt) % - grid.dalt_lower_scgc.slice(iAlt + 1); - } + species[iSpecies].rho_alt_int_scgc.slice(iAlt) = integral3d.slice(iAlt) + * species[iSpecies].mass; + + for (iAlt = nAlts - 2; iAlt >= 0; iAlt--) { + // dr is used here instead of dalt, since we only want the radial integration, while + // dk is the spacing along the 3rd dimension. + integral3d.slice(iAlt) = integral3d.slice(iAlt + 1) + + species[iSpecies].density_scgc.slice(iAlt) % + grid.dr_edge.slice(iAlt + 1); + species[iSpecies].rho_alt_int_scgc.slice(iAlt) = + species[iSpecies].rho_alt_int_scgc.slice(iAlt + 1) + + species[iSpecies].density_scgc.slice(iAlt) % + grid.dk_edge_m.slice(iAlt + 1) * species[iSpecies].mass; } - species[iSpecies].rho_alt_int_scgc = integral3d * species[iSpecies].mass; - erfcy3d = (a + b * y3d) / (c + d * y3d + y3d % y3d); for (iLon = 0; iLon < nLons ; iLon++) @@ -543,20 +614,21 @@ void Neutrals::calc_chapman(Grid grid) { for (iLon = 0; iLon < nLons ; iLon++) { for (iLat = 0; iLat < nLats ; iLat++) { - - dAlt1d = grid.dalt_lower_scgc.tube(iLon, iLat); + dAlt1d = grid.dr_edge.tube(iLon, iLat); sza1d = grid.sza_scgc.tube(iLon, iLat); integral1d = integral3d.tube(iLon, iLat); log_int1d = log_int3d.tube(iLon, iLat); xp1d = xp3d.tube(iLon, iLat); - y1d = y3d.tube(iLon, iLat); + // y1d = y3d.tube(iLon, iLat); erfcy1d = erfcy3d.tube(iLon, iLat); radius1d = grid.radius_scgc.tube(iLon, iLat); - H1d = species[iSpecies].scale_height_scgc.tube(iLon, iLat); + // H1d = species[iSpecies].scale_height_scgc.tube(iLon, iLat); for (iAlt = nGCs; iAlt < nAlts; iAlt++) { + if (!grid.UseThisCell(iLon, iLat, iAlt)) + continue; // masks off cells below surface of earth, not the best implementation. // This is on the dayside: - if (sza1d(iAlt) < cPI / 2 || sza1d(iAlt) > 3 * cPI / 2) { + else if (sza1d(iAlt) < cPI / 2 || sza1d(iAlt) > 3 * cPI / 2) { species[iSpecies].chapman_scgc(iLon, iLat, iAlt) = integral1d(iAlt) * sqrt(0.5 * cPI * xp1d(iAlt)) * erfcy1d(iAlt); } else { @@ -608,71 +680,3 @@ void Neutrals::calc_chapman(Grid grid) { report.exit(function); return; } - -// ----------------------------------------------------------------------------- -// Calculate thermal conduction -// ----------------------------------------------------------------------------- - -void Neutrals::calc_conduction(Grid grid, Times time) { - - std::string function = "Neutrals::calc_conduction"; - static int iFunction = -1; - report.enter(function, iFunction); - - precision_t dt; - int64_t iLon, iLat; - int64_t nLons = grid.get_nLons(); - int64_t nLats = grid.get_nLats(); - int64_t nAlts = grid.get_nAlts(); - int64_t nGCs = grid.get_nGCs(); - - if (nAlts == 2 * nGCs + 1) - conduction_scgc.zeros(); - - else { - - arma_cube rhocvr23d(nLons, nLats, nAlts); - arma_cube lambda3d(nLons, nLats, nAlts); - arma_cube prandtl3d(nLons, nLats, nAlts); - - rhocvr23d = rho_scgc % Cv_scgc % grid.radius2_scgc; - - // Need to make this eddy * rho * cv: - if (input.get_use_eddy_energy()) - prandtl3d = kappa_eddy_scgc % rho_scgc % Cv_scgc; - else - prandtl3d.zeros(); - - lambda3d = (kappa_scgc + prandtl3d) % grid.radius2_scgc; - - arma_vec temp1d(nAlts); - arma_vec lambda1d(nAlts); - arma_vec rhocvr21d(nAlts); - arma_vec dalt1d(nAlts); - arma_vec conduction1d(nAlts); - - for (iLon = 0; iLon < nLons; iLon++) { - for (iLat = 0; iLat < nLats; iLat++) { - - temp1d = temperature_scgc.tube(iLon, iLat); - lambda1d = lambda3d.tube(iLon, iLat); - rhocvr21d = rhocvr23d.tube(iLon, iLat); - dalt1d = grid.dalt_lower_scgc.tube(iLon, iLat); - conduction1d.zeros(); - - dt = time.get_dt(); - - conduction1d = solver_conduction(temp1d, lambda1d, rhocvr21d, dt, dalt1d); - - // We want the sources to be in terms of dT/dt, while the - // conduction actually solves for Tnew-Told, so divide by dt - - conduction_scgc.tube(iLon, iLat) = conduction1d / dt; - } // lat - } // lon - - } // if nAlts == 1 + 2*GCs - - report.exit(function); - return; -} diff --git a/src/chemistry.cpp b/src/chemistry.cpp index 4d90a1aa..9eb2ebf7 100644 --- a/src/chemistry.cpp +++ b/src/chemistry.cpp @@ -23,16 +23,17 @@ Chemistry::Chemistry(Neutrals neutrals, Ions ions) { - std::string function = "Chemistry::Chemistry"; - static int iFunction = -1; - report.enter(function, iFunction); + std::string function = "Chemistry::Chemistry"; //record current function + static int iFunction = -1; //usually -1 for report function + report.enter(function, + iFunction); //keeps track of functions for: verbose levels, etc. - if (read_chemistry_file(neutrals, ions) > 0) { + if (read_chemistry_file(neutrals, ions) > 0) { //searching for valid chem file report.print(0, "Could not read chemistry file!"); - throw std::invalid_argument( "Invalid chemistry file" ); + throw std::invalid_argument( "Invalid chemistry file" ); //throw & catch can be used for error handling } - report.exit(function); + report.exit(function);//done with this function, see report.cpp return; } @@ -381,7 +382,7 @@ int Chemistry::read_chemistry_file(Neutrals neutrals, std::vector errors; - report.print(1, "Reading Chemistry File : " + input.get_chemistry_file()); + report.print(0, "Reading Chemistry File : " + input.get_chemistry_file()); infile_ptr.open(input.get_chemistry_file()); if (!infile_ptr.is_open()) { @@ -414,8 +415,8 @@ int Chemistry::read_chemistry_file(Neutrals neutrals, throw std::invalid_argument( "Invalid chemistry file" ); } - int iRate_ = headers["rate"]; - int iLoss1_ = headers["loss1"]; + int iRate_ = headers["rate"];//record column index of reaction rate in csv file + int iLoss1_ = headers["loss1"];//record column index of loss1 if (!check_chemistry_file(headers, csv, report)) { iErr = 1; @@ -425,7 +426,7 @@ int Chemistry::read_chemistry_file(Neutrals neutrals, nReactions = 0; // Skip 2 lines of headers! - for (int iLine = 2; iLine < nLines; iLine++) { + for (int iLine = 2; iLine < nLines; iLine++) {//run for [54] reactions // Some final rows can have comments in them, so we want to // skip anything where the length of the string in column 2 // is == 0: @@ -444,7 +445,7 @@ int Chemistry::read_chemistry_file(Neutrals neutrals, if (headers.contains("uncertainty")) { if (csv[iLine][headers["uncertainty"]].length() > 0) { // uncertainty column exists! - json values = input.get_perturb_values(); + json values = input.get_perturb_values(); //(inputs.cpp) if (values.contains("Chemistry")) { json chemistryList = values["Chemistry"]; @@ -512,7 +513,7 @@ int Chemistry::read_chemistry_file(Neutrals neutrals, reactions.push_back(reaction); nReactions++; } - } + } //end run through reactions------------------------------------------------------------------------------ } } else { report.print(0, "Could not open good chemistry file!"); @@ -529,10 +530,11 @@ int Chemistry::read_chemistry_file(Neutrals neutrals, // Interpret a comma separated line of the chemical reaction file // ----------------------------------------------------------------------------- -Chemistry::reaction_type Chemistry::interpret_reaction_line(Neutrals neutrals, - Ions ions, - std::vector line, - json headers) { +Chemistry::reaction_type Chemistry::interpret_reaction_line( + const Neutrals &neutrals, + const Ions &ions, + const std::vector &line, + const json &headers) { std::string function = "Chemistry::interpret_reaction_line"; static int iFunction = -1; @@ -545,9 +547,9 @@ Chemistry::reaction_type Chemistry::interpret_reaction_line(Neutrals neutrals, bool IsNeutral; // Losses (left side) first: - reaction.nLosses = 0; + reaction.nLosses = 0; //nlosses = # of losses in reaction - for (i = headers["loss1"]; i < headers["loss3"]; i++) { + for (i = headers["loss1"]; i < headers["loss3"]; i++) { // loss 1,2,3 find_species_id(line[i], neutrals, ions, id_, IsNeutral); if (id_ >= 0) { @@ -634,9 +636,9 @@ Chemistry::reaction_type Chemistry::interpret_reaction_line(Neutrals neutrals, // Match a string to the neutral or ion species // ----------------------------------------------------------------------------- -void Chemistry::find_species_id(std::string name, - Neutrals neutrals, - Ions ions, +void Chemistry::find_species_id(const std::string &name, + const Neutrals &neutrals, + const Ions &ions, int &id_, bool &IsNeutral) { @@ -647,13 +649,15 @@ void Chemistry::find_species_id(std::string name, int iSpecies; IsNeutral = false; - id_ = neutrals.get_species_id(name); + id_ = neutrals.get_species_id( + name); //from earth.in, starts at 0 w/ first species under "#NEUTRALS",(neutrals.cpp) if (id_ > -1) IsNeutral = true; else - id_ = ions.get_species_id(name); + id_ = ions.get_species_id( + name);//from earth.in, starts at 0 w/ first species under "#IONS",(ions.cpp) report.exit(function); return; @@ -670,28 +674,39 @@ void Chemistry::display_reaction(Chemistry::reaction_type reaction) { std::cout << "Number of Losses : " << reaction.nLosses << "\n"; std::cout << "Number of Sources : " << reaction.nSources << "\n"; - for (i = 0; i < reaction.nLosses; i++) - std::cout << reaction.losses_names[i] << " + "; + for (i = 0; i < reaction.nLosses; i++) // First line for reaction + if (i < reaction.nLosses - 1) // + std::cout << reaction.losses_names[i] << " + "; - std::cout << " -> "; + else // + std::cout << reaction.losses_names[i] << " -> "; for (i = 0; i < reaction.nSources; i++) - std::cout << reaction.sources_names[i] << " + "; - - std::cout << " ( RR : " << reaction.rate << ")\n"; - - for (i = 0; i < reaction.nLosses; i++) - std::cout << reaction.losses_ids[i] - << "(" << reaction.losses_IsNeutral[i] << ")" << " + "; - - std::cout << " -> "; + if (i < reaction.nSources - 1) // + std::cout << reaction.sources_names[i] << " + "; + + else // + std::cout << reaction.sources_names[i] << " (RR : " << reaction.rate << ")\n"; + + for (i = 0; i < reaction.nLosses; i++)//Second line for reaction + if (i < reaction.nLosses - 1) {// + std::cout << reaction.losses_ids[i] + << "(" << reaction.losses_IsNeutral[i] << ")" << " + "; + } else {// + std::cout << reaction.losses_ids[i] + << "(" << reaction.losses_IsNeutral[i] << ")" << " -> "; + } for (i = 0; i < reaction.nSources; i++) - std::cout << reaction.sources_ids[i] - << "(" << reaction.sources_IsNeutral[i] - << ")" << " + "; + if (i < reaction.nSources - 1) {// + std::cout << reaction.sources_ids[i] + << "(" << reaction.sources_IsNeutral[i] << ")" << " + "; + } else {// + std::cout << reaction.sources_ids[i] + << "(" << reaction.sources_IsNeutral[i] + << ")" << " (RR : " << reaction.rate << ")\n"; + } - std::cout << " ( RR : " << reaction.rate << ")\n"; if (reaction.type > 0) { std::cout << "Temperature Dependence: (" diff --git a/src/containers_io.cpp b/src/containers_io.cpp index 75908ad7..18136707 100644 --- a/src/containers_io.cpp +++ b/src/containers_io.cpp @@ -162,6 +162,14 @@ void OutputContainer::set_version(float in_version) { version = in_version; } +// ----------------------------------------------------------------------------- +// Set the number of ghostcells. +// ----------------------------------------------------------------------------- + +void OutputContainer::set_nGhostCells(int in_nGCs) { + nGCs = in_nGCs; +} + // ----------------------------------------------------------------------------- // Clears the elements vector within the output container // ----------------------------------------------------------------------------- @@ -176,6 +184,7 @@ void OutputContainer::clear_variables() { OutputContainer::OutputContainer() { // Set default output type to netCDF + nGCs = 0; #ifdef NETCDF output_type = netcdf_type; #else @@ -236,6 +245,7 @@ void OutputContainer::display() { std::cout << " nX : " << elements[0].value.n_rows << "\n"; std::cout << " nY : " << elements[0].value.n_cols << "\n"; std::cout << " nZ : " << elements[0].value.n_slices << "\n"; + std::cout << " nGCs : " << nGCs << "\n"; int64_t nVars = elements.size(); std::cout << " Number of Variables : " << nVars << "\n"; @@ -281,6 +291,7 @@ bool OutputContainer::write_container_header() { {"nX", nX}, {"nY", nY}, {"nZ", nZ}, + {"nGCs", nGCs}, {"nLons", nX}, {"nLats", nY}, {"nAlts", nZ}, @@ -327,6 +338,7 @@ bool OutputContainer::read_container_binary() { int64_t iY, nY = header["nY"]; int64_t iZ, nZ = header["nZ"]; int64_t iTotalSize = nX * nY * nZ; + nGCs = header["nGCs"]; float *variable_array = new float[iTotalSize]; arma_cube value_scgc; diff --git a/src/cubesphere_tools.cpp b/src/cubesphere_tools.cpp new file mode 100644 index 00000000..d94011bb --- /dev/null +++ b/src/cubesphere_tools.cpp @@ -0,0 +1,300 @@ +// Copyright 2024, the Aether Development Team (see doc/dev_team.md for members) +// Full license can be found in License.md + +// Initial version: F. Cheng, Feb 2024 + +#include "aether.h" + +arma_vec Cubesphere_tools::limiter_mc(arma_vec &left, + arma_vec &right, + int64_t nPts, + int64_t nGCs) { + + precision_t beta = 0.8; + + arma_vec s = left % right; + arma_vec combined = (left + right) * 0.5; + + left = left * beta; + right = right * beta; + arma_vec limited = left; + + for (int64_t i = 1; i < nPts + 2 * nGCs - 1; i++) { + if (s(i) < 0) { + // Sign < 0 means opposite signed left and right: + limited(i) = 0.0; + } else { + if (left(i) > 0 && right(i) > 0) { + if (right(i) < limited(i)) + limited(i) = right(i); + + if (combined(i) < limited(i)) + limited(i) = combined(i); + } else { + if (right(i) > limited(i)) + limited(i) = right(i); + + if (combined(i) > limited(i)) + limited(i) = combined(i); + } + } + } + + return limited; +} + +void Cubesphere_tools::print(arma_vec values) { + int64_t nP = values.n_elem; + + for (int64_t i = 0; i < nP; i++) + std::cout << values(i) << " "; + + std::cout << "\n"; +} + +// --------------------------------------------------------- +// calc gradients at centers +// - values and x defined at centers +// --------------------------------------------------------- + +arma_vec Cubesphere_tools::calc_grad_1d(arma_vec &values, + arma_vec &x, + int64_t nPts, + int64_t nGCs) { + + arma_vec gradients = values * 0.0; + arma_vec gradL = values * 0.0; + arma_vec gradR = values * 0.0; + + precision_t factor1 = 0.625; + precision_t factor2 = 0.0416667; + precision_t h; + + int64_t i; + arma_vec hv = values * 0.0; + + i = nGCs - 1; + h = 2.0 / (x(i + 1) - x(i)); + gradR(i) = h * (factor1 * (values(i + 1) - values(i)) - + factor2 * (values(i + 2) - values(i - 1))); + gradL(i) = (values(i) - values(i - 1)) / (x(i) - x(i - 1)); + + // This is attempting to vectorize the problem, but it seems to be slower? + // int64_t iS = nGCs; + // int64_t iE = nPts + nGCs - 1; + // hv.rows(iS, iE) = 2.0 / (x.rows(iS, iE) - x.rows(iS-1, iE-1)); + // gradL.rows(iS, iE) = hv.rows(iS,iE) % (factor1 * (values.rows(iS, iE) - + // values.rows(iS-1, iE-1)) - + // factor2 * (values.rows(iS+1, iE+1) - + // values.rows(iS-2, iE-2))); + // hv.rows(iS, iE) = 2.0 / (x.rows(iS+1, iE+1) - x.rows(iS, iE)); + // gradR.rows(iS, iE) = hv.rows(iS,iE) % (factor1 * (values.rows(iS+1, iE+1) - + // values.rows(iS, iE)) - + // factor2 * (values.rows(iS+2, iE+2) - + // values.rows(iS-1, iE-1))); + + for (i = nGCs; i < nPts + nGCs; i++) { + h = 2.0 / (x(i) - x(i - 1)); + gradL(i) = h * (factor1 * (values(i) - values(i - 1)) - + factor2 * (values(i + 1) - values(i - 2))); + h = 2.0 / (x(i + 1) - x(i)); + gradR(i) = h * (factor1 * (values(i + 1) - values(i)) - + factor2 * (values(i + 2) - values(i - 1))); + } + + i = nPts + nGCs; + h = 2.0 / (x(i) - x(i - 1)); + gradL(i) = h * (factor1 * (values(i) - values(i - 1)) - + factor2 * (values(i + 1) - values(i - 2))); + gradR(i) = (values(i + 1) - values(i)) / (x(i + 1) - x(i)); + + gradients = Cubesphere_tools::limiter_mc(gradL, gradR, nPts, nGCs); + + return gradients; +} + +// --------------------------------------------------------- +// calc gradients at centers for 2d matrices +// - values and x defined at centers +// --------------------------------------------------------- + +arma_mat Cubesphere_tools::calc_grad(arma_mat values, + arma_mat x, + int64_t nGCs, + bool DoX) { + + arma_mat v2d, x2d; + + if (DoX) { + v2d = values; + x2d = x; + } else { + v2d = values.t(); + x2d = x.t(); + } + + int64_t nX = v2d.n_rows; + int64_t nY = v2d.n_cols; + arma_mat grad2d = v2d * 0.0; + + int64_t nPts = nX - 2 * nGCs; + arma_vec values1d(nX); + arma_vec x1d(nX); + + for (int64_t j = 1; j < nY - 1; j++) { + values1d = v2d.col(j); + x1d = x2d.col(j); + grad2d.col(j) = calc_grad_1d(values1d, x1d, nPts, nGCs); + } + + arma_mat gradients; + + if (DoX) + gradients = grad2d; + else + gradients = grad2d.t(); + + return gradients; +} + +// --------------------------------------------------------- +// Project gradients + values to the right face, from the left +// returned values are on the i - 1/2 edges +// (between i-1 and i cell center) +// --------------------------------------------------------- + +arma_mat Cubesphere_tools::project_from_left(arma_mat values, + arma_mat gradients, + arma_mat x_centers, + arma_mat x_edges, + int64_t nGCs) { + + int64_t nX = values.n_rows; + int64_t nY = values.n_cols; + + // Define at edges: + arma_mat projected(nX + 1, nY); + projected.zeros(); + + // no gradient in the 0 or iEnd cells + for (int64_t j = 0; j < nY; j++) { + for (int64_t i = 1; i < nX - 1; i++) { + projected(i + 1, j) = values(i, j) + + gradients(i, j) * (x_edges(i + 1, j) - x_centers(i, j)); + } + + projected(1, j) = projected(2, j); + projected(0, j) = projected(1, j); + projected(nX, j) = projected(nX - 1, j); + } + + return projected; +} + +// --------------------------------------------------------- +// Project gradients + values to the left face, from the right +// returned values are on the i - 1 edges +// (between i-1 and i cell center) +// --------------------------------------------------------- + +arma_mat Cubesphere_tools::project_from_right(arma_mat values, + arma_mat gradients, + arma_mat x_centers, + arma_mat x_edges, + int64_t nGCs) { + int64_t nX = values.n_rows; + int64_t nY = values.n_cols; + + // Define at edges: + arma_mat projected(nX + 1, nY); + projected.zeros(); + + // no gradient in the 0 or iEnd cells + for (int64_t j = 0; j < nY; j++) { + for (int64_t i = 1; i < nX - 1; i++) { + projected(i, j) = values(i, j) + + gradients(i, j) * (x_edges(i, j) - x_centers(i, j)); + } + + projected(0, j) = projected(1, j); + projected(nX - 1, j) = projected(nX - 2, j); + projected(nX, j) = projected(nX - 1, j); + } + + return projected; +} + +// --------------------------------------------------------- +// Limiter on values +// projected is assumed to be on the edge between the +// i-1 and i cell (i-1/2) +// limited is returned at edges +// --------------------------------------------------------- + +arma_vec Cubesphere_tools::limiter_value(arma_vec projected, + arma_vec values, + int64_t nPts, + int64_t nGCs) { + + int64_t iStart = 0; + int64_t iEnd = nPts + 2 * nGCs; + + arma_vec limited = projected; + + precision_t mini, maxi; + + for (int64_t i = iStart + 1; i < iEnd - 1; i++) { + + mini = values(i - 1); + + if (values(i) < mini) + mini = values(i); + + maxi = values(i - 1); + + if (values(i) > maxi) + maxi = values(i); + + if (limited(i) < mini) + limited(i) = mini; + + if (limited(i) > maxi) + limited(i) = maxi; + } + + return limited; +} + +// // --------------------------------------------------------- +// // take gradients and project to all edges +// // --------------------------------------------------------- + +// projection_struct Cubesphere_tools::project_to_edges(arma_mat &values, +// arma_mat &x_centers, arma_mat &x_edges, +// arma_mat &y_centers, arma_mat &y_edges, +// int64_t nGCs) { + +// int64_t nX = values.n_rows; +// int64_t nY = values.n_cols; + +// projection_struct proj; + +// proj.gradLR = calc_grad(values, x_centers, nGCs, true); +// proj.gradDU = calc_grad(values.t(), y_centers.t(), nGCs, true).t(); + +// proj.R = project_from_left(values, proj.gradLR, +// x_centers, x_edges, nGCs); +// // Left side of edge from left +// proj.L = project_from_right(values, proj.gradLR, +// x_centers, x_edges, nGCs); +// // Up side of edge from down (left) +// proj.U = project_from_left(values.t(), proj.gradDU.t(), +// y_centers.t(), y_edges.t(), nGCs) +// .t(); +// // Down side of edge from up (right) +// proj.D = project_from_right(values.t(), proj.gradDU.t(), +// y_centers.t(), y_edges.t(), nGCs) +// .t(); + +// return proj; +// } diff --git a/src/dipole.cpp b/src/dipole.cpp index 0230a5b3..553da188 100644 --- a/src/dipole.cpp +++ b/src/dipole.cpp @@ -6,6 +6,7 @@ #include "aether.h" + // ----------------------------------------------------------------------------- // Calculate a tilted offset dipole field given the planetary // characteristics @@ -35,7 +36,7 @@ bfield_info_type get_dipole(precision_t lon, transform_llr_to_xyz(llr, xyz); precision_t dipole_center[3]; - std::vector temp_dipole_center = planet.get_dipole_center(); + std::vector temp_dipole_center = planet.get_dipole_center(); transform_float_vector_to_array(temp_dipole_center, dipole_center); precision_t delta_pos_to_center[3]; @@ -113,3 +114,9 @@ bfield_info_type get_dipole(precision_t lon, return bfield_info; } + +// This is the del value from (Swisdak, 2006) & others. Used in Dipole distance calc's. +// Note the cos->sin, since magLat is latitude, not colatitude. +arma_cube delTheta(arma_cube magLat) { + return (sqrt(3 * sin(magLat) % sin(magLat) + 1)); +} \ No newline at end of file diff --git a/src/electrodynamics.cpp b/src/electrodynamics.cpp index 5b930da4..aa91450a 100644 --- a/src/electrodynamics.cpp +++ b/src/electrodynamics.cpp @@ -109,7 +109,11 @@ void Electrodynamics::set_all_indices_for_ie(Times time, float au = indices.get_index(time_now, iAU_); float al = indices.get_index(time_now, iAL_); + if (imfbz < -1e31) + report.error("There doesnt seem to be any IMF Bz!"); + if (report.test_verbose(3)) { + std::cout << "time now : " << time_now << "\n"; std::cout << "imf by : " << iBz_ << " " << imfby << "\n"; std::cout << "imf bz : " << iBz_ << " " << imfbz << "\n"; std::cout << "sw v : " << iVx_ << " " << swv << "\n"; @@ -138,7 +142,7 @@ void Electrodynamics::set_all_indices_for_ie(Times time, // ----------------------------------------------------------------------------- bool Electrodynamics::update(Planets planet, - Grid gGrid, + Grid grid, Times time, Indices &indices, Ions &ions) { @@ -148,16 +152,18 @@ bool Electrodynamics::update(Planets planet, static int iFunction = -1; report.enter(function, iFunction); - if (HaveElectrodynamicsFile || HaveFortranIe) { - set_time(time.get_current()); - gGrid.calc_sza(planet, time); - gGrid.calc_gse(planet, time); - gGrid.calc_mlt(); + bool didWork = true; - // Default is to set everything to zero: - ions.potential_scgc.zeros(); - ions.eflux.zeros(); - ions.avee.ones(); + // Default is to set everything to zero: + ions.potential_scgc.zeros(); + ions.eflux.zeros(); + ions.avee.ones(); + + if (HaveElectrodynamicsFile || HaveFortranIe) { + set_time(time.get_current()); + grid.calc_sza(planet, time); + grid.calc_gse(planet, time); + grid.calc_mlt(); #ifdef FORTRAN @@ -165,11 +171,15 @@ bool Electrodynamics::update(Planets planet, report.print(3, "Using Fortran Electrodynamics!"); set_all_indices_for_ie(time, indices); + // Need to do this every time step, since we are switching between geo and mag grids. + int nXs = grid.get_nX(); + int nYs = grid.get_nY(); + int64_t nZs = grid.get_nZ(); + ie_set_nxs(&nXs); + ie_set_nys(&nYs); + if (!IsAllocated) { - int nXs = gGrid.get_nX(); - ie_set_nxs(&nXs); - int nYs = gGrid.get_nY(); - ie_set_nys(&nYs); + report.print(4, "Allocating variables in electrodynamics"); int64_t iTotal = nXs * nYs; mlt2d = static_cast(malloc(iTotal * sizeof(float))); lat2d = static_cast(malloc(iTotal * sizeof(float))); @@ -179,26 +189,70 @@ bool Electrodynamics::update(Planets planet, IsAllocated = true; } - int64_t nZs = gGrid.get_nZ(); int64_t iZ; - int iError; for (iZ = 0; iZ < nZs; iZ++) { - copy_mat_to_array(gGrid.magLocalTime_scgc.slice(iZ), mlt2d, true); - copy_mat_to_array(gGrid.magLat_scgc.slice(iZ), lat2d, true); - + report.print(5, "Looping through Altitudes..."); + copy_mat_to_array(grid.magLocalTime_scgc.slice(iZ), mlt2d, true); + copy_mat_to_array(grid.magInvLat_scgc.slice(iZ), lat2d, true); ie_set_mlts(mlt2d, &iError); - ie_set_lats(lat2d, &iError); - ie_update_grid(&iError); - ie_get_potential(pot2d, &iError); + if (iError != 0) { + didWork = false; + report.error("Error in ie_set_mlts"); + } + + if (didWork) + ie_set_lats(lat2d, &iError); + + if (iError != 0) { + didWork = false; + report.error("Error in ie_set_lats"); + } + + if (didWork) + ie_update_grid(&iError); + + if (iError != 0) { + didWork = false; + report.error("Error in ie_update_grid"); + } + + if (didWork) + ie_get_potential(pot2d, &iError); + + if (iError != 0) { + didWork = false; + report.error("Error in ie_get_potential"); + std::cout << "ie_get_potential iError : " << iError << "\n"; + } + copy_array_to_mat(pot2d, ions.potential_scgc.slice(iZ), true); if (iZ == nZs - 1) { - ie_get_electron_diffuse_aurora(eflux2d, avee2d, &iError); - copy_array_to_mat(avee2d, ions.avee, true); - copy_array_to_mat(eflux2d, ions.eflux, true); + report.print(5, "Getting Aurora..."); + + if (didWork) { + ie_get_electron_diffuse_aurora(eflux2d, avee2d, &iError); + + if (iError != 0) { + didWork = false; + report.error("Error in ie_get_electron_diffuse_aurora"); + std::cout << "ie_get_electron_diffuse_aurora iError : " << iError << "\n"; + } else { + report.print(5, "Copying avee2d..."); + copy_array_to_mat(avee2d, ions.avee, true); + report.print(5, "Copying eflux2d..."); + copy_array_to_mat(eflux2d, ions.eflux, true); + + if (report.test_verbose(3)) { + std::cout << "I have eflux2d: " << ions.eflux << "\n"; + std::cout << "I have potential: " << ions.potential_scgc.slice(iZ) << "\n"; + } + } + } + } } } @@ -208,8 +262,8 @@ bool Electrodynamics::update(Planets planet, if (HaveElectrodynamicsFile) { report.print(3, "Setting electrodynamics from file!"); auto electrodynamics_values = - get_electrodynamics(gGrid.magLat_scgc, - gGrid.magLocalTime_scgc); + get_electrodynamics(grid.magInvLat_scgc, + grid.magLocalTime_scgc); ions.potential_scgc = std::get<0>(electrodynamics_values); ions.eflux = std::get<1>(electrodynamics_values); ions.avee = std::get<2>(electrodynamics_values); @@ -217,7 +271,7 @@ bool Electrodynamics::update(Planets planet, } report.exit(function); - return true; + return didWork; } // ----------------------------------------------------------------------------- diff --git a/src/euv.cpp b/src/euv.cpp index c4a4069a..67865dc5 100644 --- a/src/euv.cpp +++ b/src/euv.cpp @@ -44,6 +44,11 @@ Euv::Euv() { } } + // Read in FISM data - does not need to be "slotted" + if (input.get_euv_model() == "fism") + fismData = read_fism(input.get_euv_fismfile()); + // Read in NEUVAC data - also does not need to be "slotted" + // Slot the EUVAC model coefficients: if (input.get_euv_model() == "euvac") { IsOk = slot_euv("F74113", "", euvac_f74113); @@ -167,6 +172,62 @@ bool Euv::read_file() { return DidWork; } +// ------------------------------------------------------------------------------- +// Read in FISM data. FISM files are created with srcPython/fism.py, +// and the data are read in to an index_file_output_struct. +// Inside the struct, we have time & each of the "variables" correspond to a +// FISM bin. This number of bins should match the number of bins in the EUV file +// ------------------------------------------------------------------------------- + +index_file_output_struct Euv::read_fism(std::string fism_filename) { + + std::ifstream fismfstream; + fismfstream.open(fism_filename); + std::vector> fism_file; + fism_file = read_csv(fismfstream); + + index_file_output_struct fism_contents; + + // one row per time + fism_contents.nTimes = fism_file.size(); + // first six cols are the YYYY,MM,DD,HH,mm,ss (no ms) + // the rest are the binned fism data + fism_contents.nVars = fism_file[0].size() - 6; + + // check that the user provided the correct EUV file + // The number of bins in euv file should match the number of fism bins ("nVars") + if (fism_contents.nVars != nWavelengths) { + report.error("Number of FISM wavelengths does not match the EUV file provided!"); + report.error("Either change EUV file or check your FISM file is correct."); + IsOk = false; + } + + std::vector itime(7, 0); + std::vector> values; // holds all values + std::vector values_tmp(fism_contents.nVars); // holds values in each row + + for (int iLine = 0; iLine < fism_file.size(); iLine ++) { + + itime[0] = stoi(fism_file[iLine][0]); + itime[1] = stoi(fism_file[iLine][1]); + itime[2] = stoi(fism_file[iLine][2]); + itime[3] = stoi(fism_file[iLine][3]); + itime[4] = stoi(fism_file[iLine][4]); + itime[5] = stoi(fism_file[iLine][5]); + itime[6] = 0; // 0 ms + fism_contents.times.push_back(time_int_to_real(itime)); + + for (int iVar = 0; iVar < fism_contents.nVars; iVar++) + values_tmp[iVar] = stof(fism_file[iLine][iVar + 6]); + + values.push_back(values_tmp); + } + + fism_contents.values = values; + + return fism_contents; +} + // --------------------------------------------------------------------------- // Match rows in EUV file to different types of things, such as cross // sections and spectra @@ -344,6 +405,11 @@ bool Euv::euvac(Times time, precision_t f107a = indices.get_f107a(time.get_current()); precision_t mean_f107 = (f107 + f107a) / 2.0; + if (report.test_verbose(4)) + std::cout << "F107, f107a, average : " + << f107 << " " << f107a + << " -> " << mean_f107 << "\n"; + for (int iWave = 0; iWave < nWavelengths; iWave++) { slope = 1.0 + euvac_afac[iWave] * (mean_f107 - 80.0); @@ -351,21 +417,63 @@ bool Euv::euvac(Times time, slope = 0.8; wavelengths_intensity_1au[iWave] = euvac_f74113[iWave] * slope * pcm2topm2; - } - if (report.test_verbose(4)) { - std::cout << "EUVAC output : " - << f107 << " " << f107a - << " -> " << mean_f107 << "\n"; - - for (int iWave = 0; iWave < nWavelengths; iWave++) { + if (report.test_verbose(4)) std::cout << " " << iWave << " " << wavelengths_short[iWave] << " " << wavelengths_long[iWave] << " " - << wavelengths_intensity_1au[iWave] << "\n"; + << wavelengths_intensity_1au[iWave] / 1e12 << " " + << euvac_afac[iWave] * 100.0 << " " + << euvac_f74113[iWave] / 1e9 << " " + << slope << "\n"; + } + + report.exit(function); + return didWork; +} + +// -------------------------------------------------------------------------- +// From the FISM file, interpolate the nearest 2 data to the current time +// -------------------------------------------------------------------------- + +bool Euv::get_fism(Times time) { + // This is functionally similar to get_indices, however we do not store FISM in + // the Indices class since it has variable number of bins. + + std::string function = "Euv::get_fism"; + static int iFunction = -1; + report.enter(function, iFunction); + + double time_now = time.get_current(); + bool didWork = true; + + if (fism_prev_index == 0) { + // This is probably the first time we're "running" fism. + // Make sure the file covers the entire time range of the run. + double end_time = time.get_end(); + + if (time_now < fismData.times[0] && end_time > fismData.times[-1]) { + report.error("FISM data does not cover the entire time range!"); + report.error("Please check that your FISM file is correct."); + didWork = false; } } + // Get the index prior to the current time + while (fismData.times[fism_prev_index + 1] <= time_now) + fism_prev_index ++; + + // Determine time-interpolation weighting factor + precision_t dt_fism; + dt_fism = fismData.times[fism_prev_index + 1] - fismData.times[fism_prev_index]; + precision_t x = (time_now - fismData.times[fism_prev_index]) / dt_fism; + + // store the wavelength: + for (int iWave = 0; iWave < nWavelengths; iWave ++) + wavelengths_intensity_1au[iWave] = + (1.0 - x) * fismData.values[fism_prev_index][iWave] + + x * fismData.values[fism_prev_index + 1][iWave]; + report.exit(function); return didWork; } diff --git a/src/exchange_messages.cpp b/src/exchange_messages.cpp index 8ab408d7..518ca540 100644 --- a/src/exchange_messages.cpp +++ b/src/exchange_messages.cpp @@ -3,37 +3,11 @@ #include "aether.h" -// ----------------------------------------------------------------------------- -// This is where all of the exchange messages routines will sit. -// -// Notes: -// - We are going to try to do asynchronous communications, which means we -// need to do the following: -// - pack all variables for all four faces -// - send all messages -// - receive all messages -// - unpack all four faces -// - To do this, we need to make send and receive buffers which can't be -// touched until everything is complete, so we will build a structure -// that contains both the send and receive buffers. -// -// - Direction standard: -// iDir == 0 => face 0 => right -// iDir == 1 => face 1 = up -// iDir == 2 => face 2 = left -// iDir == 3 => face 3 = down -// This is the side we are dealing with for the process. For example, -// iDir == 0 in sending could be iDir == 2 in receiving for blocks -// near the equator. -// ----------------------------------------------------------------------------- - - // ----------------------------------------------------------------------------- // This is the main exchange messages for the neutrals. // We are exchanging densities, temperatures, and velocities // ----------------------------------------------------------------------------- - bool Neutrals::exchange_old(Grid &grid) { std::string function = "Neutrals::exchange"; @@ -44,11 +18,95 @@ bool Neutrals::exchange_old(Grid &grid) { int64_t nGCs = grid.get_nGCs(); for (int iSpecies = 0; iSpecies < nSpecies; iSpecies++) { - if (species[iSpecies].DoAdvect) - DidWork = exchange_one_var(grid, species[iSpecies].density_scgc, false); + //if (species[iSpecies].DoAdvect) + DidWork = exchange_one_var(grid, species[iSpecies].density_scgc, false); + } + + DidWork = exchange_one_var(grid, temperature_scgc, false); + + // velocity components: + // reverse east across the pole: + DidWork = exchange_one_var(grid, velocity_vcgc[0], true); + // reverse north across the pole: + DidWork = exchange_one_var(grid, velocity_vcgc[1], true); + // don't reverse vertical across the pole: + DidWork = exchange_one_var(grid, velocity_vcgc[2], false); + + report.exit(function); + return DidWork; +} + +void average_value_at_pole(Grid &grid, arma_cube &value, arma_cube &velocity, + int64_t iLast, int64_t iPole, + bool doesTouchPole) { + // Now let's deal with the poles: + // north pole first: + int64_t iX, nX = grid.get_nX(); + int64_t iZ, nZ = grid.get_nZ(); + int64_t nGCs = grid.get_nGCs(); + int64_t iY, iInc = 1; + + if (iPole < iLast) + iInc = -1; + + double weight, sumValue, sumWeight, totalValue, totalWeight, poleValue; + + for (iZ = nGCs; iZ < nZ - nGCs; iZ++) { + + sumValue = 0.0; + sumWeight = 0.0; + + if (doesTouchPole) { + for (iX = nGCs; iX < nX - nGCs; iX++) { + // determine the weight based on the northward velocity: + weight = iInc * velocity(iX, iLast, iZ) / 1000.0 + 1.0; + + if (weight < 0.01) + weight = 0.01; + + sumValue = sumValue + value(iX, iLast, iZ) * weight; + sumWeight = sumWeight + weight; + } + } + + MPI_Allreduce(&sumValue, &totalValue, 1, MPI_DOUBLE, MPI_SUM, + aether_comm); + MPI_Allreduce(&sumWeight, &totalWeight, 1, MPI_DOUBLE, MPI_SUM, + aether_comm); + poleValue = totalValue / totalWeight; + + //if (iZ == 10) + //std::cout << "pole value : " << poleValue << " " << totalValue << " " << totalWeight << " " + //<< iProc << " " << doesTouchPole << "\n"; + + if (doesTouchPole) { + for (iX = nGCs; iX < nX - nGCs; iX++) + for (iY = iLast + iInc; iY == iPole; iY += iInc) + value(iX, iY, iZ) = poleValue; + } } +} + +// ----------------------------------------------------------------------------- +// This is the main exchange messages for the neutrals. +// We are exchanging densities, temperatures, and velocities +// ----------------------------------------------------------------------------- + +bool Ions::exchange_old(Grid &grid) { + + std::string function = "Ions::exchange"; + static int iFunction = -1; + report.enter(function, iFunction); + + bool DidWork = true; + int64_t nGCs = grid.get_nGCs(); + + for (int iSpecies = 0; iSpecies < nSpecies; iSpecies++) + DidWork = exchange_one_var(grid, species[iSpecies].density_scgc, false); + DidWork = exchange_one_var(grid, temperature_scgc, false); + DidWork = exchange_one_var(grid, electron_temperature_scgc, false); // velocity components: // reverse east across the pole: @@ -58,11 +116,54 @@ bool Neutrals::exchange_old(Grid &grid) { // don't reverse vertical across the pole: DidWork = exchange_one_var(grid, velocity_vcgc[2], false); + int64_t iPole = grid.get_nY() - 1; + int64_t iLast = iPole - nGCs; + + average_value_at_pole(grid, temperature_scgc, velocity_vcgc[1], + iLast, iPole, grid.DoesTouchNorthPole); + + for (int iSpecies = 0; iSpecies < nSpecies; iSpecies++) + average_value_at_pole(grid, species[iSpecies].density_scgc, velocity_vcgc[1], + iLast, iPole, grid.DoesTouchNorthPole); + + iPole = 0; + iLast = nGCs; + average_value_at_pole(grid, temperature_scgc, velocity_vcgc[1], + iLast, iPole, grid.DoesTouchSouthPole); + + for (int iSpecies = 0; iSpecies < nSpecies; iSpecies++) + average_value_at_pole(grid, species[iSpecies].density_scgc, velocity_vcgc[1], + iLast, iPole, grid.DoesTouchSouthPole); + report.exit(function); return DidWork; } +// ----------------------------------------------------------------------------- +// This is where all of the exchange messages routines will sit. +// +// Notes: +// - We are going to try to do asynchronous communications, which means we +// need to do the following: +// - pack all variables for all four faces +// - send all messages +// - receive all messages +// - unpack all four faces +// - To do this, we need to make send and receive buffers which can't be +// touched until everything is complete, so we will build a structure +// that contains both the send and receive buffers. +// +// - Direction standard: +// iDir == 0 => face 0 => right +// iDir == 1 => face 1 = up +// iDir == 2 => face 2 = left +// iDir == 3 => face 3 = down +// This is the side we are dealing with for the process. For example, +// iDir == 0 in sending could be iDir == 2 in receiving for blocks +// near the equator. +// ----------------------------------------------------------------------------- + // ----------------------------------------------------------------------------- // Pack variables for message passing @@ -75,6 +176,7 @@ bool Neutrals::exchange_old(Grid &grid) { // 1 - top // 2 - left // 3 - bottom +// 4 - vertical (k direction) for closed field lines // // cells (assume gc = 2): // 0 1 | 2 3 4 ... n-gc*2 n-gc-1 | n-gc n-1 @@ -88,12 +190,13 @@ bool pack_border(const arma_cube &value, int iDir) { bool DidWork = true; - static int64_t nX = value.n_rows; - static int64_t nY = value.n_cols; - static int64_t nZ = value.n_slices; + int64_t nX = value.n_rows; + int64_t nY = value.n_cols; + int64_t nZ = value.n_slices; int64_t iXstart, iXend; int64_t iYstart, iYend; + int64_t iZstart, iZend; // ---------------------------- // left / right message passing @@ -129,8 +232,22 @@ bool pack_border(const arma_cube &value, } } + // ---------------------------- + // k-dir (only top) + if (iDir == 4) { + iXstart = nG; + iXend = nX - nG; + iYstart = nG; + iYend = nY - nG; + iZstart = nZ - nG; + iZend = nZ; + } else { + iZstart = nG; + iZend = nZ - nG; + } + try { - for (int64_t iZ = nG; iZ < nZ - nG; iZ++) { + for (int64_t iZ = iZstart; iZ < iZend; iZ++) { for (int64_t iY = iYstart; iY < iYend; iY++) { for (int64_t iX = iXstart; iX < iXend; iX++) { packed[*iCounter] = value(iX, iY, iZ); @@ -156,6 +273,7 @@ bool pack_border(const arma_cube &value, // 1 - top // 2 - left // 3 - bottom +// 4 - k-dir top // DoReverseX and DoReverseY are because packing always happens from // lower left to upper right, while face we are unpacking too may // have a different (left - right and up - down) geometry @@ -174,13 +292,14 @@ bool unpack_border(arma_cube &value, bool XbecomesY) { bool DidWork = true; - static int64_t nX = value.n_rows; - static int64_t nY = value.n_cols; - static int64_t nZ = value.n_slices; + int64_t nX = value.n_rows; + int64_t nY = value.n_cols; + int64_t nZ = value.n_slices; int64_t iXstart, iXend; int64_t iYstart, iYend; - int64_t xInc = 1, yInc = 1; + int64_t iZstart, iZend; + int64_t xInc = 1, yInc = 1, zInc = 1; int64_t iXOff = 0; int64_t nCx = nX - 2 * nG; @@ -231,10 +350,26 @@ bool unpack_border(arma_cube &value, } } + if (iDir == 4) { + iXstart = nG; + iXend = nX - nG; + iYstart = nG; + iYend = nY - nG; + // need to reverse direction, since packing is from the bottom up, + // which means unpacking should be from the top down + iZend = nZ - nG; + iZstart = nZ; + zInc = -1; + } else { + iZstart = nG; + iZend = nZ - nG; + } + try { int64_t iXp, iYp; - for (int64_t iZ = nG; iZ < nZ - nG; iZ++) { + for (int64_t iZ = iZstart; iZ < iZend; iZ += zInc) { + if (XbecomesY) { for (int64_t iX = iXstart; iX < iXend; iX += xInc) { iXp = iX; @@ -331,7 +466,7 @@ bool pack_one_var_on_one_face(arma_cube var_scgc, int iDirToPass, Grid &grid) { - static int nG = grid.get_nGCs(); + int nG = grid.get_nGCs(); int iDir = grid.interchangesOneVar[iDirToPass].iFace; int iReceiver = grid.interchangesOneVar[iDirToPass].iProc_to; precision_t *buffer = grid.interchangesOneVar[iDirToPass].buffer; @@ -343,9 +478,7 @@ bool pack_one_var_on_one_face(arma_cube var_scgc, // Current PE is the sender, so check if receiver exists: if (iReceiver > -1) { iP = 0; - DidWork = pack_border(var_scgc, buffer, &iP, nG, iDir); - } return DidWork; @@ -412,6 +545,12 @@ bool Grid::send_one_var_one_face(int64_t iFace) { bool DidWork = true; + if (report.test_verbose(4)) + std::cout << "in send_one_var_one_face : " << iFace << " from: " << + iProc << " to: " << + interchangesOneVar[iFace].iProc_to << " tag: " << + interchangesOneVar[iFace].iTag << "\n"; + MPI_Isend(interchangesOneVar[iFace].buffer, interchangesOneVar[iFace].iSizeTotal, MPI_BYTE, @@ -452,6 +591,13 @@ bool Grid::receive_one_var_one_face(int64_t iFace) { bool DidWork = true; + if (report.test_verbose(4)) + std::cout << "in receive_one_var_one_face : " << iFace << " from: " << + iProc << " to: " << + interchangesOneVar[iFace].iProc_to << " tag: " << + interchangesOneVar[iFace].iTag << "\n"; + + MPI_Recv(interchangesOneVar[iFace].rbuffer, interchangesOneVar[iFace].iSizeTotal, MPI_BYTE, @@ -480,6 +626,7 @@ Grid::messages_struct Grid::make_new_interconnection(int64_t iDir, int64_t nPtsX = nGCs * (nY - nGCs * 2) * (nZ - nGCs * 2); int64_t nPtsY = nGCs * (nX - nGCs * 2) * (nZ - nGCs * 2); + int64_t nPtsZ = nGCs * (nX - nGCs * 2) * (nY - nGCs * 2); new_inter.iFace = iDir; new_inter.DoReverseX = DoReverseX; @@ -487,16 +634,24 @@ Grid::messages_struct Grid::make_new_interconnection(int64_t iDir, new_inter.IsPole = IsPole; new_inter.XbecomesY = XbecomesY; + // Along i axis (left or right): if (iDir == 0 || iDir == 2) { new_inter.iSizeTotal = nVars * nPtsX * sizeof(precision_t); new_inter.index.set_size(nGCs, nY); new_inter.ratio.set_size(nGCs, nY); - } else { + } + + // Along j axis (up or down): + if (iDir == 1 || iDir == 3) { new_inter.iSizeTotal = nVars * nPtsY * sizeof(precision_t); new_inter.index.set_size(nGCs, nX); new_inter.ratio.set_size(nGCs, nX); } + // Along K axis (up only for now): + if (iDir == 4) + new_inter.iSizeTotal = nVars * nPtsZ * sizeof(precision_t); + new_inter.buffer = static_cast(malloc(new_inter.iSizeTotal)); new_inter.rbuffer = static_cast(malloc(new_inter.iSizeTotal)); @@ -510,7 +665,6 @@ Grid::messages_struct Grid::make_new_interconnection(int64_t iDir, return new_inter; } - /* // ----------------------------------------------------------------------------- // Exchange messages for the NEUTRALS: @@ -725,6 +879,13 @@ bool Neutrals::exchange_really_old(Grid &grid) { set_horizontal_bcs(iDir, grid); } + for (int i = 0; i < nSpecies; ++i) + fill_corners(species[i].density_scgc, nG); + + fill_corners(temperature_scgc, nG); + for (int iDir = 0; iDir < 3; iDir++) + fill_corners(velocity_vcgc[iDir], nG); + // Wait for all processors to be done. MPI_Barrier(aether_comm); @@ -737,6 +898,15 @@ bool Neutrals::exchange_really_old(Grid &grid) { // ----------------------------------------------------------------------------- // Initialize interfaces between horizontal sides on a grid +// Directions: +// 0 = + i (right) +// 1 = + j (up) +// 2 = - i (left) +// 3 = - j (down) +// 4 = + k (vertical) - only along closed dipole field lines +// For the cubesphere grid: +// iRoot = 4 is the south polar region +// iRoot = 5 is the north polar region // ----------------------------------------------------------------------------- bool exchange_sides_init(Grid &grid, int64_t nVarsToPass) { @@ -876,6 +1046,24 @@ bool exchange_sides_init(Grid &grid, int64_t nVarsToPass) { ReverseY, XbecomesY)); + if (grid.get_IsDipole() && grid.get_IsClosed()) { + // This operates in the N/S (j or Y) direction: + ReverseX = false; + ReverseY = false; + IsPole = false; + XbecomesY = false; + grid.interchangesOneVar.push_back( + grid.make_new_interconnection(4, + nVarsToPass, + grid.iProcZ, + grid.edge_Z, + IsPole, + ReverseX, + ReverseY, + XbecomesY)); + + } + report.exit(function); return DidWork; } @@ -896,37 +1084,45 @@ bool exchange_one_var(Grid &grid, arma_cube &var_to_pass, bool doReverseSignAcrossPole) { + // This function is only needed if we do interpolation, which only happens in + // the horizontal directions + if (!grid.get_HasXdim() & !grid.get_HasYdim()) + return true; + std::string function = "exchange_one_var"; static int iFunction = -1; report.enter(function, iFunction); bool DidWork = true; - int iTag, iDir; + int iTag, iDir, nDir; int iSpecies; - static int64_t iX, nX = grid.get_nX(); - static int64_t iY, nY = grid.get_nY(); - static int64_t iZ, nZ = grid.get_nZ(); - static int64_t nG = grid.get_nGCs(); - static int64_t nPtsX = nG * (nY - nG * 2) * (nZ - nG * 2); - static int64_t nPtsY = nG * (nX - nG * 2) * (nZ - nG * 2); - static bool IsFirstTime = true; - static arma_cube var_scgc; + int64_t nX = grid.get_nX(); + int64_t nY = grid.get_nY(); + int64_t nZ = grid.get_nZ(); + int64_t nG = grid.get_nGCs(); + arma_cube var_scgc; - static int64_t nVarsToPass = 1; + int64_t nVarsToPass = 1; - if (IsFirstTime) { + if (!grid.isExchangeInitialized) { DidWork = exchange_sides_init(grid, nVarsToPass); - var_scgc.set_size(nX, nY, nX); - IsFirstTime = false; + grid.isExchangeInitialized = true; } + var_scgc.set_size(nX, nY, nZ); + int64_t iP; precision_t oneSign = 1.0; - for (int iDir = 0; iDir < 4; iDir++) { - if (report.test_verbose(2)) + nDir = 4; + + if (grid.get_IsDipole() && grid.get_IsClosed()) + nDir++; + + for (int iDir = 0; iDir < nDir; iDir++) { + if (report.test_verbose(4)) std::cout << "packing one var : " << iDir << " " << iProc << " " << grid.interchangesOneVar[iDir].iProc_to << " " << grid.interchangesOneVar[iDir].iTag << "\n"; @@ -940,43 +1136,43 @@ bool exchange_one_var(Grid &grid, // Current PE is the sender, so check if receiver exists: if (grid.interchangesOneVar[iDir].iProc_to > -1) { iP = 0; - report.print(2, "Packing Border"); + report.print(4, "Packing Border"); DidWork = pack_border(var_scgc, grid.interchangesOneVar[iDir].buffer, &iP, nG, iDir); - report.print(2, "Done Packing Border"); + report.print(4, "Done Packing Border"); } } // Send all faces asynchronously: - for (int iDir = 0; iDir < 4; iDir++) { + for (int iDir = 0; iDir < nDir; iDir++) { if (grid.interchangesOneVar[iDir].iProc_to >= 0) { - report.print(2, "Sending one face"); + report.print(4, "Sending one face"); DidWork = grid.send_one_var_one_face(iDir); } } // Receive all faces asynchronously: - for (int iDir = 0; iDir < 4; iDir++) { + for (int iDir = 0; iDir < nDir; iDir++) { if (grid.interchangesOneVar[iDir].iProc_to >= 0) { - report.print(2, "Receiving one face"); + report.print(4, "Receiving one face"); DidWork = grid.receive_one_var_one_face(iDir); } } // Wait for messages to get there: - for (int iDir = 0; iDir < 4; iDir++) { + for (int iDir = 0; iDir < nDir; iDir++) { if (grid.interchangesOneVar[iDir].iProc_to >= 0) MPI_Wait(&grid.interchangesOneVar[iDir].requests, MPI_STATUS_IGNORE); } // Unpack all faces: - for (int iDir = 0; iDir < 4; iDir++) { + for (int iDir = 0; iDir < nDir; iDir++) { if (grid.interchangesOneVar[iDir].iProc_to >= 0) { iP = 0; - report.print(2, "Unpacking Border"); + report.print(4, "Unpacking Border"); DidWork = unpack_border(var_to_pass, grid.interchangesOneVar[iDir].rbuffer, &iP, @@ -985,13 +1181,10 @@ bool exchange_one_var(Grid &grid, grid.interchangesOneVar[iDir].DoReverseX, grid.interchangesOneVar[iDir].DoReverseY, grid.interchangesOneVar[iDir].XbecomesY); - report.print(2, "Done Unpacking Border"); + report.print(4, "Done Unpacking Border"); } } - // Wait for all processors to be done. - MPI_Barrier(aether_comm); - // If this is a cubesphere grid, interpolate ghostcells to their proper location if (grid.IsCubeSphereGrid & grid.gcInterpolationSet) { report.print(3, "Interpolating Ghostcells to Proper Location"); @@ -1020,10 +1213,10 @@ bool test_ghostcell_interpolation(Grid &grid) { bool didWork = true; - static int64_t iX, nX = grid.get_nX(); - static int64_t iY, nY = grid.get_nY(); - static int64_t iZ, nZ = grid.get_nZ(); - static int64_t nG = grid.get_nGCs(); + int64_t iX, nX = grid.get_nX(); + int64_t iY, nY = grid.get_nY(); + int64_t iZ, nZ = grid.get_nZ(); + int64_t nG = grid.get_nGCs(); int64_t iStart, iEnd, jStart, jEnd, iDir; // Check the latitudes and longitudes to make sure that they map to @@ -1133,9 +1326,9 @@ arma_cube interpolate_ghostcells(arma_cube varIn, Grid &grid) { bool didWork = true; int64_t iDir; - static int64_t iX, ix_, nX = grid.get_nX(); - static int64_t iY, iy_, nY = grid.get_nY(); - static int64_t iG, nG = grid.get_nGCs(); + int64_t iX, ix_, nX = grid.get_nX(); + int64_t iY, iy_, nY = grid.get_nY(); + int64_t iG, nG = grid.get_nGCs(); precision_t r_; arma_cube varOut = varIn; @@ -1192,16 +1385,21 @@ arma_cube interpolate_ghostcells(arma_cube varIn, Grid &grid) { bool find_ghostcell_interpolation_coefs(Grid &grid) { + // This function is only needed if we do interpolation, which only happens in + // the horizontal directions + if (!grid.get_HasXdim() & !grid.get_HasYdim()) + return true; + std::string function = "find_ghostcell_interpolation_coefs"; static int iFunction = -1; report.enter(function, iFunction); bool didWork = true; - static int64_t iX, nX = grid.get_nX(); - static int64_t iY, nY = grid.get_nY(); - static int64_t iZ, nZ = grid.get_nZ(); - static int64_t nG = grid.get_nGCs(); + int64_t iX, nX = grid.get_nX(); + int64_t iY, nY = grid.get_nY(); + int64_t iZ, nZ = grid.get_nZ(); + int64_t nG = grid.get_nGCs(); // Test to see if the longitudes are the same as the original arma_cube yOther = grid.refy_angle * cRtoD; diff --git a/src/file_input.cpp b/src/file_input.cpp index 29e3d67a..667f8e03 100644 --- a/src/file_input.cpp +++ b/src/file_input.cpp @@ -170,7 +170,7 @@ precision_t read_float(std::ifstream &file_ptr, std::string hash) { line = strip_string_end(line); try { - output = stoi(line); + output = stof(line); } catch (...) { std::cout << "Issue in read_float!\n"; std::cout << "In hash: "; diff --git a/src/fill_grid.cpp b/src/fill_grid.cpp index a0f43fc7..3006b827 100644 --- a/src/fill_grid.cpp +++ b/src/fill_grid.cpp @@ -90,7 +90,7 @@ void Grid::calc_gse(Planets planet, Times time) { // --------------------------------------------------------------------------- // Fill in Magnetic Local Time -// - This assumes that the GE coordinates have been calculated +// - This assumes that the GSE coordinates have been calculated // and filled in! // --------------------------------------------------------------------------- @@ -125,7 +125,7 @@ void Grid::calc_mlt() { // calculated and converted to an hour. for (int iZ = 0; iZ < nZ; iZ++) { - dlat_north = 1.0 - (cPI / 2.0 - magLat_scgc.slice(iZ)) / cPI; + dlat_north = 1.0 - (cPI / 2.0 - magInvLat_scgc.slice(iZ)) / cPI; x_blend = dlat_north * mag_pole_north_gse[0](0, 0, iZ) + (1.0 - dlat_north) * mag_pole_south_gse[0](0, 0, iZ); y_blend = dlat_north * mag_pole_north_gse[1](0, 0, iZ) + @@ -171,16 +171,17 @@ void Grid::fill_grid_bfield(Planets planet) { bfield_info = get_bfield(lon, lat, alt, DoDebug, planet); - magLat_scgc(iLon, iLat, iAlt) = bfield_info.lat; - magLon_scgc(iLon, iLat, iAlt) = bfield_info.lon; - - bfield_mag_scgc(iLon, iLat, iAlt) = 0.0; + // Magnetic coordinates: + // init_mag grid already initializes magLon & magInvLat + if (iGridShape_ != iDipole_) { + magInvLat_scgc(iLon, iLat, iAlt) = bfield_info.lat; + magLon_scgc(iLon, iLat, iAlt) = bfield_info.lon; + } for (iDim = 0; iDim < 3; iDim++) { bfield_vcgc[iDim](iLon, iLat, iAlt) = bfield_info.b[iDim] * cNTtoT; - bfield_mag_scgc(iLon, iLat, iAlt) = - bfield_mag_scgc(iLon, iLat, iAlt) + - bfield_vcgc[iDim](iLon, iLat, iAlt) * bfield_vcgc[iDim](iLon, iLat, iAlt); + bfield_mag_scgc(iLon, iLat, iAlt) += pow(bfield_vcgc[iDim](iLon, iLat, iAlt), + 2); } bfield_mag_scgc(iLon, iLat, iAlt) = @@ -189,8 +190,19 @@ void Grid::fill_grid_bfield(Planets planet) { } } - for (iDim = 0; iDim < 3; iDim++) - bfield_unit_vcgc[iDim] = bfield_vcgc[iDim] / (bfield_mag_scgc + 1e-32); + // Now we modify the dipole's magnetic field to account for any imprecision. + // Take the bfield_mag and put it into the third component (b-hat = k-hat) + if (iGridShape_ == iDipole_) { + bfield_vcgc[2] = bfield_mag_scgc % sign(magInvLat_scgc * -1.0); + bfield_vcgc[1].zeros(); + bfield_vcgc[0].zeros(); + + bfield_unit_vcgc[0].zeros(); + bfield_unit_vcgc[1].zeros(); + bfield_unit_vcgc[2] = 1.0 * sign(magInvLat_scgc * -1.0); + } else + for (iDim = 0; iDim < 3; iDim++) + bfield_unit_vcgc[iDim] = bfield_vcgc[iDim] / (bfield_mag_scgc + 1e-32); int IsNorth = 1, IsSouth = 0; mag_pole_north_ll = get_magnetic_pole(IsNorth, planet); @@ -216,6 +228,7 @@ void Grid::fill_grid_radius(Planets planet) { // This generalizes things so that radius could be a function of all // three dimensions. The Cubesphere has different latitudes in the first // and second dimensions. + for (iLon = 0; iLon < nLons; iLon++) for (iLat = 0; iLat < nLats; iLat++) for (iAlt = 0; iAlt < nAlts; iAlt++) @@ -284,11 +297,13 @@ void Grid::calc_gravity(Planets planet) { // *this is the grid class.... gravity_vcgc = calc_gradient_vector(gravity_potential_scgc, *this); - gravity_vcgc[0] = - gravity_vcgc[0]; gravity_vcgc[1] = - gravity_vcgc[1]; gravity_vcgc[2] = - gravity_vcgc[2]; - + gravity_mag_scgc = sqrt( + gravity_vcgc[0] % gravity_vcgc[0] + + gravity_vcgc[1] % gravity_vcgc[1] + + gravity_vcgc[2] % gravity_vcgc[2]); report.exit(function); return; } @@ -297,22 +312,15 @@ void Grid::calc_gravity(Planets planet) { // Fill in XYZ in geo and mag coordinates // ----------------------------------------------------------------------------- -void Grid::calc_grid_spacing(Planets planet) { - +void Grid::calc_xyz(Planets planet) { int64_t iLon, iLat, iAlt; - report.print(3, "starting calc_grid_spacing"); - - calc_alt_grid_spacing(); - calc_lat_grid_spacing(); - calc_long_grid_spacing(); - std::vector lon_lat_radius; lon_lat_radius.push_back(geoLon_scgc); lon_lat_radius.push_back(geoLat_scgc); lon_lat_radius.push_back(radius_scgc); - std::vector xyz; + std::vector xyz; xyz = transform_llr_to_xyz_3d(lon_lat_radius); geoX_scgc = xyz[0]; geoY_scgc = xyz[0]; @@ -321,96 +329,6 @@ void Grid::calc_grid_spacing(Planets planet) { report.print(3, "ending calc_grid_spacing"); } -// --------------------------------------- -// Grid spacing for altitude: -// --------------------------------------- - -void Grid::calc_alt_grid_spacing() { - - int64_t iAlt; - - for (iAlt = 1; iAlt < nAlts - 1; iAlt++) { - dalt_center_scgc.slice(iAlt) = - (geoAlt_scgc.slice(iAlt + 1) - geoAlt_scgc.slice(iAlt - 1)) / 2.0; - dalt_lower_scgc.slice(iAlt) = - geoAlt_scgc.slice(iAlt) - geoAlt_scgc.slice(iAlt - 1); - } - - dalt_center_scgc.slice(0) = dalt_center_scgc.slice(1); - dalt_center_scgc.slice(nAlts - 1) = dalt_center_scgc.slice(nAlts - 2); - - dalt_lower_scgc.slice(0) = dalt_lower_scgc.slice(1); - iAlt = nAlts - 1; - dalt_lower_scgc.slice(iAlt) = - geoAlt_scgc.slice(iAlt) - geoAlt_scgc.slice(iAlt - 1); - - // For a stretched grid, calculate some useful quantities: - // lower is defined for the current cell, which - // means that upper(iAlt) is lower(iAlt+1) - // ratio = upper / lower - for (iAlt = 0; iAlt < nAlts - 1; iAlt++) - dalt_ratio_scgc.slice(iAlt) = - dalt_lower_scgc.slice(iAlt + 1) / dalt_lower_scgc.slice(iAlt); - - iAlt = nAlts - 1; - dalt_ratio_scgc.slice(iAlt) = dalt_ratio_scgc.slice(iAlt - 1); - - // Need the square of the ratio: - dalt_ratio_sq_scgc = dalt_ratio_scgc % dalt_ratio_scgc; -} - -// --------------------------------------- -// Grid spacing for latitude: -// --------------------------------------- - -void Grid::calc_lat_grid_spacing() { - - int64_t iLat; - - for (iLat = 1; iLat < nLats - 1; iLat++) { - dlat_center_scgc.col(iLat) = - (geoLat_scgc.col(iLat + 1) - geoLat_scgc.col(iLat - 1)) / 2.0; - } - - // Bottom (one sided): - iLat = 0; - dlat_center_scgc.col(iLat) = - geoLat_scgc.col(iLat + 1) - geoLat_scgc.col(iLat); - // Top (one sided): - iLat = nLats - 1; - dlat_center_scgc.col(iLat) = - geoLat_scgc.col(iLat) - geoLat_scgc.col(iLat - 1); - - // Make this into a distance: - dlat_center_dist_scgc = dlat_center_scgc % radius_scgc; -} - -// --------------------------------------- -// Grid spacing for longitude: -// --------------------------------------- - -void Grid::calc_long_grid_spacing() { - - int64_t iLon; - - for (iLon = 1; iLon < nLons - 1; iLon++) - dlon_center_scgc.row(iLon) = - (geoLon_scgc.row(iLon + 1) - geoLon_scgc.row(iLon - 1)) / 2.0; - - // Bottom (one sided): - iLon = 0; - dlon_center_scgc.row(iLon) = - geoLon_scgc.row(iLon + 1) - geoLon_scgc.row(iLon); - // Top (one sided): - iLon = nLons - 1; - dlon_center_scgc.row(iLon) = - geoLon_scgc.row(iLon) - geoLon_scgc.row(iLon - 1); - - // Make this into a distance: - dlon_center_dist_scgc = - dlon_center_scgc % radius_scgc % abs(cos(geoLat_scgc)); -} - // ----------------------------------------------------------------------------- // Calaculate centripetal acceleration // ----------------------------------------------------------------------------- @@ -429,3 +347,4 @@ void Grid::calc_cent_acc(Planets planet) { // Radial cent acc cent_acc_vcgc[2] = omega2 * radius_scgc % cos(geoLat_scgc) % cos(geoLat_scgc); } + diff --git a/src/grid.cpp b/src/grid.cpp index 789e637d..22b77c94 100644 --- a/src/grid.cpp +++ b/src/grid.cpp @@ -9,21 +9,97 @@ // Initialize Grid class // -------------------------------------------------------------------------- -Grid::Grid(int nX_in, int nY_in, int nZ_in, int nGCs_in) { +Grid::Grid(std::string gridtype) { - nX = nX_in + nGCs_in * 2; + // At this point, we only need 2 ghostcells. Hardcode this: + // This is also (kinda?) set in sizes.h for the geo & mag grid independently + nGCs = 2; + + Inputs::grid_input_struct grid_input = input.get_grid_inputs(gridtype); + + gridType = gridtype; + + if (mklower(grid_input.shape).find("sphere") != std::string::npos) + iGridShape_ = iSphere_; + + if (mklower(grid_input.shape) == "cubesphere") + iGridShape_ = iCubesphere_; + + //lowercase, check for any number of dipole, so dipole2 matches & dipole does too + if (mklower(grid_input.shape).find("dipole") != std::string::npos) + iGridShape_ = iDipole_; + + if (iGridShape_ == iCubesphere_) { + if (grid_input.nX > grid_input.nY) { + report.error("Cubesphere grid: nX > nY, reducing nX"); + report.print(0, gridType + + ": Cubesphere selected, but nX /= nY, reducing nX"); + grid_input.nX = grid_input.nY; + } + + if (grid_input.nY > grid_input.nX) { + report.error("Cubesphere grid: nY > nX, reducing nY"); + report.print(0, gridType + + ": Cubesphere selected, but nX /= nY, reducing nY"); + grid_input.nY = grid_input.nX; + } + } + + nX = grid_input.nX + nGCs * 2; nLons = nX; - nY = nY_in + nGCs_in * 2; + nY = grid_input.nY + nGCs * 2; nLats = nY; - nZ = nZ_in + nGCs_in * 2; + nZ = grid_input.nZ + nGCs * 2; nAlts = nZ; - nGCs = nGCs_in; + + // Now set all of the logicals to make the flow a bit easier: + + if (grid_input.nX == 1 & + grid_input.nY == 1 & + grid_input.nZ == 1) + Is0D = true; + else { + if (grid_input.nY == 1 & grid_input.nZ == 1) + Is1Dx = true; + + if (grid_input.nX == 1 & grid_input.nZ == 1) + Is1Dy = true; + + if (grid_input.nX == 1 & grid_input.nY == 1) + Is1Dz = true; + + if (!Is1Dx & !Is1Dy & !Is1Dz) { + if (grid_input.nX == 1) + Is2Dyz = true; + + if (grid_input.nY == 1) + Is2Dxz = true; + + if (grid_input.nZ == 1) + Is2Dxy = true; + + if (!Is2Dyz & !Is2Dxz & !Is2Dxy) + Is3D = true; + } + } + + if (grid_input.nX == 1) + HasXdim = false; + + if (grid_input.nY == 1) + HasYdim = false; + + if (grid_input.nZ == 1) + HasZdim = false; geoLon_scgc.set_size(nX, nY, nZ); geoLat_scgc.set_size(nX, nY, nZ); geoAlt_scgc.set_size(nX, nY, nZ); geoLocalTime_scgc.set_size(nX, nY, nZ); + test_scgc.set_size(nX, nY, nZ); + test_scgc.zeros(); + refx_scgc.set_size(nX, nY, nZ); refy_scgc.set_size(nX, nY, nZ); refx_angle.set_size(nX, nY, nZ); @@ -99,6 +175,10 @@ Grid::Grid(int nX_in, int nY_in, int nZ_in, int nGCs_in) { magLon_scgc.set_size(nX, nY, nZ); magLat_scgc.set_size(nX, nY, nZ); magAlt_scgc.set_size(nX, nY, nZ); + magInvLat_scgc.set_size(nX, nY, nZ); + + magP_scgc.set_size(nX, nY, nZ); + magQ_scgc.set_size(nX, nY, nZ); magX_scgc.set_size(nX, nY, nZ); magY_scgc.set_size(nX, nY, nZ); @@ -106,6 +186,22 @@ Grid::Grid(int nX_in, int nY_in, int nZ_in, int nGCs_in) { magLocalTime_scgc.set_size(nX, nY, nZ); + magLon_Left.set_size(nX + 1, nY, nZ); + + magLat_Down.set_size(nX, nY + 1, nZ); + magLat_Below.set_size(nX, nY, nZ + 1); + + magAlt_Down.set_size(nX, nY + 1, nZ); + magAlt_Below.set_size(nX, nY, nZ + 1); + + magLon_Corner.set_size(nX + 1, nY + 1, nZ + 1); + magLat_Corner.set_size(nX + 1, nY + 1, nZ + 1); + magAlt_Corner.set_size(nX + 1, nY + 1, nZ + 1); + + magP_Corner.set_size(nX + 1, nY + 1, nZ + 1); + magQ_Corner.set_size(nX + 1, nY + 1, nZ + 1); + magInvLat_Corner.set_size(nX + 1, nY + 1, nZ + 1); + radius_scgc.set_size(nX, nY, nZ); radius2_scgc.set_size(nX, nY, nZ); radius2i_scgc.set_size(nX, nY, nZ); @@ -114,6 +210,52 @@ Grid::Grid(int nX_in, int nY_in, int nZ_in, int nGCs_in) { dalt_lower_scgc.set_size(nX, nY, nZ); dalt_ratio_scgc.set_size(nX, nY, nZ); dalt_ratio_sq_scgc.set_size(nX, nY, nZ); + dr_edge.set_size(nX, nY, nZ); + + i_center_scgc.set_size(nX, nY, nZ); + j_center_scgc.set_size(nX, nY, nZ); + k_center_scgc.set_size(nX, nY, nZ); + i_edge_scgc.set_size(nX + 1, nY, nZ); + j_edge_scgc.set_size(nX, nY + 1, nZ); + k_edge_scgc.set_size(nX, nY, nZ + 1); + i_corner_scgc.set_size(nX + 1, nY + 1, nZ + 1); + j_corner_scgc.set_size(nX + 1, nY + 1, nZ + 1); + k_corner_scgc.set_size(nX + 1, nY + 1, nZ + 1); + + di_center_scgc.set_size(nX, nY, nZ); + dj_center_scgc.set_size(nX, nY, nZ); + dk_center_scgc.set_size(nX, nY, nZ); + + di_center_m_scgc.set_size(nX, nY, nZ); + dj_center_m_scgc.set_size(nX, nY, nZ); + dk_center_m_scgc.set_size(nX, nY, nZ); + + di_edge.set_size(nX, nY, nZ); + di_edge_m.set_size(nX, nY, nZ); + // For stretched grids along i: + di_ratio.set_size(nX, nY, nZ); + di_ratio_sq.set_size(nX, nY, nZ); + di_one_minus_r2.set_size(nX, nY, nZ); + + dj_edge.set_size(nX, nY, nZ); + dj_edge_m.set_size(nX, nY, nZ); + // For stretched grids along j: + dj_ratio.set_size(nX, nY, nZ); + dj_ratio_sq.set_size(nX, nY, nZ); + dj_one_minus_r2.set_size(nX, nY, nZ); + + dk_edge.set_size(nX, nY, nZ); + dk_edge_m.set_size(nX, nY, nZ); + // For stretched grids along k: + dk_ratio.set_size(nX, nY, nZ); + dk_ratio_sq.set_size(nX, nY, nZ); + dk_one_minus_r2.set_size(nX, nY, nZ); + + MeshCoef1s3rdp1.set_size(nX, nY, nGCs); + MeshCoef1s3rdp2.set_size(nX, nY, nGCs); + MeshCoef1s3rdp3.set_size(nX, nY, nGCs); + MeshCoef1s3rdp4.set_size(nX, nY, nGCs); + MeshCoef1s3rdp5.set_size(nX, nY, nGCs); dlat_center_scgc.set_size(nX, nY, nZ); dlat_center_dist_scgc.set_size(nX, nY, nZ); @@ -146,6 +288,18 @@ Grid::Grid(int nX_in, int nY_in, int nZ_in, int nGCs_in) { mag_pole_south_gse.push_back(tmp_col); HasBField = 0; + IsExperimental = false; + + // Spatial info defaults + IsClosed = false; + DoesTouchNorthPole = false; + DoesTouchSouthPole = false; + + UseThisCell.set_size(nX, nY, nZ); + UseThisCell.fill(true); + first_lower_gc.set_size(nX, nY); + first_upper_gc.set_size(nX, nY); + altitude_lower_bc = 0.0; cent_acc_vcgc = make_cube_vector(nLons, nLats, nAlts, 3); @@ -154,6 +308,16 @@ Grid::Grid(int nX_in, int nY_in, int nZ_in, int nGCs_in) { } +// -------------------------------------------------------------------------- +// Set Variable Sizes +// -------------------------------------------------------------------------- + +void Grid::set_variable_sizes() { + + return; +} + + // -------------------------------------------------------------------------- // write restart out files for the grid // -------------------------------------------------------------------------- @@ -167,8 +331,9 @@ bool Grid::write_restart(std::string dir) { try { OutputContainer RestartContainer; RestartContainer.set_directory(dir); - RestartContainer.set_version(0.1); + RestartContainer.set_version(aether_version); RestartContainer.set_time(0.0); + RestartContainer.set_nGhostCells(nGCs); // Output Cell Centers RestartContainer.set_filename("grid_" + cGrid); @@ -255,7 +420,7 @@ bool Grid::read_restart(std::string dir) { try { OutputContainer RestartContainer; RestartContainer.set_directory(dir); - RestartContainer.set_version(0.1); + RestartContainer.set_version(aether_version); // Cell Centers: RestartContainer.set_filename("grid_" + cGrid); RestartContainer.read(); @@ -323,10 +488,26 @@ void Grid::report_grid_boundaries() { // Get whether the grid is a geographic grid (or magnetic - return 0) // -------------------------------------------------------------------------- -int Grid::get_IsGeoGrid() { +bool Grid::get_IsGeoGrid() { return IsGeoGrid; } +// -------------------------------------------------------------------------- +// Return grid type (neu or ion) +// -------------------------------------------------------------------------- + +std::string Grid::get_gridtype() { + return gridType; +} + +// -------------------------------------------------------------------------- +// Get whether the grid is a experimental (return true for experimental) +// -------------------------------------------------------------------------- + +bool Grid::get_IsExperimental() { + return IsExperimental; +} + // -------------------------------------------------------------------------- // Get whether the grid is a geographic grid (or magnetic - return 0) // -------------------------------------------------------------------------- @@ -339,10 +520,43 @@ bool Grid::get_HasBField() { // Set whether the grid is a geographic grid (or magnetic - set to 0) // -------------------------------------------------------------------------- -void Grid::set_IsGeoGrid(int value) { +void Grid::set_IsGeoGrid(bool value) { IsGeoGrid = value; } +// -------------------------------------------------------------------------- +// Set whether the grid is an experimental grid +// -------------------------------------------------------------------------- + +void Grid::set_IsExperimental(bool value) { + IsExperimental = value; +} + +// -------------------------------------------------------------------------- +// Set whether the grid is a dipole grid +// -------------------------------------------------------------------------- + +void Grid::set_IsDipole(bool value) { + IsDipole = value; +} + +// -------------------------------------------------------------------------- +// Get whether the grid is a dipole grid +// -------------------------------------------------------------------------- + +bool Grid::get_IsDipole() { + return IsDipole; +} + +// -------------------------------------------------------------------------- +// Get whether the dipole grid is closed (true) or open (false) +// -------------------------------------------------------------------------- + +bool Grid::get_IsClosed() { + return IsClosed; +} + + // -------------------------------------------------------------------------- // Get total number of grid points // -------------------------------------------------------------------------- @@ -353,6 +567,38 @@ int64_t Grid::get_nPointsInGrid() { return nPoints; } +// -------------------------------------------------------------------------- +// Get some grid definition things +// -------------------------------------------------------------------------- + +bool Grid::get_HasXdim() { + return HasXdim; +} + +bool Grid::get_HasYdim() { + return HasYdim; +} + +bool Grid::get_HasZdim() { + return HasZdim; +} + +bool Grid::get_Is0D() { + return Is0D; +} + +bool Grid::get_Is1Dx() { + return Is1Dx; +} + +bool Grid::get_Is1Dy() { + return Is1Dy; +} + +bool Grid::get_Is1Dz() { + return Is1Dz; +} + // -------------------------------------------------------------------------- // Get a bunch of sizes within the grid // -------------------------------------------------------------------------- @@ -367,6 +613,25 @@ int64_t Grid::get_nZ() { return nZ; } +int64_t Grid::get_nX(bool includeGCs) { + if (includeGCs) + return nX; + else + return nX - 2 * nGCs; +} +int64_t Grid::get_nY(bool includeGCs) { + if (includeGCs) + return nY; + else + return nY - 2 * nGCs; +} +int64_t Grid::get_nZ(bool includeGCs) { + if (includeGCs) + return nZ; + else + return nZ - 2 * nGCs; +} + int64_t Grid::get_nLons() { return nLons; } @@ -377,6 +642,25 @@ int64_t Grid::get_nAlts() { return nAlts; } +int64_t Grid::get_nLons(bool includeGCs) { + if (includeGCs) + return nLons; + else + return nLons - 2 * nGCs; +} +int64_t Grid::get_nLats(bool includeGCs) { + if (includeGCs) + return nLats; + else + return nLats - 2 * nGCs; +} +int64_t Grid::get_nAlts(bool includeGCs) { + if (includeGCs) + return nAlts; + else + return nAlts - 2 * nGCs; +} + int64_t Grid::get_nGCs() { return nGCs; } diff --git a/src/grid_cubesphere.cpp b/src/grid_cubesphere.cpp new file mode 100644 index 00000000..4be8c25c --- /dev/null +++ b/src/grid_cubesphere.cpp @@ -0,0 +1,996 @@ +// Copyright 2025, the Aether Development Team (see doc/dev_team.md for members) +// Full license can be found in License.md + + +#include "aether.h" + +// ---------------------------------------------------------------------- +// Create connectivity between the nodes for message passing for cubesphere +// ---------------------------------------------------------------------- + +void Grid::create_cubesphere_connection(Quadtree quadtree) { + + std::string function = "Grid::create_cubesphere_connection"; + static int iFunction = -1; + report.enter(function, iFunction); + + IsLatLonGrid = false; + + arma_vec lower_left_norm = quadtree.get_vect("LL"); + arma_vec middle_norm = quadtree.get_vect("MID"); + arma_vec size_right_norm = quadtree.get_vect("SR"); + arma_vec size_up_norm = quadtree.get_vect("SU"); + + // These points go off the edge to the next block in each direction: + arma_vec down_norm = middle_norm - 0.51 * size_up_norm; + arma_vec up_norm = middle_norm + 0.51 * size_up_norm; + arma_vec left_norm = middle_norm - 0.51 * size_right_norm; + arma_vec right_norm = middle_norm + 0.51 * size_right_norm; + + // Find those points in the quadtree to figure out which processor + // they are on + iProcYm = quadtree.find_point(down_norm) + iMember * nGrids; + iProcYp = quadtree.find_point(up_norm) + iMember * nGrids; + iProcXm = quadtree.find_point(left_norm) + iMember * nGrids; + iProcXp = quadtree.find_point(right_norm) + iMember * nGrids; + + // Need to know which side the current block is on and which side each + // of the blocks in the different directions is on. Need this so we can + // know how to unpack the variables after the message pass. + iRoot = quadtree.find_root(middle_norm); + iRootYm = quadtree.find_root(down_norm); + iRootYp = quadtree.find_root(up_norm); + iRootXm = quadtree.find_root(left_norm); + iRootXp = quadtree.find_root(right_norm); + + // These should be the exact edge of the face. + // The from and to processors should get these in the same place, + // so they can be used to match which processor to send / receive info + edge_Xp = middle_norm + size_right_norm / 2.0; + edge_Xm = middle_norm - size_right_norm / 2.0; + edge_Yp = middle_norm + size_up_norm / 2.0; + edge_Ym = middle_norm - size_up_norm / 2.0; + + if (report.test_verbose(2)) + std::cout << "connectivity : " + << " iProc : " << iProc << "\n" + << " isnorth : " << DoesTouchNorthPole << "\n" + << " issouth : " << DoesTouchSouthPole << "\n" + << " iProcXp : " << iProcXp << "\n" + << " iProcYp : " << iProcYp << "\n" + << " iProcXm : " << iProcXm << "\n" + << " iProcYm : " << iProcYm << "\n" + << " iRoot : " << iRoot << "\n" + << " iRootXp : " << iRootXp << "\n" + << " iRootYp : " << iRootYp << "\n" + << " iRootXm : " << iRootXm << "\n" + << " iRootYm : " << iRootYm << "\n"; + + int64_t iProcSelf = quadtree.find_point(middle_norm); + + report.exit(function); + return; +} + + +// ---------------------------------------------------------------------- +// This function takes the normalized coordinates and makes latitude +// and longitude arrays from them. It can do this for the corners or +// edges, depending on the offset. +// ---------------------------------------------------------------------- + +void Grid::init_cubesphere_grid(Quadtree quadtree, + arma_vec dr, + arma_vec du, + arma_vec ll, + precision_t left_off, + precision_t down_off, + cubesphere_chars &cubeX) { + + std::string function = "Grid::init_cubesphere_grid"; + static int iFunction = -1; + report.enter(function, iFunction); + + precision_t dnu, dxi, nu0, xi0; + + // The du, dr, and ll were meant to be used on the cube + // and not really on the equal-angle grid. So, we probably + // want to rethink these... + if (quadtree.iSide == 0) { + dnu = du[2]; + dxi = dr[0]; + nu0 = ll[0]; + xi0 = ll[2]; + } + + if (quadtree.iSide == 1) { + dnu = du[2]; + dxi = dr[1]; + nu0 = ll[1]; + xi0 = ll[2]; + } + + if (quadtree.iSide == 2) { + dnu = du[2]; + dxi = -dr[0]; + nu0 = -ll[0]; + xi0 = ll[2]; + } + + if (quadtree.iSide == 3) { + dnu = du[2]; + dxi = -dr[1]; + nu0 = -ll[1]; + xi0 = ll[2]; + } + + if (quadtree.iSide == 4) { + dnu = du[0]; + dxi = dr[1]; + nu0 = ll[1]; + xi0 = ll[0]; + } + + if (quadtree.iSide == 5) { + dnu = -du[0]; + dxi = dr[1]; + nu0 = ll[1]; + xi0 = -ll[0]; + } + + // Normalized from -1 to 1 -> -pi/4 to pi/4 + dnu = dnu * cPI / 4.0; + dxi = dxi * cPI / 4.0; + nu0 = nu0 * cPI / 4.0; + xi0 = xi0 * cPI / 4.0; + + cubeX.dnu = dnu; + cubeX.dxi = dxi; + + int64_t iDU, iLR; + precision_t iD, iL; + int64_t nXp = nX, nYp = nY; + + // If we are shifting the grid over and doing edges, we + // need to increase the number of points by 1 in that + // direction: + if (left_off < cSmall) + nXp++; + + if (down_off < cSmall) + nYp++; + + // These are convenient for the solver: + cubeX.nXt = nXp; + cubeX.nYt = nYp; + cubeX.nGCs = nGCs; + cubeX.iXfirst_ = nGCs; + cubeX.iXlast_ = nXp - nGCs; + cubeX.iYfirst_ = nGCs; + cubeX.iYlast_ = nYp - nGCs; + + // these are coordinates: + cubeX.lat.resize(nXp, nYp); + cubeX.lon.resize(nXp, nYp); + cubeX.nu.resize(nXp, nYp); + cubeX.xi.resize(nXp, nYp); + + cubeX.X.resize(nXp, nYp); + cubeX.Y.resize(nXp, nYp); + cubeX.Z.resize(nXp, nYp); + cubeX.C.resize(nXp, nYp); + cubeX.D.resize(nXp, nYp); + cubeX.d.resize(nXp, nYp); + + // These are dependent on radius, + // but that is not included at this time: + cubeX.dlx.resize(nXp, nYp, nZ); + cubeX.dln.resize(nXp, nYp, nZ); + cubeX.dS.resize(nXp, nYp, nZ); + cubeX.R.resize(nZ); + + // These are matricies for rotating vectors: + cubeX.Apn.resize(nXp, nYp); + cubeX.Apx.resize(nXp, nYp); + cubeX.Atn.resize(nXp, nYp); + cubeX.Atx.resize(nXp, nYp); + cubeX.Axt.resize(nXp, nYp); + cubeX.Axp.resize(nXp, nYp); + cubeX.Ant.resize(nXp, nYp); + cubeX.Anp.resize(nXp, nYp); + + // These are for computing normals to the cell edges (horizontal) + cubeX.nXiLon.resize(nXp, nYp); + cubeX.nXiLat.resize(nXp, nYp); + cubeX.nNuLon.resize(nXp, nYp); + cubeX.nNuLat.resize(nXp, nYp); + + precision_t det, dmo, latp, lonp; + + // Loop through each point and derive the coordinate + for (iDU = 0; iDU < nY; iDU++) { + for (iLR = 0; iLR < nX; iLR++) { + + // the offsets are so we can find cell centers, edges, and corners + iD = iDU - nGCs + down_off; + iL = iLR - nGCs + left_off; + + // Define local coordinates: + // Xi is LR (x), Nu is UD (y) + cubeX.nu(iLR, iDU) = (nu0 + dnu * iD); + cubeX.xi(iLR, iDU) = (xi0 + dxi * iL); + + cubeX.X(iLR, iDU) = tan(cubeX.xi(iLR, iDU)); + cubeX.Y(iLR, iDU) = tan(cubeX.nu(iLR, iDU)); + + // Transformation from 3D Cartesian to LatLong + // lonp = std::atan2(y_cart, x_cart) + cPI/2.0; + if (quadtree.iSide == 0) { + lonp = std::atan(cubeX.X(iLR, iDU)); + // Theta in Ronchi is from the north pole, so lat is 90 - theta + latp = std::atan(1.0 / cubeX.Y(iLR, iDU) / std::cos(lonp)); + } + + if (quadtree.iSide == 1) { + lonp = std::atan(-1.0 / cubeX.X(iLR, iDU)); + + if (lonp < 0) + lonp = cPI + lonp; + + // Theta in Ronchi is from the north pole, so lat is 90 - theta + latp = std::atan(1.0 / cubeX.Y(iLR, iDU) / std::sin(lonp)); + } + + if (quadtree.iSide == 2) { + lonp = std::atan(cubeX.X(iLR, iDU)) + cPI; + // Theta in Ronchi is from the north pole, so lat is 90 - theta + latp = std::atan(-1.0 / cubeX.Y(iLR, iDU) / std::cos(lonp)); + } + + if (quadtree.iSide == 3) { + lonp = std::atan(-1.0 / cubeX.X(iLR, iDU)); + + if (lonp > 0) + lonp = lonp + cPI; + else + lonp = 2 * cPI + lonp; + + // Theta in Ronchi is from the north pole, so lat is 90 - theta + latp = std::atan(-1.0 / cubeX.Y(iLR, iDU) / std::sin(lonp)); + } + + if (quadtree.iSide == 4) { + lonp = std::atan2(cubeX.X(iLR, iDU), cubeX.Y(iLR, iDU)); + latp = std::atan2(-cubeX.Y(iLR, iDU), cos(lonp) ); + } + + if (quadtree.iSide == 5) { + lonp = std::atan2(-cubeX.X(iLR, iDU), cubeX.Y(iLR, iDU)); + latp = -std::atan2(-cubeX.Y(iLR, iDU), cos(lonp) ); + } + + if (latp > 0) + latp = cPI / 2 - latp; + else + latp = -(cPI / 2 + latp); + + if (lonp > cTWOPI) + lonp = lonp - cTWOPI; + + if (lonp < 0.0) + lonp = lonp + cTWOPI; + + // Fill Computed coords + cubeX.lat(iLR, iDU) = latp; + cubeX.lon(iLR, iDU) = lonp; + + cubeX.d(iLR, iDU) = + 1 + + cubeX.X(iLR, iDU) * cubeX.X(iLR, iDU) + + cubeX.Y(iLR, iDU) * cubeX.Y(iLR, iDU); + + cubeX.C(iLR, iDU) = + sqrt(1 + cubeX.X(iLR, iDU) * cubeX.X(iLR, iDU)); + cubeX.D(iLR, iDU) = + sqrt(1 + cubeX.Y(iLR, iDU) * cubeX.Y(iLR, iDU)); + + if (quadtree.iSide < 4) { + cubeX.Axt(iLR, iDU) = 0.0; + cubeX.Axp(iLR, iDU) = + cubeX.C(iLR, iDU) * cubeX.D(iLR, iDU) / + sqrt(cubeX.d(iLR, iDU)); + cubeX.Ant(iLR, iDU) = -1.0; + cubeX.Anp(iLR, iDU) = + cubeX.X(iLR, iDU) * cubeX.Y(iLR, iDU) / + sqrt(cubeX.d(iLR, iDU)); + } else { + if (cubeX.d(iLR, iDU) < 1.0001) + cubeX.d(iLR, iDU) = 1.0001; + + dmo = 1.0 / std::sqrt(cubeX.d(iLR, iDU) - 1); + + if (quadtree.iSide == 4) { + cubeX.Axt(iLR, iDU) = + - dmo * cubeX.D(iLR, iDU) * cubeX.X(iLR, iDU); + cubeX.Axp(iLR, iDU) = + dmo * cubeX.D(iLR, iDU) * cubeX.Y(iLR, iDU) / + sqrt(cubeX.d(iLR, iDU)); + cubeX.Ant(iLR, iDU) = + - dmo * cubeX.C(iLR, iDU) * cubeX.Y(iLR, iDU); + cubeX.Anp(iLR, iDU) = + - dmo * cubeX.C(iLR, iDU) * cubeX.X(iLR, iDU) / + sqrt(cubeX.d(iLR, iDU)); + + } else { + // iFace == 5 + cubeX.Axt(iLR, iDU) = + dmo * cubeX.D(iLR, iDU) * cubeX.X(iLR, iDU); + cubeX.Axp(iLR, iDU) = + - dmo * cubeX.D(iLR, iDU) * + cubeX.Y(iLR, iDU) / + sqrt(cubeX.d(iLR, iDU)); + cubeX.Ant(iLR, iDU) = + dmo * cubeX.C(iLR, iDU) * cubeX.Y(iLR, iDU); + cubeX.Anp(iLR, iDU) = + dmo * cubeX.C(iLR, iDU) * + cubeX.X(iLR, iDU) / + sqrt(cubeX.d(iLR, iDU)); + } + } + + // Calculate inverse of matrix for calculating Ax and An from At and Ap: + det = 1.0 / (cubeX.Axt(iLR, iDU) * cubeX.Anp(iLR, iDU) - + cubeX.Axp(iLR, iDU) * cubeX.Ant(iLR, iDU)); + + cubeX.Atx(iLR, iDU) = det * cubeX.Anp(iLR, iDU); + cubeX.Atn(iLR, iDU) = - det * cubeX.Axp(iLR, iDU); + cubeX.Apx(iLR, iDU) = - det * cubeX.Ant(iLR, iDU); + cubeX.Apn(iLR, iDU) = det * cubeX.Axt(iLR, iDU); + + // These (dlx and dln) need to be multiplied by radius + cubeX.dlx(iLR, iDU, 0) = + cubeX.D(iLR, iDU) * dxi / + cubeX.d(iLR, iDU) / + (cos(cubeX.xi(iLR, iDU)) * cos(cubeX.xi(iLR, iDU))); + cubeX.dln(iLR, iDU, 0) = + cubeX.C(iLR, iDU) * dnu / + cubeX.d(iLR, iDU) / + (cos(cubeX.nu(iLR, iDU)) * cos(cubeX.nu(iLR, iDU))); + + // Need to multiply dS * radius ^ 2 + cubeX.dS(iLR, iDU, 0) = + dxi * dnu / + (sqrt(cubeX.d(iLR, iDU) * cubeX.d(iLR, iDU) * cubeX.d(iLR, iDU)) * + cos(cubeX.xi(iLR, iDU)) * cos(cubeX.xi(iLR, iDU)) * + cos(cubeX.nu(iLR, iDU)) * cos(cubeX.nu(iLR, iDU))); + + } + } + + // Calculate norms given the values above: + arma_mat e1Lat, e1Lon, e2Lat, e2Lon, m, one, zero; + m.resize(nXp, nYp); + one.resize(nXp, nYp); + one.fill(1.0); + zero.resize(nXp, nYp); + zero.fill(0.0); + + // define e1 as the LR (xi) direction: + e1Lat.resize(nXp, nYp); + e1Lon.resize(nXp, nYp); + convert_vector_xn_to_ll(one, zero, e1Lon, e1Lat, cubeX); + m = sqrt(e1Lon % e1Lon + e1Lat % e1Lat); + + // Rotate by 90 deg (CCW) to get the norm: + cubeX.nNuLon = -e1Lat / m; + cubeX.nNuLat = e1Lon / m; + + // define e2 as the DU (nu) direction: + e2Lat.resize(nXp, nYp); + e2Lon.resize(nXp, nYp); + convert_vector_xn_to_ll(zero, one, e2Lon, e2Lat, cubeX); + m = sqrt(e2Lon % e2Lon + e2Lat % e2Lat); + // Rotate by 90 deg (CW) to get the norm: + cubeX.nXiLon = e2Lat / m; + cubeX.nXiLat = -e2Lon / m; + + report.exit(function); + return; +} + +// --------------------------------------------------------- +// Convert vector from Alat, Alon to Axi, Anu +// -> Using equation (7) of Ronchi et al: +// --------------------------------------------------------- + +void Grid::convert_vector_xn_to_ll(arma_mat aXi, + arma_mat aNu, + arma_mat &aLon, + arma_mat &aLat, + cubesphere_chars grid) { + + // Ronchi defines aPhi = aLon, aTheta = -aLat + aLat = -(grid.Atx % aXi + grid.Atn % aNu); + aLon = grid.Apx % aXi + grid.Apn % aNu; + + return; +} + +// --------------------------------------------------------- +// Convert vector from Alat, Alon to Axi, Anu +// -> Using equation (7) of Ronchi et al: +// --------------------------------------------------------- + +void Grid::convert_vector_ll_to_xn(arma_mat aLon, + arma_mat aLat, + arma_mat &aXi, + arma_mat &aNu, + cubesphere_chars grid) { + + // Ronchi defines aPhi = aLon, aTheta = -aLat + aXi = -grid.Axt % aLat + grid.Axp % aLon; + aNu = -grid.Ant % aLat + grid.Anp % aLon; + return; +} + + + +// ---------------------------------------------------------------------- +// This function scales the deltas in the grid by the radius +// - This assumes that radius is not dependent on lat / lon!!! +// ---------------------------------------------------------------------- + +void Grid::scale_cube_by_radius(cubesphere_chars &cubeX) { + + int64_t iZ; + + for (iZ = 1; iZ < nZ; iZ++) { + cubeX.R(iZ) = radius_scgc(nGCs, nGCs, iZ); + // These are distances: + cubeX.dlx.slice(iZ) = + cubeX.dlx.slice(0) * cubeX.R(iZ); + cubeX.dln.slice(iZ) = + cubeX.dln.slice(0) * cubeX.R(iZ); + // This is an area: + cubeX.dS.slice(iZ) = + cubeX.dS.slice(0) * cubeX.R(iZ) * cubeX.R(iZ); + } + + // Lastly, scale the 0th slice + iZ = 0; + cubeX.R(iZ) = radius_scgc(nGCs, nGCs, iZ); + cubeX.dlx.slice(iZ) = + cubeX.dlx.slice(0) * cubeX.R(iZ); + cubeX.dln.slice(iZ) = + cubeX.dln.slice(0) * cubeX.R(iZ); + // This is an area: + cubeX.dS.slice(iZ) = + cubeX.dS.slice(0) * cubeX.R(iZ) * cubeX.R(iZ); + + return; +} + +// ---------------------------------------------------------------------- +// This function takes the normalized coordinates and makes latitude +// and longitude arrays from them. It can do this for the corners or +// edges, depending on the offset. +// ---------------------------------------------------------------------- + +void fill_cubesphere_lat_lon_from_norms(Quadtree quadtree, + arma_vec dr, + arma_vec du, + arma_vec ll, + int64_t nGCs, + precision_t left_off, + precision_t down_off, + arma_mat & lat2d, + arma_mat & lon2d, + arma_mat & refx, + arma_mat & refy) { + + int64_t nX = lat2d.n_rows; + int64_t nY = lat2d.n_cols; + + double xn, yn, zn, rn; + double xp, yp, zp, rp, latp, lonp; + + double a = sqrt(3); + + arma_vec xyz, xyzn, xyz_wrapped; + + // Loop through each point and derive the coordinate + for (int iDU = 0; iDU < nY; iDU++) { + for (int iLR = 0; iLR < nX; iLR++) { + + // the offsets are so we can find cell centers, edges, and corners + double iD = iDU - nGCs + down_off; + double iL = iLR - nGCs + left_off; + + // This is the normalized coordinate: + xyz = ll + dr * iL + du * iD; + // Ghost cells could be off the edge, so wrap to other face: + //xyz_wrapped = quadtree.wrap_point_cubesphere(xyz) * a; + xyz_wrapped = xyz * a; + // Normalize the coordinate to a unit vector: + xyzn = normalise(xyz_wrapped); + xp = xyzn(0); + yp = xyzn(1); + zp = xyzn(2); + + // Derive lat and lon from unit vector: + latp = asin(zp); + // offset for lon is to put the left edge of face 0 at 0 longitude: + lonp = atan2(yp, xp) + 3 * cPI / 4; + + if (lonp > cTWOPI) + lonp = lonp - cTWOPI; + + if (lonp < 0.0) + lonp = lonp + cTWOPI; + + lat2d(iLR, iDU) = latp; + lon2d(iLR, iDU) = lonp; + + // refx and refy are the X, Y coordinates on the side of the CUBE + // Identify sides, then apply correct transformation law + // Face 1 to 4, equator faces with face 1 starting at the meridian + // Face 5, North Pole (different from book def) + // Face 6, South Pole (different from book def) + // Note face number are subtracted by one to comply with + // computer indexing + // Lon are displaced by cPI/4 as coordinates are generated + // with a right displacement of cPI/4 + if (quadtree.iSide == 1 - 1) { + refx(iLR, iDU) = sqrt(3) / 3 * tan(lonp - cPI / 4.); + refy(iLR, iDU) = sqrt(3) / 3 * tan(latp) / cos(lonp - cPI / 4.); + } else if (quadtree.iSide == 2 - 1) { + refx(iLR, iDU) = sqrt(3) / 3 * tan(lonp - cPI / 4. - cPI / 2.); + refy(iLR, iDU) = sqrt(3) / 3 * tan(latp) / cos(lonp - cPI / 4. - cPI / 2.); + } else if (quadtree.iSide == 3 - 1) { + refx(iLR, iDU) = sqrt(3) / 3 * tan(lonp - cPI / 4. - cPI); + refy(iLR, iDU) = sqrt(3) / 3 * tan(latp) / cos(lonp - cPI / 4. - cPI); + } else if (quadtree.iSide == 4 - 1) { + refx(iLR, iDU) = sqrt(3) / 3 * tan(lonp - cPI / 4 - 3 * cPI / 2.); + refy(iLR, iDU) = sqrt(3) / 3 * tan(latp) / cos(lonp - cPI / 4. - 3 * cPI / 2.); + } else if (quadtree.iSide == 5 - 1) { + refx(iLR, iDU) = -sqrt(3) / 3 * sin(lonp - 3 * cPI / 4.) / tan(latp); + refy(iLR, iDU) = -sqrt(3) / 3 * cos(lonp - 3 * cPI / 4.) / tan(latp); + } else if (quadtree.iSide == 6 - 1) { + refx(iLR, iDU) = sqrt(3) / 3 * sin(lonp - 3 * cPI / 4.) / tan(latp); + refy(iLR, iDU) = -sqrt(3) / 3 * cos(lonp - 3 * cPI / 4.) / tan(latp); + } + } + } + + return; +} + +// ---------------------------------------------------------------------- +// This function takes in lat-lon and reference xy coordinates to +// generate transformation and metric tensors +// ---------------------------------------------------------------------- +void transformation_metrics(Quadtree quadtree, + arma_mat & lat2d, + arma_mat & lon2d, + arma_mat & refx, + arma_mat & refy, + arma_mat & A11, + arma_mat & A12, + arma_mat & A21, + arma_mat & A22, + arma_mat & A11_inv, + arma_mat & A12_inv, + arma_mat & A21_inv, + arma_mat & A22_inv, + arma_mat & g11_upper, + arma_mat & g12_upper, + arma_mat & g21_upper, + arma_mat & g22_upper, + arma_mat & sqrt_g, + arma_mat & refx_angle, + arma_mat & refy_angle) { + + int64_t nX = lat2d.n_rows; + int64_t nY = lat2d.n_cols; + // Assume R = 1 (since lat-lon/ xy generation assumes unit vect) + double R = 1; + double a = R / sqrt(3); + double xref, yref, rref, xy; + double latp, lonp; + double g; + + // Loop through each point and derive the coordinate + for (int j = 0; j < nY; j++) { + for (int i = 0; i < nX; i++) { + xref = refx(i, j); + yref = refy(i, j); + xy = std::sqrt(xref * xref + yref * yref); + rref = std::sqrt(xref * xref + yref * yref + a * a); + + // Want to calculate angles based on x, y, z + refx_angle(i, j) = asin(xref / rref); + refy_angle(i, j) = asin(yref / rref); + + latp = lat2d(i, j); + lonp = lon2d(i, j); + + sqrt_g(i, j) = R * R * a / (rref * rref * rref); + g = sqrt_g(i, j) * sqrt_g(i, j); + + // metric tensor with lower indices + double front_factor = R * R / (rref * rref * rref * rref); + double g11 = front_factor * (a * a + yref * yref); + double g12 = -front_factor * xref * yref; + double g21 = -front_factor * xref * yref; + double g22 = front_factor * (a * a + xref * xref); + + // metric tensor with upper indices + g11_upper(i, j) = g22 / g; + g12_upper(i, j) = -g12 / g; + g21_upper(i, j) = -g21 / g; + g22_upper(i, j) = g11 / g; + + // Identify sides, then apply correct transformation law + // Face 1 to 4, equator faces with face 1 starting at the meridian + // Face 5, North Pole (different from book def) + // Face 6, South Pole (different from book def) + // Note face number are subtracted by one to comply with + // computer indexing + if (quadtree.iSide == 1 - 1) { + double p1 = R * cos(latp) * cos(lonp - cPI / 4.) / a; + A11(i, j) = p1 * cos(lonp - cPI / 4.); + A12(i, j) = 0; + A21(i, j) = -p1 * sin(latp) * sin(lonp - cPI / 4.); + A22(i, j) = p1 * cos(latp); + + double p2 = a / cos(latp) / cos(lonp - cPI / 4.) / R; + A11_inv(i, j) = p2 / cos(lonp - cPI / 4.); + A12_inv(i, j) = 0; + A21_inv(i, j) = p2 * tan(latp) * tan(lonp - cPI / 4.); + A22_inv(i, j) = p2 / cos(latp); + } else if (quadtree.iSide == 2 - 1) { + double p1 = R * cos(latp) * cos(lonp - cPI / 4. - cPI / 2.) / a; + A11(i, j) = p1 * cos(lonp - cPI / 4. - cPI / 2.); + A12(i, j) = 0; + A21(i, j) = -p1 * sin(latp) * sin(lonp - cPI / 4. - cPI / 2.); + A22(i, j) = p1 * cos(latp); + + double p2 = a / cos(latp) / cos(lonp - cPI / 4. - cPI / 2.) / R; + A11_inv(i, j) = p2 / cos(lonp - cPI / 4. - cPI / 2.); + A12_inv(i, j) = 0; + A21_inv(i, j) = p2 * tan(latp) * tan(lonp - cPI / 4. - cPI / 2.); + A22_inv(i, j) = p2 / cos(latp); + } else if (quadtree.iSide == 3 - 1) { + double p1 = R * cos(latp) * cos(lonp - cPI / 4. - cPI) / a; + A11(i, j) = p1 * cos(lonp - cPI / 4. - cPI); + A12(i, j) = 0; + A21(i, j) = -p1 * sin(latp) * sin(lonp - cPI / 4. - cPI); + A22(i, j) = p1 * cos(latp); + + double p2 = a / cos(latp) / cos(lonp - cPI / 4. - cPI) / R; + A11_inv(i, j) = p2 / cos(lonp - cPI / 4. - cPI); + A12_inv(i, j) = 0; + A21_inv(i, j) = p2 * tan(latp) * tan(lonp - cPI / 4. - cPI); + A22_inv(i, j) = p2 / cos(latp); + } else if (quadtree.iSide == 4 - 1) { + double p1 = R * cos(latp) * cos(lonp - cPI / 4. - 3 * cPI / 2.) / a; + A11(i, j) = p1 * cos(lonp - cPI / 4. - 3 * cPI / 2.); + A12(i, j) = 0; + A21(i, j) = -p1 * sin(latp) * sin(lonp - cPI / 4. - 3 * cPI / 2.); + A22(i, j) = p1 * cos(latp); + + double p2 = a / cos(latp) / cos(lonp - cPI / 4. - 3 * cPI / 2.) / R; + A11_inv(i, j) = p2 / cos(lonp - cPI / 4. - 3 * cPI / 2.); + A12_inv(i, j) = 0; + A21_inv(i, j) = p2 * tan(latp) * tan(lonp - cPI / 4. - 3 * cPI / 2.); + A22_inv(i, j) = p2 / cos(latp); + } else if (quadtree.iSide == 6 - + 1) { // Face 5 and 6 are flipped than Nair's formulation + double p1 = R * sin(latp) / a; + A11(i, j) = p1 * cos(lonp - 3 * cPI / 4.); + A12(i, j) = p1 * sin(lonp - 3 * cPI / 4.); + A21(i, j) = -p1 * sin(latp) * sin(lonp - 3 * cPI / 4.); + A22(i, j) = p1 * sin(latp) * cos(lonp - 3 * cPI / 4.); + + double p2 = a / R / sin(latp) / sin(latp); + A11_inv(i, j) = p2 * sin(latp) * cos(lonp - 3 * cPI / 4.); + A12_inv(i, j) = -p2 * sin(lonp - 3 * cPI / 4.); + A21_inv(i, j) = p2 * sin(latp) * sin(lonp - 3 * cPI / 4.); + A22_inv(i, j) = p2 * cos(lonp - 3 * cPI / 4.); + } else if (quadtree.iSide == 5 - + 1) { // Face 5 and 6 are flipped than Nair's formulation + double p1 = R * sin(latp) / a; + A11(i, j) = -p1 * cos(lonp - 3 * cPI / 4.); + A12(i, j) = p1 * sin(lonp - 3 * cPI / 4.); + A21(i, j) = p1 * sin(latp) * sin(lonp - 3 * cPI / 4.); + A22(i, j) = p1 * sin(latp) * cos(lonp - 3 * cPI / 4.); + + double p2 = a / R / sin(latp) / sin(latp); + A11_inv(i, j) = -p2 * sin(latp) * cos(lonp - 3 * cPI / 4.); + A12_inv(i, j) = p2 * sin(lonp - 3 * cPI / 4.); + A21_inv(i, j) = p2 * sin(latp) * sin(lonp - 3 * cPI / 4.); + A22_inv(i, j) = p2 * cos(lonp - 3 * cPI / 4.); + } + } + } +} + +// ---------------------------------------------------------------------- +// Create a geographic grid +// - if restarting, read in the grid +// - if not restarting, initialize the grid +// ---------------------------------------------------------------------- + +void Grid::create_cubesphere_grid(Quadtree quadtree) { + + std::string function = "Grid::create_cubesphere_grid"; + static int iFunction = -1; + report.enter(function, iFunction); + + arma_vec dr(3), du(3), ll(3); + double xn, yn, zn, rn; + double xp, yp, zp, rp, latp, lonp; + + double a = sqrt(3); + + arma_vec lower_left_norm = quadtree.get_vect("LL"); + arma_vec size_right_norm = quadtree.get_vect("SR"); + arma_vec size_up_norm = quadtree.get_vect("SU"); + + dr = size_right_norm / (nLons - 2 * nGCs); + du = size_up_norm / (nLats - 2 * nGCs); + ll = lower_left_norm; + + // This function builds the equal-angle grid, but doesn't + // scale them with altitude, since that has not been created, yet: + init_cubesphere_grid(quadtree, dr, du, ll, 0.5, 0.5, cubeC); + init_cubesphere_grid(quadtree, dr, du, ll, 0.0, 0.5, cubeL); + init_cubesphere_grid(quadtree, dr, du, ll, 0.5, 0.0, cubeD); + + int64_t iAlt, iLon, iLat; + + // --------------------------------------------- + // Cell Centers + // --------------------------------------------- + arma_mat lat2d(nLons, nLats); + arma_mat lon2d(nLons, nLats); + arma_mat refx(nLons, nLats); + arma_mat refy(nLons, nLats); + arma_mat A11(nLons, nLats); + arma_mat A12(nLons, nLats); + arma_mat A21(nLons, nLats); + arma_mat A22(nLons, nLats); + arma_mat A11_inv(nLons, nLats); + arma_mat A12_inv(nLons, nLats); + arma_mat A21_inv(nLons, nLats); + arma_mat A22_inv(nLons, nLats); + arma_mat g11_upper(nLons, nLats); + arma_mat g12_upper(nLons, nLats); + arma_mat g21_upper(nLons, nLats); + arma_mat g22_upper(nLons, nLats); + arma_mat sqrt_g(nLons, nLats); + arma_mat refx_angle_temp(nLons, nLats); + arma_mat refy_angle_temp(nLons, nLats); + fill_cubesphere_lat_lon_from_norms(quadtree, dr, du, ll, nGCs, 0.5, 0.5, + lat2d, lon2d, refx, refy); + + transformation_metrics(quadtree, lat2d, lon2d, refx, refy, + A11, A12, A21, A22, A11_inv, A12_inv, + A21_inv, A22_inv, g11_upper, g12_upper, + g21_upper, g22_upper, sqrt_g, + refx_angle_temp, refy_angle_temp); + + for (iAlt = 0; iAlt < nAlts; iAlt++) { + refx_angle.slice(iAlt) = refx_angle_temp; + refy_angle.slice(iAlt) = refy_angle_temp; + + geoLon_scgc.slice(iAlt) = lon2d; + geoLat_scgc.slice(iAlt) = lat2d; + refx_scgc.slice(iAlt) = refx; + refy_scgc.slice(iAlt) = refy; + A11_scgc.slice(iAlt) = A11; + A12_scgc.slice(iAlt) = A12; + A21_scgc.slice(iAlt) = A21; + A22_scgc.slice(iAlt) = A22; + A11_inv_scgc.slice(iAlt) = A11_inv; + A12_inv_scgc.slice(iAlt) = A12_inv; + A21_inv_scgc.slice(iAlt) = A21_inv; + A22_inv_scgc.slice(iAlt) = A22_inv; + g11_upper_scgc.slice(iAlt) = g11_upper; + g12_upper_scgc.slice(iAlt) = g12_upper; + g21_upper_scgc.slice(iAlt) = g21_upper; + g22_upper_scgc.slice(iAlt) = g22_upper; + sqrt_g_scgc.slice(iAlt) = sqrt_g; + } + + // --------------------------------------------- + // Left Sides - edges on left side (no offset left) + // --------------------------------------------- + arma_mat lat2d_left(nLons + 1, nLats); + arma_mat lon2d_left(nLons + 1, nLats); + arma_mat refx_left(nLons + 1, nLats); + arma_mat refy_left(nLons + 1, nLats); + arma_mat A11_left(nLons + 1, nLats); + arma_mat A12_left(nLons + 1, nLats); + arma_mat A21_left(nLons + 1, nLats); + arma_mat A22_left(nLons + 1, nLats); + arma_mat A11_inv_left(nLons + 1, nLats); + arma_mat A12_inv_left(nLons + 1, nLats); + arma_mat A21_inv_left(nLons + 1, nLats); + arma_mat A22_inv_left(nLons + 1, nLats); + arma_mat g11_upper_left(nLons + 1, nLats); + arma_mat g12_upper_left(nLons + 1, nLats); + arma_mat g21_upper_left(nLons + 1, nLats); + arma_mat g22_upper_left(nLons + 1, nLats); + arma_mat sqrt_g_left(nLons + 1, nLats); + arma_mat refx_angle_left_temp(nLons + 1, nLats); + arma_mat refy_angle_left_temp(nLons + 1, nLats); + fill_cubesphere_lat_lon_from_norms(quadtree, dr, du, ll, nGCs, 0.0, 0.5, + lat2d_left, lon2d_left, + refx_left, refy_left); + + transformation_metrics(quadtree, + lat2d_left, lon2d_left, refx_left, refy_left, + A11_left, A12_left, A21_left, A22_left, + A11_inv_left, A12_inv_left, + A21_inv_left, A22_inv_left, + g11_upper_left, g12_upper_left, + g21_upper_left, g22_upper_left, + sqrt_g_left, + refx_angle_left_temp, refy_angle_left_temp); + + refx_angle_Left = refx_angle_left_temp; + refy_angle_Left = refy_angle_left_temp; + + for (iAlt = 0; iAlt < nAlts; iAlt++) { + geoLon_Left.slice(iAlt) = lon2d_left; + geoLat_Left.slice(iAlt) = lat2d_left; + refx_Left.slice(iAlt) = refx_left; + refy_Left.slice(iAlt) = refy_left; + A11_Left.slice(iAlt) = A11_left; + A12_Left.slice(iAlt) = A12_left; + A21_Left.slice(iAlt) = A21_left; + A22_Left.slice(iAlt) = A22_left; + A11_inv_Left.slice(iAlt) = A11_inv_left; + A12_inv_Left.slice(iAlt) = A12_inv_left; + A21_inv_Left.slice(iAlt) = A21_inv_left; + A22_inv_Left.slice(iAlt) = A22_inv_left; + g11_upper_Left.slice(iAlt) = g11_upper_left; + g12_upper_Left.slice(iAlt) = g12_upper_left; + g21_upper_Left.slice(iAlt) = g21_upper_left; + g22_upper_Left.slice(iAlt) = g22_upper_left; + sqrt_g_Left.slice(iAlt) = sqrt_g_left; + } + + // --------------------------------------------- + // Down Sides - edges on down side (no offset down) + // --------------------------------------------- + arma_mat lat2d_down(nLons, nLats + 1); + arma_mat lon2d_down(nLons, nLats + 1); + arma_mat refx_down(nLons, nLats + 1); + arma_mat refy_down(nLons, nLats + 1); + arma_mat A11_down(nLons, nLats + 1); + arma_mat A12_down(nLons, nLats + 1); + arma_mat A21_down(nLons, nLats + 1); + arma_mat A22_down(nLons, nLats + 1); + arma_mat A11_inv_down(nLons, nLats + 1); + arma_mat A12_inv_down(nLons, nLats + 1); + arma_mat A21_inv_down(nLons, nLats + 1); + arma_mat A22_inv_down(nLons, nLats + 1); + arma_mat g11_upper_down(nLons, nLats + 1); + arma_mat g12_upper_down(nLons, nLats + 1); + arma_mat g21_upper_down(nLons, nLats + 1); + arma_mat g22_upper_down(nLons, nLats + 1); + arma_mat sqrt_g_down(nLons, nLats + 1); + arma_mat refx_angle_down_temp(nLons, nLats + 1); + arma_mat refy_angle_down_temp(nLons, nLats + 1); + + fill_cubesphere_lat_lon_from_norms(quadtree, dr, du, ll, nGCs, 0.5, 0.0, + lat2d_down, lon2d_down, + refx_down, refy_down); + + transformation_metrics(quadtree, + lat2d_down, lon2d_down, refx_down, refy_down, + A11_down, A12_down, A21_down, A22_down, + A11_inv_down, A12_inv_down, + A21_inv_down, A22_inv_down, + g11_upper_down, g12_upper_down, + g21_upper_down, g22_upper_down, + sqrt_g_down, + refx_angle_down_temp, refy_angle_down_temp); + refx_angle_Down = refx_angle_down_temp; + refy_angle_Down = refy_angle_down_temp; + + for (iAlt = 0; iAlt < nAlts; iAlt++) { + geoLon_Down.slice(iAlt) = lon2d_down; + geoLat_Down.slice(iAlt) = lat2d_down; + refx_Down.slice(iAlt) = refx_down; + refy_Down.slice(iAlt) = refy_down; + A11_Down.slice(iAlt) = A11_down; + A12_Down.slice(iAlt) = A12_down; + A21_Down.slice(iAlt) = A21_down; + A22_Down.slice(iAlt) = A22_down; + A11_inv_Down.slice(iAlt) = A11_inv_down; + A12_inv_Down.slice(iAlt) = A12_inv_down; + A21_inv_Down.slice(iAlt) = A21_inv_down; + A22_inv_Down.slice(iAlt) = A22_inv_down; + g11_upper_Down.slice(iAlt) = g11_upper_down; + g12_upper_Down.slice(iAlt) = g12_upper_down; + g21_upper_Down.slice(iAlt) = g21_upper_down; + g22_upper_Down.slice(iAlt) = g22_upper_down; + sqrt_g_Down.slice(iAlt) = sqrt_g_down; + } + + // --------------------------------------------- + // Corners (lower left) - no offsets + // --------------------------------------------- + arma_mat lat2d_corner(nLons + 1, nLats + 1); + arma_mat lon2d_corner(nLons + 1, nLats + 1); + arma_mat refx_corner(nLons + 1, nLats + 1); + arma_mat refy_corner(nLons + 1, nLats + 1); + fill_cubesphere_lat_lon_from_norms(quadtree, dr, du, ll, nGCs, 0.0, 0.0, + lat2d_corner, lon2d_corner, + refx_corner, refy_corner); + + for (iAlt = 0; iAlt < nAlts + 1; iAlt++) { + geoLon_Corner.slice(iAlt) = lon2d_corner; + geoLat_Corner.slice(iAlt) = lat2d_corner; + refx_Corner.slice(iAlt) = refx_corner; + refy_Corner.slice(iAlt) = refy_corner; + } + + report.exit(function); + return; +} + +// ---------------------------------------------------------------------- +// Corrects xy grid by scaling the R used in xy coordinate generation +// and transformation laws, as in previous generation R = 1. +// This function should only be used when cubesphere is used. +// Assumes radius of planet and altitude are constant +// ---------------------------------------------------------------------- + +void Grid::correct_xy_grid(Planets planet) { + std::string function = "Grid::correct_xy_grid"; + static int iFunction = -1; + report.enter(function, iFunction); + + int64_t iAlt; + + // initialize grid drefx drefy + drefx = arma_vec(nAlts); + drefy = arma_vec(nAlts); + + // Planet.get_radius() takes in latitude + // but at current stage is unimplemented + // Anyway, we use equator radius as assumption for CubeSphere + // CubeSphere must be a perfect sphere!! + precision_t planet_R = planet.get_radius(0); + + // radius of planet + altitude + // just pick alt at (0,0) loction + arma_vec R_Alts = geoAlt_scgc.tube(0, 0) + planet_R; + + for (iAlt = 0; iAlt < nAlts; iAlt++) { + precision_t R = R_Alts(iAlt); + refx_scgc.slice(iAlt) *= R; + refy_scgc.slice(iAlt) *= R; + + // Addition: Get a copy of dx dy + arma_mat curr_refx = refx_scgc.slice(iAlt); + arma_mat curr_refy = refy_scgc.slice(iAlt); + + drefx(iAlt) = curr_refx(1, 0) - curr_refx(0, 0); + drefy(iAlt) = curr_refy(0, 1) - curr_refy(0, 0); + + refx_Left.slice(iAlt) *= R; + refy_Left.slice(iAlt) *= R; + refx_Down.slice(iAlt) *= R; + refy_Down.slice(iAlt) *= R; + refx_Corner.slice(iAlt) *= R; + refy_Corner.slice(iAlt) *= R; + } + + report.exit(function); + return; +} diff --git a/src/grid_match.cpp b/src/grid_match.cpp new file mode 100644 index 00000000..28d1c2b1 --- /dev/null +++ b/src/grid_match.cpp @@ -0,0 +1,359 @@ +// Copyright 2025, the Aether Development Team (see doc/dev_team.md for members) +// Full license can be found in License.md + +#include "aether.h" + +// ----------------------------------------------------------------------------- +// Send arrays of variables to other processors on the given grid. +// ----------------------------------------------------------------------------- + +bool exchange_information(int64_t *nPointsToPass, + std::vector varToSend, + int64_t *nPointsToReceive, + std::vector varToReceive) { + + int64_t jNode, iPt, iTag, iProcTo, iProcFrom; + std::vector requests(nGrids); + + // Here we send the message into the wind: + // - if it is the same processor, just copy the information + // - if it is a different processor, send the data + for (jNode = 0; jNode < nGrids ; jNode++) { + if (jNode == iGrid) { + for (iPt = 0; iPt < nPointsToPass[jNode]; iPt ++) + varToReceive[jNode][iPt] = varToSend[jNode][iPt]; + } else { + iProcTo = iMember * nGrids + jNode; + // iTag is a unique id allowing all processors to + // communicate asynchronously + iTag = iProc * 10000 + iProcTo; + MPI_Isend(varToSend[jNode], + nPointsToPass[jNode] * sizeof(precision_t), + MPI_BYTE, + iProcTo, + iTag, + aether_comm, + &requests[jNode]); + } + } + + // Wait for everyone to get the information that was sent: + for (jNode = 0; jNode < nGrids ; jNode++) + if (jNode != iGrid) + MPI_Wait(&requests[jNode], MPI_STATUS_IGNORE); + + // Receive it into the receiving array: + for (jNode = 0; jNode < nGrids ; jNode++) + if (jNode != iGrid) { + iProcFrom = iMember * nGrids + jNode; + // Rebuid the unique id: + iTag = iProcFrom * 10000 + iProc; + MPI_Recv(varToReceive[jNode], + nPointsToReceive[jNode] * sizeof(precision_t), + MPI_BYTE, + jNode, + iTag, + aether_comm, + MPI_STATUS_IGNORE); + } + + MPI_Barrier(aether_comm); + return true; +} + +// ----------------------------------------------------------------------------- +// This function: +// on the requesting information side: +// - figures out which processor each point of the other grid is on +// - counts the points for each processor +// - exchanges how many points to pass for each processor +// - makes lists of coordinates to send to each processor +// - sends those lists +// on the interpolator side: +// - builds interpolators for the requested information +// ----------------------------------------------------------------------------- + +bool grid_match(Grid &gGrid, + Grid &mGrid, + Quadtree gQuadtree, + Quadtree mQuadtree) { + + std::string function = "grid_match"; + static int iFunction = -1; + report.enter(function, iFunction); + + // Let's do magnetic to geographic first: + + int64_t iX, mnX = mGrid.get_nX(); + int64_t iY, mnY = mGrid.get_nY(); + int64_t iZ, mnZ = mGrid.get_nZ(); + int64_t mGCs = mGrid.get_nGCs(); + precision_t lon, lat; + precision_t normX, normY, normZ; + arma_vec norms(3); + int64_t jNode, kNode; + int64_t *nPointsToPass = static_cast(malloc(nGrids * sizeof( + int64_t))); + int64_t *nPointsToReceive = static_cast(malloc(nGrids * sizeof( + int64_t))); + int64_t *nPointsDummy = static_cast(malloc(nGrids * sizeof(int64_t))); + + for (jNode = 0; jNode < nGrids ; jNode++) + nPointsToPass[jNode] = 0; + + // This is not the most efficient way to do this, but the first pass, let's + // just count how many points we need to send to the other processors: + mGrid.gridToGridMap.set_size(mnX, mnY, mnZ); + + for (iX = mGCs; iX < mnX - mGCs; iX++) { + for (iY = mGCs; iY < mnY - mGCs; iY++) { + for (iZ = mGCs; iZ < mnZ - mGCs; iZ++) { + lon = mGrid.geoLon_scgc(iX, iY, iZ); + lat = mGrid.geoLat_scgc(iX, iY, iZ); + + if (gGrid.iGridShape_ == iSphere_) { + norms(0) = lon / cPI; + norms(1) = lat / cPI; + norms(2) = 0.0; + jNode = gQuadtree.find_point(norms); + } else { + norms = sphere_to_cube(lon, lat); + jNode = gQuadtree.find_point(norms); + } + + if (jNode < 0 || jNode >= nGrids) + std::cout << "out of bounds!!! " << jNode << "\n"; + + mGrid.gridToGridMap(iX, iY, iZ) = jNode; + nPointsToPass[jNode] = nPointsToPass[jNode] + 1; + /* std::cout << "lon, lat, node: " << lon*cRtoD << " " + << lat*cRtoD << " " + << norms(0) << " " + << norms(1) << " " + << norms(2) << " " + << jNode << " " + << iProc << " " + << nPoints[jNode] << "\n"; */ + } + } + } + + MPI_Barrier(aether_comm); + + if (report.test_verbose(3)) { + for (jNode = 0; jNode < nGrids ; jNode++) + std::cout << "nPtsToPass : " << iProc << " " << nPointsToPass[jNode] << "\n"; + + std::cout << "sending number of points :\n"; + } + + // This section sends the number of points that need to be transfered to each processor. + // Then the processor saves the number of points, so it can be remembered, and both the + // sender and receiver will have the information. + for (jNode = 0; jNode < nGrids ; jNode++) { + if (jNode == iGrid) { + for (kNode = 0; kNode < nGrids ; kNode++) + nPointsDummy[kNode] = nPointsToPass[kNode]; + } + + MPI_Bcast(nPointsDummy, nGrids, MPI_INT64_T, jNode, aether_comm); + nPointsToReceive[jNode] = nPointsDummy[iGrid]; + } + + if (report.test_verbose(3)) { + for (jNode = 0; jNode < nGrids ; jNode++) + std::cout << "nPtsToReceive : " << iProc << " " << jNode << " " << + nPointsToReceive[jNode] << "\n"; + } + + // Now we need to create an array of send points and an array of receive points. + std::vector latsToPass(nGrids); + std::vector lonsToPass(nGrids); + std::vector altsToPass(nGrids); + std::vector latsToInterTo(nGrids); + std::vector lonsToInterTo(nGrids); + std::vector altsToInterTo(nGrids); + + for (jNode = 0; jNode < nGrids ; jNode++) { + latsToPass[jNode] = static_cast(malloc(nPointsToPass[jNode] * + sizeof(precision_t))); + lonsToPass[jNode] = static_cast(malloc(nPointsToPass[jNode] * + sizeof(precision_t))); + altsToPass[jNode] = static_cast(malloc(nPointsToPass[jNode] * + sizeof(precision_t))); + latsToInterTo[jNode] = static_cast(malloc( + nPointsToReceive[jNode] * sizeof(precision_t))); + lonsToInterTo[jNode] = static_cast(malloc( + nPointsToReceive[jNode] * sizeof(precision_t))); + altsToInterTo[jNode] = static_cast(malloc( + nPointsToReceive[jNode] * sizeof(precision_t))); + } + + // now, the second pass, let's store the information so we can pass it: + for (jNode = 0; jNode < nGrids ; jNode++) + nPointsToPass[jNode] = 0; + + for (iX = mGCs; iX < mnX - mGCs; iX++) { + for (iY = mGCs; iY < mnY - mGCs; iY++) { + for (iZ = mGCs; iZ < mnZ - mGCs; iZ++) { + lon = mGrid.geoLon_scgc(iX, iY, iZ); + lat = mGrid.geoLat_scgc(iX, iY, iZ); + + if (gGrid.iGridShape_ == iSphere_) { + norms(0) = lon / cPI; + norms(1) = lat / cPI; + norms(2) = 0.0; + jNode = gQuadtree.find_point(norms); + } else { + norms = sphere_to_cube(lon, lat); + jNode = gQuadtree.find_point(norms); + } + + latsToPass[jNode][nPointsToPass[jNode]] = lat; + lonsToPass[jNode][nPointsToPass[jNode]] = lon; + altsToPass[jNode][nPointsToPass[jNode]] = mGrid.geoAlt_scgc(iX, iY, iZ); + nPointsToPass[jNode] = nPointsToPass[jNode] + 1; + } + } + } + + bool didWork; + // Pass first coordinate (lons) + didWork = exchange_information(nPointsToPass, + lonsToPass, + nPointsToReceive, + lonsToInterTo); + // Pass second coordinate (lats) + didWork = exchange_information(nPointsToPass, + latsToPass, + nPointsToReceive, + latsToInterTo); + // Pass third coordinate (alts): + didWork = exchange_information(nPointsToPass, + altsToPass, + nPointsToReceive, + altsToInterTo); + + if (report.test_verbose(2)) { + for (jNode = 0; jNode < nGrids ; jNode++) { + std::cout << "Received the following points from iGrid = " << jNode << "\n"; + std::cout << " -> points received : " << nPointsToReceive[jNode] << "\n"; + + for (int64_t iPt = 0; iPt < nPointsToReceive[jNode]; iPt++) + std::cout << " -> " << iPt << " " + << lonsToInterTo[jNode][iPt] << " " + << latsToInterTo[jNode][iPt] << " " + << altsToInterTo[jNode][iPt] << "\n"; + } + } + + struct grid_to_grid_t oneGrid; + + int64_t nPts; + + for (jNode = 0; jNode < nGrids ; jNode++) { + // These are backwards now, since we will switch sender and reciever: + oneGrid.nPts = nPointsToReceive[jNode]; + oneGrid.nPtsReceive = nPointsToPass[jNode]; + oneGrid.iProcTo = iMember * nGrids + jNode; + + if (report.test_verbose(2)) + std::cout << "Making interpolation coefficients for : " << jNode + << "; points : " << oneGrid.nPts << "\n"; + + if (oneGrid.nPts > 0) { + // Interpolation function takes vectors, + // so transfer these arrays to vectors: + std::vector Lons(oneGrid.nPts); + std::vector Lats(oneGrid.nPts); + std::vector Alts(oneGrid.nPts); + + for (int64_t iPt = 0; iPt < oneGrid.nPts; iPt++) { + Lons[iPt] = lonsToInterTo[jNode][iPt]; + Lats[iPt] = latsToInterTo[jNode][iPt]; + Alts[iPt] = altsToInterTo[jNode][iPt]; + } + + oneGrid.interpCoefs = gGrid.get_interpolation_coefs(Lons, Lats, Alts); + } + + gGrid.gridToGridCoefs.push_back(oneGrid); + } + + report.exit(function); + return didWork; +} + +bool get_data_from_other_grid(Grid &gGrid, + Grid &mGrid, + arma_cube &gData, + arma_cube &mData) { + + std::string function = "get_data_from_other_grid"; + static int iFunction = -1; + report.enter(function, iFunction); + + int64_t jNode, iPt; + std::vector dataToSend(nGrids); + std::vector dataToReceive(nGrids); + int64_t *nPointsToSend = static_cast(malloc(nGrids * sizeof( + int64_t))); + int64_t *nPointsToReceive = static_cast(malloc(nGrids * sizeof( + int64_t))); + + for (jNode = 0; jNode < nGrids ; jNode++) { + if (report.test_verbose(2)) + std::cout << "nPts : " << jNode << " " << gGrid.gridToGridCoefs[jNode].nPts << + "\n"; + + nPointsToSend[jNode] = gGrid.gridToGridCoefs[jNode].nPts; + nPointsToReceive[jNode] = gGrid.gridToGridCoefs[jNode].nPtsReceive; + dataToSend[jNode] = static_cast(malloc( + gGrid.gridToGridCoefs[jNode].nPts * sizeof(precision_t))); + dataToReceive[jNode] = static_cast(malloc( + gGrid.gridToGridCoefs[jNode].nPtsReceive * sizeof(precision_t))); + std::vector values = gGrid.get_interpolation_values(gData, + gGrid.gridToGridCoefs[jNode].interpCoefs); + + for (iPt = 0; iPt < gGrid.gridToGridCoefs[jNode].nPts; iPt++) { + dataToSend[jNode][iPt] = values[iPt]; + + if (report.test_verbose(2)) + std::cout << "datatosend : " << iPt << " " << dataToSend[jNode][iPt] << "\n"; + } + } + + bool didWork = exchange_information(nPointsToSend, + dataToSend, + nPointsToReceive, + dataToReceive); + int64_t iX, mnX = mGrid.get_nX(); + int64_t iY, mnY = mGrid.get_nY(); + int64_t iZ, mnZ = mGrid.get_nZ(); + int64_t mGCs = mGrid.get_nGCs(); + std::vector iCounter(nGrids); + + for (jNode = 0; jNode < nGrids ; jNode++) + iCounter[jNode] = 0; + + for (iX = mGCs; iX < mnX - mGCs; iX++) { + for (iY = mGCs; iY < mnY - mGCs; iY++) { + for (iZ = mGCs; iZ < mnZ - mGCs; iZ++) { + jNode = mGrid.gridToGridMap(iX, iY, iZ); + + if (report.test_verbose(2)) { + std::cout << "unpacking point : " << iX << " " << iY << " " << iZ << " " << + jNode << " " + << iCounter[jNode] << " " << dataToReceive[jNode][iCounter[jNode]] << "\n"; + } + + mData(iX, iY, iZ) = dataToReceive[jNode][iCounter[jNode]]; + iCounter[jNode] = iCounter[jNode] + 1; + } + } + } + + report.exit(function); + return true; + +} \ No newline at end of file diff --git a/src/grid_spacing.cpp b/src/grid_spacing.cpp new file mode 100644 index 00000000..f1a55c92 --- /dev/null +++ b/src/grid_spacing.cpp @@ -0,0 +1,370 @@ +// Copyright 2025, the Aether Development Team (see doc/dev_team.md for members) +// Full license can be found in License.md + +#include "aether.h" + +// ----------------------------------------------------------------------------- +// Fill in XYZ in geo and mag coordinates +// ----------------------------------------------------------------------------- + +void Grid::calc_grid_spacing(Planets planet) { + int64_t iLon, iLat, iAlt; + + report.print(3, "starting calc_grid_spacing"); + + // calc_alt_grid_spacing(); + // calc_lat_grid_spacing(); + // calc_long_grid_spacing(); + + calc_i_grid_spacing(); + calc_j_grid_spacing(); + calc_k_grid_spacing(); + + report.print(3, "ending calc_grid_spacing"); +} + +void Grid::calc_dipole_grid_spacing(Planets planet) { + + report.print(3, "starting calc_grid_spacing"); + + calc_i_grid_spacing(); + calc_j_grid_spacing(); + calc_k_grid_spacing(); + + report.print(3, "ending calc_grid_spacing"); +} + +// --------------------------------------- +// Grid spacing for altitude: +// --------------------------------------- + +void Grid::calc_alt_grid_spacing() { + + int64_t iAlt; + + report.print(4, "starting calc_alt_grid_spacing"); + + for (iAlt = 1; iAlt < nAlts - 1; iAlt++) { + dalt_center_scgc.slice(iAlt) = + (geoAlt_scgc.slice(iAlt + 1) - geoAlt_scgc.slice(iAlt - 1)) / 2.0; + dalt_lower_scgc.slice(iAlt) = + geoAlt_scgc.slice(iAlt) - geoAlt_scgc.slice(iAlt - 1); + dr_edge.slice(iAlt) = + radius_scgc.slice(iAlt) - radius_scgc.slice(iAlt - 1); + } + + dalt_center_scgc.slice(0) = dalt_center_scgc.slice(1); + dalt_center_scgc.slice(nAlts - 1) = dalt_center_scgc.slice(nAlts - 2); + + dalt_lower_scgc.slice(0) = dalt_lower_scgc.slice(1); + dr_edge.slice(0) = dr_edge.slice(1); + iAlt = nAlts - 1; + dalt_lower_scgc.slice(iAlt) = + geoAlt_scgc.slice(iAlt) - geoAlt_scgc.slice(iAlt - 1); + dr_edge.slice(iAlt) = + radius_scgc.slice(iAlt) - radius_scgc.slice(iAlt - 1); + + // For a stretched grid, calculate some useful quantities: + // lower is defined for the current cell, which + // means that upper(iAlt) is lower(iAlt+1) + // ratio = upper / lower + for (iAlt = 0; iAlt < nAlts - 1; iAlt++) + dalt_ratio_scgc.slice(iAlt) = + dalt_lower_scgc.slice(iAlt + 1) / dalt_lower_scgc.slice(iAlt); + + iAlt = nAlts - 1; + dalt_ratio_scgc.slice(iAlt) = dalt_ratio_scgc.slice(iAlt - 1); + + // Need the square of the ratio: + dalt_ratio_sq_scgc = dalt_ratio_scgc % dalt_ratio_scgc; + + // Calculate the one-sided 3rd order gradient coefficients for the lower BC: + + arma_mat h1, h2, h3, h4, MeshH1, MeshH2, MeshH3, MeshH4; + + if (HasZdim & nAlts > nGCs + 5) { + for (iAlt = 0; iAlt < nGCs; iAlt++) { + h1 = dalt_lower_scgc.slice(iAlt + 2); + h2 = dalt_lower_scgc.slice(iAlt + 3); + h3 = dalt_lower_scgc.slice(iAlt + 4); + h4 = dalt_lower_scgc.slice(iAlt + 5); + MeshH1 = h1; + MeshH2 = h1 + h2; + MeshH3 = h1 + h2 + h3; + MeshH4 = h1 + h2 + h3 + h4; + MeshCoef1s3rdp1.slice(iAlt) = + -1.0 * ( MeshH2 % MeshH3 % MeshH4 + MeshH1 % MeshH3 % MeshH4 + + MeshH1 % MeshH2 % MeshH4 + MeshH1 % MeshH2 % MeshH3) / + (MeshH1 % MeshH2 % MeshH3 % MeshH4); + MeshCoef1s3rdp2.slice(iAlt) = + 1.0 * ( MeshH2 % MeshH3 % MeshH4) / (h1 % h2 % (h2 + h3) % (h2 + h3 + h4)); + MeshCoef1s3rdp3.slice(iAlt) = + -1.0 * ( MeshH1 % MeshH3 % MeshH4) / (MeshH2 % h2 % h3 % (h3 + h4)); + MeshCoef1s3rdp4.slice(iAlt) = + 1.0 * ( MeshH1 % MeshH2 % MeshH4) / (MeshH3 % (h3 + h2) % h3 % h4); + MeshCoef1s3rdp5.slice(iAlt) = + -1.0 * ( MeshH1 % MeshH2 % MeshH3) / (MeshH4 % (h2 + h3 + h4) % (h3 + h4) % h4); + } + } + + report.print(4, "ending calc_alt_grid_spacing"); + return; +} + +// --------------------------------------- +// Grid spacing for native k axis: +// --------------------------------------- + +void Grid::calc_k_grid_spacing() { + + int64_t iZ; + + report.print(4, "starting calc_k_grid_spacing"); + + for (iZ = 1; iZ < nZ - 1; iZ++) { + dk_center_scgc.slice(iZ) = + (k_center_scgc.slice(iZ + 1) - k_center_scgc.slice(iZ - 1)) / 2.0; + dk_edge.slice(iZ) = + k_center_scgc.slice(iZ) - k_center_scgc.slice(iZ - 1); + dr_edge.slice(iZ) = + radius_scgc.slice(iZ) - radius_scgc.slice(iZ - 1); + } + + dk_center_scgc.slice(0) = dk_center_scgc.slice(1); + dk_center_scgc.slice(nZ - 1) = dk_center_scgc.slice(nZ - 2); + + dk_edge.slice(0) = dk_edge.slice(1); + dr_edge.slice(0) = dr_edge.slice(1); + iZ = nAlts - 1; + dk_edge.slice(iZ) = + k_center_scgc.slice(iZ) - k_center_scgc.slice(iZ - 1); + dr_edge.slice(iZ) = + radius_scgc.slice(iZ) - radius_scgc.slice(iZ - 1); + + // For the sphere & cubesphere, k is in meters: + if (iGridShape_ == iSphere_ || iGridShape_ == iCubesphere_) { + dk_center_m_scgc = dk_center_scgc; + dk_edge_m = dk_edge; + } + + // This needs to be turned into a distance for the dipole: + if (iGridShape_ == iDipole_) { + // the dk's may be negative (not allowed). make sure they are positive + // this gets rid of SO many errors... + dk_center_scgc = abs(dk_center_scgc); + dk_edge = abs(dk_edge); + dr_edge = abs(dr_edge); + dk_center_m_scgc = pow(magAlt_scgc, 3) % dk_center_scgc / delTheta(magLat_scgc); + dk_edge_m = pow(magAlt_scgc, 3) % dk_edge / delTheta(magLat_scgc); + } + + // For a stretched grid, calculate some useful quantities: + // lower is defined for the current cell, which + // means that upper(iZ) is lower(iZ+1) + // ratio = upper / lower + for (iZ = 0; iZ < nZ - 1; iZ++) + dk_ratio.slice(iZ) = + dk_edge.slice(iZ + 1) / dk_edge.slice(iZ); + + iZ = nZ - 1; + dk_ratio.slice(iZ) = dk_ratio.slice(iZ - 1); + + // Need the square of the ratio: + dk_ratio_sq = dk_ratio % dk_ratio; + dk_one_minus_r2 = 1.0 - dk_ratio_sq; + + report.print(4, "ending calc_k_grid_spacing"); + return; +} + + + +// --------------------------------------- +// Grid spacing for longitude: +// --------------------------------------- + +void Grid::calc_long_grid_spacing() { + + int64_t iLon; + + report.print(4, "starting calc_long_grid_spacing"); + + for (iLon = 1; iLon < nLons - 1; iLon++) + dlon_center_scgc.row(iLon) = + (geoLon_scgc.row(iLon + 1) - geoLon_scgc.row(iLon - 1)) / 2.0; + + // Bottom (one sided): + iLon = 0; + dlon_center_scgc.row(iLon) = + geoLon_scgc.row(iLon + 1) - geoLon_scgc.row(iLon); + // Top (one sided): + iLon = nLons - 1; + dlon_center_scgc.row(iLon) = + geoLon_scgc.row(iLon) - geoLon_scgc.row(iLon - 1); + + // Make this into a distance: + dlon_center_dist_scgc = + dlon_center_scgc % radius_scgc % abs(cos(geoLat_scgc)); + + report.print(4, "ending calc_long_grid_spacing"); +} + +// --------------------------------------- +// Grid spacing for native i direction: +// --------------------------------------- + +void Grid::calc_i_grid_spacing() { + + int64_t iX; + + report.print(4, "starting calc_i_grid_spacing"); + + for (iX = 1; iX < nX - 1; iX++) { + di_center_scgc.row(iX) = + (i_center_scgc.row(iX + 1) - i_center_scgc.row(iX - 1)) / 2.0; + di_edge.row(iX) = + i_center_scgc.row(iX) - i_center_scgc.row(iX - 1); + } + + // Bottom (one sided): + iX = 0; + di_center_scgc.row(iX) = + i_center_scgc.row(iX + 1) - i_center_scgc.row(iX); + di_edge.row(iX) = + i_center_scgc.row(iX + 1) - i_center_scgc.row(iX); + // Top (one sided): + iX = nX - 1; + di_center_scgc.row(iX) = + i_center_scgc.row(iX) - i_center_scgc.row(iX - 1); + di_edge.row(iX) = + i_center_scgc.row(iX) - i_center_scgc.row(iX - 1); + + // Make this into a distance. This assumes that the native i coordinate is in + // radians, which is true for sphere, cubesphere, and dipole grid. + di_center_m_scgc = di_center_scgc % radius_scgc; + di_edge_m = di_edge % radius_scgc; + + // If the shape is a sphere or dipole, then the first coordinate is longitude. + // The physical distance needs to be changed by the cos of the latitude, + // which is the j coordinate in the sphere (different for dipole). + if (iGridShape_ == iSphere_) { + di_center_m_scgc = di_center_m_scgc % abs(cos(j_center_scgc)); + // edge is in-line with the j center + di_edge_m = di_edge_m % abs(cos(j_center_scgc)); + } + + // Dipole will use cos(magLat) + if (iGridShape_ == iDipole_) { + di_center_m_scgc = di_center_m_scgc % abs(cos(magLat_scgc)); + // edge is in-line with the j center + di_edge_m = di_edge_m % abs(cos(magLat_scgc)); + } + + // For a stretched grid, calculate some useful quantities: + // lower is defined for the current cell, which + // means that upper(iZ) is lower(iZ+1) + // ratio = upper / lower + for (iX = 0; iX < nX - 1; iX++) + di_ratio.row(iX) = + di_edge.row(iX + 1) / di_edge.row(iX); + + iX = nX - 1; + di_ratio.row(iX) = di_ratio.row(iX - 1); + + // Need the square of the ratio: + di_ratio_sq = di_ratio % di_ratio; + di_one_minus_r2 = 1.0 - di_ratio_sq; + + report.print(4, "ending calc_i_grid_spacing"); +} + +// --------------------------------------- +// Grid spacing for latitude: +// --------------------------------------- + +void Grid::calc_lat_grid_spacing() { + + int64_t iLat; + + report.print(4, "starting calc_lat_grid_spacing"); + + for (iLat = 1; iLat < nLats - 1; iLat++) { + dlat_center_scgc.col(iLat) = + (geoLat_scgc.col(iLat + 1) - geoLat_scgc.col(iLat - 1)) / 2.0; + } + + // Bottom (one sided): + iLat = 0; + dlat_center_scgc.col(iLat) = + geoLat_scgc.col(iLat + 1) - geoLat_scgc.col(iLat); + // Top (one sided): + iLat = nLats - 1; + dlat_center_scgc.col(iLat) = + geoLat_scgc.col(iLat) - geoLat_scgc.col(iLat - 1); + + // Make this into a distance: + dlat_center_dist_scgc = dlat_center_scgc % radius_scgc; + report.print(4, "ending calc_lat_grid_spacing"); +} + +// --------------------------------------- +// Grid spacing for native j direction: +// --------------------------------------- + +void Grid::calc_j_grid_spacing() { + + int64_t iY; + + report.print(4, "starting calc_j_grid_spacing"); + + for (iY = 1; iY < nY - 1; iY++) { + dj_center_scgc.col(iY) = + (j_center_scgc.col(iY + 1) - j_center_scgc.col(iY - 1)) / 2.0; + dj_edge.col(iY) = + j_center_scgc.col(iY) - j_center_scgc.col(iY - 1); + } + + // Bottom (one sided): + iY = 0; + dj_center_scgc.col(iY) = + j_center_scgc.col(iY + 1) - j_center_scgc.col(iY); + dj_edge.col(iY) = + j_center_scgc.col(iY + 1) - j_center_scgc.col(iY); + // Top (one sided): + iY = nY - 1; + dj_center_scgc.col(iY) = + j_center_scgc.col(iY) - j_center_scgc.col(iY - 1); + dj_edge.col(iY) = + j_center_scgc.col(iY) - j_center_scgc.col(iY - 1); + + // Make this into a distance: + if (iGridShape_ == iSphere_ || iGridShape_ == iCubesphere_) { + dj_center_m_scgc = dj_center_scgc % radius_scgc; + dj_edge_m = dj_edge % radius_scgc; + } + + // Dipole will have different scaling... + if (iGridShape_ == iDipole_) { + dj_center_m_scgc = radius_scgc % dj_center_scgc % pow(cos(magLat_scgc), + 3) / delTheta(magLat_scgc) % sign(magLat_scgc); + dj_edge_m = radius_scgc % dj_edge % pow(cos(magLat_scgc), + 3) / delTheta(magLat_scgc) % sign(magLat_scgc); + } + + // For a stretched grid, calculate some useful quantities: + // egde is defined for the current cell, which + // means that upper(iY) is lower(iY+1) + // ratio = upper / lower + for (iY = 0; iY < nY - 1; iY++) + dj_ratio.col(iY) = + dj_edge.col(iY + 1) / dj_edge.col(iY); + + iY = nY - 1; + dj_ratio.col(iY) = dj_ratio.col(iY - 1); + + // Need the square of the ratio: + dj_ratio_sq = dj_ratio % dj_ratio; + dj_one_minus_r2 = 1.0 - dj_ratio_sq; + + report.print(4, "ending calc_j_grid_spacing"); +} diff --git a/src/grid_sphere.cpp b/src/grid_sphere.cpp new file mode 100644 index 00000000..d3bb2120 --- /dev/null +++ b/src/grid_sphere.cpp @@ -0,0 +1,247 @@ +// Copyright 2025, the Aether Development Team (see doc/dev_team.md for members) +// Full license can be found in License.md + +#include "aether.h" + + +// ---------------------------------------------------------------------- +// Create connectivity between the nodes for message passing for sphere +// ---------------------------------------------------------------------- + +void Grid::create_sphere_connection(Quadtree quadtree) { + + std::string function = "Grid::create_sphere_connection"; + static int iFunction = -1; + report.enter(function, iFunction); + + IsLatLonGrid = true; + + // Get some coordinates and sizes in normalized coordinates: + arma_vec lower_left_norm = quadtree.get_vect("LL"); + arma_vec middle_norm = quadtree.get_vect("MID"); + arma_vec size_right_norm = quadtree.get_vect("SR"); + arma_vec size_up_norm = quadtree.get_vect("SU"); + + // Move to the next block in 4 directions: + arma_vec down_norm = middle_norm - 0.51 * size_up_norm; + arma_vec up_norm = middle_norm + 0.51 * size_up_norm; + arma_vec left_norm = middle_norm - 0.51 * size_right_norm; + arma_vec right_norm = middle_norm + 0.51 * size_right_norm; + + // The first component could wrap around: + right_norm(0) = fmod(right_norm(0), quadtree.limit_high(0)); + left_norm(0) = fmod((left_norm(0) + quadtree.limit_high(0)), + quadtree.limit_high(0)); + + // These should be the exact edge of the face. + // The from and to processors should get these in the same place, + // so they can be used to match which processor to send / receive info + edge_Xp = middle_norm + size_right_norm / 2.0; + // wrap in longitude: + edge_Xp(0) = fmod(edge_Xp(0), quadtree.limit_high(0)); + edge_Xm = middle_norm - size_right_norm / 2.0; + edge_Yp = middle_norm + size_up_norm / 2.0; + edge_Ym = middle_norm - size_up_norm / 2.0; + + iProcYm = quadtree.find_point(down_norm) + iMember * nGrids; + iProcYp = quadtree.find_point(up_norm) + iMember * nGrids; + iProcXm = quadtree.find_point(left_norm) + iMember * nGrids; + iProcXp = quadtree.find_point(right_norm) + iMember * nGrids; + + iRoot = quadtree.find_root(middle_norm); + iRootYm = quadtree.find_root(down_norm); + iRootYp = quadtree.find_root(up_norm); + iRootXm = quadtree.find_root(left_norm); + iRootXp = quadtree.find_root(right_norm); + + // Check if touching South Pole: + if (lower_left_norm(1) == quadtree.limit_low(1)) { + DoesTouchSouthPole = true; + + // edges need to be adjusted to deal with longitudes, since the + // pole will 180deg different for the from and to processors + if (edge_Ym(0) < 1.0) + edge_Ym(0) += 0.5; + else + edge_Ym(0) -= 0.5; + } + + // Check if touching North Pole: + if (lower_left_norm(1) + size_up_norm(1) == quadtree.limit_high(1)) { + DoesTouchNorthPole = true; + + // edge need to be adjusted to deal with longitudes, since the + // pole will 180deg different for the from and to processors + if (edge_Yp(0) < 1.0) + edge_Yp(0) += 0.5; + else + edge_Yp(0) -= 0.5; + } + + if (report.test_verbose(2)) + std::cout << "connectivity : " + << " iProc : " << iProc << "\n" + << " isnorth : " << DoesTouchNorthPole << "\n" + << " issouth : " << DoesTouchSouthPole << "\n" + << " iProcYm : " << iProcYm << "\n" + << " iProcYp : " << iProcYp << "\n" + << " iProcXm : " << iProcXm << "\n" + << " iProcXp : " << iProcXp << "\n"; + + report.exit(function); + return; +} + +// ---------------------------------------------------------------------- +// Create a spherical grid with lon/lat/alt coordinates +// ---------------------------------------------------------------------- + +void Grid::create_sphere_grid(Quadtree quadtree) { + + std::string function = "Grid::create_simple_lat_lon_alt_grid"; + static int iFunction = -1; + report.enter(function, iFunction); + + int64_t iLon, iLat, iAlt; + + // Get some coordinates and sizes in normalized coordinates: + arma_vec lower_left_norm = quadtree.get_vect("LL"); + arma_vec size_right_norm = quadtree.get_vect("SR"); + arma_vec size_up_norm = quadtree.get_vect("SU"); + + precision_t dlon = size_right_norm(0) * cPI / (nLons - 2 * nGCs); + precision_t lon0 = lower_left_norm(0) * cPI; + arma_vec lon1d(nLons); + + // if we are not doing anything in the lon direction, then set dlon to + // something reasonable: + if (!HasXdim) + dlon = 1.0 * cDtoR; + + // Longitudes: + // - Make a 1d vector + // - copy it into the 3d cube + for (iLon = 0; iLon < nLons; iLon++) + lon1d(iLon) = lon0 + (iLon - nGCs + 0.5) * dlon; + + if (report.test_verbose(1)) { + std::cout << function << ": " << lon0 << " " << dlon << "\n"; + display_vector("in function " + function + " lon1d : ", lon1d * cRtoD); + } + + for (iLat = 0; iLat < nLats; iLat++) { + for (iAlt = 0; iAlt < nAlts; iAlt++) { + geoLon_scgc.subcube(0, iLat, iAlt, nLons - 1, iLat, iAlt) = lon1d; + i_center_scgc.subcube(0, iLat, iAlt, nLons - 1, iLat, iAlt) = lon1d; + } + } + + precision_t dlat = size_up_norm(1) * cPI / (nLats - 2 * nGCs); + precision_t lat0 = lower_left_norm(1) * cPI; + arma_vec lat1d(nLats); + + // if we are not doing anything in the lat direction, then set dlat to + // something reasonable: + if (!HasYdim) + dlat = 1.0 * cDtoR; + + // Latitudes: + // - Make a 1d vector + // - copy it into the 3d cube + for (iLat = 0; iLat < nLats; iLat++) + lat1d(iLat) = lat0 + (iLat - nGCs + 0.5) * dlat; + + if (report.test_verbose(1)) { + std::cout << function << ": " << lat0 << " " << dlat << "\n"; + + display_vector("in function " + function + " lat1d : ", lat1d * cRtoD); + } + + for (iLon = 0; iLon < nLons; iLon++) { + for (iAlt = 0; iAlt < nAlts; iAlt++) { + geoLat_scgc.subcube(iLon, 0, iAlt, iLon, nLats - 1, iAlt) = lat1d; + j_center_scgc.subcube(iLon, 0, iAlt, iLon, nLats - 1, iAlt) = lat1d; + } + } + + arma_cube cos_lat = cos(geoLat_scgc); + cos_lat.clamp(0.0001, 1.0); + + y_Center = geoLat_scgc; + x_Center = geoLon_scgc % cos_lat; + cell_area = dlat * dlon * cos_lat; + + // --------------------------------------------- + // Left Sides - edges on left side (no offset left) + // --------------------------------------------- + arma_mat lat2d_left(nLons + 1, nLats); + arma_mat lon2d_left(nLons + 1, nLats); + + for (iLat = 0; iLat < nLats; iLat++) { + for (iLon = 0; iLon < nLons + 1; iLon++) { + lat2d_left(iLon, iLat) = lat0 + (iLat - nGCs + 0.5) * dlat; + lon2d_left(iLon, iLat) = lon0 + (iLon - nGCs) * dlon; + } + } + + for (iAlt = 0; iAlt < nAlts; iAlt++) { + geoLon_Left.slice(iAlt) = lon2d_left; + geoLat_Left.slice(iAlt) = lat2d_left; + i_edge_scgc.slice(iAlt) = lon2d_left; + } + + arma_cube cos_lat_L = cos(geoLat_Left); + cos_lat_L.clamp(0.0001, 1.0); + + x_Left = geoLon_Left % cos_lat_L; + dy_Left.set_size(nLons, nLats, nAlts); + dy_Left.fill(dlat); + + // --------------------------------------------- + // Down Sides - edges on down side (no offset lat) + // --------------------------------------------- + arma_mat lat2d_down(nLons, nLats + 1); + arma_mat lon2d_down(nLons, nLats + 1); + + for (iLat = 0; iLat < nLats + 1; iLat++) { + for (iLon = 0; iLon < nLons; iLon++) { + lat2d_down(iLon, iLat) = lat0 + (iLat - nGCs) * dlat; + lon2d_down(iLon, iLat) = lon0 + (iLon - nGCs + 0.5) * dlon; + } + } + + for (iAlt = 0; iAlt < nAlts; iAlt++) { + geoLon_Down.slice(iAlt) = lon2d_down; + geoLat_Down.slice(iAlt) = lat2d_down; + j_edge_scgc.slice(iAlt) = lat2d_down; + } + + arma_cube cos_lat_D = cos(geoLat_Down); + cos_lat_D.clamp(0.0001, 1.0); + + y_Down = geoLat_Down; + dx_Down = dlon * cos_lat_D; + + // --------------------------------------------- + // Corner Sides - corner (no offset lat or lon) + // --------------------------------------------- + arma_mat lat2d_corner(nLons + 1, nLats + 1); + arma_mat lon2d_corner(nLons + 1, nLats + 1); + + for (iLat = 0; iLat < nLats + 1; iLat++) { + for (iLon = 0; iLon < nLons + 1; iLon++) { + lat2d_corner(iLon, iLat) = lat0 + (iLat - nGCs) * dlat; + lon2d_corner(iLon, iLat) = lon0 + (iLon - nGCs) * dlon; + } + } + + for (iAlt = 0; iAlt < nAlts + 1; iAlt++) { + geoLon_Corner.slice(iAlt) = lon2d_corner; + geoLat_Corner.slice(iAlt) = lat2d_corner; + i_corner_scgc.slice(iAlt) = lon2d_corner; + j_corner_scgc.slice(iAlt) = lat2d_corner; + } + + report.exit(function); + return; +} diff --git a/src/indices.cpp b/src/indices.cpp index 97e86334..b26e2b5a 100644 --- a/src/indices.cpp +++ b/src/indices.cpp @@ -20,6 +20,9 @@ Indices::Indices() { index_time_pair single_index; single_index.nValues = 0; single_index.name = ""; + single_index.didPerturb = false; + single_index.isAddPerturb = false; + single_index.isConstantPerturb = false; std::string lookup_file = input.get_indices_lookup_file(); indices_lookup = read_json(lookup_file); @@ -89,6 +92,9 @@ bool read_and_store_indices(Indices &indices) { int nFiles = input.get_number_of_omniweb_files(); + if (report.test_verbose(1)) + std::cout << "Number of OMNIWeb files : " << nFiles << "\n"; + if (nFiles > 0) { std::vector omniweb_files = input.get_omniweb_files(); @@ -117,7 +123,17 @@ bool read_and_store_indices(Indices &indices) { } // if } // for iVar } // for iFile - } // if nFiles + } else { + if (report.test_verbose(0)) { + std::cout << "--> WARNING : There were no OMNIWeb files specified!\n"; + std::cout << + "--> : If this was not your intent, check the aether.json file\n"; + std::cout << "--> : line needs to be: \n"; + std::cout << "--> : \"OmniwebFiles\": [\"filename\"] \n"; + } + + report.error("WARNING : OMNIWeb file not set!!!"); + } report.exit(function); return DidWork; @@ -130,7 +146,7 @@ bool read_and_store_indices(Indices &indices) { bool Indices::perturb() { bool DidWork = true; bool DoReport = false; - int64_t iDebug = 2; + int64_t iDebug = 0; json perturb_values = input.get_perturb_values(); @@ -139,7 +155,7 @@ bool Indices::perturb() { for (auto it = perturb_values.begin(); it != perturb_values.end(); ++it) { std::string name = it.key(); - if (name != "Chemistry") { + if (name != "Chemistry" && name != "restart_control") { if (report.test_verbose(iDebug)) { std::cout << "Perturbing Index : " << name << "\n"; @@ -168,6 +184,76 @@ bool Indices::perturb() { // Perturb a specific index in the way the user requested // ---------------------------------------------------------------------- +void Indices::reperturb_index(int iIndex, + precision_t unperturbedValue, + precision_t perturbedValue, + precision_t newValue) { + + int64_t nValues = all_indices_arrays[iIndex].nValues; + + if (all_indices_arrays[iIndex].didPerturb && + all_indices_arrays[iIndex].isConstantPerturb) { + precision_t perturb; + + if (all_indices_arrays[iIndex].isAddPerturb) { + // constant, non-normalized value: + perturb = newValue - unperturbedValue; + + if (iGrid == 0) + std::cout << " -> New Added Perturb : " << perturb << "\n"; + + for (int64_t iValue = 0; iValue < nValues; iValue++) { + all_indices_arrays[iIndex].values[iValue] = + all_indices_arrays[iIndex].originals[iValue] + perturb; + } + + } else { + // constant, normalized value: + perturb = newValue / unperturbedValue; + + if (iGrid == 0) + std::cout << " -> New (normalized) Multiplied Perturb : " + << perturb << "\n"; + + for (int64_t iValue = 0; iValue < nValues; iValue++) { + + all_indices_arrays[iIndex].values[iValue] = + all_indices_arrays[iIndex].originals[iValue] * perturb; + } + } + + } else { + std::string mess = "Reperturb index: don't know how to "; + mess = mess + "handle non-perturb or nonconstant perturb"; + report.error(mess); + } + +} + +// ---------------------------------------------------------------------- +// Perturb a specific index in the way the user requested +/* +The way this code works is that you can perturb things in different ways. +Multiply by a constant value: + - if the mean is 1.0, then the perturbed value will be unbiased + - if the mean is above or below 1.0, it will be biased. + - the standard deviation is normalized to 1, so it is a percentage + of the value. + - This will come up with a value that you multiply all of the values by, + like 0.843 or 1.203. +Multiply by a non-constant value: + - same as above, but each value will have a different random number + instead of a single (constant) value +Add a constant value: + - the mean and standard deviation are NOT normalized. + - a single value then derived given the mean and the standard dev. + - an unbiased value would have a mean = 0 +Add a non-constant value: + - same as above, but each value will have a different random number + instead of a single (constant) value +*/ +// ---------------------------------------------------------------------- + void Indices::perturb_index(int iIndex, int seed, json style, bool DoReport) { @@ -178,6 +264,8 @@ void Indices::perturb_index(int iIndex, int seed, bool add = true; bool constant = false; + all_indices_arrays[iIndex].didPerturb = true; + if (style.contains("Mean")) mean = style["Mean"]; @@ -187,15 +275,21 @@ void Indices::perturb_index(int iIndex, int seed, std = standard_deviation(all_indices_arrays[iIndex].values); // Add or Multiply the random values - if (style.contains("Add")) + if (style.contains("Add")) { add = style["Add"]; + if (add) + all_indices_arrays[iIndex].isAddPerturb = true; + } + // Only one value for all elements or individual values for elements if (style.contains("Constant")) constant = style["Constant"]; - if (constant) + if (constant) { nV = 1; + all_indices_arrays[iIndex].isConstantPerturb = true; + } std::vector perturbations = get_normal_random_vect(mean, std, @@ -207,6 +301,9 @@ void Indices::perturb_index(int iIndex, int seed, if (!constant) iV = iValue; + all_indices_arrays[iIndex].originals.push_back( + all_indices_arrays[iIndex].values[iValue]); + if (add) { if (DoReport && iValue == 0) std::cout << " ==> Adding " << perturbations[iV] << "\n"; @@ -303,10 +400,14 @@ precision_t Indices:: get_f107a(double time) { // This is the general function for getting an index // ---------------------------------------------------------------------- -precision_t Indices::get_index(double time, int index) { +precision_t Indices::get_index(double time, int index, + bool useNonperturbed /* = false */) { int64_t iLow, iMid, iHigh; + if (all_indices_arrays[index].nValues <= 0) + return -1.0e32; + iLow = 0; iHigh = all_indices_arrays[index].nValues - 1; iMid = (iHigh + iLow) / 2; @@ -337,8 +438,14 @@ precision_t Indices::get_index(double time, int index) { all_indices_arrays[index].times[iMid]); precision_t x = (time - all_indices_arrays[index].times[iMid]) / dt; - precision_t value = (1.0 - x) * all_indices_arrays[index].values[iMid] + - x * all_indices_arrays[index].values[iMid + 1]; + precision_t value; + + if (useNonperturbed) + value = (1.0 - x) * all_indices_arrays[index].originals[iMid] + + x * all_indices_arrays[index].originals[iMid + 1]; + else + value = (1.0 - x) * all_indices_arrays[index].values[iMid] + + x * all_indices_arrays[index].values[iMid + 1]; return value; } @@ -401,6 +508,81 @@ bool Indices::set_index(int index, return DidWork; } +json Indices::get_all_indices(double time) { + json outputJson; + + int64_t iIndex; + precision_t value; + + for (iIndex = 0; iIndex < nIndices; iIndex++) { + if (all_indices_arrays[iIndex].nValues > 0) { + value = get_index(time, iIndex); + outputJson[all_indices_arrays[iIndex].name] = value; + } + } + + return outputJson; +} + +// ----------------------------------------------------------------------------- +// This is for restarting the code. Either write or read the time. +// ----------------------------------------------------------------------------- + +bool Indices::restart_file(std::string dir, bool DoRead, double time) { + + std::string filename; + bool DidWork = true; + filename = dir + "/indices_" + cMember + ".json"; + + json restart_indices_json, original_indices_json; + + if (DoRead) { + restart_indices_json = read_json(filename); + + if (report.test_verbose(1)) { + std::cout << "Restarted indices, Current time : "; + std::cout << std::setw(2) << restart_indices_json << "\n"; + } + + original_indices_json = get_all_indices(time); + precision_t orig, rest, unperturbed; + + for (auto it = original_indices_json.begin(); + it != original_indices_json.end(); ++it) { + std::string name = it.key(); + orig = original_indices_json[name]; + rest = restart_indices_json[name]; + + if (abs(orig - rest) > cSmall) { + int iIndex = lookup_index_id(name); + unperturbed = get_index(time, iIndex, true); + + if (iGrid == 0) + std::cout << " -> Index was altered during restart : " + << name << " -> index number: " + << iIndex << "; orig, rest, un " + << orig << " " + << rest << " " + << unperturbed << " " + << all_indices_arrays[iIndex].isAddPerturb << "\n"; + + reperturb_index(iIndex, unperturbed, orig, rest); + + } + } + + + } else { + restart_indices_json = get_all_indices(time); + + if (iGrid == 0) + DidWork = write_json(filename, restart_indices_json); + } + + return DidWork; +} + + // ---------------------------------------------------------------------- // Dump the contents of an index_file_output_struct // ---------------------------------------------------------------------- diff --git a/src/init_geo_grid.cpp b/src/init_geo_grid.cpp index cfc4a646..ddb19d2c 100644 --- a/src/init_geo_grid.cpp +++ b/src/init_geo_grid.cpp @@ -6,734 +6,6 @@ #include "aether.h" #include -// ---------------------------------------------------------------------- -// Create connectivity between the nodes for message passing for cubesphere -// ---------------------------------------------------------------------- - -void Grid::create_cubesphere_connection(Quadtree quadtree) { - - std::string function = "Grid::create_cubesphere_connection"; - static int iFunction = -1; - report.enter(function, iFunction); - - IsLatLonGrid = false; - - arma_vec lower_left_norm = quadtree.get_vect("LL"); - arma_vec middle_norm = quadtree.get_vect("MID"); - arma_vec size_right_norm = quadtree.get_vect("SR"); - arma_vec size_up_norm = quadtree.get_vect("SU"); - - // These points go off the edge to the next block in each direction: - arma_vec down_norm = middle_norm - 0.51 * size_up_norm; - arma_vec up_norm = middle_norm + 0.51 * size_up_norm; - arma_vec left_norm = middle_norm - 0.51 * size_right_norm; - arma_vec right_norm = middle_norm + 0.51 * size_right_norm; - - // Find those points in the quadtree to figure out which processor - // they are on - iProcYm = quadtree.find_point(down_norm) + iMember * nGrids; - iProcYp = quadtree.find_point(up_norm) + iMember * nGrids; - iProcXm = quadtree.find_point(left_norm) + iMember * nGrids; - iProcXp = quadtree.find_point(right_norm) + iMember * nGrids; - - // Need to know which side the current block is on and which side each - // of the blocks in the different directions is on. Need this so we can - // know how to unpack the variables after the message pass. - iRoot = quadtree.find_root(middle_norm); - iRootYm = quadtree.find_root(down_norm); - iRootYp = quadtree.find_root(up_norm); - iRootXm = quadtree.find_root(left_norm); - iRootXp = quadtree.find_root(right_norm); - - // These should be the exact edge of the face. - // The from and to processors should get these in the same place, - // so they can be used to match which processor to send / receive info - edge_Xp = middle_norm + size_right_norm / 2.0; - edge_Xm = middle_norm - size_right_norm / 2.0; - edge_Yp = middle_norm + size_up_norm / 2.0; - edge_Ym = middle_norm - size_up_norm / 2.0; - - if (report.test_verbose(2)) - std::cout << "connectivity : " - << " iProc : " << iProc << "\n" - << " isnorth : " << DoesTouchNorthPole << "\n" - << " issouth : " << DoesTouchSouthPole << "\n" - << " iProcXp : " << iProcXp << "\n" - << " iProcYp : " << iProcYp << "\n" - << " iProcXm : " << iProcXm << "\n" - << " iProcYm : " << iProcYm << "\n" - << " iRoot : " << iRoot << "\n" - << " iRootXp : " << iRootXp << "\n" - << " iRootYp : " << iRootYp << "\n" - << " iRootXm : " << iRootXm << "\n" - << " iRootYm : " << iRootYm << "\n"; - - int64_t iProcSelf = quadtree.find_point(middle_norm); - - report.exit(function); - return; -} - -// ---------------------------------------------------------------------- -// This function takes the normalized coordinates and makes latitude -// and longitude arrays from them. It can do this for the corners or -// edges, depending on the offset. -// ---------------------------------------------------------------------- - -void fill_cubesphere_lat_lon_from_norms(Quadtree quadtree, - arma_vec dr, - arma_vec du, - arma_vec ll, - int64_t nGCs, - precision_t left_off, - precision_t down_off, - arma_mat &lat2d, - arma_mat &lon2d, - arma_mat &refx, - arma_mat &refy) { - - int64_t nX = lat2d.n_rows; - int64_t nY = lat2d.n_cols; - - double xn, yn, zn, rn; - double xp, yp, zp, rp, latp, lonp; - - double a = sqrt(3); - - arma_vec xyz, xyzn, xyz_wrapped; - - // Loop through each point and derive the coordinate - for (int iDU = 0; iDU < nY; iDU++) { - for (int iLR = 0; iLR < nX; iLR++) { - - // the offsets are so we can find cell centers, edges, and corners - double iD = iDU - nGCs + down_off; - double iL = iLR - nGCs + left_off; - - // This is the normalized coordinate: - xyz = ll + dr * iL + du * iD; - // Ghost cells could be off the edge, so wrap to other face: - //xyz_wrapped = quadtree.wrap_point_cubesphere(xyz) * a; - xyz_wrapped = xyz * a; - // Normalize the coordinate to a unit vector: - xyzn = normalise(xyz_wrapped); - xp = xyzn(0); - yp = xyzn(1); - zp = xyzn(2); - - // Derive lat and lon from unit vector: - latp = asin(zp); - // offset for lon is to put the left edge of face 0 at 0 longitude: - lonp = atan2(yp, xp) + 3 * cPI / 4; - - if (lonp > cTWOPI) - lonp = lonp - cTWOPI; - - if (lonp < 0.0) - lonp = lonp + cTWOPI; - - lat2d(iLR, iDU) = latp; - lon2d(iLR, iDU) = lonp; - - // refx and refy are the X, Y coordinates on the side of the CUBE - // Identify sides, then apply correct transformation law - // Face 1 to 4, equator faces with face 1 starting at the meridian - // Face 5, North Pole (different from book def) - // Face 6, South Pole (different from book def) - // Note face number are subtracted by one to comply with - // computer indexing - // Lon are displaced by cPI/4 as coordinates are generated - // with a right displacement of cPI/4 - if (quadtree.iSide == 1 - 1) { - refx(iLR, iDU) = sqrt(3) / 3 * tan(lonp - cPI / 4.); - refy(iLR, iDU) = sqrt(3) / 3 * tan(latp) / cos(lonp - cPI / 4.); - } else if (quadtree.iSide == 2 - 1) { - refx(iLR, iDU) = sqrt(3) / 3 * tan(lonp - cPI / 4. - cPI / 2.); - refy(iLR, iDU) = sqrt(3) / 3 * tan(latp) / cos(lonp - cPI / 4. - cPI / 2.); - } else if (quadtree.iSide == 3 - 1) { - refx(iLR, iDU) = sqrt(3) / 3 * tan(lonp - cPI / 4. - cPI); - refy(iLR, iDU) = sqrt(3) / 3 * tan(latp) / cos(lonp - cPI / 4. - cPI); - } else if (quadtree.iSide == 4 - 1) { - refx(iLR, iDU) = sqrt(3) / 3 * tan(lonp - cPI / 4 - 3 * cPI / 2.); - refy(iLR, iDU) = sqrt(3) / 3 * tan(latp) / cos(lonp - cPI / 4. - 3 * cPI / 2.); - } else if (quadtree.iSide == 5 - 1) { - refx(iLR, iDU) = -sqrt(3) / 3 * sin(lonp - 3 * cPI / 4.) / tan(latp); - refy(iLR, iDU) = -sqrt(3) / 3 * cos(lonp - 3 * cPI / 4.) / tan(latp); - } else if (quadtree.iSide == 6 - 1) { - refx(iLR, iDU) = sqrt(3) / 3 * sin(lonp - 3 * cPI / 4.) / tan(latp); - refy(iLR, iDU) = -sqrt(3) / 3 * cos(lonp - 3 * cPI / 4.) / tan(latp); - } - } - } - - return; -} - -// ---------------------------------------------------------------------- -// This function takes in lat-lon and reference xy coordinates to -// generate transformation and metric tensors -// ---------------------------------------------------------------------- -void transformation_metrics(Quadtree quadtree, - arma_mat &lat2d, - arma_mat &lon2d, - arma_mat &refx, - arma_mat &refy, - arma_mat &A11, - arma_mat &A12, - arma_mat &A21, - arma_mat &A22, - arma_mat &A11_inv, - arma_mat &A12_inv, - arma_mat &A21_inv, - arma_mat &A22_inv, - arma_mat &g11_upper, - arma_mat &g12_upper, - arma_mat &g21_upper, - arma_mat &g22_upper, - arma_mat &sqrt_g, - arma_mat &refx_angle, - arma_mat &refy_angle) { - - int64_t nX = lat2d.n_rows; - int64_t nY = lat2d.n_cols; - // Assume R = 1 (since lat-lon/ xy generation assumes unit vect) - double R = 1; - double a = R / sqrt(3); - double xref, yref, rref, xy; - double latp, lonp; - double g; - - // Loop through each point and derive the coordinate - for (int j = 0; j < nY; j++) { - for (int i = 0; i < nX; i++) { - xref = refx(i, j); - yref = refy(i, j); - xy = std::sqrt(xref * xref + yref * yref); - rref = std::sqrt(xref * xref + yref * yref + a * a); - - // Want to calculate angles based on x, y, z - refx_angle(i, j) = asin(xref / rref); - refy_angle(i, j) = asin(yref / rref); - - latp = lat2d(i, j); - lonp = lon2d(i, j); - - sqrt_g(i, j) = R * R * a / (rref * rref * rref); - g = sqrt_g(i, j) * sqrt_g(i, j); - - // metric tensor with lower indices - double front_factor = R * R / (rref * rref * rref * rref); - double g11 = front_factor * (a * a + yref * yref); - double g12 = -front_factor * xref * yref; - double g21 = -front_factor * xref * yref; - double g22 = front_factor * (a * a + xref * xref); - - // metric tensor with upper indices - g11_upper(i, j) = g22 / g; - g12_upper(i, j) = -g12 / g; - g21_upper(i, j) = -g21 / g; - g22_upper(i, j) = g11 / g; - - // Identify sides, then apply correct transformation law - // Face 1 to 4, equator faces with face 1 starting at the meridian - // Face 5, North Pole (different from book def) - // Face 6, South Pole (different from book def) - // Note face number are subtracted by one to comply with - // computer indexing - if (quadtree.iSide == 1 - 1) { - double p1 = R * cos(latp) * cos(lonp - cPI / 4.) / a; - A11(i, j) = p1 * cos(lonp - cPI / 4.); - A12(i, j) = 0; - A21(i, j) = -p1 * sin(latp) * sin(lonp - cPI / 4.); - A22(i, j) = p1 * cos(latp); - - double p2 = a / cos(latp) / cos(lonp - cPI / 4.) / R; - A11_inv(i, j) = p2 / cos(lonp - cPI / 4.); - A12_inv(i, j) = 0; - A21_inv(i, j) = p2 * tan(latp) * tan(lonp - cPI / 4.); - A22_inv(i, j) = p2 / cos(latp); - } else if (quadtree.iSide == 2 - 1) { - double p1 = R * cos(latp) * cos(lonp - cPI / 4. - cPI / 2.) / a; - A11(i, j) = p1 * cos(lonp - cPI / 4. - cPI / 2.); - A12(i, j) = 0; - A21(i, j) = -p1 * sin(latp) * sin(lonp - cPI / 4. - cPI / 2.); - A22(i, j) = p1 * cos(latp); - - double p2 = a / cos(latp) / cos(lonp - cPI / 4. - cPI / 2.) / R; - A11_inv(i, j) = p2 / cos(lonp - cPI / 4. - cPI / 2.); - A12_inv(i, j) = 0; - A21_inv(i, j) = p2 * tan(latp) * tan(lonp - cPI / 4. - cPI / 2.); - A22_inv(i, j) = p2 / cos(latp); - } else if (quadtree.iSide == 3 - 1) { - double p1 = R * cos(latp) * cos(lonp - cPI / 4. - cPI) / a; - A11(i, j) = p1 * cos(lonp - cPI / 4. - cPI); - A12(i, j) = 0; - A21(i, j) = -p1 * sin(latp) * sin(lonp - cPI / 4. - cPI); - A22(i, j) = p1 * cos(latp); - - double p2 = a / cos(latp) / cos(lonp - cPI / 4. - cPI) / R; - A11_inv(i, j) = p2 / cos(lonp - cPI / 4. - cPI); - A12_inv(i, j) = 0; - A21_inv(i, j) = p2 * tan(latp) * tan(lonp - cPI / 4. - cPI); - A22_inv(i, j) = p2 / cos(latp); - } else if (quadtree.iSide == 4 - 1) { - double p1 = R * cos(latp) * cos(lonp - cPI / 4. - 3 * cPI / 2.) / a; - A11(i, j) = p1 * cos(lonp - cPI / 4. - 3 * cPI / 2.); - A12(i, j) = 0; - A21(i, j) = -p1 * sin(latp) * sin(lonp - cPI / 4. - 3 * cPI / 2.); - A22(i, j) = p1 * cos(latp); - - double p2 = a / cos(latp) / cos(lonp - cPI / 4. - 3 * cPI / 2.) / R; - A11_inv(i, j) = p2 / cos(lonp - cPI / 4. - 3 * cPI / 2.); - A12_inv(i, j) = 0; - A21_inv(i, j) = p2 * tan(latp) * tan(lonp - cPI / 4. - 3 * cPI / 2.); - A22_inv(i, j) = p2 / cos(latp); - } else if (quadtree.iSide == 6 - - 1) { // Face 5 and 6 are flipped than Nair's formulation - double p1 = R * sin(latp) / a; - A11(i, j) = p1 * cos(lonp - 3 * cPI / 4.); - A12(i, j) = p1 * sin(lonp - 3 * cPI / 4.); - A21(i, j) = -p1 * sin(latp) * sin(lonp - 3 * cPI / 4.); - A22(i, j) = p1 * sin(latp) * cos(lonp - 3 * cPI / 4.); - - double p2 = a / R / sin(latp) / sin(latp); - A11_inv(i, j) = p2 * sin(latp) * cos(lonp - 3 * cPI / 4.); - A12_inv(i, j) = -p2 * sin(lonp - 3 * cPI / 4.); - A21_inv(i, j) = p2 * sin(latp) * sin(lonp - 3 * cPI / 4.); - A22_inv(i, j) = p2 * cos(lonp - 3 * cPI / 4.); - } else if (quadtree.iSide == 5 - - 1) { // Face 5 and 6 are flipped than Nair's formulation - double p1 = R * sin(latp) / a; - A11(i, j) = -p1 * cos(lonp - 3 * cPI / 4.); - A12(i, j) = p1 * sin(lonp - 3 * cPI / 4.); - A21(i, j) = p1 * sin(latp) * sin(lonp - 3 * cPI / 4.); - A22(i, j) = p1 * sin(latp) * cos(lonp - 3 * cPI / 4.); - - double p2 = a / R / sin(latp) / sin(latp); - A11_inv(i, j) = -p2 * sin(latp) * cos(lonp - 3 * cPI / 4.); - A12_inv(i, j) = p2 * sin(lonp - 3 * cPI / 4.); - A21_inv(i, j) = p2 * sin(latp) * sin(lonp - 3 * cPI / 4.); - A22_inv(i, j) = p2 * cos(lonp - 3 * cPI / 4.); - } - } - } -} - -// ---------------------------------------------------------------------- -// Create a geographic grid -// - if restarting, read in the grid -// - if not restarting, initialize the grid -// ---------------------------------------------------------------------- - -void Grid::create_cubesphere_grid(Quadtree quadtree) { - - std::string function = "Grid::create_cubesphere_grid"; - static int iFunction = -1; - report.enter(function, iFunction); - - arma_vec dr(3), du(3), ll(3); - double xn, yn, zn, rn; - double xp, yp, zp, rp, latp, lonp; - - double a = sqrt(3); - - arma_vec lower_left_norm = quadtree.get_vect("LL"); - arma_vec size_right_norm = quadtree.get_vect("SR"); - arma_vec size_up_norm = quadtree.get_vect("SU"); - - dr = size_right_norm / (nLons - 2 * nGCs); - du = size_up_norm / (nLats - 2 * nGCs); - ll = lower_left_norm; - - int64_t iAlt, iLon, iLat; - - // --------------------------------------------- - // Cell Centers - // --------------------------------------------- - arma_mat lat2d(nLons, nLats); - arma_mat lon2d(nLons, nLats); - arma_mat refx(nLons, nLats); - arma_mat refy(nLons, nLats); - arma_mat A11(nLons, nLats); - arma_mat A12(nLons, nLats); - arma_mat A21(nLons, nLats); - arma_mat A22(nLons, nLats); - arma_mat A11_inv(nLons, nLats); - arma_mat A12_inv(nLons, nLats); - arma_mat A21_inv(nLons, nLats); - arma_mat A22_inv(nLons, nLats); - arma_mat g11_upper(nLons, nLats); - arma_mat g12_upper(nLons, nLats); - arma_mat g21_upper(nLons, nLats); - arma_mat g22_upper(nLons, nLats); - arma_mat sqrt_g(nLons, nLats); - arma_mat refx_angle_temp(nLons, nLats); - arma_mat refy_angle_temp(nLons, nLats); - fill_cubesphere_lat_lon_from_norms(quadtree, dr, du, ll, nGCs, 0.5, 0.5, - lat2d, lon2d, refx, refy); - - transformation_metrics(quadtree, lat2d, lon2d, refx, refy, - A11, A12, A21, A22, A11_inv, A12_inv, - A21_inv, A22_inv, g11_upper, g12_upper, - g21_upper, g22_upper, sqrt_g, - refx_angle_temp, refy_angle_temp); - - for (iAlt = 0; iAlt < nAlts; iAlt++) { - refx_angle.slice(iAlt) = refx_angle_temp; - refy_angle.slice(iAlt) = refy_angle_temp; - - geoLon_scgc.slice(iAlt) = lon2d; - geoLat_scgc.slice(iAlt) = lat2d; - refx_scgc.slice(iAlt) = refx; - refy_scgc.slice(iAlt) = refy; - A11_scgc.slice(iAlt) = A11; - A12_scgc.slice(iAlt) = A12; - A21_scgc.slice(iAlt) = A21; - A22_scgc.slice(iAlt) = A22; - A11_inv_scgc.slice(iAlt) = A11_inv; - A12_inv_scgc.slice(iAlt) = A12_inv; - A21_inv_scgc.slice(iAlt) = A21_inv; - A22_inv_scgc.slice(iAlt) = A22_inv; - g11_upper_scgc.slice(iAlt) = g11_upper; - g12_upper_scgc.slice(iAlt) = g12_upper; - g21_upper_scgc.slice(iAlt) = g21_upper; - g22_upper_scgc.slice(iAlt) = g22_upper; - sqrt_g_scgc.slice(iAlt) = sqrt_g; - } - - // --------------------------------------------- - // Left Sides - edges on left side (no offset left) - // --------------------------------------------- - arma_mat lat2d_left(nLons + 1, nLats); - arma_mat lon2d_left(nLons + 1, nLats); - arma_mat refx_left(nLons + 1, nLats); - arma_mat refy_left(nLons + 1, nLats); - arma_mat A11_left(nLons + 1, nLats); - arma_mat A12_left(nLons + 1, nLats); - arma_mat A21_left(nLons + 1, nLats); - arma_mat A22_left(nLons + 1, nLats); - arma_mat A11_inv_left(nLons + 1, nLats); - arma_mat A12_inv_left(nLons + 1, nLats); - arma_mat A21_inv_left(nLons + 1, nLats); - arma_mat A22_inv_left(nLons + 1, nLats); - arma_mat g11_upper_left(nLons + 1, nLats); - arma_mat g12_upper_left(nLons + 1, nLats); - arma_mat g21_upper_left(nLons + 1, nLats); - arma_mat g22_upper_left(nLons + 1, nLats); - arma_mat sqrt_g_left(nLons + 1, nLats); - arma_mat refx_angle_left_temp(nLons + 1, nLats); - arma_mat refy_angle_left_temp(nLons + 1, nLats); - fill_cubesphere_lat_lon_from_norms(quadtree, dr, du, ll, nGCs, 0.0, 0.5, - lat2d_left, lon2d_left, - refx_left, refy_left); - - transformation_metrics(quadtree, - lat2d_left, lon2d_left, refx_left, refy_left, - A11_left, A12_left, A21_left, A22_left, - A11_inv_left, A12_inv_left, - A21_inv_left, A22_inv_left, - g11_upper_left, g12_upper_left, - g21_upper_left, g22_upper_left, - sqrt_g_left, - refx_angle_left_temp, refy_angle_left_temp); - - refx_angle_Left = refx_angle_left_temp; - refy_angle_Left = refy_angle_left_temp; - - for (iAlt = 0; iAlt < nAlts; iAlt++) { - geoLon_Left.slice(iAlt) = lon2d_left; - geoLat_Left.slice(iAlt) = lat2d_left; - refx_Left.slice(iAlt) = refx_left; - refy_Left.slice(iAlt) = refy_left; - A11_Left.slice(iAlt) = A11_left; - A12_Left.slice(iAlt) = A12_left; - A21_Left.slice(iAlt) = A21_left; - A22_Left.slice(iAlt) = A22_left; - A11_inv_Left.slice(iAlt) = A11_inv_left; - A12_inv_Left.slice(iAlt) = A12_inv_left; - A21_inv_Left.slice(iAlt) = A21_inv_left; - A22_inv_Left.slice(iAlt) = A22_inv_left; - g11_upper_Left.slice(iAlt) = g11_upper_left; - g12_upper_Left.slice(iAlt) = g12_upper_left; - g21_upper_Left.slice(iAlt) = g21_upper_left; - g22_upper_Left.slice(iAlt) = g22_upper_left; - sqrt_g_Left.slice(iAlt) = sqrt_g_left; - } - - // --------------------------------------------- - // Down Sides - edges on down side (no offset down) - // --------------------------------------------- - arma_mat lat2d_down(nLons, nLats + 1); - arma_mat lon2d_down(nLons, nLats + 1); - arma_mat refx_down(nLons, nLats + 1); - arma_mat refy_down(nLons, nLats + 1); - arma_mat A11_down(nLons, nLats + 1); - arma_mat A12_down(nLons, nLats + 1); - arma_mat A21_down(nLons, nLats + 1); - arma_mat A22_down(nLons, nLats + 1); - arma_mat A11_inv_down(nLons, nLats + 1); - arma_mat A12_inv_down(nLons, nLats + 1); - arma_mat A21_inv_down(nLons, nLats + 1); - arma_mat A22_inv_down(nLons, nLats + 1); - arma_mat g11_upper_down(nLons, nLats + 1); - arma_mat g12_upper_down(nLons, nLats + 1); - arma_mat g21_upper_down(nLons, nLats + 1); - arma_mat g22_upper_down(nLons, nLats + 1); - arma_mat sqrt_g_down(nLons, nLats + 1); - arma_mat refx_angle_down_temp(nLons, nLats + 1); - arma_mat refy_angle_down_temp(nLons, nLats + 1); - - fill_cubesphere_lat_lon_from_norms(quadtree, dr, du, ll, nGCs, 0.5, 0.0, - lat2d_down, lon2d_down, - refx_down, refy_down); - - transformation_metrics(quadtree, - lat2d_down, lon2d_down, refx_down, refy_down, - A11_down, A12_down, A21_down, A22_down, - A11_inv_down, A12_inv_down, - A21_inv_down, A22_inv_down, - g11_upper_down, g12_upper_down, - g21_upper_down, g22_upper_down, - sqrt_g_down, - refx_angle_down_temp, refy_angle_down_temp); - refx_angle_Down = refx_angle_down_temp; - refy_angle_Down = refy_angle_down_temp; - - for (iAlt = 0; iAlt < nAlts; iAlt++) { - geoLon_Down.slice(iAlt) = lon2d_down; - geoLat_Down.slice(iAlt) = lat2d_down; - refx_Down.slice(iAlt) = refx_down; - refy_Down.slice(iAlt) = refy_down; - A11_Down.slice(iAlt) = A11_down; - A12_Down.slice(iAlt) = A12_down; - A21_Down.slice(iAlt) = A21_down; - A22_Down.slice(iAlt) = A22_down; - A11_inv_Down.slice(iAlt) = A11_inv_down; - A12_inv_Down.slice(iAlt) = A12_inv_down; - A21_inv_Down.slice(iAlt) = A21_inv_down; - A22_inv_Down.slice(iAlt) = A22_inv_down; - g11_upper_Down.slice(iAlt) = g11_upper_down; - g12_upper_Down.slice(iAlt) = g12_upper_down; - g21_upper_Down.slice(iAlt) = g21_upper_down; - g22_upper_Down.slice(iAlt) = g22_upper_down; - sqrt_g_Down.slice(iAlt) = sqrt_g_down; - } - - // --------------------------------------------- - // Corners (lower left) - no offsets - // --------------------------------------------- - arma_mat lat2d_corner(nLons + 1, nLats + 1); - arma_mat lon2d_corner(nLons + 1, nLats + 1); - arma_mat refx_corner(nLons + 1, nLats + 1); - arma_mat refy_corner(nLons + 1, nLats + 1); - fill_cubesphere_lat_lon_from_norms(quadtree, dr, du, ll, nGCs, 0.0, 0.0, - lat2d_corner, lon2d_corner, - refx_corner, refy_corner); - - for (iAlt = 0; iAlt < nAlts + 1; iAlt++) { - geoLon_Corner.slice(iAlt) = lon2d_corner; - geoLat_Corner.slice(iAlt) = lat2d_corner; - refx_Corner.slice(iAlt) = refx_corner; - refy_Corner.slice(iAlt) = refy_corner; - } - - report.exit(function); - return; -} - -// ---------------------------------------------------------------------- -// Create connectivity between the nodes for message passing for sphere -// ---------------------------------------------------------------------- - -void Grid::create_sphere_connection(Quadtree quadtree) { - - std::string function = "Grid::create_sphere_connection"; - static int iFunction = -1; - report.enter(function, iFunction); - - IsLatLonGrid = true; - - // Get some coordinates and sizes in normalized coordinates: - arma_vec lower_left_norm = quadtree.get_vect("LL"); - arma_vec middle_norm = quadtree.get_vect("MID"); - arma_vec size_right_norm = quadtree.get_vect("SR"); - arma_vec size_up_norm = quadtree.get_vect("SU"); - - // Move to the next block in 4 directions: - arma_vec down_norm = middle_norm - 0.51 * size_up_norm; - arma_vec up_norm = middle_norm + 0.51 * size_up_norm; - arma_vec left_norm = middle_norm - 0.51 * size_right_norm; - arma_vec right_norm = middle_norm + 0.51 * size_right_norm; - - // The first component could wrap around: - right_norm(0) = fmod(right_norm(0), quadtree.limit_high(0)); - left_norm(0) = fmod((left_norm(0) + quadtree.limit_high(0)), - quadtree.limit_high(0)); - - // These should be the exact edge of the face. - // The from and to processors should get these in the same place, - // so they can be used to match which processor to send / receive info - edge_Xp = middle_norm + size_right_norm / 2.0; - // wrap in longitude: - edge_Xp(0) = fmod(edge_Xp(0), quadtree.limit_high(0)); - edge_Xm = middle_norm - size_right_norm / 2.0; - edge_Yp = middle_norm + size_up_norm / 2.0; - edge_Ym = middle_norm - size_up_norm / 2.0; - - iProcYm = quadtree.find_point(down_norm) + iMember * nGrids; - iProcYp = quadtree.find_point(up_norm) + iMember * nGrids; - iProcXm = quadtree.find_point(left_norm) + iMember * nGrids; - iProcXp = quadtree.find_point(right_norm) + iMember * nGrids; - - iRoot = quadtree.find_root(middle_norm); - iRootYm = quadtree.find_root(down_norm); - iRootYp = quadtree.find_root(up_norm); - iRootXm = quadtree.find_root(left_norm); - iRootXp = quadtree.find_root(right_norm); - - // Check if touching South Pole: - if (lower_left_norm(1) == quadtree.limit_low(1)) { - DoesTouchSouthPole = true; - - // edges need to be adjusted to deal with longitudes, since the - // pole will 180deg different for the from and to processors - if (edge_Ym(0) < 1.0) - edge_Ym(0) += 0.5; - else - edge_Ym(0) -= 0.5; - } - - // Check if touching North Pole: - if (lower_left_norm(1) + size_up_norm(1) == quadtree.limit_high(1)) { - DoesTouchNorthPole = true; - - // edge need to be adjusted to deal with longitudes, since the - // pole will 180deg different for the from and to processors - if (edge_Yp(0) < 1.0) - edge_Yp(0) += 0.5; - else - edge_Yp(0) -= 0.5; - } - - if (report.test_verbose(2)) - std::cout << "connectivity : " - << " iProc : " << iProc << "\n" - << " isnorth : " << DoesTouchNorthPole << "\n" - << " issouth : " << DoesTouchSouthPole << "\n" - << " iProcYm : " << iProcYm << "\n" - << " iProcYp : " << iProcYp << "\n" - << " iProcXm : " << iProcXm << "\n" - << " iProcXp : " << iProcXp << "\n"; - - report.exit(function); - return; -} - -// ---------------------------------------------------------------------- -// Create a spherical grid with lon/lat/alt coordinates -// ---------------------------------------------------------------------- - -void Grid::create_sphere_grid(Quadtree quadtree) { - - std::string function = "Grid::create_simple_lat_lon_alt_grid"; - static int iFunction = -1; - report.enter(function, iFunction); - - int64_t iLon, iLat, iAlt; - - // Get some coordinates and sizes in normalized coordinates: - arma_vec lower_left_norm = quadtree.get_vect("LL"); - arma_vec size_right_norm = quadtree.get_vect("SR"); - arma_vec size_up_norm = quadtree.get_vect("SU"); - - precision_t dlon = size_right_norm(0) * cPI / (nLons - 2 * nGCs); - precision_t lon0 = lower_left_norm(0) * cPI; - arma_vec lon1d(nLons); - - // Longitudes: - // - Make a 1d vector - // - copy it into the 3d cube - for (iLon = 0; iLon < nLons; iLon++) - lon1d(iLon) = lon0 + (iLon - nGCs + 0.5) * dlon; - - for (iLat = 0; iLat < nLats; iLat++) { - for (iAlt = 0; iAlt < nAlts; iAlt++) - geoLon_scgc.subcube(0, iLat, iAlt, nLons - 1, iLat, iAlt) = lon1d; - } - - precision_t dlat = size_up_norm(1) * cPI / (nLats - 2 * nGCs); - precision_t lat0 = lower_left_norm(1) * cPI; - arma_vec lat1d(nLats); - - // Latitudes: - // - Make a 1d vector - // - copy it into the 3d cube - for (iLat = 0; iLat < nLats; iLat++) - lat1d(iLat) = lat0 + (iLat - nGCs + 0.5) * dlat; - - for (iLon = 0; iLon < nLons; iLon++) { - for (iAlt = 0; iAlt < nAlts; iAlt++) - geoLat_scgc.subcube(iLon, 0, iAlt, iLon, nLats - 1, iAlt) = lat1d; - } - - // --------------------------------------------- - // Left Sides - edges on left side (no offset left) - // --------------------------------------------- - arma_mat lat2d_left(nLons + 1, nLats); - arma_mat lon2d_left(nLons + 1, nLats); - - for (iLat = 0; iLat < nLats; iLat++) { - for (iLon = 0; iLon < nLons + 1; iLon++) { - lat2d_left(iLon, iLat) = lat0 + (iLat - nGCs + 0.5) * dlat; - lon2d_left(iLon, iLat) = lon0 + (iLon - nGCs) * dlon; - } - } - - for (iAlt = 0; iAlt < nAlts; iAlt++) { - geoLon_Left.slice(iAlt) = lon2d_left; - geoLat_Left.slice(iAlt) = lat2d_left; - } - - // --------------------------------------------- - // Down Sides - edges on down side (no offset lat) - // --------------------------------------------- - arma_mat lat2d_down(nLons, nLats + 1); - arma_mat lon2d_down(nLons, nLats + 1); - - for (iLat = 0; iLat < nLats + 1; iLat++) { - for (iLon = 0; iLon < nLons; iLon++) { - lat2d_down(iLon, iLat) = lat0 + (iLat - nGCs) * dlat; - lon2d_down(iLon, iLat) = lon0 + (iLon - nGCs + 0.5) * dlon; - } - } - - for (iAlt = 0; iAlt < nAlts; iAlt++) { - geoLon_Down.slice(iAlt) = lon2d_down; - geoLat_Down.slice(iAlt) = lat2d_down; - } - - // --------------------------------------------- - // Corner Sides - corner (no offset lat or lon) - // --------------------------------------------- - arma_mat lat2d_corner(nLons + 1, nLats + 1); - arma_mat lon2d_corner(nLons + 1, nLats + 1); - - for (iLat = 0; iLat < nLats + 1; iLat++) { - for (iLon = 0; iLon < nLons + 1; iLon++) { - lat2d_corner(iLon, iLat) = lat0 + (iLat - nGCs) * dlat; - lon2d_corner(iLon, iLat) = lon0 + (iLon - nGCs) * dlon; - } - } - - for (iAlt = 0; iAlt < nAlts + 1; iAlt++) { - geoLon_Corner.slice(iAlt) = lon2d_corner; - geoLat_Corner.slice(iAlt) = lat2d_corner; - } - - report.exit(function); - return; -} - // ---------------------------------------------------------------------- // Create a spherical grid with lon/lat/alt coordinates // ---------------------------------------------------------------------- @@ -748,11 +20,15 @@ void Grid::create_altitudes(Planets planet) { arma_vec alt1d(nAlts); - Inputs::grid_input_struct grid_input = input.get_grid_inputs(); + Inputs::grid_input_struct grid_input; + + grid_input = input.get_grid_inputs(gridType); if (grid_input.IsUniformAlt) { for (iAlt = 0; iAlt < nAlts; iAlt++) - alt1d(iAlt) = grid_input.alt_min + (iAlt - nGeoGhosts) * grid_input.dalt; + // Convert km to m: + alt1d(iAlt) = (grid_input.alt_min + (iAlt - nGeoGhosts) * grid_input.daltKm) * + cKMtoM; } else { json neutrals = planet.get_neutrals(); @@ -775,16 +51,17 @@ void Grid::create_altitudes(Planets planet) { report.print(1, "Making non-uniform altitude grid!"); - if (grid_input.dalt > 0.5) { + if (grid_input.daltScale > 0.5) { if (report.test_verbose(0)) { std::cout << "-----------------------------------------------------\n"; - std::cout << "WARNING: dAlt is set to > 0.5, with non-uniform grid!\n"; - std::cout << " dAlt = " << grid_input.dalt << "\n"; + std::cout << "WARNING: daltScale is set to > 0.5, with non-uniform grid!\n"; + std::cout << " daltScale = " << grid_input.daltScale << "\n"; std::cout << "-----------------------------------------------------\n"; } } - double alt = grid_input.alt_min; + // Convert to km + double alt = grid_input.alt_min * cKMtoM; radius = planet.get_radius(0.0) + alt; precision_t mu = planet.get_mu(); gravity = mu / (radius * radius); @@ -806,13 +83,13 @@ void Grid::create_altitudes(Planets planet) { mass = mass / density; scale_height = cKB * temperature / (mass * gravity); - precision_t dalt = scale_height * grid_input.dalt; + precision_t dalt = scale_height * grid_input.daltScale; precision_t dAltLimiter = dalt * 10.0; // Fills bottom ghost cells with constant dAlt // Fills bottom cell with actual desired bottom altitude for (iAlt = 0; iAlt <= nGeoGhosts; iAlt++) { - alt1d(iAlt) = grid_input.alt_min + (iAlt - nGeoGhosts) * dalt; + alt1d(iAlt) = grid_input.alt_min * cKMtoM + (iAlt - nGeoGhosts) * dalt; if (report.test_verbose(1)) std::cout << "iAlt : " << iAlt @@ -839,7 +116,7 @@ void Grid::create_altitudes(Planets planet) { mass = mass / density; scale_height = cKB * temperature / (mass * gravity); - dalt = scale_height * grid_input.dalt; + dalt = scale_height * grid_input.daltScale; if (dalt > dAltLimiter) dalt = dAltLimiter; @@ -862,67 +139,37 @@ void Grid::create_altitudes(Planets planet) { for (iLon = 0; iLon < nLons; iLon++) { for (iLat = 0; iLat < nLats; iLat++) { geoAlt_scgc.tube(iLon, iLat) = alt1d; + k_center_scgc.tube(iLon, iLat) = alt1d; geoAlt_Below.tube(iLon, iLat) = alt1d_below; + k_edge_scgc.tube(iLon, iLat) = alt1d_below; } } for (iLon = 0; iLon < nLons + 1; iLon++) { - for (iLat = 0; iLat < nLats + 1; iLat++) + for (iLat = 0; iLat < nLats + 1; iLat++) { geoAlt_Corner.tube(iLon, iLat) = alt1d_below; + k_corner_scgc.tube(iLon, iLat) = alt1d_below; + } } - report.exit(function); - return; -} - -// ---------------------------------------------------------------------- -// Corrects xy grid by scaling the R used in xy coordinate generation -// and transformation laws, as in previous generation R = 1. -// This function should only be used when cubesphere is used. -// Assumes radius of planet and altitude are constant -// ---------------------------------------------------------------------- - -void Grid::correct_xy_grid(Planets planet) { - std::string function = "Grid::correct_xy_grid"; - static int iFunction = -1; - report.enter(function, iFunction); - - int64_t iAlt; - - // initialize grid drefx drefy - drefx = arma_vec(nAlts); - drefy = arma_vec(nAlts); - - // Planet.get_radius() takes in latitude - // but at current stage is unimplemented - // Anyway, we use equator radius as assumption for CubeSphere - // CubeSphere must be a perfect sphere!! - precision_t planet_R = planet.get_radius(0); + // All cells on the geographic grid *should* be ok + isTooLowCell = find(geoAlt_scgc < grid_input.alt_min * cKMtoM); + isPhysicalCell = find(geoAlt_scgc >= grid_input.alt_min * cKMtoM); + // get the ghost cell indices on each lat/lon point. + // may be redundant can fill lower with nGCs-1, but this is here for now + arma::uvec theGCs; - // radius of planet + altitude - // just pick alt at (0,0) loction - arma_vec R_Alts = geoAlt_scgc.tube(0, 0) + planet_R; - - for (iAlt = 0; iAlt < nAlts; iAlt++) { - precision_t R = R_Alts(iAlt); - refx_scgc.slice(iAlt) *= R; - refy_scgc.slice(iAlt) *= R; - - // Addition: Get a copy of dx dy - arma_mat curr_refx = refx_scgc.slice(iAlt); - arma_mat curr_refy = refy_scgc.slice(iAlt); - - drefx(iAlt) = curr_refx(1, 0) - curr_refx(0, 0); - drefy(iAlt) = curr_refy(0, 1) - curr_refy(0, 0); - - refx_Left.slice(iAlt) *= R; - refy_Left.slice(iAlt) *= R; - refx_Down.slice(iAlt) *= R; - refy_Down.slice(iAlt) *= R; - refx_Corner.slice(iAlt) *= R; - refy_Corner.slice(iAlt) *= R; + for (iLon = 0; iLon < nLons; iLon++) { + for (iLat = 0; iLat < nLats; iLat++) { + // find *last* cell below alt_min + theGCs = find(geoAlt_scgc.tube(iLon, iLat) < grid_input.alt_min * cKMtoM); + // Get the last element if the col-vec + first_lower_gc(iLon, iLat) = theGCs(theGCs.n_elem - 1); + } } + first_upper_gc.fill(nAlts - nGCs * 2 - 1); + report.exit(function); return; } @@ -941,58 +188,108 @@ bool Grid::init_geo_grid(Quadtree quadtree, report.enter(function, iFunction); bool DidWork = true; - IsGeoGrid = 1; + IsGeoGrid = true; - IsCubeSphereGrid = input.get_is_cubesphere(); + if (iGridShape_ == iCubesphere_) { + report.print(0, "Creating Cubesphere Grid for : " + gridType); - if (input.get_is_cubesphere()) - create_cubesphere_connection(quadtree); - else - create_sphere_connection(quadtree); + if (!Is0D & !Is1Dz) + create_cubesphere_connection(quadtree); - if (input.get_do_restart() & !input.get_is_cubesphere()) { - report.print(1, "Restarting! Reading grid files!"); - DidWork = read_restart(input.get_restartin_dir()); + IsCubeSphereGrid = true; } else { - if (input.get_is_cubesphere()) { - if (input.get_do_restart()) - report.print(0, "Not restarting the grid - it is too complicated!"); + report.print(0, "Creating Spherical Grid for : " + gridType); - create_cubesphere_grid(quadtree); - } else - create_sphere_grid(quadtree); + if (!Is0D & !Is1Dz) + create_sphere_connection(quadtree); - MPI_Barrier(aether_comm); - create_altitudes(planet); + IsCubeSphereGrid = false; + } - init_connection(); + //if (input.get_do_restart() & iGridShape_ != iCubesphere_) { + // report.print(1, "Restarting! Reading grid files!"); + // DidWork = read_restart(input.get_restartin_dir()); + //} else { + if (iGridShape_ == iCubesphere_) + create_cubesphere_grid(quadtree); - DidWork = write_restart(input.get_restartout_dir()); - } + else + create_sphere_grid(quadtree); + + //MPI_Barrier(aether_comm); + create_altitudes(planet); + + // set the altitude of the lower boundary values: + altitude_lower_bc = planet.get_altitude_of_bc(); + + init_connection(); + + //DidWork = write_restart(input.get_restartout_dir()); + //} // Calculate the radius (for spherical or non-spherical) fill_grid_radius(planet); // Correct the reference grid with correct length scale: // (with R = actual radius) - if (input.get_is_cubesphere()) + if (iGridShape_ == iCubesphere_) { correct_xy_grid(planet); + // New functions for equal-angular grid (center, left, down): + report.print(2, "Scaling Cube by Radius"); + scale_cube_by_radius(cubeC); + scale_cube_by_radius(cubeL); + scale_cube_by_radius(cubeD); + report.print(2, "Done Scaling Cube by Radius"); + } + + if (gridType == ionType_) { + report.print(0, "--> Grid is Magnetic, so rotating"); + std::vector llr, xyz, xyzRot1, xyzRot2; + llr.push_back(geoLon_scgc); + llr.push_back(geoLat_scgc); + llr.push_back(radius_scgc); + xyz = transform_llr_to_xyz_3d(llr); + precision_t magnetic_pole_rotation = 265.0 * cDtoR; + precision_t magnetic_pole_tilt = 10.0 * cDtoR; + + // Reverse our dipole rotations: + xyzRot1 = rotate_around_y_3d(xyz, magnetic_pole_tilt); + xyzRot2 = rotate_around_z_3d(xyzRot1, magnetic_pole_rotation); + + // transform back to lon, lat, radius: + llr = transform_xyz_to_llr_3d(xyzRot2); + + geoLon_scgc = llr[0]; + geoLat_scgc = llr[1]; + geoAlt_scgc = llr[2] - planet.get_radius(0.0); + + IsGeoGrid = false; + } + + // Calculate PFPC coordinates (i.e., XYZ from LLR) + calc_xyz(planet); // Calculate grid spacing calc_grid_spacing(planet); //calculate radial unit vector (for spherical or oblate planet) calc_rad_unit(planet); // Calculate gravity (including J2 term, if desired) calc_gravity(planet); - // Calculate magnetic field and magnetic coordinates: fill_grid_bfield(planet); + write_restart(input.get_restartout_dir()); + // Throw a little message for students: report.student_checker_function_name(input.get_is_student(), input.get_student_name(), 4, ""); + // The dipole grid has some variables that need to be set: + IsClosed = false; + setNorthAsDown = false; + setSouthAsDown = false; + report.exit(function); return DidWork; } diff --git a/src/init_mag_grid.cpp b/src/init_mag_grid.cpp new file mode 100644 index 00000000..be4bf6c1 --- /dev/null +++ b/src/init_mag_grid.cpp @@ -0,0 +1,636 @@ +// Copyright 2020, the Aether Development Team (see doc/dev_team.md for members) +// Full license can be found in License.md + +#include + +#include "aether.h" + +// ---------------------------------------------------------------------- +// Create connectivity between the nodes for message passing for dipole +// (this looks a lot like sphere, since they are very related) +// ---------------------------------------------------------------------- + +void Grid::create_dipole_connection(Quadtree quadtree) { + + std::string function = "Grid::create_dipole_connection"; + static int iFunction = -1; + report.enter(function, iFunction); + + IsLatLonGrid = true; + + // Get some coordinates and sizes in normalized coordinates: + arma_vec lower_left_norm = quadtree.get_vect("LL"); + arma_vec middle_norm = quadtree.get_vect("MID"); + arma_vec size_right_norm = quadtree.get_vect("SR"); + arma_vec size_up_norm = quadtree.get_vect("SU"); + + // Move to the next block in 4 directions: + arma_vec down_norm = middle_norm - 0.51 * size_up_norm; + arma_vec up_norm = middle_norm + 0.51 * size_up_norm; + arma_vec left_norm = middle_norm - 0.51 * size_right_norm; + arma_vec right_norm = middle_norm + 0.51 * size_right_norm; + + // The first component could wrap around: + right_norm(0) = fmod(right_norm(0), quadtree.limit_high(0)); + left_norm(0) = fmod((left_norm(0) + quadtree.limit_high(0)), + quadtree.limit_high(0)); + + // These should be the exact edge of the face. + // The from and to processors should get these in the same place, + // so they can be used to match which processor to send / receive info + edge_Xp = middle_norm + size_right_norm / 2.0; + // wrap in longitude: + edge_Xp(0) = fmod(edge_Xp(0), quadtree.limit_high(0)); + edge_Xm = middle_norm - size_right_norm / 2.0; + edge_Yp = middle_norm + size_up_norm / 2.0; + edge_Ym = middle_norm - size_up_norm / 2.0; + // by default, edge_Z isn't even an edge, since most processors should + // not exchange messages in the Z direction. + edge_Z = middle_norm; + + iProcYm = quadtree.find_point(down_norm) + iMember * nGrids; + iProcYp = quadtree.find_point(up_norm) + iMember * nGrids; + iProcXm = quadtree.find_point(left_norm) + iMember * nGrids; + iProcXp = quadtree.find_point(right_norm) + iMember * nGrids; + iProcZ = iProc; + + iRoot = quadtree.find_root(middle_norm); + iRootYm = quadtree.find_root(down_norm); + iRootYp = quadtree.find_root(up_norm); + iRootXm = quadtree.find_root(left_norm); + iRootXp = quadtree.find_root(right_norm); + iRootZ = iRoot; + + // If we are a closed field-line, then we want to exchange messages + // along the Z direction, which turns out to be the same processor + // as the Y direction, so just take that one: + IsClosed = false; + setNorthAsDown = false; + setSouthAsDown = false; + + if ((middle_norm(1) < 0) && (up_norm(1) > 0)) { + // We are in the south and need to pass to the north: + iRootZ = iRootYp; + iProcZ = iProcYp; + edge_Z = edge_Yp; + // To make the point unique, we need to alter the edge location + // otherwise the message passing will get confused. Since the + // points are "higher" than the other edges, let's just add some + // to the 3rd dimension: + edge_Z(2) = 5.0; + // Let set_BCs know which side to use as BCs + IsClosed = true; + setNorthAsDown = true; + } + + if ((middle_norm(1) > 0) && (down_norm(1) < 0)) { + // We are in the north and need to pass to the south: + iRootZ = iRootYm; + iProcZ = iProcYm; + edge_Z = edge_Ym; + // See note above... + edge_Z(2) = 5.0; + // Let set_BCs know which side to use as BCs + IsClosed = true; + setSouthAsDown = true; + } + + // Check if touching South Pole: + if (lower_left_norm(1) == quadtree.limit_low(1)) { + DoesTouchSouthPole = true; + + // edges need to be adjusted to deal with longitudes, since the + // pole will 180deg different for the from and to processors + if (edge_Ym(0) < 1.0) + edge_Ym(0) += 0.5; + else + edge_Ym(0) -= 0.5; + } + + // Check if touching North Pole: + if (lower_left_norm(1) + size_up_norm(1) == quadtree.limit_high(1)) { + DoesTouchNorthPole = true; + + // edge need to be adjusted to deal with longitudes, since the + // pole will 180deg different for the from and to processors + if (edge_Yp(0) < 1.0) + edge_Yp(0) += 0.5; + else + edge_Yp(0) -= 0.5; + } + + if (report.test_verbose(2)) + std::cout << "connectivity : " + << " iProc : " << iProc << "\n" + << " isnorth : " << DoesTouchNorthPole << "\n" + << " issouth : " << DoesTouchSouthPole << "\n" + << " iProcYm : " << iProcYm << "\n" + << " iProcYp : " << iProcYp << "\n" + << " iProcXm : " << iProcXm << "\n" + << " iProcXp : " << iProcXp << "\n"; + + report.exit(function); + return; +} + + +// ---------------------------------------------------------------------- +// Routine to convert p and q to r and theta. Can be solved iteratively, +// or with approach from (Swisdak, 2006), who solved it analytically: +// https://arxiv.org/pdf/physics/0606044 +// +// ---------------------------------------------------------------------- + +std::pair qp_to_r_theta(precision_t q, + precision_t p) { + + // return quanties + precision_t r, theta; + // Intermediate quantities: + precision_t term0, term1, term2, term3; + + term0 = 256.0 / 27.0 * pow(q, 2.0) * pow(p, 4.0); + term1 = pow((1.0 + sqrt(1.0 + term0)), 2.0 / 3.0); + term2 = pow(term0, 1.0 / 3.0); + term3 = 0.5 * pow(((pow(term1, 2) + term1 * term2 + pow(term2, 2)) / term1), + 3.0 / 2.0); + + r = p * (4.0 * term3) / ((1.0 + term3) * (1.0 + sqrt(2.0 * term3 - 1.0))); + + // now that r is determined we can solve for theta + // theta = asin(sqrt(r/p)); + theta = acos(q * pow(r, 2.0)); + // Then make sure its the correct sign & direction (not colatitude) + theta = cPI / 2 - theta; + + return {r, theta}; +} + +// ---------------------------------------------------------------------- +// Initialize the dipole grid. +// - inputs (min_apex, min_alt, LatStretch, FieldLineStretch, max_lat_dipole) +// are read from input files. And the numbers of each coordinate. +// - nLats must be even!! +// ---------------------------------------------------------------------- +bool Grid::init_dipole_grid(Quadtree quadtree_ion, Planets planet) { + + bool DidWork = true; + + std::string function = "Grid::init_dipole_grid"; + static int iFunction = -1; + report.enter(function, iFunction); + + // turn the switch on! + IsGeoGrid = false; + IsMagGrid = true; + IsCubeSphereGrid = false; + IsDipole = true; + + report.print(0, "Creating inter-node dipole connections for: " + gridType); + + if (!Is0D & !Is1Dz) + create_dipole_connection(quadtree_ion); + + report.print(0, "Creating Dipole Grid for: " + gridType); + + report.print(3, "Getting grid inputs for dipole grid"); + + Inputs::grid_input_struct grid_input = input.get_grid_inputs(gridType); + + // Number of ghost cells: + int64_t nGCs = get_nGCs(); + + // Get inputs: + + precision_t min_lat = grid_input.lat_min; + precision_t max_lat = grid_input.lat_max; + + precision_t min_alt = grid_input.alt_min * cKMtoM; + precision_t max_alt = grid_input.alt_max * cKMtoM; + + // Normalize inputs to planet radius... (update one day to support oblate Planet) + // Here we are using the equatorial radius. + precision_t planetRadius = planet.get_radius(0.0); + // Altitude to begin modeling, normalized to planet radius + precision_t min_alt_re = (min_alt + planetRadius) / planetRadius; + precision_t max_alt_re = (max_alt + planetRadius) / planetRadius; + + // set the altitude of the lower boundary from the planet file + // -- this is used for setting densities hydrostatically. + altitude_lower_bc = planet.get_altitude_of_bc(); + + if (nAlts % 2 != 0) { + report.error("nAlts must be even!"); + DidWork = false; + } + + // Get some coordinates and sizes in normalized coordinates: + arma_vec lower_left_norm = quadtree_ion.get_vect("LL"); // origin + arma_vec size_right_norm = quadtree_ion.get_vect("SR"); // lon_lims + arma_vec size_up_norm = quadtree_ion.get_vect("SU"); // lat_extent + report.print(3, "Got all settings. Initializing longitudes."); + + precision_t dlon = size_right_norm(0) * cPI / (nLons - 2 * nGCs); + precision_t lon0 = lower_left_norm(0) * cPI; + arma_vec lon1d(nLons); + + arma_vec lon1dLeft(nLons + 1); + + // If we are not doing anything in the lon direction, then set dlon to + // something reasonable: + if (!HasXdim) + dlon = 1.0 * cDtoR; + + // Dimension iterators + int64_t iLon, iLat, iAlt; + + ///////////////// + // Longitudes: // + ///////////////// + + // - Make a 1d vector + // - Copy it into the 3d cube + for (iLon = 0; iLon < nLons; iLon++) { + lon1d(iLon) = lon0 + (iLon - nGCs + 0.5) * dlon; + lon1dLeft(iLon) = lon0 + (iLon - nGCs) * dlon; // corners + } + + lon1dLeft(nLons) = lon0 + (nLons - nGCs) * dlon; + + for (iLat = 0; iLat < nLats; iLat++) { + for (iAlt = 0; iAlt < nAlts; iAlt++) { + // centers: + magLon_scgc.subcube(0, iLat, iAlt, nLons - 1, iLat, iAlt) = lon1d; + i_center_scgc.subcube(0, iLat, iAlt, nLons - 1, iLat, iAlt) = lon1d; + // left edges + magLon_Left.subcube(0, iLat, iAlt, nLons, iLat, iAlt) = lon1dLeft; + i_edge_scgc.subcube(0, iLat, iAlt, nLons, iLat, iAlt) = lon1dLeft; + } + } + + for (iLat = 0; iLat < nLats + 1; iLat ++) { + for (iAlt = 0; iAlt < nAlts + 1; iAlt++) { + // corners + magLon_Corner.subcube(0, iLat, iAlt, nLons, iLat, iAlt) = lon1dLeft; + i_corner_scgc.subcube(0, iLat, iAlt, nLons, iLat, iAlt) = lon1dLeft; + } + } + + report.print(3, "Done initializing longitudes, moving to latitude"); + + //////////////// + // Latitudes: // + //////////////// + + // Invariant latitude is evenly spaced across each block. + // Latitude limits are adjusted here, not in quadtree + + // - From the quadtree, we see the origin & extent of this block + // - That is normalized, without any influence from settings + // - Scale it with the latitude limits provided by the user + // - Put invariant latitudes down, linearly, between this range. + + // This has to be done differently in the north & south hemisphere. + // So note if we are in the southern hemisphere and invert it afterwards. + + bool isSouth = false; + precision_t lat_origin = lower_left_norm(1); + + if (lat_origin < -0.01) { // handles some imprecision + isSouth = true; + lat_origin = -1.0 * lat_origin - size_up_norm(1); + } + + precision_t lat0 = 2.0 * (max_lat - min_lat) * lat_origin; + precision_t dlat = 2.0 * size_up_norm(1) * (max_lat - min_lat) / + (nLats - nGCs * 2); + + arma_vec lat1d(nLats); + arma_vec lat1dDown(nLats + 1); + + for (iLat = 0; iLat < nLats; iLat++) { + lat1d(iLat) = lat0 + (iLat - nGCs + 0.5) * dlat + min_lat; // centers + lat1dDown(iLat) = lat0 + (iLat - nGCs) * dlat + min_lat; // corners & edges + } + + lat1dDown(nLats) = lat0 + (nLats - nGCs) * dlat + min_lat; // last corner + + // At the pole: + // - put last ghost cell's corner at 89.9 degrees latitude + // - put 2nd to last corner 1/2 way between 89.9 and the last real corner + // - evenly space the ghost cells between these. + + // Check if we're touching the pole, need to look at original quadtree values + if ((lower_left_norm(1) + size_up_norm(1) > 0.49) // north pole + || (lower_left_norm(1) < -0.49)) { // south pole + lat1dDown(nLats) = 89.9 * cDtoR; + lat1dDown(nLats - 1) = (lat1dDown(nLats) + lat1dDown(nLats - 2)) / 2.0; + lat1d(nLats - 1) = (lat1dDown(nLats) + lat1dDown(nLats - 1)) / 2.0; + lat1d(nLats - 2) = (lat1dDown(nLats - 1) + lat1dDown(nLats - 2)) / 2.0; + + if (sign(lower_left_norm(1)) > 0) + DoesTouchNorthPole = true; + else + DoesTouchSouthPole = true; + } + + // l-shells of centers + arma_vec Pcenters = min_alt_re / pow(sin(cPI / 2 - lat1d), 2); + + // l-shells of corners + arma_vec Pcorners = min_alt_re / pow(sin(cPI / 2 - lat1dDown), 2); + + report.print(3, "Done initializing invariant latitudes"); + + //////////////// + // Altitudes: // + //////////////// + + // - Trace each field line from q_min to q_max. Identical for all field lines within this block. + // - Obtain the minimum "altitude" (q) from the highest latitude + // field line on each block + // - Obtain the maximum "altitude" from the lowest latitude *open* field line. + // (closed field lines are treated differently) + // - In other words, since we are tracing from q_min to q_max, use the highest field + // line to get q_min and the lowest for q_max. This forces all field lines to + // start & end within the bounds. + // - Evenly space all points' "altitude" linear across these two values + // - Altitude here refers to the dipole q-coordinate - cos(magLat)/r^2 + // - Blocks touching a pole or the equator are treated differently + + // Field lines close if: + // - touching the (magnetic) equator + // - minimum Lshell in this block is < max_alt (the q-value would be undefined) + + precision_t q_min; + + if (Pcorners.min() < max_alt_re) // invalid q's - Lshell < max_alt + IsClosed = true; + + if (lat_origin < 0.01) // equator, with some imprecision + IsClosed = true; + + if (IsClosed) + q_min = 0; // q=0 at equator (for closed blocks) + else + // invLats are still all in North Hemisphere & increasing. + // Use minimum p & alt to solve for q + // q = sqrt((1-r/p)/r^4) + q_min = pow(((1 - max_alt_re / Pcenters(0)) / pow(max_alt_re, 4.0)), 0.5); + + // Trace each field line up to q_max, obtained from the lowest field line in the block + precision_t q_max = pow(((1 - min_alt_re / Pcenters(nLats - 1)) / pow( + min_alt_re, + 4.0)), 0.5); + + // Counter-intuitive, but the maximum value of q is actually where we start + // (lowest altitude), since q=0 at equator. + precision_t delQ = (q_max - q_min) / (nAlts - nGCs * 2.0); + + arma_vec magQ1d(nAlts); + arma_vec magQ_corner_1d(nAlts + 1); + + for (iAlt = 0; iAlt < nAlts; iAlt ++) { + magQ1d(iAlt) = q_min + (iAlt - nGCs + 0.5) * delQ; + magQ_corner_1d(iAlt) = q_min + (iAlt - nGCs) * delQ; + } + + magQ_corner_1d(nAlts) = q_min + (nAlts - nGCs) * delQ; + + report.print(3, + "Done generating points for magnetic grid. Plugging everything in"); + + //////////////////////////// + // That is the grid made. // + //////////////////////////// + // Now to store everything.... + // It's all done at the end to make things more simple earlier, but that makes this part messier. + + // temp holding names: + std::pair rtheta, rtheta_edge; + precision_t radius, radius_edge, theta, theta_edge, invLat, invLat_edge, + pcenter, pedge, qcenter, qedge; + int64_t iAlt2; + + // We can solve for (r, theta) for each point on the (q,p) grid. Do that & store: + // Currently the grid is symmetric in longitude. + // Interte through centers & edges first, then do corners afterwards + for (iLat = 0; iLat < nLats; iLat ++) { + for (iAlt = 0; iAlt < nAlts; iAlt++) { + // We have to reverse & negate things; want latitudes from south->north + // and altitude low->high. + // - Altitude is in the reverse direction in both hemispheres. + // - Latitude is reversed in southern hemisphere. + iAlt2 = nAlts - iAlt - 1; + + if (isSouth) { + qcenter = magQ1d(iAlt); + pcenter = Pcenters(nLats - iLat - 1); + + qedge = magQ_corner_1d(iAlt); + pedge = Pcorners(nLats - iLat - 1); + + invLat = lat1d(nLats - iLat - 1) * -1; + invLat_edge = lat1dDown(nLats - iLat - 1) * -1; + + rtheta = qp_to_r_theta(qcenter, pcenter); + rtheta_edge = qp_to_r_theta(qcenter, pcenter); + + // Flip hemisphere of latitude & q (cannot be done before qp_to_rtheta) + radius = rtheta.first; + theta = rtheta.second * -1.0; + qcenter *= -1.0; + + radius_edge = rtheta_edge.first; + theta_edge = rtheta.second * -1.0; + qedge *= 1.0; + } else { + qcenter = magQ1d(iAlt); + pcenter = Pcenters(iLat); + + qedge = magQ_corner_1d(iAlt); + pedge = Pcorners(iLat); + + invLat = lat1d(iLat); + invLat_edge = lat1dDown(iLat); + + rtheta = qp_to_r_theta(qcenter, pcenter); + rtheta_edge = qp_to_r_theta(qedge, pedge); + + radius = rtheta.first; + theta = rtheta.second; + + radius_edge = rtheta_edge.first; + theta_edge = rtheta_edge.second; + } + + for (iLon = 0; iLon < nLons; iLon ++) { + magLat_scgc(iLon, iLat, iAlt2) = theta; + magLat_Down(iLon, iLat, iAlt2) = theta_edge; + + magAlt_scgc(iLon, iLat, iAlt2) = radius; + magAlt_Below(iLon, iLat, iAlt2) = radius_edge; + + magInvLat_scgc(iLon, iLat, iAlt2) = invLat; + + magP_scgc(iLon, iLat, iAlt2) = pcenter; + j_center_scgc(iLon, iLat, iAlt2) = pcenter; + j_edge_scgc(iLon, iLat, iAlt2) = pedge; + + magQ_scgc(iLon, iLat, iAlt2) = qcenter; + k_center_scgc(iLon, iLat, iAlt2) = qcenter; + k_edge_scgc(iLon, iLat, iAlt2) = qedge; + + } + } + } + + report.print(3, "Centers are in"); + + precision_t radius_corner, theta_corner, invLat_corner, + pcorner, qcorner; + + for (iLat = 0; iLat < nLats + 1; iLat ++) { + for (iAlt = 0; iAlt < nAlts + 1; iAlt++) { + iAlt2 = nAlts - iAlt; + + // Same process as the centers & edges (above) + if (isSouth) { + qcorner = magQ_corner_1d(iAlt); + pcorner = Pcorners(nLats - iLat); + invLat_corner = lat1dDown(nLats - iLat) * -1.0; + rtheta = qp_to_r_theta(qcorner, pcorner); + + radius_corner = rtheta.first; + theta_corner = rtheta.second * -1.0; + qcorner *= -1.0; + } else { + qcorner = magQ_corner_1d(iAlt); + pcorner = Pcorners(iLat); + invLat_corner = lat1dDown(iLat); + rtheta = qp_to_r_theta(qcorner, pcorner); + radius_corner = rtheta.first; + theta_corner = rtheta.second; + } + + for (iLon = 0; iLon < nLons + 1; iLon ++) { + magLat_Corner(iLon, iLat, iAlt2) = theta_corner; + magAlt_Corner(iLon, iLat, iAlt2) = radius_corner; + + magInvLat_Corner(iLon, iLat, iAlt2) = invLat_corner; + + magP_Corner(iLon, iLat, iAlt2) = pcorner; + j_corner_scgc(iLon, iLat, iAlt2) = pcorner; + + magQ_Corner(iLon, iLat, iAlt2) = qcorner; + k_corner_scgc(iLon, iLat, iAlt2) = qcorner; + } + } + } + + report.print(3, "Corners done too"); + + // all distances, so far, are in units of planet radii, turn into meters. + // Except for Q, leave that dimensionless. + magP_scgc *= planetRadius; + magP_Corner *= planetRadius; + magQ_Corner *= planetRadius; + magQ_scgc *= planetRadius; + + k_center_scgc *= planetRadius; + k_edge_scgc *= planetRadius; + k_corner_scgc *= planetRadius; + + // Convert to geographic, rotating and (maybe) shifting the dipole grid. + std::vector llr = mag_to_geo(magLon_scgc, magLat_scgc, + magAlt_scgc * planetRadius, + planet); + + geoLon_scgc = llr[0]; + geoLat_scgc = llr[1]; + geoAlt_scgc = llr[2] - planetRadius; + report.print(4, + "Done dipole -> geographic transformations for the dipole grid centers."); + + std::vector llr_corner = mag_to_geo(magLon_Corner, magLat_Corner, + magAlt_Corner * planetRadius, planet); + geoLon_Corner = llr_corner[0]; + geoLat_Corner = llr_corner[1]; + geoAlt_Corner = llr_corner[2] - planetRadius; + report.print(4, + "Done dipole -> geographic transformations for the dipole grid centers."); + + // Fill grid radius, radius2, radius2i + // fill_grid_radius uses radius of the planet & geo_alt + // That would be redundant here since we already know the radius (magAlt) + // This is NOT yet offset: to offset do magAlt + dipole_cnter_m + radius_scgc = magAlt_scgc * planetRadius; + radius2_scgc = radius_scgc % radius_scgc; + radius2i_scgc = 1.0 / radius2_scgc; + + // Figure out what direction is radial: + // This is all in the dipole's i,j,k coordinate system... + rad_unit_vcgc = make_cube_vector(nLons, nLats, nAlts, 3); + gravity_vcgc = make_cube_vector(nLons, nLats, nAlts, 3); + + for (int iV = 0; iV < 3; iV++) { + rad_unit_vcgc[iV].zeros(); + gravity_vcgc[iV].zeros(); + } + + // Gravity should be negative in the k direction, since the grid switches directions. + // j direction should switch signs when crossing the equator (+ in south, - in north) + rad_unit_vcgc[1] = sign(magLat_scgc) % cos(magLat_scgc) + / pow(abs(1.0 + 3.0 * sin(magLat_scgc) % sin(magLat_scgc)), 0.5); + rad_unit_vcgc[2] = - 2.0 * abs(sin(magLat_scgc)) + / pow(abs(1.0 + 3.0 * sin( magLat_scgc) % sin(magLat_scgc)), 0.5); + + precision_t mu = planet.get_mu(); + gravity_vcgc[1] = mu * rad_unit_vcgc[1] % radius2i_scgc; + gravity_vcgc[2] = mu * rad_unit_vcgc[2] % radius2i_scgc; + gravity_potential_scgc.set_size(nX, nY, nAlts); + gravity_potential_scgc.zeros(); + + gravity_mag_scgc = mu / pow(radius_scgc, 2); + + report.print(4, "Done gravity calculations for the dipole grid."); + + calc_dipole_grid_spacing(planet); + + ////////////////////////////////////// + // Generate mask for physical cells // + ////////////////////////////////////// + + isTooLowCell = find(geoAlt_scgc < grid_input.alt_min * cKMtoM); + isPhysicalCell = find(geoAlt_scgc >= grid_input.alt_min * cKMtoM); + UseThisCell.elem(isTooLowCell).fill(false); + + for (iLon = 0; iLon < nLons; iLon++) { + for (iLat = 0; iLat < nLats; iLat++) { + // find *last* cell below alt_min + first_lower_gc(iLon, iLat) = find(geoAlt_scgc.tube(iLon, iLat) < min_alt).max(); + } + } + + if (first_lower_gc.min() < nGCs - 1 || + first_lower_gc.max() > nAlts - nGCs - 1) { + report.error("Invalid magnetic grid!! Either:"); + report.error(" - Lowest latitude field line is entirely below min_alt"); + report.error(" - Highest altitude field line is above min_alt"); + report.error("This should not happen. Something is terribly wrong. Goodbye."); + return false; + } + + first_upper_gc.fill(nAlts - nGCs * 2 - 1); + + report.print(4, "Done altitude spacing for the dipole grid."); + + // Calculate magnetic field and magnetic coordinates: + fill_grid_bfield(planet); + report.print(4, "Done filling dipole grid with b-field!"); + + write_restart(input.get_restartout_dir()); + + report.exit(function); + return DidWork; +} diff --git a/src/init_parallel.cpp b/src/init_parallel.cpp index 3acaae76..4da0c6a1 100644 --- a/src/init_parallel.cpp +++ b/src/init_parallel.cpp @@ -22,8 +22,9 @@ std::string cMember; std::string cGrid; MPI_Comm aether_comm; +MPI_Comm aether_member_comm; -bool init_parallel(Quadtree &quadtree) { +bool init_parallel(Quadtree &quadtree, Quadtree &quadtree_ion) { bool DidWork = true; @@ -54,13 +55,14 @@ bool init_parallel(Quadtree &quadtree) { << nProcsPerNode << "\n"; quadtree.max_depth = round(log(nProcsPerNode) / log(4)); + quadtree_ion.max_depth = round(log(nProcsPerNode) / log(4)); if (report.test_verbose(2)) std::cout << "Quadtree max depth : " << quadtree.max_depth << "\n"; // Check to see if we have enough processors to do this stuff: - int nBlocksLonGeo = pow(2, quadtree.max_depth); // input.get_nBlocksLonGeo(); - int nBlocksLatGeo = pow(2, quadtree.max_depth); // input.get_nBlocksLatGeo(); + int nBlocksLonGeo = pow(2, quadtree.max_depth); + int nBlocksLatGeo = pow(2, quadtree.max_depth); nGrids = nBlocksLonGeo * nBlocksLatGeo * quadtree.nRootNodes; int nProcsNeeded = nMembers * nGrids; @@ -70,6 +72,11 @@ bool init_parallel(Quadtree &quadtree) { iMember = iProc / nGrids; iGrid = iProc % nGrids; + // Need a communicator for each ensemble member, this allows + // communication between all blocks in one ensemble member without + // the others getting the messages: + MPI_Comm_split(aether_comm, iMember, iGrid, &aether_member_comm); + if (report.test_verbose(2)) std::cout << "iProc : " << iProc << "; iMember : " << iMember @@ -98,7 +105,8 @@ bool init_parallel(Quadtree &quadtree) { if (report.test_verbose(2)) std::cout << "seed : " << seed << "\n"; - quadtree.build(); + quadtree.build(neutralType_); + quadtree_ion.build(ionType_); } else { if (iProc == 0) { diff --git a/src/inputs.cpp b/src/inputs.cpp index 528da15b..74c7ed2c 100644 --- a/src/inputs.cpp +++ b/src/inputs.cpp @@ -29,8 +29,8 @@ Inputs::Inputs(Times &time) { // Grid Defaults: geo_grid_input.alt_file = ""; geo_grid_input.IsUniformAlt = true; - geo_grid_input.alt_min = 100.0 * 1000.0; - geo_grid_input.dalt = 5.0 * 1000.0; + geo_grid_input.alt_min = 100.0; + geo_grid_input.daltKm = 5.0; nLonsGeo = 12; nLatsGeo = 20; @@ -64,6 +64,12 @@ Inputs::Inputs(Times &time) { // Now read the input file: isOk = read_inputs_json(time); + if (report.test_verbose(1)) { + std::cout << "Settings read in:\n"; + std::cout << "iProc : " << iProc << "\n"; + std::cout << std::setw(2) << settings; + } + if (!isOk && iProc == 0) std::cout << "Error in reading input file!\n"; } @@ -85,14 +91,13 @@ bool Inputs::write_restart() { return didWork; } - // ----------------------------------------------------------------------- // General check functions to see if keys exist: // check settings and throw invalid_argument error // if the setting doesn't exist // ----------------------------------------------------------------------- -//dummy values, to use if the settings are not set +// dummy values, to use if the settings are not set int dummy_int = -1; float dummy_float = -1; std::string dummy_string = "unknown"; @@ -102,17 +107,17 @@ std::string dummy_string = "unknown"; bool Inputs::check_settings(std::string key1, std::string key2) { - if (report.test_verbose(2)) + if (report.test_verbose(10)) std::cout << "checking setting : " << key1 << " and " << key2 << "\n"; - //try to find the keys first + // try to find the keys first if (settings.find(key1) != settings.end()) { if (settings.at(key1).find(key2) != settings.at(key1).end()) isOk = true; } else - //if we haven't found the keys print a message & set IsOk to false + // if we haven't found the keys print a message & set IsOk to false isOk = false; if (!isOk) { @@ -127,17 +132,17 @@ bool Inputs::check_settings(std::string key1, // 1 key: bool Inputs::check_settings(std::string key1) { - if (report.test_verbose(2)) + if (report.test_verbose(10)) std::cout << "checking setting : " << key1 << "\n"; // try to find the keys first if (settings.find(key1) != settings.end()) isOk = true; else - //if we haven't found the key print a message & set IsOk to false + // if we haven't found the key print a message & set IsOk to false isOk = false; - //perturb is non-essential, otherwise print error message + // perturb is non-essential, otherwise print error message if (!isOk && key1 != "Perturb") { report.error("Error in setting : " + key1); std::cout << "Missing setting called! [" << key1 << "]\n"; @@ -168,6 +173,22 @@ std::vector Inputs::get_setting_intarr(std::string key1) { return value; } +std::vector Inputs::get_setting_intarr(std::string key1, + std::string key2) { + std::vector value; + + if (check_settings(key1, key2)) { + int nPts = settings.at(key1).at(key2).size(); + isOk = true; + + for (int i = 0; i < nPts; i++) + value.push_back(settings.at(key1).at(key2).at(i)); + } else + isOk = false; + + return value; +} + // ----------------------------------------------------------------------- // A specific length int vector @@ -344,8 +365,10 @@ json Inputs::get_setting_json(std::string key1) { if (settings.find(key1) != settings.end()) value = settings.at(key1); else { - isOk = false; - report.error("Error in setting : " + key1); + if (key1 != "Perturb") { + isOk = false; + report.error("Error in setting : " + key1); + } } return value; @@ -365,8 +388,10 @@ json Inputs::get_setting_json(std::string key1, isOk = false; report.error("Error in setting : " + key1 + " : " + key2); } else { - isOk = false; - report.error("Error in setting : " + key1); + if (key1 != "Satellites") { + isOk = false; + report.error("Error in setting : " + key1); + } } return value; @@ -409,38 +434,69 @@ precision_t Inputs::check_settings_pt(std::string key1, // ----------------------------------------------------------------------- // Return characteristics of the grid that are entered by the user +// gridtype needs to be "neuGrid" or "ionGrid" // ----------------------------------------------------------------------- -Inputs::grid_input_struct Inputs::get_grid_inputs() { - // First Get Values: - geo_grid_input.alt_file = check_settings_str("GeoGrid", "AltFile"); +Inputs::grid_input_struct Inputs::get_grid_inputs(std::string gridtype) { - if (check_settings("GeoGrid", "IsUniformAlt")) { - bool reality = get_setting_bool("GeoGrid", "IsUniformAlt"); - geo_grid_input.IsUniformAlt = get_setting_bool("GeoGrid", "IsUniformAlt"); - } else - geo_grid_input.IsUniformAlt = true; + Inputs::grid_input_struct grid_specs; + + std::vector min_max; + + grid_specs.shape = check_settings_str(gridtype, "Shape"); + grid_specs.nX = get_setting_int(gridtype, "nLonsPerBlock"); + grid_specs.nY = get_setting_int(gridtype, "nLatsPerBlock"); + grid_specs.nZ = get_setting_int(gridtype, "nAlts"); + + min_max = get_setting_intarr(gridtype, "LonRange"); + grid_specs.lon_min = min_max[0] * cDtoR; + grid_specs.lon_max = min_max[1] * cDtoR; + + min_max = get_setting_intarr(gridtype, "LatRange"); + grid_specs.lat_min = min_max[0] * cDtoR; + grid_specs.lat_max = min_max[1] * cDtoR; + + // The rest of the settings are different for mag/geo grids, + // First take the magnetic options, then "else" should be (cube-)sphere + // - This checks if "dipole" is in shape, to account for the # of root nodes. + if (grid_specs.shape.find("dipole") != std::string::npos) { + // Invariant latitude range (of real corners) is specified with max/min. + // max alt of open field lines, and min alt, is set in AltRange + min_max = get_setting_intarr(gridtype, "AltRange"); + grid_specs.alt_min = min_max[0]; + grid_specs.alt_max = min_max[1]; - geo_grid_input.alt_min = check_settings_pt("GeoGrid", "MinAlt"); - geo_grid_input.dalt = check_settings_pt("GeoGrid", "dAlt"); - geo_grid_input.lat_min = check_settings_pt("GeoGrid", "MinLat"); - geo_grid_input.lat_max = check_settings_pt("GeoGrid", "MaxLat"); - geo_grid_input.lon_min = check_settings_pt("GeoGrid", "MinLon"); - geo_grid_input.lon_max = check_settings_pt("GeoGrid", "MaxLon"); + precision_t minDipoleLat = 10.0 * cDtoR; + precision_t maxDipoleLat = 80.0 * cDtoR; - // Second Change Units - geo_grid_input.alt_min = geo_grid_input.alt_min * cKMtoM; - geo_grid_input.lat_min = geo_grid_input.lat_min * cDtoR; - geo_grid_input.lat_max = geo_grid_input.lat_max * cDtoR; - geo_grid_input.lon_min = geo_grid_input.lon_min * cDtoR; - geo_grid_input.lon_max = geo_grid_input.lon_max * cDtoR; + if (grid_specs.lat_min < minDipoleLat) { + grid_specs.lat_min = minDipoleLat; + report.print(0, "Error in setting min lat for " + + grid_specs.shape + + " - moving to 10 deg"); + report.error("Setting min dipole lat to 10.0"); + } - // If the grid is uniform, dalt is in km, else it is in fractions of - // scale height: - if (geo_grid_input.IsUniformAlt) - geo_grid_input.dalt = geo_grid_input.dalt * cKMtoM; + if (grid_specs.lat_max > maxDipoleLat) { + grid_specs.lat_max = maxDipoleLat; + report.print(0, "Error in setting max lat for " + + grid_specs.shape + + " - moving to 80 deg"); + report.error("Setting max dipole lat to 80.0"); + } - return geo_grid_input; + } else { + grid_specs.alt_min = check_settings_pt(gridtype, "MinAlt"); + grid_specs.alt_file = check_settings_str(gridtype, "AltFile"); + grid_specs.IsUniformAlt = get_setting_bool(gridtype, "IsUniformAlt"); + + if (grid_specs.IsUniformAlt) + grid_specs.daltKm = check_settings_pt(gridtype, "dAltkm"); + else + grid_specs.daltScale = check_settings_pt(gridtype, "dAltScale"); + } + + return grid_specs; } // ----------------------------------------------------------------------- @@ -510,10 +566,12 @@ std::vector Inputs::get_omniweb_files() { precision_t Inputs::get_dt_output(int iOutput) { precision_t value = 0.0; - int nOutputs = settings.at("Outputs").at("type").size(); + int nOutputs = settings.at("Outputs").at("dt").size(); if (iOutput < nOutputs) value = settings.at("Outputs").at("dt").at(iOutput); + else + report.error("Output Error; more output types than dt's provided."); return value; } @@ -564,6 +622,34 @@ std::string Inputs::get_logfile() { return logfile; } +// ----------------------------------------------------------------------- +// Return log file name +// ----------------------------------------------------------------------- + +std::string Inputs::get_logfile(int64_t iLog) { + std::string logfile = "log.txt"; + + if (check_settings("Logfile", "name")) { + int64_t nLogs = settings.at("Logfile").at("name").size(); + + if (nLogs == 1) { + logfile = settings.at("Logfile").at("name").at(iLog); + // logfile = get_setting_str("Logfile", "name"); + } else { + if (iLog > nLogs - 1) { + report.error("Error in getting logfile name!"); + logfile = settings.at("Logfile").at("name").at(nLogs - 1); + } else + logfile = settings.at("Logfile").at("name").at(iLog); + } + } + + if (nMembers > 1) + logfile = add_cmember(logfile); + + return logfile; +} + // ----------------------------------------------------------------------- // Return the name of specified variables as a vector // ----------------------------------------------------------------------- @@ -690,6 +776,57 @@ bool Inputs::get_O_cooling() { return get_setting_bool("Sources", "Neutrals", "O_cool"); } +// ----------------------------------------------------------------------- +// Return whether to include the photoelectron heating +// ----------------------------------------------------------------------- + +bool Inputs::get_do_photoelectron_heating() { + return get_setting_bool("Sources", "Ions", "IncludePhotoElectronHeating"); +} + +// ----------------------------------------------------------------------- +// Return whether to include (all) ionization heating +// ----------------------------------------------------------------------- + +bool Inputs::get_do_ionization_heating() { + return get_setting_bool("Sources", "Ions", "IncludeIonizationHeating"); +} + +// ----------------------------------------------------------------------- +// Return whether to include electron-ion collisional heating +// ----------------------------------------------------------------------- + +bool Inputs::get_do_electron_ion_collisional_heating() { + return get_setting_bool("Sources", "Ions", + "IncludeElectronIonCollisionalHeating"); +} + +// ----------------------------------------------------------------------- +// Return whether to include electron-neutral elastic collisional heating +// ----------------------------------------------------------------------- + +bool Inputs::get_do_electron_neutral_elastic_collisional_heating() { + return get_setting_bool("Sources", "Ions", + "IncludeElectronNeutralElasticCollisionalHeating"); +} + +// ----------------------------------------------------------------------- +// Return whether to include electron-neutral inelastic collisional heating +// ----------------------------------------------------------------------- + +bool Inputs::get_do_electron_neutral_inelastic_collisional_heating() { + return get_setting_bool("Sources", "Ions", + "IncludeElectronNeutralInelasticCollisionalHeating"); +} + +// ----------------------------------------------------------------------- +// Return whether to include heating from thermoelectric currents +// ----------------------------------------------------------------------- + +bool Inputs::get_do_thermoelectric_heating() { + return get_setting_bool("Sources", "Ions", "IncludeThermoelectricHeating"); +} + // ----------------------------------------------------------------------- // Return centripetal acceleration // ----------------------------------------------------------------------- @@ -698,6 +835,14 @@ bool Inputs::get_cent_acc() { return get_setting_bool("Sources", "Grid", "Cent_acc"); } +// ----------------------------------------------------------------------- +// Return coriolis acceleration +// ----------------------------------------------------------------------- + +bool Inputs::get_use_coriolis() { + return get_setting_bool("Sources", "Grid", "Coriolis"); +} + // ----------------------------------------------------------------------- // Return restart OUT directory // ----------------------------------------------------------------------- @@ -791,13 +936,22 @@ std::string Inputs::get_diffuse_auroral_model() { } // ----------------------------------------------------------------------- -// Return the EUV model used (EUVAC only option now) +// Return the EUV model used (EUVAC, NEUVAC, FISM, etc.) // ----------------------------------------------------------------------- std::string Inputs::get_euv_model() { return mklower(check_settings_str("Euv", "Model")); } + +// ----------------------------------------------------------------------- +// Return the FISM data file +// ----------------------------------------------------------------------- + +std::string Inputs::get_euv_fismfile(){ + return get_setting_str("Euv", "fismFile"); +} + // ----------------------------------------------------------------------- // Return the heating efficiency of the neutrals for EUV // ----------------------------------------------------------------------- @@ -847,31 +1001,23 @@ int Inputs::get_original_seed() { } // ----------------------------------------------------------------------- -// Return number of longitudes, latitudes, and altitudes in Geo grid +// Return number of longitudes, latitudes, and altitudes in grid // ----------------------------------------------------------------------- -int Inputs::get_nLonsGeo() { - return check_settings_pt("GeoBlockSize", "nLons"); -} - -int Inputs::get_nLatsGeo() { - return check_settings_pt("GeoBlockSize", "nLats"); +int Inputs::get_nLons(std::string gridtype) { + return get_setting_int(gridtype, "nLonsPerBlock"); } -int Inputs::get_nAltsGeo() { - return check_settings_pt("GeoBlockSize", "nAlts"); +int Inputs::get_nLats(std::string gridtype) { + return get_setting_int(gridtype, "nLatsPerBlock"); } -// ----------------------------------------------------------------------- -// Return number of Blocks of longitudes and latitudes in Geo grid -// ----------------------------------------------------------------------- - -int Inputs::get_nBlocksLonGeo() { - return check_settings_pt("GeoBlockSize", "nBlocksLon"); +int Inputs::get_nAlts(std::string gridtype) { + return get_setting_int(gridtype, "nAlts"); } -int Inputs::get_nBlocksLatGeo() { - return check_settings_pt("GeoBlockSize", "nBlocksLat"); +std::string Inputs::get_grid_shape(std::string gridtype) { + return mklower(get_setting_str(gridtype, "Shape")); } // ----------------------------------------------------------------------- @@ -1084,6 +1230,30 @@ std::string Inputs::get_advection_neutrals_vertical() { return get_setting_str("Advection", "Neutrals", "Vertical"); } +std::string Inputs::get_advection_neutrals_horizontal() { + return get_setting_str("Advection", "Neutrals", "Horizontal"); +} + +std::string Inputs::get_advection_ions_along() { + return get_setting_str("Advection", "Ions", "Along"); +} + +bool Inputs::get_advection_neutrals_bulkwinds() { + return get_setting_bool("Advection", "Neutrals", "useBulkWinds"); +} + +bool Inputs::get_advection_neutrals_implicitfriction() { + return get_setting_bool("Advection", "Neutrals", "useImplicitFriction"); +} + +// ----------------------------------------------------------------------- +// See what tests are requested +// ----------------------------------------------------------------------- + +json Inputs::get_tests() { + return get_setting_json("DoTests"); +} + // -------------------------------------------------------------------------- // check to see if class is ok // -------------------------------------------------------------------------- diff --git a/src/ions.cpp b/src/ions.cpp index 558df96b..68a7f78a 100644 --- a/src/ions.cpp +++ b/src/ions.cpp @@ -10,7 +10,7 @@ // Initialize a single species for the ions // ----------------------------------------------------------------------------- -Ions::species_chars Ions::create_species(Grid grid) { +Ions::species_chars Ions::create_species(Grid &grid) { species_chars tmp; @@ -20,6 +20,7 @@ Ions::species_chars Ions::create_species(Grid grid) { // Constants: tmp.DoAdvect = 0; + tmp.vibe = 5; tmp.density_scgc.set_size(nLons, nLats, nAlts); tmp.density_scgc.fill(1e10); @@ -33,12 +34,29 @@ Ions::species_chars Ions::create_species(Grid grid) { tmp.losses_scgc.set_size(nLons, nLats, nAlts); tmp.losses_scgc.zeros(); + tmp.heating_neutral_friction_scgc.set_size(nLons, nLats, nAlts); + tmp.heating_neutral_friction_scgc.zeros(); + tmp.heating_electron_friction_scgc.set_size(nLons, nLats, nAlts); + tmp.heating_electron_friction_scgc.zeros(); + tmp.heating_neutral_heat_transfer_scgc.set_size(nLons, nLats, nAlts); + tmp.heating_neutral_heat_transfer_scgc.zeros(); + tmp.heating_electron_heat_transfer_scgc.set_size(nLons, nLats, nAlts); + tmp.heating_electron_heat_transfer_scgc.zeros(); + tmp.heating_sources_total.set_size(nLons, nLats, nAlts); + tmp.heating_sources_total.zeros(); + tmp.Cv_scgc.set_size(nLons, nLats, nAlts); + tmp.Cv_scgc.zeros(); + tmp.lambda.set_size(nLons, nLats, nAlts); + tmp.lambda.zeros(); + tmp.par_velocity_vcgc = make_cube_vector(nLons, nLats, nAlts, 3); tmp.perp_velocity_vcgc = make_cube_vector(nLons, nLats, nAlts, 3); + tmp.velocity_vcgc = make_cube_vector(nLons, nLats, nAlts, 3); for (int iDir = 0; iDir < 3; iDir++) { tmp.par_velocity_vcgc[iDir].zeros(); tmp.perp_velocity_vcgc[iDir].zeros(); + tmp.velocity_vcgc[iDir].zeros(); } // The collision frequencies need the neutrals, so those are @@ -51,7 +69,7 @@ Ions::species_chars Ions::create_species(Grid grid) { // Initialize Ions class // ----------------------------------------------------------------------------- -Ions::Ions(Grid grid, Planets planet) { +Ions::Ions(Grid &grid, Planets planet) { int64_t nLons = grid.get_nLons(); int64_t nLats = grid.get_nLats(); @@ -87,15 +105,61 @@ Ions::Ions(Grid grid, Planets planet) { density_scgc.set_size(nLons, nLats, nAlts); density_scgc.ones(); velocity_vcgc = make_cube_vector(nLons, nLats, nAlts, 3); + cMax_vcgc = make_cube_vector(nLons, nLats, nAlts, 3); + + // Some variables that will be used in calc_ion_v: + gravity_vcgc = make_cube_vector(nLons, nLats, nAlts, 3); + wind_acc = make_cube_vector(nLons, nLats, nAlts, 3); + total_acc = make_cube_vector(nLons, nLats, nAlts, 3); + efield_acc = make_cube_vector(nLons, nLats, nAlts, 3); + a_par = make_cube_vector(nLons, nLats, nAlts, 3); + a_perp = make_cube_vector(nLons, nLats, nAlts, 3); + a_x_b = make_cube_vector(nLons, nLats, nAlts, 3); + grad_Pi_plus_Pe = make_cube_vector(nLons, nLats, nAlts, 3); + rho.set_size(nLons, nLats, nAlts); + nuin.set_size(nLons, nLats, nAlts); + nuin_sum.set_size(nLons, nLats, nAlts); + Nie.set_size(nLons, nLats, nAlts); + sum_rho.set_size(nLons, nLats, nAlts); + top.set_size(nLons, nLats, nAlts); + bottom.set_size(nLons, nLats, nAlts); + + + + Cv_scgc.set_size(nLons, nLats, nAlts); + Cv_scgc.zeros(); + lambda.set_size(nLons, nLats, nAlts); + lambda.zeros(); + gamma_scgc.set_size(nLons, nLats, nAlts); + gamma_scgc.ones(); + sound_scgc.set_size(nLons, nLats, nAlts); + sound_scgc.ones(); + + heating_neutral_friction_scgc.set_size(nLons, nLats, nAlts); + heating_neutral_friction_scgc.zeros(); + heating_electron_friction_scgc.set_size(nLons, nLats, nAlts); + heating_electron_friction_scgc.zeros(); + heating_neutral_heat_transfer_scgc.set_size(nLons, nLats, nAlts); + heating_neutral_heat_transfer_scgc.zeros(); + heating_electron_heat_transfer_scgc.set_size(nLons, nLats, nAlts); + heating_electron_heat_transfer_scgc.zeros(); + heating_sources_total.set_size(nLons, nLats, nAlts); + heating_sources_total.zeros(); - for (int iDir = 0; iDir < 3; iDir++) + for (int iDir = 0; iDir < 3; iDir++) { velocity_vcgc[iDir].zeros(); + cMax_vcgc[iDir].ones(); + } temperature_scgc.set_size(nLons, nLats, nAlts); temperature_scgc.fill(200.0); electron_temperature_scgc.set_size(nLons, nLats, nAlts); electron_temperature_scgc.fill(200); + rho_scgc.set_size(nLons, nLats, nAlts); + mean_major_mass_scgc.set_size(nLons, nLats, nAlts); + mean_major_mass_scgc.ones(); + tmp.sources_scgc.set_size(nLons, nLats, nAlts); tmp.sources_scgc.zeros(); tmp.losses_scgc.set_size(nLons, nLats, nAlts); @@ -120,7 +184,8 @@ Ions::Ions(Grid grid, Planets planet) { if (input.get_do_restart()) { report.print(1, "Restarting! Reading ion files!"); - bool DidWork = restart_file(input.get_restartin_dir(), DoRead); + bool DidWork = restart_file(input.get_restartin_dir(), grid.get_gridtype(), + DoRead); if (!DidWork) std::cout << "Reading Restart for Ions Failed!!!\n"; @@ -139,6 +204,7 @@ int Ions::read_planet_file(Planets planet) { int iErr = 0; std::string hash; std::ifstream infile_ptr; + int doAdvect; report.print(3, "In read_planet_file for Ions"); @@ -151,7 +217,14 @@ int Ions::read_planet_file(Planets planet) { double mass = ions["mass"][iSpecies]; species[iSpecies].mass = mass * cAMU; species[iSpecies].charge = ions["charge"][iSpecies]; - species[iSpecies].DoAdvect = ions["advect"][iSpecies]; + doAdvect = ions["advect"][iSpecies]; + + if (doAdvect == 0) + species[iSpecies].DoAdvect = false; + else + species[iSpecies].DoAdvect = true; + + species[iSpecies].vibe = ions["vibration"][iSpecies]; } // account for advected ions: @@ -206,18 +279,18 @@ void Ions::nan_test(std::string variable) { // Checks for nans and +/- infinities in density, temp, and velocity //---------------------------------------------------------------------- -bool Ions::check_for_nonfinites() { - bool non_finites_exist = false; +bool Ions::check_for_nonfinites(std::string location) { + bool didWork = true; if (!all_finite(density_scgc, "density_scgc") || !all_finite(temperature_scgc, "temperature_scgc") || !all_finite(velocity_vcgc, "velocity_vcgc")) - non_finites_exist = true; + didWork = false; - if (non_finites_exist) - throw std::string("Check for nonfinites failed!!!\n"); + if (!didWork) + report.error("ions are nan from location : " + location); - return non_finites_exist; + return didWork; } // ----------------------------------------------------------------------------- @@ -234,6 +307,174 @@ void Ions::set_floor() { return; } +// ---------------------------------------------------------------------- +// Calculate a bunch of derived products: +// - Gamma +// - Speed of sound +// ---------------------------------------------------------------------- + +void Ions::calc_sound_speed() { + + int64_t iSpecies; + + std::string function = "Ion::calc_sound_speed"; + static int iFunction = -1; + report.enter(function, iFunction); + + gamma_scgc.zeros(); + + for (iSpecies = 0; iSpecies < nSpecies; iSpecies++) { + gamma_scgc = gamma_scgc + + species[iSpecies].density_scgc / (species[iSpecies].vibe - 2); + } + + gamma_scgc = gamma_scgc * 2.0 / density_scgc + 1.0; + + sound_scgc = sqrt(cKB * + gamma_scgc % + temperature_scgc / + mean_major_mass_scgc); + + if (report.test_verbose(2)) { + std::cout << "max sound speed : " << sound_scgc.max() << "\n"; + std::cout << "max gamma : " << gamma_scgc.max() << "\n"; + + if (!all_finite(sound_scgc, "sound speed")) { + std::cout << "sound speed has nans!\n"; + report.report_errors(); + } + } + + report.exit(function); + return; +} + +// ---------------------------------------------------------------------- +// Calculate cMax, which is the sound speed + velocity in each +// direction +// ---------------------------------------------------------------------- + +void Ions::calc_cMax() { + + std::string function = "Ions::calc_cMax"; + static int iFunction = -1; + report.enter(function, iFunction); + + int iDir; + + // just take the bulk value for now: + + if (report.test_verbose(3)) { + std::cout << "max sound speed : " << sound_scgc.max() << "\n"; + + for (iDir = 0; iDir < 3; iDir++) { + arma_cube tmp = abs(velocity_vcgc[iDir]); + std::cout << "min velocity : " << tmp.min() << "\n"; + std::cout << "max velocity : " << tmp.max() << "\n"; + } + } + + for (iDir = 0; iDir < 3; iDir++) + cMax_vcgc[iDir] = sound_scgc + abs(velocity_vcgc[iDir]); + + report.exit(function); + return; +} + +// ---------------------------------------------------------------------- +// Calculate thermal conduction (lambda) +// ---------------------------------------------------------------------- + +void Ions::calc_lambda() { + + int64_t iIon, jIon; + + std::string function = "Ions::calc_specific_heat"; + static int iFunction = -1; + report.enter(function, iFunction); + + lambda.zeros(); + precision_t Mi, Mj; + arma_cube density_ratio, ratios; + + // This sets the size: + ratios = density_scgc; + + for (iIon = 0; iIon < nSpecies; iIon++) { + + Mi = species[iIon].mass / cAMU; + ratios.zeros(); + + for (jIon = 0; jIon < nSpecies; jIon++) { + if (jIon != iIon) { + Mj = species[jIon].mass / cAMU; + density_ratio = species[jIon].density_scgc / + species[iIon].density_scgc; + density_ratio.clamp(0.001, 1000.0); + ratios = ratios + density_ratio * + (species[jIon].charge * species[jIon].charge / + species[iIon].charge / species[iIon].charge) * + sqrt(Mj / (Mi + Mj)) * + (3 * Mi * Mi + 1.6 * Mi * Mj + 1.3 * Mj * Mj) / + ((Mi + Mj) * (Mi + Mj)); + } + + species[iIon].lambda = + 3.1e6 / sqrt(Mi) / pow(species[iIon].charge, 4) * + pow(species[iIon].temperature_scgc, 2.5) % (1 + 1.75 * ratios) * cE; + } + + lambda = lambda + species[iIon].lambda % species[iIon].density_scgc; + } + + lambda = lambda / density_scgc; + + //lambda1d = 25.0 * cKB * pow(temp1d, 2.5) * (cKB / species[iIon].mass) + // / species[iIon].nu_ion_ion[iIon] / 8.0; + + + report.exit(function); + return; +} + + +// ---------------------------------------------------------------------- +// Calculate Specific Heat at Constant Volume (Cv) +// ---------------------------------------------------------------------- + +void Ions::calc_specific_heat() { + + int64_t iSpecies; + + std::string function = "Ions::calc_specific_heat"; + static int iFunction = -1; + report.enter(function, iFunction); + + Cv_scgc.zeros(); + gamma_scgc.zeros(); + + for (iSpecies = 0; iSpecies < nSpecies; iSpecies++) { + // individual Cv for individual temperatures: + species[iSpecies].Cv_scgc = + (species[iSpecies].vibe - 2) * cKB / species[iSpecies].mass / 2; + // Bulk Cv for the bulk temperature: + Cv_scgc = Cv_scgc + + (species[iSpecies].vibe - 2) * + species[iSpecies].density_scgc * + cKB / species[iSpecies].mass; + gamma_scgc = gamma_scgc + + species[iSpecies].density_scgc / (species[iSpecies].vibe - 2); + } + + // Bulk Cv and gamma are the density-weighted Cv and gamma + Cv_scgc = Cv_scgc / (2 * density_scgc); + gamma_scgc = gamma_scgc * 2.0 / density_scgc + 1.0; + + report.exit(function); + return; +} + + // ----------------------------------------------------------------------------- // Calculate the electron density from the sum of all ion species // ----------------------------------------------------------------------------- @@ -247,12 +488,21 @@ void Ions::fill_electrons() { report.enter(function, iFunction); species[nSpecies].density_scgc.zeros(); + rho_scgc.zeros(); - for (iSpecies = 0; iSpecies < nSpecies; iSpecies++) + for (iSpecies = 0; iSpecies < nSpecies; iSpecies++) { + // Electron density is the last species: species[nSpecies].density_scgc = species[nSpecies].density_scgc + species[iSpecies].density_scgc; + // While we are at it, calculate the mass density too: + rho_scgc = rho_scgc + + species[iSpecies].mass * species[iSpecies].density_scgc; + } + // The electron density is also stored as the bulk density: density_scgc = species[nSpecies].density_scgc; + // We can now calculate the mean major mass for ions too: + mean_major_mass_scgc = rho_scgc / density_scgc; report.exit(function); return; @@ -264,7 +514,7 @@ void Ions::fill_electrons() { // Will return nSpecies for electrons //---------------------------------------------------------------------- -int Ions::get_species_id(std::string name) { +int Ions::get_species_id(const std::string &name) const { std::string function = "Ions::get_species_id"; static int iFunction = -1; @@ -289,7 +539,7 @@ int Ions::get_species_id(std::string name) { // Read/Write restart files for the ions //---------------------------------------------------------------------- -bool Ions::restart_file(std::string dir, bool DoRead) { +bool Ions::restart_file(std::string dir, std::string cGridtype, bool DoRead) { std::string filename; bool DidWork = true; @@ -297,13 +547,14 @@ bool Ions::restart_file(std::string dir, bool DoRead) { OutputContainer RestartContainer; RestartContainer.set_directory(dir); - RestartContainer.set_filename("ions_" + cMember + "_" + cGrid); + RestartContainer.set_filename("ions_" + cMember + "_" + cGrid + "_" + + cGridtype); try { if (DoRead) RestartContainer.read(); else { - RestartContainer.set_version(0.1); + RestartContainer.set_version(aether_version); RestartContainer.set_time(0.0); } diff --git a/src/ions_advect.cpp b/src/ions_advect.cpp new file mode 100644 index 00000000..38ae889f --- /dev/null +++ b/src/ions_advect.cpp @@ -0,0 +1,33 @@ +// Copyright 2023, the Aether Development Team (see doc/dev_team.md for members) +// Full license can be found in License.md +// +// initial version - A. Ridley - Nov. 1, 2024 + +#include "aether.h" + +// ----------------------------------------------------------------------------- +// This is where we will call the different advection schemes +// ----------------------------------------------------------------------------- + +bool Ions::advect_vertical(Grid &grid, Times time) { + + bool didWork = true; + + std::string function = "Ions::advance_vertical"; + static int iFunction = -1; + report.enter(function, iFunction); + + if (input.get_advection_ions_along() == "rusanov") + solver_vertical_rusanov(grid, time); + else { + std::cout << "Parallel Ion Advection solver not found!\n"; + std::cout << " ==> Requested : " + << input.get_advection_ions_along() + << "\n"; + didWork = false; + } + + report.exit(function); + return didWork; +} + diff --git a/src/ions_bcs.cpp b/src/ions_bcs.cpp new file mode 100644 index 00000000..d629b344 --- /dev/null +++ b/src/ions_bcs.cpp @@ -0,0 +1,211 @@ +// Copyright 2023, the Aether Development Team (see doc/dev_team.md for members) +// Full license can be found in License.md +// +// initial version - A. Ridley - May 27, 2023 + +#include "aether.h" + +// ----------------------------------------------------------------------------- +// Set boundary conditions for the ions. +// The dipolar grid is fundamentally different than the sphere/cubesphere grids. +// We need to treat them differently. +// ----------------------------------------------------------------------------- + +//---------------------------------------------------------------------- +// set_bcs - This is for setting the vertical BCs +//---------------------------------------------------------------------- + +bool Ions::set_bcs(Grid &grid, + Times time, + Indices indices) { + + std::string function = "Ions::set_bcs"; + static int iFunction = -1; + report.enter(function, iFunction); + + bool didWork = true; + + if (grid.get_nZ(false) > 1) { + didWork = set_lower_bcs(grid, time, indices); + + if (didWork) + didWork = set_upper_bcs(grid); + + if (didWork) + fill_electrons(); + } + + if (!didWork) + report.error("issue with ion BCs!"); + + report.exit(function); + return didWork; +} + +//---------------------------------------------------------------------- +// set upper boundary conditions for the ions +//---------------------------------------------------------------------- + +bool Ions::set_upper_bcs(Grid &grid) { + + std::string function = "Ions::set_upper_bcs"; + static int iFunction = -1; + report.enter(function, iFunction); + + bool didWork = true; + + int64_t nAlts = grid.get_nZ(); + int64_t nX = grid.get_nX(), iX; + int64_t nY = grid.get_nY(), iY; + int64_t nGCs = grid.get_nGCs(); + int64_t iAlt; + arma_mat h; + arma_mat aveT; + + // If we are on the dipole grid and our field-lines are closed, then + // we don't want to set upper boundary conditions, since we will + // be message passing them. + + if (!grid.IsClosed) { + + for (iAlt = nAlts - nGCs; iAlt < nAlts; iAlt++) { + // Bulk Quantities: + // Constant gradient (ignoring grid spacing...) + temperature_scgc.slice(iAlt) = + 2 * temperature_scgc.slice(iAlt - 1) - temperature_scgc.slice(iAlt - 2); + + // For each species: + for (int iSpecies = 0; iSpecies < nSpecies; iSpecies++) { + // Constant gradient (ignoring grid spacing...) + species[iSpecies].temperature_scgc.slice(iAlt) = + 2 * species[iSpecies].temperature_scgc.slice(iAlt - 1) - + species[iSpecies].temperature_scgc.slice(iAlt - 2); + + aveT = (species[iSpecies].temperature_scgc.slice(iAlt) + + electron_temperature_scgc.slice(iAlt)); + // Calculate scale height for the species: + h = cKB / species[iSpecies].mass * + species[iSpecies].temperature_scgc.slice(iAlt) / + abs(grid.gravity_vcgc[2].slice(iAlt)); + // Assume each species falls of with (modified) hydrostatic: + species[iSpecies].density_scgc.slice(iAlt) = + species[iSpecies].temperature_scgc.slice(iAlt) / + species[iSpecies].temperature_scgc.slice(iAlt - 1) % + species[iSpecies].density_scgc.slice(iAlt - 1) % + exp(-grid.dk_edge_m.slice(iAlt) / h); + species[iSpecies].velocity_vcgc[2].slice(iAlt).zeros(); + } + } + + } + + report.exit(function); + return didWork; +} + +//---------------------------------------------------------------------- +// set lower boundary conditions for the ions +//---------------------------------------------------------------------- + +bool Ions::set_lower_bcs(Grid &grid, Times time, Indices indices) { + + std::string function = "Ions::set_lower_bcs"; + static int iFunction = -1; + report.enter(function, iFunction); + + bool didWork = true; + + int64_t nAlts = grid.get_nZ(); + int64_t nX = grid.get_nX(), iX; + int64_t nY = grid.get_nY(), iY, iYs, iYe; + int64_t nGCs = grid.get_nGCs(); + int64_t iAlt, iFirst; + arma_mat h; + arma_mat aveT; + + // This is true for all grids: + for (iX = 0; iX < nX; iX++) { + for (int iY = 0; iY < nY; iY++) { + iFirst = grid.first_lower_gc(iX, iY); + + for (iAlt = iFirst; iAlt >= 0; iAlt--) { + // Bulk Quantities: + temperature_scgc.slice(iAlt) = temperature_scgc.slice(iFirst + 1); + + // For each species: + for (int iSpecies = 0; iSpecies < nSpecies; iSpecies++) { + // assign all species temperatures the bulk temperature: + species[iSpecies].temperature_scgc.slice(iAlt) = + temperature_scgc.slice(iAlt); + // Assume each species falls off a bit. + // this BC shouldn't matter, since the bottom of the code + // should be in chemical equalibrium: + species[iSpecies].density_scgc.slice(iAlt) = + 0.95 * species[iSpecies].density_scgc.slice(iFirst + 1); + } + } + } + } + + // This section is for the dipole grid. If the field-lines are + // closed, then we will treat the N/S ghostcells as LOWER boundaries. + // If thr grid is in the south, then treat the north bounday as the + // lower boundary. If the grid is in the north, treat the south boundary + // as the lower boundary. + // Because we are expecting to be chemically dominant, the lower BCs don't + // matter as much for the ions. We really just want to fill them with some + // reasonable values. + + if (grid.setNorthAsDown) { + // First physical cell: + iFirst = nY - nGCs - 2; + iYs = nY - nGCs - 1; + iYe = nY; + } + + if (grid.setSouthAsDown) { + // First physical cell: + iFirst = nGCs; + iYs = 0; + iYe = nGCs; + } + + if (grid.setNorthAsDown || grid.setSouthAsDown) { + + for (iX = 0; iX < nX; iX++) { + for (int iY = iYs; iY < iYe; iY++) { + // Bulk Quantities: + temperature_scgc.tube(iX, iY) = temperature_scgc.tube(iX, iFirst); + + // For each species: + for (int iSpecies = 0; iSpecies < nSpecies; iSpecies++) { + // assign all species temperatures the bulk temperature: + species[iSpecies].temperature_scgc.tube(iX, iY) = + temperature_scgc.tube(iX, iFirst); + // Assume each species falls off a bit. + // this BC shouldn't matter, since the bottom of the code + // should be in chemical equalibrium: + species[iSpecies].density_scgc.tube(iX, iY) = + 0.95 * species[iSpecies].density_scgc.tube(iX, iFirst); + } + + for (iAlt = 0; iAlt <= grid.first_lower_gc(iX, iY); iAlt++) { + //std::cout << "ion bcs, dipole, setnorth iAlt : " + // << iAlt << " " + // << grid.first_lower_gc(iX, iFirst) << " " + // << temperature_scgc(iX, iFirst, grid.first_lower_gc(iX, iFirst) + 1) << " " + // << temperature_scgc(iX, iFirst, iAlt) << " " + // << grid.geoAlt_scgc(iX, iFirst, grid.first_lower_gc(iX, + // iFirst) + 1) / 1000.0 << "\n"; + temperature_scgc(iX, iY, iAlt) = + temperature_scgc(iX, iFirst, grid.first_lower_gc(iX, iFirst) + 1); + } + + } + } + } + + report.exit(function); + return didWork; +} + diff --git a/src/logfile.cpp b/src/logfile.cpp index 7d5db759..2161970d 100644 --- a/src/logfile.cpp +++ b/src/logfile.cpp @@ -233,7 +233,7 @@ void Satellite::print() { // Initialize the Logfile //------------------------------------------------------------- -Logfile::Logfile(Indices &indices) { +Logfile::Logfile(Indices &indices, int64_t iLog) { // Read the settings for general log file and satellites // Write the header to the general logfile @@ -244,7 +244,7 @@ Logfile::Logfile(Indices &indices) { report.enter(function, iFunction); // Read the inputs - logfileName = input.get_logfile(); + logfileName = input.get_logfile(iLog); species = input.get_species_vector(); dt = input.get_logfile_dt(); doAppend = input.get_logfile_append(); diff --git a/src/main/main.cpp b/src/main/main.cpp index 84d4ae0e..02b3870c 100644 --- a/src/main/main.cpp +++ b/src/main/main.cpp @@ -12,7 +12,7 @@ int main() { int iErr = 0; std::string sError; - bool didWork = true; + bool didWork = true, testsPassing = true; Times time; @@ -32,13 +32,24 @@ int main() { report.print(-1, "Hello " + input.get_student_name() + " - welcome to Aether!"); - Quadtree quadtree; + // Find out what tests we are running: + json tests = input.get_tests(); + + // For now, the number of processors and blocks are set by the + // neutral grid shape, since this could be sphere (1 root) or + // cubesphere (6 root) + Quadtree quadtree(input.get_grid_shape(neutralType_)); if (!quadtree.is_ok()) - throw std::string("quadtree initialization failed!"); + throw std::string("quadtree for neutrals initialization failed!"); + + Quadtree quadtree_ion(input.get_grid_shape(ionType_)); + + if (!quadtree_ion.is_ok()) + throw std::string("quadtree for ions initialization failed!"); // Initialize MPI and parallel aspects of the code: - didWork = init_parallel(quadtree); + didWork = init_parallel(quadtree, quadtree_ion); if (!didWork) throw std::string("init_parallel failed!"); @@ -72,13 +83,9 @@ int main() { // Perturb the inputs if user has asked for this indices.perturb(); - MPI_Barrier(aether_comm); - // Initialize Geographic grid: - Grid gGrid(input.get_nLonsGeo(), - input.get_nLatsGeo(), - input.get_nAltsGeo(), - nGeoGhosts); + // Initialize neutral grid: + Grid gGrid(neutralType_); didWork = gGrid.init_geo_grid(quadtree, planet); MPI_Barrier(aether_comm); @@ -86,21 +93,44 @@ int main() { throw std::string("init_geo_grid failed!"); // Find interpolation coefs for the ghostcells if cubesphere grid - didWork = find_ghostcell_interpolation_coefs(gGrid); + //didWork = find_ghostcell_interpolation_coefs(gGrid); + //if (!didWork) + // throw std::string("find_ghostcell_interpolation_coefs failed!"); // Calculate centripetal acceleration, since this is a constant // vector on the grid: if (input.get_cent_acc()) gGrid.calc_cent_acc(planet); - // Initialize Magnetic grid: - Grid mGrid(nMagLonsG, nMagLatsG, nMagAltsG, nMagGhosts); + // Initialize ion grid: + Grid mGrid(ionType_); + + if (mGrid.iGridShape_ == iDipole_) { + didWork = mGrid.init_dipole_grid(quadtree_ion, planet); + + if (!didWork) + throw std::string("init_dipole_grid failed!"); + } else { + report.print(1, "Making Spherical Magnetic Grid\n"); + mGrid.set_IsDipole(false); + didWork = mGrid.init_geo_grid(quadtree_ion, planet); + mGrid.set_IsGeoGrid(false); + } + didWork = grid_match(gGrid, mGrid, quadtree, quadtree_ion); // Initialize Neutrals on geographic grid: Neutrals neutrals(gGrid, planet, time, indices); + Neutrals neutralsMag(mGrid, planet, time, indices); - // Initialize Ions on geographic grid: + // Initialize Ions on geographic and magnetic grids: Ions ions(gGrid, planet); + Ions ionsMag(mGrid, planet); + + if (tests["test_gradient"]) + testsPassing = test_gradient(planet, quadtree, tests, gGrid, mGrid); + + if (!testsPassing && tests["exit_on_fail"]) + throw std::string("Cannot continue!!"); // ----------------------------------------------------------------- // This is a unit test for checking for nans and infinities. @@ -114,30 +144,46 @@ int main() { } if (input.get_check_for_nans()) { - didWork = neutrals.check_for_nonfinites(); - didWork = ions.check_for_nonfinites(); + didWork = neutrals.check_for_nonfinites("After Inputs"); + + if (!didWork) + throw std::string("NaNs found in Neutrals in Initialize!\n"); + + didWork = ions.check_for_nonfinites("NaNs found in Ions in Initialize!\n"); + + if (!didWork) + throw std::string("NaNs found in Ions in Initialize!\n"); } // ----------------------------------------------------------------- // Once EUV, neutrals, and ions have been defined, pair cross sections euv.pair_euv(neutrals, ions); + euv.pair_euv(neutralsMag, ionsMag); // Initialize Chemical scheme (including reading file): Chemistry chemistry(neutrals, ions); + Chemistry chemistryMag(neutralsMag, ionsMag); // Read in the collision frequencies and other diffusion coefficients: read_collision_file(neutrals, ions); + read_collision_file(neutralsMag, ionsMag); - // Initialize ion temperatures from neutral temperature + // Initialize ion temperatures from neutral temperature (both grids) ions.init_ion_temperature(neutrals, gGrid); + ionsMag.init_ion_temperature(neutralsMag, mGrid); // Initialize electrodynamics and check if electrodynamics times // works with input time Electrodynamics electrodynamics(time); if (!electrodynamics.is_ok()) - throw std::string("electrodynamics initialization failed!"); + throw std::string("electrodynamics on geo grid initialization failed!"); + + Electrodynamics electrodynamicsMag(time); + + if (!electrodynamicsMag.is_ok()) + throw std::string("electrodynamics on mag grid initialization failed!"); // If the user wants to restart, then get the time of the restart if (input.get_do_restart()) { @@ -146,14 +192,24 @@ int main() { if (!didWork) throw std::string("Reading Restart for time Failed!!!\n"); + + didWork = indices.restart_file(input.get_restartin_dir(), + true, + time.get_current()); + + if (!didWork) + throw std::string("Reading Restart for Indices Failed!!!\n"); + } // This is for the initial output. If it is not a restart, this will go: - if (time.check_time_gate(input.get_dt_output(0))) + if (time.check_time_gate(input.get_dt_output(0))) { didWork = output(neutrals, ions, gGrid, time, planet); + didWork = output(neutralsMag, ionsMag, mGrid, time, planet); + } if (!didWork) - throw std::string("output failed!"); + throw std::string("Initial output failed!"); // This is advancing now... We are not coupling, so set dt_couple to the // end of the simulation @@ -167,7 +223,8 @@ int main() { // then a loop around that goes to the end time. Then, the code can // be made into a library and run externally. - Logfile logfile(indices); + Logfile logfile(indices, 0); + Logfile logfileMag(indices, 1); time.set_start_time_loop(); @@ -179,14 +236,20 @@ int main() { while (time.get_current() < time.get_intermediate()) { didWork = advance(planet, gGrid, + mGrid, time, euv, neutrals, + neutralsMag, ions, + ionsMag, chemistry, + chemistryMag, electrodynamics, + electrodynamicsMag, indices, - logfile); + logfile, + logfileMag); if (!didWork) throw std::string("Error in advance!"); @@ -205,12 +268,18 @@ int main() { if (!time.check_time_gate(input.get_dt_write_restarts())) { report.print(3, "Writing restart files"); - didWork = neutrals.restart_file(input.get_restartout_dir(), DoWrite); + didWork = neutrals.restart_file(input.get_restartout_dir(), + gGrid.get_gridtype(), DoWrite); + didWork = neutralsMag.restart_file(input.get_restartout_dir(), + mGrid.get_gridtype(), DoWrite); if (!didWork) throw std::string("Writing Restart for Neutrals Failed!!!\n"); - didWork = ions.restart_file(input.get_restartout_dir(), DoWrite); + didWork = ions.restart_file(input.get_restartout_dir(), gGrid.get_gridtype(), + DoWrite); + didWork = ionsMag.restart_file(input.get_restartout_dir(), mGrid.get_gridtype(), + DoWrite); if (!didWork) throw std::string("Writing Restart for Ions Failed!!!\n"); @@ -225,21 +294,18 @@ int main() { } // End of outer time loop - done with run! - report.exit(function); - report.times(); - } catch (std::string error) { - report.report_errors(); - - if (iProc == 0) { - std::cout << error << "\n"; - std::cout << "---- Must Exit! ----\n"; - } + report.error(error); } + report.exit(function); + report.times(); + report.report_errors(); - // End parallel tasks: - iErr = MPI_Finalize(); + if (nProcs > 0) + // End parallel tasks: + iErr = MPI_Finalize(); return iErr; + } diff --git a/src/neutral_ion_collisions.cpp b/src/neutral_ion_collisions.cpp index bed85aae..88a7f86d 100644 --- a/src/neutral_ion_collisions.cpp +++ b/src/neutral_ion_collisions.cpp @@ -14,34 +14,167 @@ void calc_ion_collisions(Neutrals &neutrals, int64_t nY = neutrals.density_scgc.n_cols; int64_t nZ = neutrals.density_scgc.n_slices; int64_t nSpecies = neutrals.nSpecies, iSpecies; - int64_t iDir, iIon, iNeutral; + int64_t iDir, iIon, iIon_, iNeutral, iNeutral_; + precision_t Mi; arma_cube rho_n(nX, nY, nZ); arma_cube rho_i(nX, nY, nZ); arma_cube rho_sum(nX, nY, nZ); - // Calculate acceleration due to ion drag. Based on Formula 4.124b in Ionospheres text. - for (iNeutral = 0; iNeutral < neutrals.nSpeciesAdvect; iNeutral++) { - Neutrals::species_chars & advected_neutral = - neutrals.species[neutrals.species_to_advect[iNeutral]]; - rho_n = advected_neutral.mass * advected_neutral.density_scgc; + // energy is the total energy transfered from ions to neutrals + arma_cube energy_heat(nX, nY, nZ); + arma_cube energy_friction(nX, nY, nZ); + // beta is the sum of the collision frequencies * mass density of ions + arma_cube beta(nX, nY, nZ); + // velocity difference between ions and neutrals + arma_cube vDiff(nX, nY, nZ); + // momentum so we can divide by the mass density later + std::vector momentum; + momentum = make_cube_vector(nX, nY, nZ, 3); + + beta.zeros(); + + // If we are using the bulk (horizontal, primarily) neutral winds + // then approximate some of the collisional quantities + + neutrals.heating_ion_friction_scgc.zeros(); + neutrals.heating_ion_heat_transfer_scgc.zeros(); + + if (input.get_advection_neutrals_bulkwinds()) { + for (iIon = 0; iIon < ions.nSpeciesAdvect; iIon++) { + iIon_ = ions.species_to_advect[iIon]; + Ions::species_chars & advected_ion = ions.species[iIon_]; + rho_i = advected_ion.mass * advected_ion.density_scgc; + + for (iNeutral = 0; iNeutral < neutrals.nSpeciesAdvect; iNeutral++) { + iNeutral_ = neutrals.species_to_advect[iNeutral]; + beta = beta + rho_i % advected_ion.nu_ion_neutral_vcgc[iNeutral_]; + } + } + + // Now use the bulk quantities for the collisions + // (beta is included in the last step) + // heat transfer between ions and neutrals: + neutrals.heating_ion_heat_transfer_scgc = 3 * cKB / ions.mean_major_mass_scgc % + (ions.temperature_scgc - neutrals.temperature_scgc); for (iDir = 0; iDir < 3; iDir++) { - rho_sum.zeros(); - - for (iIon = 0; iIon < ions.nSpeciesAdvect; iIon++) { - Ions::species_chars & advected_ion = ions.species[ions.species_to_advect[iIon]]; - rho_i = advected_ion.mass * advected_ion.density_scgc; - rho_sum = rho_sum + - rho_i % advected_ion.nu_ion_neutral_vcgc[iNeutral] % - (advected_ion.par_velocity_vcgc[iDir] + - advected_ion.perp_velocity_vcgc[iDir] - + // need the velocity difference for momentum and energy eqns: + vDiff = (ions.velocity_vcgc[iDir] - neutrals.velocity_vcgc[iDir]); + // ion - neutral drag (acceleration): + neutrals.acc_ion_collisions[iDir] = + beta / neutrals.rho_scgc % vDiff; + // Frictional heating between ions and neutrals: + neutrals.heating_ion_friction_scgc = neutrals.heating_ion_friction_scgc + vDiff + % vDiff; + } + + // multiply by collision frequencies divide by two. The two is because we + // assumed that the ion and neutral masses (not rho) were the same above, + // and the bottom term has Mi + Mn and not just Mn. + neutrals.heating_ion_friction_scgc = + beta % neutrals.heating_ion_friction_scgc / 2; + neutrals.heating_ion_heat_transfer_scgc = + beta % neutrals.heating_ion_heat_transfer_scgc / 2; + + // The ions get the same amount of energy: + ions.heating_neutral_friction_scgc = neutrals.heating_ion_friction_scgc; + // Temperature difference is reversed (ions giving energy to neutrals): + ions.heating_neutral_heat_transfer_scgc = - + neutrals.heating_ion_heat_transfer_scgc; + + // convert energy change to temperature change: + neutrals.heating_ion_friction_scgc = + neutrals.heating_ion_friction_scgc / (neutrals.rho_scgc % neutrals.Cv_scgc); + neutrals.heating_ion_heat_transfer_scgc = + neutrals.heating_ion_heat_transfer_scgc / (neutrals.rho_scgc % + neutrals.Cv_scgc); + //std::cout << "ion heat : " << ions.heating_neutral_friction_scgc(2,2,25) << " " + // << ions.heating_neutral_heat_transfer_scgc(2,2,25) << " " + // << vDiff(2,2,25) << "\n"; + } else { + + // --------------------------------------------- + // Use Individual Neutral Winds + // --------------------------------------------- + + for (iIon = 0; iIon < ions.nSpecies; iIon++) { + ions.species[iIon].heating_neutral_friction_scgc.zeros(); + ions.species[iIon].heating_neutral_heat_transfer_scgc.zeros(); + } + + // Calculate acceleration due to ion drag. Based on Formula 4.124b in Ionospheres text. + for (iNeutral = 0; iNeutral < neutrals.nSpeciesAdvect; iNeutral++) { + Neutrals::species_chars & advected_neutral = + neutrals.species[neutrals.species_to_advect[iNeutral]]; + rho_n = advected_neutral.mass * advected_neutral.density_scgc; + + for (iDir = 0; iDir < 3; iDir++) + momentum[iDir].zeros(); + + for (iIon = 0; iIon < ions.nSpecies; iIon++) { + Mi = ions.species[iIon].mass; + rho_i = Mi * ions.species[iIon].density_scgc; + beta = rho_i % ions.species[iIon].nu_ion_neutral_vcgc[iNeutral]; + precision_t one_over_masses = 1.0 / (Mi + advected_neutral.mass); + + // B = rho_i * Nu_in + // Acc (for each species) = sum_over_ions(B * (Vi - Vn)) / rho + // Momentum = sum(B * (Vi - Vn)) + // Energy = sum_neutrals(sum__ions(B/(Mi + Mn) * (Ti - Tn) + Mi * (Vi-Vn)^2)) + + energy_heat = 3 * cKB * one_over_masses * + (ions.species[iIon].temperature_scgc - neutrals.temperature_scgc); + energy_heat = energy_heat % beta; + neutrals.heating_ion_heat_transfer_scgc = + neutrals.heating_ion_heat_transfer_scgc + energy_heat; + + energy_friction.zeros(); + + for (iDir = 0; iDir < 3; iDir++) { + vDiff = (ions.species[iIon].velocity_vcgc[iDir] + advected_neutral.velocity_vcgc[iDir]); + energy_friction = energy_friction + + (Mi * one_over_masses) * vDiff % vDiff % beta; + momentum[iDir] = momentum[iDir] + beta % vDiff; + } // for each direction + + neutrals.heating_ion_friction_scgc = + neutrals.heating_ion_friction_scgc + energy_friction; + + // The ions get the same amount of energy: + ions.species[iIon].heating_neutral_friction_scgc = + ions.species[iIon].heating_neutral_friction_scgc + energy_friction; + // Temperature difference is reversed (ions giving energy to neutrals): + ions.species[iIon].heating_neutral_heat_transfer_scgc = + ions.species[iIon].heating_neutral_heat_transfer_scgc - energy_heat; } // for each ion - advected_neutral.acc_ion_drag[iDir] = rho_sum / rho_n; - } // for each direction - } // for each neutral + // Divide by the mass density to get the acceleration + for (iDir = 0; iDir < 3; iDir++) + advected_neutral.acc_ion_drag[iDir] = momentum[iDir] / rho_n; + } // for each neutral + + // Take all of the individual ions energy and give them to bulk energy: + ions.heating_neutral_friction_scgc.zeros(); + ions.heating_neutral_heat_transfer_scgc.zeros(); + + for (iIon = 0; iIon < ions.nSpecies; iIon++) { + ions.heating_neutral_friction_scgc = + ions.heating_neutral_friction_scgc + + ions.species[iSpecies].heating_neutral_friction_scgc; + ions.heating_neutral_heat_transfer_scgc = + ions.heating_neutral_heat_transfer_scgc + + ions.species[iSpecies].heating_neutral_heat_transfer_scgc; + } + + // Convert from energy into K/s: + neutrals.heating_ion_friction_scgc = + neutrals.heating_ion_friction_scgc / (neutrals.rho_scgc % neutrals.Cv_scgc); + neutrals.heating_ion_heat_transfer_scgc = + neutrals.heating_ion_heat_transfer_scgc / (neutrals.rho_scgc % + neutrals.Cv_scgc); + } // bulk neutral winds report.exit(function); return; diff --git a/src/neutrals.cpp b/src/neutrals.cpp index 376572c9..cfb60f05 100644 --- a/src/neutrals.cpp +++ b/src/neutrals.cpp @@ -11,7 +11,7 @@ // Create a single species by filling the species structure // ----------------------------------------------------------------------------- -Neutrals::species_chars Neutrals::create_species(Grid grid) { +Neutrals::species_chars Neutrals::create_species(Grid &grid) { species_chars tmp; @@ -26,7 +26,9 @@ Neutrals::species_chars Neutrals::create_species(Grid grid) { tmp.lower_bc_density = -1.0; tmp.density_scgc.set_size(nLons, nLats, nAlts); + tmp.density_scgc.ones(); tmp.newDensity_scgc.set_size(nLons, nLats, nAlts); + tmp.newDensity_scgc.ones(); tmp.velocity_vcgc = make_cube_vector(nLons, nLats, nAlts, 3); tmp.newVelocity_vcgc = make_cube_vector(nLons, nLats, nAlts, 3); @@ -36,19 +38,32 @@ Neutrals::species_chars Neutrals::create_species(Grid grid) { } tmp.chapman_scgc.set_size(nLons, nLats, nAlts); + tmp.chapman_scgc.ones(); tmp.scale_height_scgc.set_size(nLons, nLats, nAlts); + tmp.scale_height_scgc.ones(); + tmp.ionization_scgc.set_size(nLons, nLats, nAlts); + tmp.ionization_scgc.zeros(); tmp.acc_neutral_friction = make_cube_vector(nLons, nLats, nAlts, 3); tmp.acc_ion_drag = make_cube_vector(nLons, nLats, nAlts, 3); + + for (int iDir = 0; iDir < 3; iDir++) { + tmp.acc_neutral_friction[iDir].zeros(); + tmp.acc_ion_drag[iDir].zeros(); + } + tmp.acc_eddy.set_size(nLons, nLats, nAlts); - tmp.ionization_scgc.zeros(); + tmp.acc_eddy.zeros(); + tmp.neutral_friction_coef.set_size(nLons, nLats, nAlts); + tmp.neutral_friction_coef.zeros(); tmp.concentration_scgc.set_size(nLons, nLats, nAlts); + tmp.concentration_scgc.zeros(); + tmp.mass_concentration_scgc.set_size(nLons, nLats, nAlts); + tmp.mass_concentration_scgc.zeros(); - tmp.density_scgc.ones(); - tmp.chapman_scgc.ones(); - tmp.scale_height_scgc.ones(); + tmp.rho_alt_int_scgc.set_size(nLons, nLats, nAlts); tmp.rho_alt_int_scgc.zeros(); tmp.sources_scgc.set_size(nLons, nLats, nAlts); @@ -57,7 +72,7 @@ Neutrals::species_chars Neutrals::create_species(Grid grid) { tmp.losses_scgc.zeros(); tmp.nAuroraIonSpecies = 0; - tmp.Aurora_Coef = -1.0; + tmp.Aurora_Coef = 0.0; return tmp; } @@ -66,7 +81,7 @@ Neutrals::species_chars Neutrals::create_species(Grid grid) { // Initialize neutrals // ----------------------------------------------------------------------------- -Neutrals::Neutrals(Grid grid, +Neutrals::Neutrals(Grid &grid, Planets planet, Times time, Indices indices) { @@ -74,6 +89,7 @@ Neutrals::Neutrals(Grid grid, int iErr; bool didWork = true; species_chars tmp; + auroraInitialized = false; int64_t nLons = grid.get_nLons(); int64_t nLats = grid.get_nLats(); @@ -100,10 +116,6 @@ Neutrals::Neutrals(Grid grid, temperature_scgc.ones(); newTemperature_scgc.set_size(nLons, nLats, nAlts); newTemperature_scgc.ones(); - O_cool_scgc.set_size(nLons, nLats, nAlts); - O_cool_scgc.zeros(); - NO_cool_scgc.set_size(nLons, nLats, nAlts); - NO_cool_scgc.zeros(); // Derived quantities: @@ -132,12 +144,36 @@ Neutrals::Neutrals(Grid grid, kappa_eddy_scgc.set_size(nLons, nLats, nAlts); kappa_eddy_scgc.zeros(); + viscosity_scgc.set_size(nLons, nLats, nAlts); + viscosity_scgc.zeros(); + conduction_scgc.set_size(nLons, nLats, nAlts); + conduction_scgc.zeros(); heating_euv_scgc.set_size(nLons, nLats, nAlts); + heating_euv_scgc.zeros(); heating_chemical_scgc.set_size(nLons, nLats, nAlts); + heating_chemical_scgc.zeros(); + heating_sources_total.set_size(nLons, nLats, nAlts); + heating_sources_total.zeros(); + heating_ion_friction_scgc.set_size(nLons, nLats, nAlts); + heating_ion_friction_scgc.zeros(); + heating_ion_heat_transfer_scgc.set_size(nLons, nLats, nAlts); + heating_ion_heat_transfer_scgc.zeros(); + O_cool_scgc.set_size(nLons, nLats, nAlts); + O_cool_scgc.zeros(); + NO_cool_scgc.set_size(nLons, nLats, nAlts); + NO_cool_scgc.zeros(); heating_efficiency = input.get_euv_heating_eff_neutrals(); + // bulk ion_neutral collisional acceleration: + acc_ion_collisions = make_cube_vector(nLons, nLats, nAlts, 3); + // bulk coriolis acceleration: + acc_coriolis = make_cube_vector(nLons, nLats, nAlts, 3); + + // bulk ion_neutral collisional acceleration: + acc_sources_total = make_cube_vector(nLons, nLats, nAlts, 3); + // This gets a bunch of the species-dependent characteristics: iErr = read_planet_file(planet); @@ -162,6 +198,7 @@ int Neutrals::read_planet_file(Planets planet) { int iErr = 0; std::string hash; std::ifstream infile_ptr; + int doAdvect; report.print(3, "In read_planet_file for Neutrals"); @@ -177,7 +214,13 @@ int Neutrals::read_planet_file(Planets planet) { species[iSpecies].vibe = neutrals["vibration"][iSpecies]; species[iSpecies].thermal_cond = neutrals["thermal_cond"][iSpecies]; species[iSpecies].thermal_exp = neutrals["thermal_exp"][iSpecies]; - species[iSpecies].DoAdvect = neutrals["advect"][iSpecies]; + doAdvect = neutrals["advect"][iSpecies]; + + if (doAdvect == 0) + species[iSpecies].DoAdvect = false; + else + species[iSpecies].DoAdvect = true; + species[iSpecies].lower_bc_density = neutrals["BC"][iSpecies]; } @@ -201,23 +244,41 @@ int Neutrals::read_planet_file(Planets planet) { } //---------------------------------------------------------------------- -// Fill With Hydrostatic Solution (all species) +// Fill With Hydrostatic Solution (all ADVECTED species) // - iEnd is NOT included (python style)! +// - only do advected, since others are probably chemistry dominated //---------------------------------------------------------------------- void Neutrals::fill_with_hydrostatic(int64_t iStart, int64_t iEnd, - Grid grid) { + Grid &grid) { - for (int iSpecies = 0; iSpecies < nSpecies; iSpecies++) { - // Integrate with hydrostatic equilibrium up: - for (int iAlt = iStart; iAlt < iEnd; iAlt++) { - species[iSpecies].density_scgc.slice(iAlt) = - temperature_scgc.slice(iAlt - 1) / - temperature_scgc.slice(iAlt) % - species[iSpecies].density_scgc.slice(iAlt - 1) % - exp(-grid.dalt_lower_scgc.slice(iAlt) / - species[iSpecies].scale_height_scgc.slice(iAlt)); + int64_t iNeutral, iSpecies; + + int64_t iX, iY, iZ; + int64_t nX = grid.get_nX(); + int64_t nY = grid.get_nY(); + int64_t nGCs = grid.get_nGCs(); + int64_t iFirst; + + for (iNeutral = 0; iNeutral < nSpeciesAdvect; iNeutral++) { + iSpecies = species_to_advect[iNeutral]; + + for (iX = nGCs; iX < nX - nGCs; iX++) { + for (iY = nGCs; iY < nY - nGCs; iY++) { + iFirst = grid.first_lower_gc(iX, iY) + iStart; + + // Integrate with hydrostatic equilibrium up: + for (int iAlt = iFirst; iAlt < iEnd; iAlt++) { + species[iSpecies].density_scgc(iX, iY, iAlt) = + temperature_scgc(iX, iY, iAlt - 1) / + temperature_scgc(iX, iY, iAlt) * + species[iSpecies].density_scgc(iX, iY, iAlt - 1) * + exp(-grid.dr_edge(iX, iY, iAlt) / + species[iSpecies].scale_height_scgc(iX, iY, iAlt)); + + } + } } } @@ -233,16 +294,28 @@ void Neutrals::fill_with_hydrostatic(int64_t iStart, void Neutrals::fill_with_hydrostatic(int64_t iSpecies, int64_t iStart, int64_t iEnd, - Grid grid) { - - // Integrate with hydrostatic equilibrium up: - for (int iAlt = iStart; iAlt < iEnd; iAlt++) { - species[iSpecies].density_scgc.slice(iAlt) = - temperature_scgc.slice(iAlt - 1) / - temperature_scgc.slice(iAlt) % - species[iSpecies].density_scgc.slice(iAlt - 1) % - exp(-grid.dalt_lower_scgc.slice(iAlt) / - species[iSpecies].scale_height_scgc.slice(iAlt)); + Grid &grid) { + + int64_t iX, iY, iZ; + int64_t nX = grid.get_nX(); + int64_t nY = grid.get_nY(); + int64_t nGCs = grid.get_nGCs(); + int64_t iFirst; + + for (iX = nGCs; iX < nX - nGCs; iX++) { + for (iY = nGCs; iY < nY - nGCs; iY++) { + iFirst = grid.first_lower_gc(iX, iY) + iStart; + + // Integrate with hydrostatic equilibrium up:I + for (int iAlt = iFirst; iAlt < iEnd; iAlt++) { + species[iSpecies].density_scgc(iX, iY, iAlt) = + temperature_scgc(iX, iY, iAlt - 1) / + temperature_scgc(iX, iY, iAlt) * + species[iSpecies].density_scgc(iX, iY, iAlt - 1) * + exp(-grid.dr_edge(iX, iY, iAlt) / + species[iSpecies].scale_height_scgc(iX, iY, iAlt)); + } + } } calc_mass_density(); @@ -285,7 +358,7 @@ void Neutrals::nan_test(std::string variable) { // Checks for nans and +/- infinities in density, temp, and velocity //---------------------------------------------------------------------- -bool Neutrals::check_for_nonfinites() { +bool Neutrals::check_for_nonfinites(std::string location) { bool isBad = false; bool didWork = true; @@ -293,13 +366,29 @@ bool Neutrals::check_for_nonfinites() { if (isBad) { report.error("non-finite found in neutral density!"); + report.error("from location : " + location); didWork = false; } + int64_t iSpecies; + + for (iSpecies = 0; iSpecies < nSpecies; iSpecies++) { + isBad = !all_finite(species[iSpecies].density_scgc, + species[iSpecies].cName + " density"); + + if (isBad) { + report.error("non-finite found in " + + species[iSpecies].cName + " density!"); + report.error("from location : " + location); + didWork = false; + } + } + isBad = !all_finite(temperature_scgc, "temperature_scgc"); if (isBad) { report.error("non-finite found in neutral temperature!"); + report.error("from location : " + location); didWork = false; } @@ -307,9 +396,24 @@ bool Neutrals::check_for_nonfinites() { if (isBad) { report.error("non-finite found in neutral velocity!"); + report.error("from location : " + location); didWork = false; } + didWork = sync_across_all_procs(didWork); + + for (iSpecies = 0; iSpecies < nSpecies; iSpecies++) { + isBad = !all_finite(species[iSpecies].velocity_vcgc, + species[iSpecies].cName + " velocity!"); + + if (isBad) { + report.error("non-finite found in " + + species[iSpecies].cName + " velocity!"); + report.error("from location : " + location); + didWork = false; + } + } + return didWork; } @@ -318,7 +422,7 @@ bool Neutrals::check_for_nonfinites() { // This will return -1 if the species is not found or name is empty //---------------------------------------------------------------------- -int Neutrals::get_species_id(std::string name) { +int Neutrals::get_species_id(const std::string &name) const { std::string function = "Neutrals::get_species_id"; static int iFunction = -1; @@ -343,7 +447,8 @@ int Neutrals::get_species_id(std::string name) { // Read/Write restart files for the neutrals //---------------------------------------------------------------------- -bool Neutrals::restart_file(std::string dir, bool DoRead) { +bool Neutrals::restart_file(std::string dir, std::string cGridtype, + bool DoRead) { std::string filename; bool DidWork = true; @@ -352,13 +457,14 @@ bool Neutrals::restart_file(std::string dir, bool DoRead) { OutputContainer RestartContainer; RestartContainer.set_directory(dir); - RestartContainer.set_filename("neutrals_" + cMember + "_" + cGrid); + RestartContainer.set_filename("neutrals_" + cMember + "_" + cGrid + "_" + + cGridtype); try { if (DoRead) RestartContainer.read(); else { - RestartContainer.set_version(0.1); + RestartContainer.set_version(aether_version); RestartContainer.set_time(0.0); } @@ -372,6 +478,21 @@ bool Neutrals::restart_file(std::string dir, bool DoRead) { RestartContainer.store_variable(cName, density_unit, species[iSpecies].density_scgc); + + // ---------------------------- + // Velocity (per neutral) + // ---------------------------- + for (int iDir = 0; iDir < 3; iDir++) { + cName = velocity_name[iDir] + " (" + species[iSpecies].cName + ")"; + + if (DoRead) + species[iSpecies].velocity_vcgc[iDir] = + RestartContainer.get_element_value(cName); + else + RestartContainer.store_variable(cName, + velocity_unit, + species[iSpecies].velocity_vcgc[iDir]); + } } cName = temperature_name; diff --git a/src/neutrals_advect.cpp b/src/neutrals_advect.cpp index a80dc274..21ba1ab6 100644 --- a/src/neutrals_advect.cpp +++ b/src/neutrals_advect.cpp @@ -9,7 +9,7 @@ // This is where we will call the different advection schemes // ----------------------------------------------------------------------------- -bool Neutrals::advect_vertical(Grid grid, Times time) { +bool Neutrals::advect_vertical(Grid &grid, Times time) { bool didWork = true; @@ -17,8 +17,10 @@ bool Neutrals::advect_vertical(Grid grid, Times time) { static int iFunction = -1; report.enter(function, iFunction); - if (input.get_advection_neutrals_vertical() == "hydro") - fill_with_hydrostatic(1, grid.get_nZ(), grid); + if (grid.get_IsDipole() || + input.get_advection_neutrals_vertical() == "hydro") + fill_with_hydrostatic(0, grid.get_nZ(), grid); + else if (input.get_advection_neutrals_vertical() == "rusanov") solver_vertical_rusanov(grid, time); else { @@ -33,3 +35,44 @@ bool Neutrals::advect_vertical(Grid grid, Times time) { return didWork; } +bool Neutrals::advect_horizontal(Grid & grid, Times & time) { + bool didWork = true; + + std::string function = "Neutrals::advance_horizontal"; + static int iFunction = -1; + report.enter(function, iFunction); + + if (grid.iGridShape_ == iCubesphere_) { + if (input.get_advection_neutrals_horizontal() == "advect_test") + solver_horizontal_RK4_advection(grid, time); + else if (input.get_advection_neutrals_horizontal() == "fv") + solver_horizontal_RK1_rochi(grid, time); + + else { + std::cout << "Horizontal solver not found!\n"; + std::cout << " ==> Requested : " + << input.get_advection_neutrals_horizontal() + << "\n"; + didWork = false; + } + } else + advect_sphere(grid, time); + + + report.exit(function); + return didWork; +} + +bool Neutrals::advect_horizontal_advection(Grid & grid, Times & time) { + bool didWork = true; + + std::string function = "Neutrals::advance_horizontal_advection"; + static int iFunction = -1; + report.enter(function, iFunction); + + //solver_horizontal_rusanov_advection(grid, time); + solver_horizontal_RK4_advection(grid, time); + + report.exit(function); + return didWork; +} diff --git a/src/neutrals_bcs.cpp b/src/neutrals_bcs.cpp index 0c7c4017..ab597ab2 100644 --- a/src/neutrals_bcs.cpp +++ b/src/neutrals_bcs.cpp @@ -20,7 +20,7 @@ // set_bcs - This is for setting the vertical BCs //---------------------------------------------------------------------- -bool Neutrals::set_bcs(Grid grid, +bool Neutrals::set_bcs(Grid &grid, Times time, Indices indices) { @@ -30,7 +30,7 @@ bool Neutrals::set_bcs(Grid grid, bool didWork = true; - if (input.get_nAltsGeo() > 1) { + if (grid.get_nAlts(false) > 1) { didWork = set_lower_bcs(grid, time, indices); if (didWork) @@ -51,7 +51,7 @@ bool Neutrals::set_bcs(Grid grid, // set lower boundary conditions for the neutrals //---------------------------------------------------------------------- -bool Neutrals::set_upper_bcs(Grid grid) { +bool Neutrals::set_upper_bcs(Grid &grid) { std::string function = "Neutrals::set_upper_bcs"; static int iFunction = -1; @@ -93,7 +93,7 @@ bool Neutrals::set_upper_bcs(Grid grid) { h = species[iSpecies].scale_height_scgc.slice(iAlt); species[iSpecies].density_scgc.slice(iAlt) = species[iSpecies].density_scgc.slice(iAlt - 1) % - exp(-grid.dalt_lower_scgc.slice(iAlt) / h); + exp(-grid.dk_edge_m.slice(iAlt) / h); } } @@ -105,7 +105,7 @@ bool Neutrals::set_upper_bcs(Grid grid) { // set lower boundary conditions for the neutrals //---------------------------------------------------------------------- -bool Neutrals::set_lower_bcs(Grid grid, +bool Neutrals::set_lower_bcs(Grid &grid, Times time, Indices indices) { @@ -118,6 +118,8 @@ bool Neutrals::set_lower_bcs(Grid grid, json bcs = input.get_boundary_condition_types(); int64_t nGCs = grid.get_nGCs(); int64_t iSpecies, iAlt, iDir; + int64_t nLats = grid.get_nLats(); + int64_t nLons = grid.get_nLons(); std::string bcsType = mklower(bcs["type"]); @@ -125,7 +127,10 @@ bool Neutrals::set_lower_bcs(Grid grid, // MSIS BCs - only works if FORTRAN is enabled! //----------------------------------------------- - if (bcsType == "msis") { + // ALB changes to lower BCs only really work now for dipole grid. Don't use msis + // if we are handed a dipole grid. + + if (bcsType == "msis" && !grid.IsDipole) { report.print(2, "Using MSIS for Boundary Conditions"); @@ -181,45 +186,139 @@ bool Neutrals::set_lower_bcs(Grid grid, } // type == Msis + precision_t sh_ave; + //----------------------------------------------- - // Planet BCs - set to fixed constant values. + // Fill the lower+ ghost cells //----------------------------------------------- + // - Planet BCs are in here too, can be refactored out + // - Dipole grid must use planet BCs, for now. + // - This kind-of assumes nGCs=2, so may need to be updated. + // - If the first_lower_gc is at iAlt = 1, this may cause issues. + // - The equator-most (j-hat) grid cell will be entirely below min_alt! + for (int iLon = 0; iLon < nLons; iLon++) { + for (int iLat = 0; iLat < nLats; iLat++) { + + // k-index of 1st lower ghost cell is not constant on the dipole grid. + // On the latlon grid with nGCS=2, this will be 1 + iAlt = grid.first_lower_gc(iLon, iLat); + temperature_scgc(iLon, iLat, iAlt) = initial_temperatures[0]; + // Set all lower ghost cells to bottom temperature: + temperature_scgc.subcube(iLon, iLat, 0, iLon, iLat, iAlt - 1).fill( + temperature_scgc(iLon, iLat, iAlt)); + + precision_t t = temperature_scgc(iLon, iLat, 0); + precision_t g = abs(grid.gravity_vcgc[2](iLon, iLat, iAlt)); + + precision_t alt1 = grid.geoAlt_scgc(iLon, iLat, iAlt); + precision_t alt0 = grid.altitude_lower_bc; + precision_t dz = alt1 - alt0; - if (bcsType == "planet") { - - report.print(2, "setting lower bcs to planet"); + for (iSpecies = 0; iSpecies < nSpecies; iSpecies++) { - // Set the lower boundary condition: - for (iSpecies = 0; iSpecies < nSpecies; iSpecies++) { - species[iSpecies].density_scgc.slice(0). - fill(species[iSpecies].lower_bc_density); + precision_t m = mean_major_mass_scgc(iLon, iLat, iAlt); + + //if (m == 0) + m = species[iSpecies].mass; + + precision_t h = cKB * t / (m * g); + precision_t factor = exp(-dz / h); + + //----------------------------------------------- + // Planet BCs - set to fixed constant values. + //----------------------------------------------- + if (bcsType == "planet" || grid.IsDipole) { + + // Fill all lower ghost cells density with lower boundary condition: + species[iSpecies].density_scgc.subcube(iLon, iLat, 0, + iLon, iLat, iAlt - 1).fill( + factor * + species[iSpecies].lower_bc_density); + } // planet bc type + + // 1st ghost cell density is filled with a hydrostatic solution. + sh_ave = (species[iSpecies].scale_height_scgc(iLon, iLat, iAlt) + + species[iSpecies].scale_height_scgc(iLon, iLat, iAlt + 1)) / 2; + + species[iSpecies].density_scgc(iLon, iLat, iAlt) = + temperature_scgc(iLon, iLat, iAlt + 1) + / temperature_scgc(iLon, iLat, iAlt) + * species[iSpecies].density_scgc(iLon, iLat, iAlt + 1) + * exp(-grid.dr_edge(iLon, iLat, iAlt) / sh_ave); + + // Vertical velocities: (In GITM this projected down with mesh coeffs) + // Take lowest physical cell's vertical velocity and project it down nGCs cells. + // All "GCs" lower than that have 0 vertical velocity since they're nonphysical. + species[iSpecies].velocity_vcgc[2].subcube( + iLon, iLat, iAlt - 1, size(1, 1, nGCs)).fill( + species[iSpecies].velocity_vcgc[2](iLon, iLat, iAlt + 1)); + //project_onesided_alt_3rd(species[iSpecies].velocity_vcgc[2], grid, iAlt); + + if (iAlt > nGCs - 1) { // Fill all lower GCs w/ zero vertical velocity + species[iSpecies].velocity_vcgc[2].subcube(iLon, iLat, 0, + size(1, 1, iAlt - 1)).zeros(); + + } + } } + } - temperature_scgc.slice(0).fill(initial_temperatures[0]); - didWork = true; + // This section is for the dipole grid. If the field-lines are + // closed, then we will treat the N/S ghostcells as LOWER boundaries. + // If thr grid is in the south, then treat the north bounday as the + // lower boundary. If the grid is in the north, treat the south boundary + // as the lower boundary. + // Because we are expecting to be chemically dominant, the lower BCs don't + // matter as much for the ions. We really just want to fill them with some + // reasonable values. + + int64_t nX = grid.get_nX(); + int64_t nY = grid.get_nY(); + int64_t iX, iY, iYs, iYe, iFirst; + + if (grid.setNorthAsDown) { + // First physical cell: + iFirst = nY - nGCs - 1; + iYs = nY - nGCs; + iYe = nY; } - // fill the second+ grid cells with the bottom temperature: - for (iAlt = 1; iAlt < nGCs; iAlt++) - temperature_scgc.slice(iAlt) = temperature_scgc.slice(iAlt - 1); + if (grid.setSouthAsDown) { + // First physical cell: + iFirst = nGCs; + iYs = 0; + iYe = nGCs; + } - // fill the second+ grid cells with a hydrostatic solution: - for (iSpecies = 0; iSpecies < nSpecies; iSpecies++) - fill_with_hydrostatic(iSpecies, 1, nGCs, grid); + if (grid.setNorthAsDown || grid.setSouthAsDown) { - // Force vertical velocities to be zero in the ghost cells: - for (iDir = 0; iDir < 3; iDir++) { - for (iAlt = 0; iAlt < nGCs; iAlt++) { - for (iSpecies = 0; iSpecies < nSpecies; iSpecies++) { - // species velocity: - species[iSpecies].velocity_vcgc[iDir].slice(iAlt).zeros(); - } + for (iX = 0; iX < nX; iX++) { + for (int iY = iYs; iY < iYe; iY++) { + // Bulk Quantities: + temperature_scgc.tube(iX, iY) = temperature_scgc.tube(iX, iFirst); + + // For each species: + for (int iSpecies = 0; iSpecies < nSpecies; iSpecies++) { + // Assume each species falls off a bit. + // this BC shouldn't matter, since we are not going to do + // horizontal advection on neutrals: + species[iSpecies].density_scgc.tube(iX, iY) = + 0.95 * species[iSpecies].density_scgc.tube(iX, iFirst); + } + + for (iAlt = 0; iAlt <= grid.first_lower_gc(iX, iY); iAlt++) { + temperature_scgc(iX, iY, iAlt) = + temperature_scgc(iX, iFirst, grid.first_lower_gc(iX, iFirst)); + } - // bulk velocity: - velocity_vcgc[iDir].slice(iAlt).zeros(); + } } } + didWork = true; + + calc_bulk_velocity(); + if (!didWork) { report.error("issue with lower BCs!"); report.error("maybe check boundaryconditions type : " + bcsType); @@ -238,7 +337,7 @@ bool Neutrals::set_lower_bcs(Grid grid, // iDir = 3 -> -y //---------------------------------------------------------------------- -bool Neutrals::set_horizontal_bcs(int64_t iDir, Grid grid) { +bool Neutrals::set_horizontal_bcs(int64_t iDir, Grid &grid) { std::string function = "Neutrals::set_horizontal_bcs"; static int iFunction = -1; @@ -248,7 +347,7 @@ bool Neutrals::set_horizontal_bcs(int64_t iDir, Grid grid) { int64_t nX = grid.get_nX(), iX; int64_t nY = grid.get_nY(), iY; - int64_t nAlts = grid.get_nAlts(), iAlt; + int64_t nAlts = grid.get_nAlts(true), iAlt; int64_t nGCs = grid.get_nGCs(); int64_t iV; @@ -318,7 +417,7 @@ bool Neutrals::set_horizontal_bcs(int64_t iDir, Grid grid) { } } - // iDir = 2 is left BC: + // iDir = 3 is lower BC: if (iDir == 3) { for (iX = 0; iX < nX; iX++) { for (iY = nGCs - 1; iY >= 0; iY--) { diff --git a/src/neutrals_energy.cpp b/src/neutrals_energy.cpp new file mode 100644 index 00000000..abadb715 --- /dev/null +++ b/src/neutrals_energy.cpp @@ -0,0 +1,87 @@ +// Copyright 2020, the Aether Development Team (see doc/dev_team.md +// for members) Full license can be found in License.md + +#include "aether.h" + +// --------------------------------------------------------------------------- +// Calculate thermal conduction +// --------------------------------------------------------------------------- + +void Neutrals::update_temperature(Grid &grid, Times time) { + + std::string function = "Neutrals::calc_conduction"; + static int iFunction = -1; + report.enter(function, iFunction); + + precision_t dt; + int64_t iLon, iLat; + int64_t nLons = grid.get_nLons(); + int64_t nLats = grid.get_nLats(); + int64_t nAlts = grid.get_nAlts(); + int64_t nGCs = grid.get_nGCs(); + + dt = time.get_dt(); + + if (nAlts == 2 * nGCs + 1) { + // Simply update the temperature if there is no conduction: + temperature_scgc = temperature_scgc + dt * heating_sources_total; + conduction_scgc.zeros(); + } else { + + arma_cube rhocvr23d(nLons, nLats, nAlts); + arma_cube lambda3d(nLons, nLats, nAlts); + arma_cube prandtl3d(nLons, nLats, nAlts); + + rhocvr23d = rho_scgc % Cv_scgc % grid.radius2_scgc; + + // Need to make this eddy * rho * cv: + if (input.get_use_eddy_energy()) + prandtl3d = kappa_eddy_scgc % rho_scgc % Cv_scgc; + else + prandtl3d.zeros(); + + lambda3d = (kappa_scgc + prandtl3d) % grid.radius2_scgc; + + arma_vec temp1d(nAlts); + arma_vec lambda1d(nAlts); + arma_vec rhocvr21d(nAlts); + arma_vec dalt1d(nAlts); + arma_vec sources1d(nAlts); + arma_vec conduction1d(nAlts); + + for (iLon = 0; iLon < nLons; iLon++) { + for (iLat = 0; iLat < nLats; iLat++) { + + temp1d = temperature_scgc.tube(iLon, iLat); + lambda1d = lambda3d.tube(iLon, iLat); + rhocvr21d = rhocvr23d.tube(iLon, iLat); + sources1d = heating_sources_total.tube(iLon, iLat); + + //temp1d = temp1d + dt * sources1d; + //sources1d.zeros(); + + dalt1d = grid.dk_edge_m.tube(iLon, iLat); + conduction1d.zeros(); + + conduction1d = solver_conduction(temp1d, + lambda1d, + rhocvr21d, + sources1d, + dalt1d, + dt, + nGCs, + false); + temperature_scgc.tube(iLon, iLat) = conduction1d; + + // Store the difference (as a rate), so we can output it later + // if we want: + conduction_scgc.tube(iLon, iLat) = + (conduction1d - temp1d) / dt - sources1d; + } // lat + } // lon + + } // if nAlts == 1 + 2*GCs + + report.exit(function); + return; +} diff --git a/src/neutrals_ics.cpp b/src/neutrals_ics.cpp index 9f67e005..7e997cd0 100644 --- a/src/neutrals_ics.cpp +++ b/src/neutrals_ics.cpp @@ -7,7 +7,10 @@ // ----------------------------------------------------------------------------- // Set initial conditions for the neutrals. -// Two methods implemented so far: +// If user wants to restart, then read the restart files. +// Otherwise, initialize the neutrals. +// +// Two methods of initialization implemented so far: // - Planet: Use fixed density values in the planet.in file and the // temperature profile to set the densities and temperature. // Densities are filled with hydrostatic solution. @@ -16,7 +19,7 @@ // file and fill with hydrostatic. // ----------------------------------------------------------------------------- -bool Neutrals::initial_conditions(Grid grid, +bool Neutrals::initial_conditions(Grid &grid, Times time, Indices indices) { @@ -30,25 +33,31 @@ bool Neutrals::initial_conditions(Grid grid, int64_t iLon, iLat, iAlt, iA; precision_t alt, r; - int64_t nAlts = grid.get_nZ(); + int64_t nAlts = grid.get_nZ(true); + int64_t nGCs = grid.get_nGCs(); + int64_t nLons = grid.get_nLons(); + int64_t nLats = grid.get_nLats(); report.print(3, "Creating Neutrals initial_condition"); + // ---------------------------------------------------------- + // Restart file: + if (input.get_do_restart()) { report.print(1, "Restarting! Reading neutral files!"); - didWork = restart_file(input.get_restartin_dir(), DoRead); + didWork = restart_file(input.get_restartin_dir(), grid.get_gridtype(), DoRead); - if (!didWork) { + if (!didWork) report.error("Reading Restart for Neutrals Failed!!!"); - \ - } } else { json ics = input.get_initial_condition_types(); std::string icsType = mklower(ics["type"]); - if (icsType == "msis") { + // ---------------------------------------------------------- + // MSIS: + if (icsType == "msis") { report.print(2, "Using MSIS for Initial Conditions"); Msis msis; @@ -100,7 +109,11 @@ bool Neutrals::initial_conditions(Grid grid, } // msis init worked ok } // type = msis + // ---------------------------------------------------------- + // Planet: + if (icsType == "planet") { + report.print(2, "Using planet for Initial Conditions"); didWork = true; @@ -109,68 +122,114 @@ bool Neutrals::initial_conditions(Grid grid, // temperature profile in the planet.in file. // --------------------------------------------------------------------- - int64_t nLons = grid.get_nLons(); - int64_t nLats = grid.get_nLats(); - int64_t nAlts = grid.get_nAlts(); - - // Let's assume that the altitudes are not dependent on lat/lon: + // Let's assume that the altitudes are dependent on lat/lon: arma_vec alt1d(nAlts); arma_vec temp1d(nAlts); - arma_mat H2d(nLons, nLats); - - alt1d = grid.geoAlt_scgc.tube(0, 0); - if (nInitial_temps > 0) { - for (iAlt = 0; iAlt < nAlts; iAlt++) { - alt = alt1d(iAlt); - - // Find temperatures: - if (alt <= initial_altitudes[0]) - temp1d[iAlt] = initial_temperatures[0]; - - else { - if (alt >= initial_altitudes[nInitial_temps - 1]) - temp1d[iAlt] = initial_temperatures[nInitial_temps - 1]; - - else { - // Linear interpolation! - iA = 0; - - while (alt > initial_altitudes[iA]) - iA++; - - iA--; - // alt will be between iA and iA+1: - r = (alt - initial_altitudes[iA]) / - (initial_altitudes[iA + 1] - initial_altitudes[iA]); - temp1d[iAlt] = - (1.0 - r) * initial_temperatures[iA] + - (r) * initial_temperatures[iA + 1]; + for (iLon = 0; iLon < nLons; iLon++) { + for (iLat = 0; iLat < nLats; iLat++) { + alt1d = grid.geoAlt_scgc.tube(iLon, iLat); + + for (iAlt = 0; iAlt < nAlts; iAlt++) { + alt = alt1d(iAlt); + + // Find temperatures: + if (alt <= initial_altitudes[0]) + temp1d[iAlt] = initial_temperatures[0]; + + else { + if (alt >= initial_altitudes[nInitial_temps - 1]) + temp1d[iAlt] = initial_temperatures[nInitial_temps - 1]; + + else { + // Linear interpolation! + iA = 0; + + while (alt > initial_altitudes[iA]) + iA++; + + iA--; + // alt will be between iA and iA+1 + r = (alt - initial_altitudes[iA]) / + (initial_altitudes[iA + 1] - initial_altitudes[iA]); + temp1d[iAlt] = + (1.0 - r) * initial_temperatures[iA] + + (r) * initial_temperatures[iA + 1]; + } + } } + + temperature_scgc.tube(iLon, iLat) = temp1d; } } } else - temp1d = 200.0; + temperature_scgc.fill(200.0); - // spread the 1D temperature across the globe: - for (iLon = 0; iLon < nLons; iLon++) { - for (iLat = 0; iLat < nLats; iLat++) - temperature_scgc.tube(iLon, iLat) = temp1d; - } + // Make the initial condition in the lower ghost cells to be consistent + // with the actual lower BC: + for (iLon = 0; iLon < nLons; iLon ++) { + for (iLat = 0; iLat < nLats; iLat++) { + for (int iSpecies = 0; iSpecies < nSpecies; iSpecies++) { - // Set the lower boundary condition: - for (int iSpecies = 0; iSpecies < nSpecies; iSpecies++) { - species[iSpecies].density_scgc.slice(0). - fill(species[iSpecies].lower_bc_density); + species[iSpecies].density_scgc.subcube( + iLon, iLat, 0, iLon, iLat, grid.first_lower_gc(iLon, iLat) + 1).fill( + species[iSpecies].lower_bc_density); + + } + } } + report.print(2, "Calculating scale height"); calc_scale_height(grid); - fill_with_hydrostatic(1, nAlts, grid); + report.print(2, "setting lower BCs"); + set_lower_bcs(grid, time, indices); + report.print(2, "Filling with hydrostatic"); + + for (int iSpecies = 0; iSpecies < nSpecies; iSpecies++) + fill_with_hydrostatic(iSpecies, nGCs - 1, nAlts, grid); } // type = planet } + /* + This section is for putting an initial blob into the simulation + to test the advection solver. + precision_t lon_0 = 0.0; + precision_t lat_0 = 0.0; + precision_t r_0 = 150.0 * 1000.0 * 10.0; + + for (iAlt = 0; iAlt < nAlts; iAlt++) { + + for (int64_t iLat = 0; iLat < nLats; iLat++) { + for (int64_t iLon = 0; iLon < nLons; iLon++) { + precision_t curr_lat = grid.geoLat_scgc(iLon, iLat, iAlt); + precision_t curr_lon = grid.geoLon_scgc(iLon, iLat, iAlt); + precision_t R = grid.radius_scgc(iLon, iLat, iAlt); + + // Calculate great circle distance + precision_t dlon_2 = (curr_lon - lon_0) / 2.0; + precision_t dlat_2 = (curr_lat - lat_0) / 2.0; + + precision_t r_d = 2.0 * R * asin(sqrt(sin(dlat_2) * sin(dlat_2) + sin( + dlon_2) * sin(dlon_2) * cos(curr_lat) * cos(lat_0))); + + if (r_d < r_0) { + for (int iSpecies = 0; iSpecies < nSpecies; iSpecies++) { + species[iSpecies].density_scgc(iLon, iLat, + iAlt) = species[iSpecies].density_scgc(iLon, iLat, iAlt) * 10.; + std::cout << "increasing density!\n"; + } + } + } + } + } + */ + + + // ensure that the densities are all within bounds: + clamp_density(); + if (!didWork) report.error("Issue with initial conditions!"); @@ -178,5 +237,221 @@ bool Neutrals::initial_conditions(Grid grid, return didWork; } +bool Neutrals::cosine_bell_ic(Grid grid, + Times time, + Indices indices, + Planets planet) { + std::string function = "Neutrals::cosine_bell_ic"; + static int iFunction = -1; + report.enter(function, iFunction); + + // Planet.get_radius() takes in latitude + // but at current stage is unimplemented + // Anyway, we use equator radius as assumption for CubeSphere + // CubeSphere must be a perfect sphere!! + precision_t planet_R = planet.get_radius(0); + + // radius of planet + altitude + // just pick alt at (0,0) loction + arma_vec R_Alts = grid.geoAlt_scgc.tube(0, 0) + planet_R; + + + /** Get a bunch of constants for setting up the ic **/ + precision_t R = R_Alts(2); // select R in the middle + //7.37128e+06 meters Earth radius + 1000km height + //std::cout << R << std::endl; + + // Determine flow direction + // 0 - Equatorial + // pi/2 - Meridional + // pi/4 - NE direction + precision_t alpha_0 = 0.; + + // Scaling factor for physical velocity + // 12 day period in miliseconds + precision_t u_0 = cTWOPI * R / (12.*24.*60.*60.); + + // Radius of the cosine bell + precision_t r_0 = R / 3.; + + // Center of the cosine bell + precision_t lon_0 = 7.*cPI / 4. + cPI / 8; + precision_t lat_0 = 0.; + + // Maximum height for the cosine bell + precision_t h_0 = 1000.; + + // Some grid dimensions and coordinates + int64_t nLats = grid.get_nLats(); + int64_t nLons = grid.get_nLons(); + int64_t nAlts = grid.get_nAlts(); + arma_mat lat_grid = grid.geoLat_scgc.slice(2); + arma_mat lon_grid = grid.geoLon_scgc.slice(2); + + // Calculate for physical velocity for every altitude + // First we prepare velocities for one slice + arma_mat slice_u = velocity_vcgc[0].slice(2); + arma_mat slice_v = velocity_vcgc[1].slice(2); + + // Fill velocities in one slice + for (int64_t iLat = 0; iLat < nLats; iLat++) { + for (int64_t iLon = 0; iLon < nLons; iLon++) { + precision_t curr_lat = lat_grid(iLon, iLat); + precision_t curr_lon = lon_grid(iLon, iLat); + slice_u(iLon, iLat) = u_0 * (cos(alpha_0) * cos(curr_lat) + sin(alpha_0) * cos( + curr_lon) * sin(curr_lat)); + slice_v(iLon, iLat) = -u_0 * sin(alpha_0) * sin(curr_lon); + } + } + + // Update this slice of velocity to all slices (for completeness) + for (int64_t iAlt = 0; iAlt < nAlts; iAlt++) { + velocity_vcgc[0].slice(iAlt) = slice_u; + velocity_vcgc[1].slice(iAlt) = slice_v; + } + + // Calculate the cosine bell or rho_scgc + // First, again take a slice + arma_mat slice_rho = rho_scgc.slice(2); + + // Fill rho in one slice + for (int64_t iLat = 0; iLat < nLats; iLat++) { + for (int64_t iLon = 0; iLon < nLons; iLon++) { + precision_t curr_lat = lat_grid(iLon, iLat); + precision_t curr_lon = lon_grid(iLon, iLat); + + // Calculate great circle distance + precision_t dlon_2 = (curr_lon - lon_0) / 2.0; + precision_t dlat_2 = (curr_lat - lat_0) / 2.0; + + precision_t r_d = 2.0 * R * asin(sqrt(sin(dlat_2) * sin(dlat_2) + sin( + dlon_2) * sin(dlon_2) * cos(curr_lat) * cos(lat_0))); + + if (r_d < r_0) + slice_rho(iLon, iLat) = (h_0 / 2) * (1 + cos(cPI * r_d / r_0)); + + else + slice_rho(iLon, iLat) = 0.; + } + } + + // Update this slice of rho to all slices (for completeness) + for (int64_t iAlt = 0; iAlt < nAlts; iAlt++) { + rho_scgc.slice(iAlt) = slice_rho; + + // Do zero concentration conversion + for (int64_t iSpec = 0; iSpec < nSpecies; iSpec++) + species[iSpec].density_scgc.slice(iAlt) = slice_rho / species[iSpec].mass; + } + + // Add some velocity pertubation + //std::cout << velocity_vcgc[0].slice(2) << std::endl; + //std::cout << rho_scgc.slice(2) << std::endl; + + return 1; +} + +bool Neutrals::blob_ic(Grid grid, + Times time, + Indices indices, + Planets planet) { + std::string function = "Neutrals::blob_ic"; + static int iFunction = -1; + report.enter(function, iFunction); + + // Planet.get_radius() takes in latitude + // but at current stage is unimplemented + // Anyway, we use equator radius as assumption for CubeSphere + // CubeSphere must be a perfect sphere!! + precision_t planet_R = planet.get_radius(0); + + // radius of planet + altitude + // just pick alt at (0,0) loction + arma_vec R_Alts = grid.geoAlt_scgc.tube(0, 0) + planet_R; + + + /** Get a bunch of constants for setting up the ic **/ + precision_t R = R_Alts(2); // select R in the middle + //7.37128e+06 meters Earth radius + 1000km height + //std::cout << R << std::endl; + + // Radius of the blob + // Hardcoded + precision_t r_0 = 111321 * 10; + + // Center of the blob + precision_t lon_0 = 7.*cPI / 4. - cPI / 8.; + precision_t lat_0 = 0.; + + // Some grid dimensions and coordinates + int64_t nLats = grid.get_nLats(); + int64_t nLons = grid.get_nLons(); + int64_t nAlts = grid.get_nAlts(); + arma_mat lat_grid = grid.geoLat_scgc.slice(2); + arma_mat lon_grid = grid.geoLon_scgc.slice(2); + + // Calculate for physical velocity for every altitude + // First we prepare velocities for one slice + arma_mat slice_u = velocity_vcgc[0].slice(2); + arma_mat slice_v = velocity_vcgc[1].slice(2); + + // Fill velocities in one slice + for (int64_t iLat = 0; iLat < nLats; iLat++) { + for (int64_t iLon = 0; iLon < nLons; iLon++) { + slice_u(iLon, iLat) = 0.; + slice_v(iLon, iLat) = 0.; + } + } + + // Update this slice of velocity to all slices (for completeness) + for (int64_t iAlt = 0; iAlt < nAlts; iAlt++) { + velocity_vcgc[0].slice(iAlt) = slice_u; + velocity_vcgc[1].slice(iAlt) = slice_v; + } + + // Calculate the cosine bell or rho_scgc + // First, again take a slice + arma_mat slice_rho = rho_scgc.slice(2); + + // Fill rho in one slice + for (int64_t iLat = 0; iLat < nLats; iLat++) { + for (int64_t iLon = 0; iLon < nLons; iLon++) { + precision_t curr_lat = lat_grid(iLon, iLat); + precision_t curr_lon = lon_grid(iLon, iLat); + + // Calculate great circle distance + precision_t dlon_2 = (curr_lon - lon_0) / 2.0; + precision_t dlat_2 = (curr_lat - lat_0) / 2.0; + + precision_t r_d = 2.0 * R * asin(sqrt(sin(dlat_2) * sin(dlat_2) + sin( + dlon_2) * sin(dlon_2) * cos(curr_lat) * cos(lat_0))); + + if (r_d < r_0) + slice_rho(iLon, iLat) = 5e-12; + + else + slice_rho(iLon, iLat) = 1e-12; + } + } + + // Update this slice of rho to all slices (for completeness) + for (int64_t iAlt = 0; iAlt < nAlts; iAlt++) { + rho_scgc.slice(iAlt) = slice_rho; + + // Do zero concentration conversion + for (int64_t iSpec = 0; iSpec < nSpecies; iSpec++) + species[iSpec].density_scgc.slice(iAlt) = slice_rho / species[iSpec].mass; + } + + // Temperature setup + for (int64_t iAlt = 0; iAlt < nAlts; iAlt++) + temperature_scgc.slice(iAlt) = 600.*arma_mat(nLons, nLats, fill::ones); + + // Add some velocity pertubation + //std::cout << velocity_vcgc[0].slice(2) << std::endl; + //std::cout << rho_scgc.slice(2) << std::endl; + + return 1; +} diff --git a/src/neutrals_momentum_friction.cpp b/src/neutrals_momentum_friction.cpp index 30493882..f961236c 100644 --- a/src/neutrals_momentum_friction.cpp +++ b/src/neutrals_momentum_friction.cpp @@ -4,133 +4,207 @@ #include "aether.h" // --------------------------------------------------------------------- -// This calculates the acceleration due to neutral-neutral -// friction between species. -// dt was removed, since we can assume that it is 1.0 and then -// multiply by dt later. +// This calculates the velocities in one cell. The inputs are the +// updated velocities given all of the acceleration terms. This is the right +// side of the equation (source terms * dt + Vold). The velocities +// of all species are solved for together, since they are interdependent. +// This is done with a matrix inversion, and is the cell-by-cell +// implicit solver. There is a semi-implicit solver below. // --------------------------------------------------------------------- -arma_vec neutral_friction_one_cell(int64_t iLon, int64_t iLat, int64_t iAlt, - arma_vec &vels, - Neutrals &neutrals) { +arma_vec Neutrals::calc_friction_one_cell(int64_t iLon, int64_t iLat, + int64_t iAlt, + precision_t dt, arma_vec &vels) { std::string function = "neutral_friction_one_cell"; static int iFunction = -1; report.enter(function, iFunction); precision_t ktom, temp_dij; int64_t iSpecies, jSpecies, iSpecies_, jSpecies_; - static arma_mat matrix(neutrals.nSpeciesAdvect, neutrals.nSpeciesAdvect, - fill::zeros); - static arma_mat coefmatrix(neutrals.nSpeciesAdvect, neutrals.nSpeciesAdvect, - fill::zeros); + static arma_mat matrix(nSpeciesAdvect, nSpeciesAdvect, fill::zeros); + static arma_mat coefmatrix(nSpeciesAdvect, nSpeciesAdvect, fill::zeros); - for (iSpecies = 0; iSpecies < neutrals.nSpeciesAdvect; iSpecies++) { - iSpecies_ = neutrals.species_to_advect[iSpecies]; + for (iSpecies = 0; iSpecies < nSpeciesAdvect; iSpecies++) { + iSpecies_ = species_to_advect[iSpecies]; - Neutrals::species_chars & advected_neutral = - neutrals.species[iSpecies_]; + Neutrals::species_chars & advected_neutral = species[iSpecies_]; // ktom = boltzmann's constant * temperature / mass ktom = cKB * - neutrals.temperature_scgc(iLon, iLat, iAlt) / + temperature_scgc(iLon, iLat, iAlt) / advected_neutral.mass; - for (jSpecies = 0; jSpecies < neutrals.nSpeciesAdvect; jSpecies++) { - jSpecies_ = neutrals.species_to_advect[jSpecies]; + for (jSpecies = 0; jSpecies < nSpeciesAdvect; jSpecies++) { + jSpecies_ = species_to_advect[jSpecies]; if (iSpecies_ == jSpecies_) continue; // temp_dij holds the dij binary coefficients based upon the formulation by Banks and Kokarts. // These coefficients demand that: - // (1) density be in cm^-3 (hence the 1.0e-06) factor below - // (2) Additionally, the Dij's are in cm^2/s, thus the 1.0e-04 factor + // It is not clear where the 1000 comes from. Need to figure this out. temp_dij = - 1e-4 * advected_neutral.diff0[jSpecies_] * - pow(neutrals.temperature_scgc(iLon, iLat, iAlt), - advected_neutral.diff_exp[jSpecies_]) / - (neutrals.density_scgc(iLon, iLat, iAlt) * 1e-6); - + advected_neutral.diff0[jSpecies_] * + pow(temperature_scgc(iLon, iLat, iAlt), + advected_neutral.diff_exp[jSpecies_]) * 1000.0; coefmatrix(iSpecies, jSpecies) = - ktom * advected_neutral.density_scgc(iLon, iLat, iAlt) / - (temp_dij * neutrals.density_scgc(iLon, iLat, iAlt)); + ktom * species[jSpecies_].density_scgc(iLon, iLat, iAlt) / temp_dij; } // jSpec loop } // iSpec loop - matrix = -1 * coefmatrix; + matrix = -1 * coefmatrix * dt; // Fill in diagonal of matrix: - for (iSpecies = 0; iSpecies < neutrals.nSpeciesAdvect; iSpecies++) - matrix(iSpecies, iSpecies) = 1 + sum(coefmatrix.row(iSpecies)); + for (iSpecies = 0; iSpecies < nSpeciesAdvect; iSpecies++) + matrix(iSpecies, iSpecies) = 1 - sum(coefmatrix.row(iSpecies)); // initialize array of each neutral species' accelerations at (iLon, iLat, iAlt): - arma_vec accs(neutrals.nSpeciesAdvect, fill::zeros); - + arma_vec accs(nSpeciesAdvect, fill::zeros); // Solve system of equations: arma_vec new_vels = arma::solve(matrix, vels, solve_opts::fast); - // put the new values into the velocity cubes: - for (iSpecies = 0; iSpecies < neutrals.nSpeciesAdvect; iSpecies++) - accs(iSpecies) = new_vels(iSpecies) - vels(iSpecies); - report.exit(function); - return accs; + return new_vels; } // --------------------------------------------------------------------- -// +// This solves for the velocities using a fully implicit solver, where +// all of the velocities are solved for at the same time. This is slower +// since there needs to be a full matrix solve in each cell, but it ties +// the velocities together. // --------------------------------------------------------------------- -void calc_neutral_friction(Neutrals &neutrals) { +void Neutrals::calc_neutral_friction_implicit(precision_t dt) { std::string function = "calc_neutral_friction"; static int iFunction = -1; report.enter(function, iFunction); int64_t iAlt, iLat, iLon, iDir, iSpecies, iSpecies_; + int64_t jSpecies, jSpecies_; + + arma_cube ktom; + arma_cube coef; + arma_cube tpower; // Initialize all of the accelerations to zero: - for (iSpecies = 0; iSpecies < neutrals.nSpecies; iSpecies++) + for (iSpecies = 0; iSpecies < nSpecies; iSpecies++) { for (iDir = 0; iDir < 3; iDir++) - neutrals.species[iSpecies].acc_neutral_friction[iDir].zeros(); + species[iSpecies].acc_neutral_friction[iDir].zeros(); + } if (input.get_advection_neutrals_vertical() != "hydro") { - arma_vec vels(neutrals.nSpeciesAdvect, fill::zeros); - arma_vec acc(neutrals.nSpeciesAdvect, fill::zeros); - int64_t nXs = neutrals.temperature_scgc.n_rows; - int64_t nYs = neutrals.temperature_scgc.n_cols; - int64_t nZs = neutrals.temperature_scgc.n_slices; + arma_vec vels(nSpeciesAdvect, fill::zeros); + arma_vec acc(nSpeciesAdvect, fill::zeros); + arma_vec new_vels(nSpeciesAdvect, fill::zeros); + int64_t nXs = temperature_scgc.n_rows; + int64_t nYs = temperature_scgc.n_cols; + int64_t nZs = temperature_scgc.n_slices; + int64_t nGCs = 2; // Calculate friction terms for only species that advect. // - If only 1 species is advected, then it will have no friction - if (neutrals.nSpeciesAdvect > 1) { - for (iAlt = 0; iAlt < nZs; iAlt++) { - for (iLat = 0; iLat < nYs; iLat++) { - for (iLon = 0; iLon < nXs; iLon++) { - for (iDir = 0; iDir < 3; iDir++) { - vels.zeros(); - - //Put the old velocities into vels: - for (iSpecies = 0; iSpecies < neutrals.nSpeciesAdvect; iSpecies++) { - iSpecies_ = neutrals.species_to_advect[iSpecies]; - vels(iSpecies) = - neutrals.species[iSpecies_].velocity_vcgc[iDir](iLon, iLat, iAlt); - } - - acc = neutral_friction_one_cell(iLon, iLat, iAlt, vels, neutrals); - - for (iSpecies = 0; iSpecies < neutrals.nSpeciesAdvect; iSpecies++) { - iSpecies_ = neutrals.species_to_advect[iSpecies]; - neutrals.species[iSpecies_].acc_neutral_friction[iDir](iLon, iLat, iAlt) = - acc(iSpecies); - } // iSpeciesAdvect - } // for direction + if (nSpeciesAdvect > 1) { + for (iAlt = nGCs; iAlt < nZs - nGCs; iAlt++) { + for (iLat = nGCs; iLat < nYs - nGCs; iLat++) { + for (iLon = nGCs; iLon < nXs - nGCs; iLon++) { + // Only worry about the vertical direction for now: + iDir = 2; + //for (iDir = 0; iDir < 3; iDir++) { + vels.zeros(); + + // The velocities are just after the vertical solver, so the velocities are + // the source terms for the friction solver. + for (iSpecies = 0; iSpecies < nSpeciesAdvect; iSpecies++) { + iSpecies_ = species_to_advect[iSpecies]; + vels(iSpecies) = + species[iSpecies_].newVelocity_vcgc[iDir](iLon, iLat, iAlt); + } + + // = neutral_friction_one_cell(iLon, iLat, iAlt, vels); + new_vels = calc_friction_one_cell(iLon, iLat, iAlt, dt, vels); + + for (iSpecies = 0; iSpecies < nSpeciesAdvect; iSpecies++) { + iSpecies_ = species_to_advect[iSpecies]; + species[iSpecies_].newVelocity_vcgc[iDir](iLon, iLat, + iAlt) = new_vels(iSpecies); + } // iSpeciesAdvect + + //} // for direction } // for long } // for lat } // for alt } // if nSpecies > 1 + + } // if !hydro + + report.exit(function); + return; +} //calc_neutral_friction + + +// --------------------------------------------------------------------- +// If we are solving this system semi-implicitly, we don't need to do a +// matrix solve in each cell, so we can calculate all of the variables +// before doing the time-stepping in the vertical solver. +// semi-implicit means using the current velocity on both the left and +// right sides of the equation, but using the old velocities for the +// other species. This means that the velocities are not consistent +// in any time-step unless they are close to steady-state, but they will +// move together. +// --------------------------------------------------------------------- + +void Neutrals::calc_neutral_friction_coefs() { + + std::string function = "calc_neutral_friction_coefs"; + static int iFunction = -1; + report.enter(function, iFunction); + + int64_t iAlt, iLat, iLon, iDir, iSpecies, iSpecies_; + int64_t jSpecies, jSpecies_; + + arma_cube ktom; + arma_cube coef; + arma_cube tpower; + + // Initialize all of the accelerations to zero: + for (iSpecies = 0; iSpecies < nSpecies; iSpecies++) { + species[iSpecies_].neutral_friction_coef.zeros(); + + for (iDir = 0; iDir < 3; iDir++) + species[iSpecies].acc_neutral_friction[iDir].zeros(); + } + + if (input.get_advection_neutrals_vertical() != "hydro") { + + for (iSpecies = 0; iSpecies < nSpeciesAdvect; iSpecies++) { + iSpecies_ = species_to_advect[iSpecies]; + // ktom = boltzmann's constant * temperature / mass + ktom = + cKB * + temperature_scgc / + species[iSpecies_].mass; + + for (jSpecies = 0; jSpecies < nSpeciesAdvect; jSpecies++) { + jSpecies_ = species_to_advect[jSpecies]; + + if (iSpecies_ == jSpecies_) + continue; + + tpower = pow(temperature_scgc, species[iSpecies_].diff_exp[jSpecies_]); + // NEED TO REMOVE /100!!! + coef = ktom % species[jSpecies_].density_scgc / + (species[iSpecies_].diff0[jSpecies_] * tpower) / 100.0; + species[iSpecies_].neutral_friction_coef = + species[iSpecies_].neutral_friction_coef + coef; + iDir = 2; + species[iSpecies_].acc_neutral_friction[iDir] = + species[iSpecies_].acc_neutral_friction[iDir] + + coef % species[iSpecies_].velocity_vcgc[iDir]; + } + } } // if !hydro report.exit(function); diff --git a/src/neutrals_momentum_viscosity.cpp b/src/neutrals_momentum_viscosity.cpp new file mode 100644 index 00000000..aaad93e3 --- /dev/null +++ b/src/neutrals_momentum_viscosity.cpp @@ -0,0 +1,97 @@ +// Copyright 2020, the Aether Development Team (see doc/dev_team.md +// for members) Full license can be found in License.md + +#include "aether.h" + +// --------------------------------------------------------------------------- +// Calculate viscosity +// --------------------------------------------------------------------------- + +void Neutrals::update_horizontal_velocity(Grid &grid, Times time) { + + std::string function = "Neutrals::update_horizontal_velocity"; + static int iFunction = -1; + report.enter(function, iFunction); + + precision_t dt; + int64_t iLon, iLat, iDir; + int64_t nLons = grid.get_nLons(); + int64_t nLats = grid.get_nLats(); + int64_t nAlts = grid.get_nAlts(); + int64_t nGCs = grid.get_nGCs(); + + dt = time.get_dt(); + + if (nAlts == 2 * nGCs + 1) { + // Simply update the temperature if there is no conduction: + velocity_vcgc[0] = velocity_vcgc[0] + dt * acc_sources_total[0]; + velocity_vcgc[1] = velocity_vcgc[1] + dt * acc_sources_total[1]; + } else { + + arma_cube rhor23d(nLons, nLats, nAlts); + arma_cube lambda3d(nLons, nLats, nAlts); + //arma_cube prandtl3d(nLons, nLats, nAlts); + + rhor23d = rho_scgc % grid.radius2_scgc; + + //// Need to make this eddy * rho * cv: + //if (input.get_use_eddy_energy()) + // prandtl3d = kappa_eddy_scgc % rho_scgc % Cv_scgc; + //else + // prandtl3d.zeros(); + + lambda3d = (viscosity_scgc) % grid.radius2_scgc; + + arma_vec vel1d(nAlts); + arma_vec lambda1d(nAlts); + arma_vec rhor21d(nAlts); + arma_vec dalt1d(nAlts); + arma_vec sources1d(nAlts); + arma_vec visc1d(nAlts); + + //if (iProc == 1) { + // std::cout << "neutrals_energy heating source : "; + // display_vector(heating_sources_total.tube(11,2)); + // std::cout << " -> temp before: "; + // display_vector(temperature_scgc.tube(11,2)); + //} + + for (iDir = 0; iDir < 2; iDir++) { + for (iLon = 0; iLon < nLons; iLon++) { + for (iLat = 0; iLat < nLats; iLat++) { + + vel1d = velocity_vcgc[iDir].tube(iLon, iLat); + lambda1d = lambda3d.tube(iLon, iLat); + rhor21d = rhor23d.tube(iLon, iLat); + sources1d.zeros(); + dalt1d = grid.dk_edge_m.tube(iLon, iLat); + visc1d.zeros(); + + visc1d = solver_conduction(vel1d, + lambda1d, + rhor21d, + sources1d, + dalt1d, + dt, + nGCs, + false); + velocity_vcgc[iDir].tube(iLon, iLat) = visc1d; + + // Store the difference (as a rate), so we can output it later + // if we want: + //conduction_scgc.tube(iLon, iLat) = + // (conduction1d - temp1d)/dt - sources1d; + } // lat + } // lon + } + + //if (iProc == 1) { + // std::cout << " -> temp after: "; + // display_vector(temperature_scgc.tube(11,2)); + //} + + } // if nAlts == 1 + 2*GCs + + report.exit(function); + return; +} diff --git a/src/output.cpp b/src/output.cpp index 1c1970d3..fc86105f 100644 --- a/src/output.cpp +++ b/src/output.cpp @@ -13,13 +13,51 @@ -------------------------------------------------------------------- */ +std::string get_filename_from_type(std::string type_output) { + + std::string filename = ""; + + if (type_output == "neutrals") + filename = "3DNE"; + + if (type_output == "states") + filename = "3DAL"; + + if (type_output == "ions") + filename = "3DIO"; + + if (type_output == "bfield") + filename = "3DBF"; + + if (type_output == "delta") + filename = "3DDE"; + + if (type_output == "moment") + filename = "3DMO"; + + if (type_output == "gravity") + filename = "3DGR"; + + if (type_output == "corners" || type_output == "grid") + filename = "3DCO"; + + if (type_output == "therm") + filename = "3DTH"; + + if (type_output == "test") + filename = "3DTE"; + + return filename; + +} + // ----------------------------------------------------------------------------- // Fills output containers and outputs them for common output types // ----------------------------------------------------------------------------- bool output(const Neutrals &neutrals, const Ions &ions, - const Grid &grid, + Grid &grid, Times time, const Planets &planet) { @@ -40,7 +78,8 @@ bool output(const Neutrals &neutrals, OutputContainer DummyOutputContainer; std::string output_dir = "UA/output/"; DummyOutputContainer.set_directory(output_dir); - DummyOutputContainer.set_version(0.1); + DummyOutputContainer.set_version(aether_version); + DummyOutputContainer.set_nGhostCells(grid.get_nGCs()); for (int iOutput = 0; iOutput < nOutputs; iOutput++) AllOutputContainers.push_back(DummyOutputContainer); @@ -54,7 +93,15 @@ bool output(const Neutrals &neutrals, for (int iOutput = 0; iOutput < nOutputs; iOutput++) { - if (time.check_time_gate(input.get_dt_output(iOutput))) { + // make sure the output dt is set correctly. Otherwise these errors aren't caught correctly. + precision_t dt_output = input.get_dt_output(iOutput); + + if (dt_output == 0.0) { + report.exit(function); + return false; + } + + if (time.check_time_gate(dt_output)) { // ------------------------------------------------------------ // Store time in all of the files: @@ -113,7 +160,6 @@ bool output(const Neutrals &neutrals, store_variable("density_" + neutrals.species[iSpecies].cName, neutrals.density_unit, neutrals.species[iSpecies].density_scgc); - // Neutral Temperature: if (type_output == "neutrals" || type_output == "states") @@ -203,6 +249,9 @@ bool output(const Neutrals &neutrals, AllOutputContainers[iOutput].store_variable("Gvertical", "m/s^2", grid.gravity_vcgc[2]); + AllOutputContainers[iOutput].store_variable("Gmag", + "m/s^2", + grid.gravity_mag_scgc); AllOutputContainers[iOutput].store_variable("Gpotential", "m^2/s^2", grid.gravity_potential_scgc); @@ -211,7 +260,23 @@ bool output(const Neutrals &neutrals, grid.radius_scgc); } - if (type_output == "bfield") { + if (type_output == "delta") { + AllOutputContainers[iOutput].store_variable("dim", + "di Center m", + "m", + grid.di_center_m_scgc); + AllOutputContainers[iOutput].store_variable("djm", + "dj Center m", + "m", + grid.dj_center_m_scgc); + AllOutputContainers[iOutput].store_variable("dkm", + "dk Center m", + "m", + grid.dk_center_m_scgc); + + } + + if (type_output == "bfield" || type_output == "ions") { AllOutputContainers[iOutput].store_variable("mlat", "Magnetic Latitude", "degrees", @@ -220,6 +285,13 @@ bool output(const Neutrals &neutrals, "Magnetic Longitude", "degrees", grid.magLon_scgc * cRtoD); + AllOutputContainers[iOutput].store_variable("invLat", + "Magnetic Invariant Latitude", + "degrees", + grid.magInvLat_scgc * cRtoD); + AllOutputContainers[iOutput].store_variable("radius", + "m", + grid.radius_scgc); AllOutputContainers[iOutput].store_variable("mlt", "Magnetic Local Time", "hours", @@ -237,6 +309,26 @@ bool output(const Neutrals &neutrals, // Thermal: if (type_output == "therm") { + AllOutputContainers[iOutput].store_variable("Heating_EUV", + "Heating from EUV", + "K/s", + neutrals.heating_euv_scgc); + AllOutputContainers[iOutput].store_variable("Heating_Chemistry", + "Heating from Chemistry", + "K/s", + neutrals.heating_chemical_scgc); + AllOutputContainers[iOutput].store_variable("Heating_Transfer", + "Heating from Ti- Tn Ion Neutral Collisions", + "K/s", + neutrals.heating_ion_heat_transfer_scgc); + AllOutputContainers[iOutput].store_variable("Heating_Ion_Friction", + "Heating from Friction Ion Neutral Collisions", + "K/s", + neutrals.heating_ion_friction_scgc); + AllOutputContainers[iOutput].store_variable("Conduction", + "Conduction", + "K/s", + neutrals.conduction_scgc); AllOutputContainers[iOutput].store_variable("O Rad Cooling", "[O] Radiative Cooling", "K/s", @@ -262,43 +354,27 @@ bool output(const Neutrals &neutrals, grid.cent_acc_vcgc[2]); } + // Neutral Temperature: + if (type_output == "test") + AllOutputContainers[iOutput]. + store_variable("test_grid", + "none", + grid.test_scgc); + // ------------------------------------------------------------ // Set output file names - std::string filename; + std::string filename = get_filename_from_type(type_output); - if (type_output == "neutrals") - filename = "3DNEU_"; - - if (type_output == "states") - filename = "3DALL_"; - - if (type_output == "ions") - filename = "3DION_"; - - if (type_output == "bfield") - filename = "3DBFI_"; - - if (type_output == "moment") - filename = "3DMMT_"; - - if (type_output == "gravity") - filename = "3DGRA_"; - - if (type_output == "moment") - filename = "3DMMT_"; - - if (type_output == "corners" || type_output == "grid") - filename = "3DCOR_"; - - if (type_output == "therm") - filename = "3DTHR_"; - - if (filename.length() < 5) { + if (filename.length() < 4) { report.print(0, "type_output : " + type_output); report.error("File output type not found!"); didWork = false; } else { + if (grid.get_gridtype() == neutralType_) + filename = filename + "G_"; + else + filename = filename + "M_"; if ((int64_t(input.get_dt_output(iOutput)) % 60) == 0) filename = filename + time.get_YMD_HM0(); diff --git a/src/output_netcdf.cpp b/src/output_netcdf.cpp index be1f560e..0e2501bf 100644 --- a/src/output_netcdf.cpp +++ b/src/output_netcdf.cpp @@ -68,12 +68,14 @@ void output_netcdf_3d(std::vector count_start, bool OutputContainer::read_container_netcdf() { bool didWork = true; - std::string whole_filename = directory + "/" + filename + ".nc"; + std::string whole_filename = directory + '/' + filename + ".nc"; std::string UNITS = "units"; try { - std::cout << "Reading NetCDF file into container : " - << whole_filename << "\n"; + if (report.test_verbose(0)) + std::cout << "Reading NetCDF file into container : " + << whole_filename << "\n"; + NcFile ncdf_file_in(whole_filename, NcFile::read); std::multimap variables_in_file; @@ -161,17 +163,17 @@ bool OutputContainer::read_container_netcdf() { bool OutputContainer::write_container_netcdf() { bool didWork = true; - std::string whole_filename = directory + "/" + filename + ".nc"; + std::string whole_filename = directory + '/' + filename + ".nc"; std::string UNITS = "units"; std::string LONG_NAME = "long_name"; try { NcFile ncdf_file(whole_filename, NcFile::replace); // Add dimensions: - NcDim xDim = ncdf_file.addDim("x", elements[0].value.n_rows); - NcDim yDim = ncdf_file.addDim("y", elements[0].value.n_cols); - NcDim zDim = ncdf_file.addDim("z", elements[0].value.n_slices); - NcDim tDim = ncdf_file.addDim("time", 1); + NcDim xDim = ncdf_file.addDim("n_x", elements[0].value.n_rows); + NcDim yDim = ncdf_file.addDim("n_y", elements[0].value.n_cols); + NcDim zDim = ncdf_file.addDim("n_z", elements[0].value.n_slices); + NcDim tDim = ncdf_file.addDim("n_time", 1); // Define the netCDF variables for the 3D data. // First create a vector of dimensions: diff --git a/src/planets.cpp b/src/planets.cpp index 2a090171..200786b7 100644 --- a/src/planets.cpp +++ b/src/planets.cpp @@ -104,7 +104,7 @@ precision_t Planets::get_dipole_strength() { // Get the location of the dipole center // ----------------------------------------------------------------------------- -std::vector Planets::get_dipole_center() { +std::vector Planets::get_dipole_center() { return planet.dipole_center; } @@ -502,6 +502,14 @@ json Planets::get_ions() { return ions; } +// -------------------------------------------------------------------------- +// returns altitude of the density boundary condition +// -------------------------------------------------------------------------- + +precision_t Planets::get_altitude_of_bc() { + return altitude_of_bc; +} + // ----------------------------------------------------------------------------- // Read in the planet specific file that describes the species // ----------------------------------------------------------------------------- @@ -544,6 +552,17 @@ bool Planets::read_planet_specific_file() { std::cout << neutrals << "\n"; } // #neutrals + if (hash == "#altitude_of_bc") { + report.print(iDebug, "Found #altitude_of_bc!"); + altitude_of_bc = read_float(infile_ptr, "#altitude_of_bc"); + // Units read in = km + // Units needed in code = m: + altitude_of_bc = altitude_of_bc * 1000.0; + + if (report.test_verbose(iDebug)) + std::cout << altitude_of_bc << "\n"; + } // #altitude_of_bc + if (hash == "#temperature") { report.print(iDebug, "Found #temperatures!"); std::vector> lines = read_csv(infile_ptr); diff --git a/src/quadtree.cpp b/src/quadtree.cpp index 3c173cc1..832e5a78 100644 --- a/src/quadtree.cpp +++ b/src/quadtree.cpp @@ -1,13 +1,62 @@ +// Copyright 2024, the Aether Development Team (see doc/dev_team.md for members) +// Full license can be found in License.md + +// The way that the quadtree works is that you start with a given number of +// root nodes. When the user wants higher resolution, they as for 4 times +// more processors, and then each root node is broken into 4. If 16 times +// more processors are asked for, then those 4 nodes are each broken into +// 4 more nodes. This goes on for as many processors as the user would like, +// but the processors has to equal nRootNodes * 4^depth +// +// The following grid shapes are suppored at this time: +// - Cubesphere, this has 6 root nodes (2 polar, 4 equatorial) +// - Sphere, this has 1 root node (whole grid) +// - Sphere4, this is a spherical grid, but has 4 root nodes (2 lats, 2 lons) +// - Sphere6, this is a spherical grid, but has 6 root nodes (2 lats, 3 lons) +// - Dipole4, which has 4 root nodes (4 lats, 1 lon) +// - Dipole6, which has 4 root nodes (6 lats, 1 lon) #include "aether.h" int64_t iProcQuery = -1; -Quadtree::Quadtree() { - if (input.get_is_cubesphere()) +Quadtree::Quadtree(std::string shapeInput) { + IsOk = false; + std::string shape = mklower(shapeInput); + + if (shape == "cubesphere") { nRootNodes = 6; - else + IsOk = true; + } + + if (shape == "sphere") { nRootNodes = 1; + IsOk = true; + } + + if (shape == "sphere4") { + nRootNodes = 4; + IsOk = true; + } + + if (shape == "sphere6") { + nRootNodes = 6; + IsOk = true; + } + + if (shape == "dipole4") { + nRootNodes = 4; + IsOk = true; + } + + if (shape == "dipole6") { + nRootNodes = 6; + IsOk = true; + } + + if (!IsOk) + report.error("quadtree shape not found : " + shape); + } // -------------------------------------------------------------------------- @@ -22,22 +71,77 @@ bool Quadtree::is_ok() { // build quadtree // -------------------------------------------------------------------------- -void Quadtree::build() { +void Quadtree::build(std::string gridtype) { + + std::string function = "Quadtree::build"; + static int iFunction = -1; + report.enter(function, iFunction); + + IsOk = false; arma_mat origins; arma_mat rights; arma_mat ups; - if (input.get_is_cubesphere()) { + Inputs::grid_input_struct grid_input = input.get_grid_inputs(gridtype); + + // Here we are taking the shape and getting the sizes and positions + // of the root nodes. These are defined in the different header files + // such as sphere.h, cubesphere.h, and dipole.h + + if (grid_input.shape == "cubesphere") { origins = CubeSphere::ORIGINS; rights = CubeSphere::RIGHTS; ups = CubeSphere::UPS; IsCubeSphere = true; - } else { + IsOk = true; + } + + if (grid_input.shape == "sphere") { origins = Sphere::ORIGINS; rights = Sphere::RIGHTS; ups = Sphere::UPS; IsSphere = true; + IsOk = true; + } + + if (grid_input.shape == "sphere4") { + origins = Sphere4::ORIGINS; + rights = Sphere4::RIGHTS; + ups = Sphere4::UPS; + IsSphere = true; + IsOk = true; + } + + if (grid_input.shape == "sphere6") { + origins = Sphere6::ORIGINS; + rights = Sphere6::RIGHTS; + ups = Sphere6::UPS; + IsSphere = true; + IsOk = true; + } + + if (grid_input.shape == "dipole4") { + origins = Dipole4::ORIGINS; + rights = Dipole4::RIGHTS; + ups = Dipole4::UPS; + IsDipole = true; + IsOk = true; + } + + if (grid_input.shape == "dipole6") { + origins = Dipole6::ORIGINS; + rights = Dipole6::RIGHTS; + ups = Dipole6::UPS; + IsDipole = true; + IsOk = true; + } + + // If we can't find the shape, then there is a big problem + if (!IsOk) { + report.error("quadtree shape not found (in build): " + grid_input.shape); + report.exit(function); + return; } arma_vec o(3), r(3), u(3); @@ -64,13 +168,15 @@ void Quadtree::build() { // Before we build the quadtree, we need to allow the user to // restrict the domain. This will only work for the spherical // grid so far: - - Inputs::grid_input_struct grid_input = input.get_grid_inputs(); - - if (grid_input.lon_min > 0.0 || - grid_input.lon_max < 2.0 * cPI || - grid_input.lat_min > -cPI / 2.0 || - grid_input.lat_max < cPI / 2.0) { + // (as programmed, this should work ok for the sphere and + // dipole shapes, but will never work for cubesphere. For the + // cubesphere grid, it is much more complicated.) + + if ((grid_input.lon_min > 0.0 || + grid_input.lon_max < 2.0 * cPI || + grid_input.lat_min > -cPI / 2.0 || + grid_input.lat_max < cPI / 2.0) + && (IsSphere)) { // We are dealing with less than the whole Earth... origins(0) = grid_input.lon_min / cPI; origins(1) = grid_input.lat_min / cPI; @@ -99,6 +205,9 @@ void Quadtree::build() { tmp = new_node(o, r, u, iP, iDepth, iNode); root_nodes.push_back(tmp); } + + report.exit(function); + return; } // -------------------------------------------------------------------------- @@ -172,7 +281,9 @@ Quadtree::qtnode Quadtree::new_node(arma_vec lower_left_norm_in, } // -------------------------------------------------------------------------- -// +// This returns the lower left (LL) coordinate in normalized coordinates or +// the size of the node in the right (SR) or up (SU) directions. It can +// also return the midpoint of the node (MID) // -------------------------------------------------------------------------- arma_vec Quadtree::get_vect(Quadtree::qtnode node, std::string which) { @@ -316,7 +427,14 @@ int64_t Quadtree::find_point(arma_vec point, Quadtree::qtnode node) { } // -------------------------------------------------------------------------- -// +// This takes a normalized point, figures out if it is beyond the limits +// of the root node, and if it is, then moves the coordinates onto the other +// node. +// This is pretty much useful for the CubeSphere, since when you go over +// the edge of one side, you are technically then on another side. This can +// happen on the sphere also, when you go across the 0/360 line (or 0/2 line +// in normalized coordinates). If can aslo happen at the poles when you go +// over the pole. // -------------------------------------------------------------------------- arma_vec Quadtree::wrap_point_sphere(arma_vec point) { @@ -369,7 +487,8 @@ arma_vec Quadtree::wrap_point_sphere(arma_vec point) { } // -------------------------------------------------------------------------- -// +// Well, ok - the above wrap_point seems to only work for the sphere and +// dipole shape, which this is specially designed for the cubesphere // -------------------------------------------------------------------------- arma_vec Quadtree::wrap_point_cubesphere(arma_vec point) { @@ -454,7 +573,9 @@ arma_vec Quadtree::wrap_point_cubesphere(arma_vec point) { } // -------------------------------------------------------------------------- -// +// This is the starting point for determining which node a point +// on the sphere is located. The point needs to be in normalized +// coordinates. // -------------------------------------------------------------------------- int64_t Quadtree::find_point(arma_vec point) { @@ -467,6 +588,9 @@ int64_t Quadtree::find_point(arma_vec point) { if (IsCubeSphere) wrap_point = wrap_point_cubesphere(point); + if (IsDipole) + wrap_point = wrap_point_sphere(point); + int64_t iNode = -1; for (int64_t iRoot = 0; iRoot < nRootNodes; iRoot++) { @@ -480,7 +604,9 @@ int64_t Quadtree::find_point(arma_vec point) { } // -------------------------------------------------------------------------- -// +// This is the starting point for determining which root a point +// on the sphere is located. The point needs to be in normalized +// coordinates. // -------------------------------------------------------------------------- int64_t Quadtree::find_root(arma_vec point) { @@ -493,6 +619,9 @@ int64_t Quadtree::find_root(arma_vec point) { if (IsCubeSphere) wrap_point = wrap_point_cubesphere(point); + if (IsDipole) + wrap_point = wrap_point_cubesphere(point); + int64_t iNode = -1, iRoot; for (iRoot = 0; iRoot < nRootNodes; iRoot++) { diff --git a/src/read_collision_file.cpp b/src/read_collision_file.cpp index 4d381df3..a2674699 100644 --- a/src/read_collision_file.cpp +++ b/src/read_collision_file.cpp @@ -24,7 +24,7 @@ void read_collision_file(Neutrals &neutrals, std::string hash; int iErr = 0; - report.print(1, "Reading Collision File : " + input.get_collision_file()); + report.print(0, "Reading Collision File : " + input.get_collision_file()); infile_ptr.open(input.get_collision_file()); diff --git a/src/read_input_file.cpp b/src/read_input_file.cpp index 842c2c06..66a5e883 100644 --- a/src/read_input_file.cpp +++ b/src/read_input_file.cpp @@ -24,6 +24,9 @@ bool Inputs::read_inputs_json(Times &time) { json defaults; json user_inputs; + // allow changing of perturbations during the restart process: + json perturbations; + isOk = true; // Set the default values first: @@ -31,74 +34,90 @@ bool Inputs::read_inputs_json(Times &time) { isOk = set_verbose(settings); try { - // Then read in user perturbations on those defaults: user_inputs = read_json("aether.json"); - isOk = set_verbose(user_inputs); - - // Read in a restart file also if user specified it. - // - Here we merge the restart inputs with the defaults inputs - // - This is BEFORE the user inputs are merged!!! - - if (user_inputs.contains("Restart")) { - if (user_inputs["Restart"].contains("do")) { - if (user_inputs["Restart"]["do"]) { - std::string restart_file = get_setting_str("Restart", "InDir"); - restart_file = restart_file + "/settings.json"; - json restart_inputs; - restart_inputs = read_json(restart_file); - // This forces the logfile to append. User can override - // if they really want: - restart_inputs["Logfile"]["append"] = true; - settings.merge_patch(restart_inputs); - } + } catch (...) { + report.error("Error in reading inputs!"); + isOk = false; + } + + isOk = set_verbose(user_inputs); + + // Read in a restart file also if user specified it. + // - Here we merge the restart inputs with the defaults inputs + // - This is BEFORE the user inputs are merged!!! + if (user_inputs.contains("Restart")) { + if (user_inputs["Restart"].contains("do")) { + if (user_inputs["Restart"]["do"]) { + std::string restart_file = get_setting_str("Restart", "InDir"); + restart_file = restart_file + "/settings.json"; + json restart_inputs; + restart_inputs = read_json(restart_file); + // This forces the logfile to append. User can override + // if they really want: + restart_inputs["Logfile"]["append"] = true; + settings.merge_patch(restart_inputs); + + if (restart_inputs.contains("Perturb")) + perturbations["Perturb"] = restart_inputs["Perturb"]; } } + } - // Merge the defaults/restart settings with the user provided - // settings, with the default/restart settings being the default: - settings.merge_patch(user_inputs); + // Merge the defaults/restart settings with the user provided + // settings, with the default/restart settings being the default: + settings.merge_patch(user_inputs); - //change planet file to the one specified on aether.json: - if (isOk) - settings["PlanetSpeciesFile"] = get_setting_str("Planet", "file"); + // There are perturbations in the restart files: + if (perturbations.contains("Perturb")) - std::string planet_filename = get_setting_str("PlanetSpeciesFile"); - report.print(1, "Using planet file : " + planet_filename); + // If the user wants the restart perturbations to overwrite the + // aether.json perturbations, then do it: + if (user_inputs.contains("Perturb")) { + if (user_inputs["Perturb"].contains("restart_control")) + if (user_inputs["Perturb"]["restart_control"]) + settings.merge_patch(perturbations); + } else + // if there are perturbations in the restart files, but none + // in the user files, then push the restart perturbations into + // the settings to make them consistent + settings.merge_patch(perturbations); - // Debug Stuff: - if (isOk) - report.set_verbose(get_setting_int("Debug", "iVerbose")); + //change planet file to the one specified on aether.json: + if (isOk) + settings["PlanetSpeciesFile"] = get_setting_str("Planet", "file"); - if (isOk) - report.set_DefaultVerbose(get_setting_int("Debug", "iVerbose")); + std::string planet_filename = get_setting_str("PlanetSpeciesFile"); + report.print(1, "Using planet file : " + planet_filename); - if (isOk) - report.set_doInheritVerbose(get_setting_bool("Debug", "doInheritVerbose")); + // Debug Stuff: + if (isOk) + report.set_verbose(get_setting_int("Debug", "iVerbose")); - if (isOk) - report.set_timing_depth(get_setting_int("Debug", "iTimingDepth")); + if (isOk) + report.set_DefaultVerbose(get_setting_int("Debug", "iVerbose")); - if (isOk) - report.set_timing_percent(get_setting_float("Debug", "TimingPercent")); + if (isOk) + report.set_doInheritVerbose(get_setting_bool("Debug", "doInheritVerbose")); - if (isOk) - report.set_iProc(get_setting_int("Debug", "iProc")); + if (isOk) + report.set_timing_depth(get_setting_int("Debug", "iTimingDepth")); - for (auto &item : settings["Debug"]["iFunctionVerbose"].items()) - report.set_FunctionVerbose(item.key(), item.value()); + if (isOk) + report.set_timing_percent(get_setting_float("Debug", "TimingPercent")); - // Capture time information: - if (isOk) - time.set_times(get_setting_timearr("StartTime")); + if (isOk) + report.set_iProc(get_setting_int("Debug", "iProc")); - if (isOk) - time.set_end_time(get_setting_timearr("EndTime")); + for (auto &item : settings["Debug"]["iFunctionVerbose"].items()) + report.set_FunctionVerbose(item.key(), item.value()); - } catch (...) { - report.error("Error in reading inputs!"); - isOk = false; - } + // Capture time information: + if (isOk) + time.set_times(get_setting_timearr("StartTime")); + + if (isOk) + time.set_end_time(get_setting_timearr("EndTime")); return isOk; } diff --git a/src/read_netcdf_electrodynamics.cpp b/src/read_netcdf_electrodynamics.cpp index cea916f7..d080f18e 100644 --- a/src/read_netcdf_electrodynamics.cpp +++ b/src/read_netcdf_electrodynamics.cpp @@ -135,7 +135,7 @@ void Electrodynamics::read_netcdf_electrodynamics_file(std::string filename) { std::vector energy_flux_struct, average_energy_struct; std::vector ion_energy_flux_struct, ion_average_energy_struct; - report.print(1, "Reading Electrodynamics file : " + filename); + report.print(0, "Reading Electrodynamics file : " + filename); FILE *infile; char* char_arr; diff --git a/src/report.cpp b/src/report.cpp index 29bbc129..fc4b4f14 100644 --- a/src/report.cpp +++ b/src/report.cpp @@ -75,12 +75,20 @@ void Report::enter(std::string input, int &iFunction) { iVerbose = entries[iEntry].iFunctionVerbose; + #ifdef OLD_TIMING // This was taken from // https://stackoverflow.com/questions/19555121/how-to-get-current-timestamp-in-milliseconds-since-1970-just-the-way-java-gets unsigned long long now = std::chrono::duration_cast (std::chrono::system_clock::now().time_since_epoch()).count(); entries[iEntry].timing_start = now; + + #else//New timing + gettimeofday(&start, NULL); + entries[iEntry].timing_start_new = start; + + #endif + iLevel++; entries[iEntry].iLevel = iLevel; iCurrentFunction = iEntry; @@ -110,6 +118,7 @@ void Report::exit(std::string input) { if (DoReportOnExit) print(iLevel, "Exiting function : " + current_entry); + #ifdef OLD_TIMING // Get current system time: unsigned long long now = std::chrono::duration_cast (std::chrono::system_clock::now().time_since_epoch()).count(); @@ -118,6 +127,17 @@ void Report::exit(std::string input) { entries[iEntry].timing_total = entries[iEntry].timing_total + float(now - entries[iEntry].timing_start) / 1000.0; + #else //new timing + gettimeofday(&end, NULL); + start = entries[iEntry].timing_start_new; + long seconds = end.tv_sec - start.tv_sec; + long microseconds = end.tv_usec - start.tv_usec; + long elapsed_micro = seconds * 1000000 + microseconds; + precision_t elapsed_sec = elapsed_micro / 1000000.0; + + entries[iEntry].timing_total = entries[iEntry].timing_total + elapsed_sec; + #endif + // Increment the total number of times that the function has been called: entries[iEntry].nTimes++; diff --git a/src/solver_advection.cpp b/src/solver_advection.cpp new file mode 100644 index 00000000..8da03682 --- /dev/null +++ b/src/solver_advection.cpp @@ -0,0 +1,590 @@ +// Copyright 2020, the Aether Development Team (see doc/dev_team.md for members) +// Full license can be found in License.md + + +#include "aether.h" + +// -------------------------------------------------------------------------- +// +// -------------------------------------------------------------------------- + +// --------------------------------------------------------- +// +// --------------------------------------------------------- + +arma_vec limiter_mc(arma_vec &left, + arma_vec &right, + int64_t nPts, + int64_t nGCs) { + + precision_t beta = 0.8; + + arma_vec s = left % right; + arma_vec combined = (left + right) * 0.5; + + left = left * beta; + right = right * beta; + arma_vec limited = left; + + for (int64_t i = 1; i < nPts + 2 * nGCs - 1; i++) { + if (s(i) < 0) { + // Sign < 0 means opposite signed left and right: + limited(i) = 0.0; + } else { + if (left(i) > 0 && right(i) > 0) { + if (right(i) < limited(i)) + limited(i) = right(i); + + if (combined(i) < limited(i)) + limited(i) = combined(i); + } else { + if (right(i) > limited(i)) + limited(i) = right(i); + + if (combined(i) > limited(i)) + limited(i) = combined(i); + } + } + } + + return limited; +} + + +// --------------------------------------------------------- +// calc gradients at centers +// - values and x defined at centers +// --------------------------------------------------------- + +arma_vec calc_grad_1d(arma_vec &values, + arma_vec &x, + int64_t nPts, + int64_t nGCs) { + + arma_vec gradients = values * 0.0; + arma_vec gradL = values * 0.0; + arma_vec gradR = values * 0.0; + + precision_t factor1 = 0.625; + precision_t factor2 = 0.0416667; + precision_t h; + + int64_t i; + arma_vec hv = values * 0.0; + + i = nGCs - 1; + h = 2.0 / (x(i + 1) - x(i)); + gradR(i) = h * (factor1 * (values(i + 1) - values(i)) - + factor2 * (values(i + 2) - values(i - 1))); + gradL(i) = (values(i) - values(i - 1)) / (x(i) - x(i - 1)); + + for (i = nGCs; i < nPts + nGCs; i++) { + h = 2.0 / (x(i) - x(i - 1)); + gradL(i) = h * (factor1 * (values(i) - values(i - 1)) - + factor2 * (values(i + 1) - values(i - 2))); + h = 2.0 / (x(i + 1) - x(i)); + gradR(i) = h * (factor1 * (values(i + 1) - values(i)) - + factor2 * (values(i + 2) - values(i - 1))); + } + + i = nPts + nGCs; + h = 2.0 / (x(i) - x(i - 1)); + gradL(i) = h * (factor1 * (values(i) - values(i - 1)) - + factor2 * (values(i + 1) - values(i - 2))); + gradR(i) = (values(i + 1) - values(i)) / (x(i + 1) - x(i)); + + gradients = limiter_mc(gradL, gradR, nPts, nGCs); + + return gradients; +} + +// --------------------------------------------------------- +// calc gradients at centers for 2d matrices +// - values and x defined at centers +// --------------------------------------------------------- + +arma_mat calc_grad(arma_mat values, + arma_mat x, + int64_t nGCs, + bool DoX) { + + arma_mat v2d, x2d; + + if (DoX) { + v2d = values; + x2d = x; + } else { + v2d = values.t(); + x2d = x.t(); + } + + int64_t nX = v2d.n_rows; + int64_t nY = v2d.n_cols; + arma_mat grad2d = v2d * 0.0; + + int64_t nPts = nX - 2 * nGCs; + arma_vec values1d(nX); + arma_vec x1d(nX); + + for (int64_t j = 1; j < nY - 1; j++) { + values1d = v2d.col(j); + x1d = x2d.col(j); + grad2d.col(j) = calc_grad_1d(values1d, x1d, nPts, nGCs); + } + + arma_mat gradients; + + if (DoX) + gradients = grad2d; + + else + gradients = grad2d.t(); + + return gradients; +} + +// --------------------------------------------------------- +// Project gradients + values to the right face, from the left +// returned values are on the i - 1/2 edges +// (between i-1 and i cell center) +// --------------------------------------------------------- + +arma_mat project_from_left(arma_mat values, + arma_mat gradients, + arma_mat x_centers, + arma_mat x_edges, + int64_t nGCs) { + + int64_t nX = values.n_rows; + int64_t nY = values.n_cols; + + // Define at edges: + arma_mat projected(nX + 1, nY); + projected.zeros(); + + // no gradient in the 0 or iEnd cells + for (int64_t j = 0; j < nY; j++) { + for (int64_t i = 1; i < nX - 1; i++) { + projected(i + 1, j) = values(i, j) + + gradients(i, j) * (x_edges(i + 1, j) - x_centers(i, j)); + } + + projected(1, j) = projected(2, j); + projected(0, j) = projected(1, j); + projected(nX, j) = projected(nX - 1, j); + } + + return projected; +} + + +// --------------------------------------------------------- +// Project gradients + values to the left face, from the right +// returned values are on the i - 1 edges +// (between i-1 and i cell center) +// --------------------------------------------------------- + +arma_mat project_from_right(arma_mat values, + arma_mat gradients, + arma_mat x_centers, + arma_mat x_edges, + int64_t nGCs) { + int64_t nX = values.n_rows; + int64_t nY = values.n_cols; + + // Define at edges: + arma_mat projected(nX + 1, nY); + projected.zeros(); + + // no gradient in the 0 or iEnd cells + for (int64_t j = 0; j < nY; j++) { + for (int64_t i = 1; i < nX - 1; i++) { + projected(i, j) = values(i, j) + + gradients(i, j) * (x_edges(i, j) - x_centers(i, j)); + } + + projected(0, j) = projected(1, j); + projected(nX - 1, j) = projected(nX - 2, j); + projected(nX, j) = projected(nX - 1, j); + } + + return projected; +} + +// --------------------------------------------------------- +// take gradients and project to all edges +// --------------------------------------------------------- + +projection_struct project_to_edges(arma_mat &values, + arma_mat &x_centers, arma_mat &x_edges, + arma_mat &y_centers, arma_mat &y_edges, + int64_t nGCs) { + + int64_t nX = values.n_rows; + int64_t nY = values.n_cols; + + projection_struct proj; + + proj.gradLR = calc_grad(values, x_centers, nGCs, true); + proj.gradDU = calc_grad(values.t(), y_centers.t(), nGCs, true).t(); + + proj.R = project_from_left(values, proj.gradLR, + x_centers, x_edges, nGCs); + // Left side of edge from left + proj.L = project_from_right(values, proj.gradLR, + x_centers, x_edges, nGCs); + // Up side of edge from down (left) + proj.U = project_from_left(values.t(), proj.gradDU.t(), + y_centers.t(), y_edges.t(), nGCs).t(); + // Down side of edge from up (right) + proj.D = project_from_right(values.t(), proj.gradDU.t(), + y_centers.t(), y_edges.t(), nGCs).t(); + + return proj; +} + +// --------------------------------------------------------- +// +// --------------------------------------------------------- + +precision_t calc_dt(arma_mat &xWidth, + arma_mat &yWidth, + arma_mat &wsLR, + arma_mat &wsDU, + int64_t nGCs) { + + int64_t nX = xWidth.n_rows; + int64_t nY = yWidth.n_cols; + + precision_t wsX, wsY, dtX, dtY, dt; + + dt = 1e32; + + for (int64_t j = nGCs; j < nY - nGCs; j++) { + for (int64_t i = nGCs; i < nX - nGCs; i++) { + wsX = (wsLR(i + 1, j) + wsLR(i, j)) / 2; + dtX = xWidth(i, j) / wsX; + wsY = (wsDU(i, j + 1) + wsDU(i, j)) / 2; + dtY = yWidth(i, j) / wsY; + + if (dtX < dt) + dt = dtX; + + if (dtY < dt) + dt = dtY; + } + } + + return dt; +} + +// --------------------------------------------------------- +// +// --------------------------------------------------------- + +void Neutrals::advect_sphere(Grid &grid, Times &time) { + + std::string function = "advect_sphere"; + static int iFunction = -1; + report.enter(function, iFunction); + + projection_struct rhoP; + projection_struct xVelP; + projection_struct yVelP; + projection_struct tempP; + projection_struct gammaP; + + precision_t gamma = 5.0 / 3.0; + precision_t dt = time.get_dt(); + + int64_t nGCs = grid.get_nGCs(); + int64_t nX = grid.get_nX(); + int64_t nY = grid.get_nY(); + int64_t nAlts = grid.get_nAlts(), iAlt; + + arma_mat x, xEdges; + arma_mat y, yEdges; + + arma_mat xVel, yVel, vel; + arma_mat velL2, velR2, velU2, velD2; + arma_mat rho, temp; + arma_mat xMomentum, yMomentum; + arma_mat grad_xMomenum, xMomentumL, xMomentumR, xMomentumD, xMomentumU; + arma_mat grad_yMomenum, yMomentumL, yMomentumR, yMomentumD, yMomentumU; + + arma_mat eq1FluxLR, eq1FluxDU; + arma_mat eq1FluxL, eq1FluxR, eq1FluxD, eq1FluxU; + + arma_mat eq2FluxLR, eq2FluxDU; + arma_mat eq2FluxL, eq2FluxR, eq2FluxD, eq2FluxU, eq2Flux; + + arma_mat eq3FluxLR, eq3FluxDU; + arma_mat eq3FluxL, eq3FluxR, eq3FluxD, eq3FluxU, eq3Flux; + + arma_mat eq4FluxLR, eq4FluxDU; + arma_mat eq4FluxL, eq4FluxR, eq4FluxD, eq4FluxU; + + arma_mat wsL, wsR, wsD, wsU, wsLR, wsDU; + + arma_mat totalE; + arma_mat grad_totalE, totaleL, totaleR, totaleD, totaleU; + arma_mat diff; + + arma_mat area, xWidth, yWidth, geometry; + + arma_mat gamma2d; + + // These are all needed by the solver: + calc_mass_density(); + calc_mean_major_mass(); + calc_specific_heat(); + + arma_mat t_to_e; + + precision_t duflux, lrflux, cosdrop; + + for (iAlt = nGCs; iAlt < nAlts - nGCs; iAlt++) { + + if (report.test_verbose(3)) + std::cout << "Advection: Working with iAlt: " << iAlt << "\n"; + + xVel = velocity_vcgc[0].slice(iAlt); + yVel = velocity_vcgc[1].slice(iAlt); + rho = rho_scgc.slice(iAlt); + // this is "e", or temperature expressed as an energy + gamma2d = gamma_scgc.slice(iAlt); + t_to_e = 1.0 / (gamma2d - 1.0) * cKB / mean_major_mass_scgc.slice( + iAlt); + temp = t_to_e % temperature_scgc.slice(iAlt); + + // ------------------------------------------------ + // Calculate derived equations (at cell centers - these will be updated) + // eq 1 = rho + // eq 2 = rho * xVel (momentum) + // eq 3 = rho * yVel (momentum) + // eq 4 = E --> rho * (temp + 0.5 * vel^2) (totalE) + + vel = sqrt(xVel % xVel + yVel % yVel); + totalE = rho % temp + 0.5 * rho % vel % vel; + xMomentum = rho % xVel; + yMomentum = rho % yVel; + + precision_t radius = grid.radius_scgc(1, 1, iAlt); + + x = grid.x_Center.slice(iAlt) * radius; + y = grid.y_Center.slice(iAlt) * radius; + xEdges = grid.x_Left.slice(iAlt) * radius; + yEdges = grid.y_Down.slice(iAlt) * radius; + + rhoP = project_to_edges(rho, x, xEdges, y, yEdges, nGCs); + xVelP = project_to_edges(xVel, x, xEdges, y, yEdges, nGCs); + yVelP = project_to_edges(yVel, x, xEdges, y, yEdges, nGCs); + tempP = project_to_edges(temp, x, xEdges, y, yEdges, nGCs); + gammaP = project_to_edges(gamma2d, x, xEdges, y, yEdges, nGCs); + + // ------------------------------------------------ + // Calculate derived equations (at edges) + // eq 1 = rho + // eq 2 = rho * xVel (momentum) + // eq 3 = rho * yVel (momentum) + // eq 4 = E --> rho * (temp + 0.5 * vel^2) (totalE) + + report.print(3, "Advection: Deriving State Equations"); + + xMomentumL = rhoP.L % xVelP.L; + xMomentumR = rhoP.R % xVelP.R; + xMomentumD = rhoP.D % xVelP.D; + xMomentumU = rhoP.U % xVelP.U; + + yMomentumL = rhoP.L % yVelP.L; + yMomentumR = rhoP.R % yVelP.R; + yMomentumD = rhoP.D % yVelP.D; + yMomentumU = rhoP.U % yVelP.U; + + velL2 = xVelP.L % xVelP.L + yVelP.L % yVelP.L; + velR2 = xVelP.R % xVelP.R + yVelP.R % yVelP.R; + velD2 = xVelP.D % xVelP.D + yVelP.D % yVelP.D; + velU2 = xVelP.U % xVelP.U + yVelP.U % yVelP.U; + + totaleL = rhoP.L % tempP.L + 0.5 * rhoP.L % velL2; + totaleR = rhoP.R % tempP.R + 0.5 * rhoP.R % velR2; + totaleD = rhoP.D % tempP.D + 0.5 * rhoP.D % velD2; + totaleU = rhoP.U % tempP.U + 0.5 * rhoP.U % velU2; + + // ------------------------------------------------ + // Calculate fluxes of different terms at the edges: + + report.print(3, "Advection: Calculating Fluxes"); + + eq1FluxL = rhoP.L % xVelP.L; + eq1FluxR = rhoP.R % xVelP.R; + eq1FluxD = rhoP.D % yVelP.D; + eq1FluxU = rhoP.U % yVelP.U; + + eq2FluxL = rhoP.L % (xVelP.L % xVelP.L + (gammaP.L - 1) % tempP.L); + eq2FluxR = rhoP.R % (xVelP.R % xVelP.R + (gammaP.R - 1) % tempP.R); + eq2FluxD = rhoP.D % xVelP.D % yVelP.D; + eq2FluxU = rhoP.U % xVelP.U % yVelP.U; + eq2Flux = rho % xVel % yVel; + + eq3FluxR = rhoP.R % xVelP.R % yVelP.R; + eq3FluxL = rhoP.L % xVelP.L % yVelP.L; + eq3FluxD = rhoP.D % (yVelP.D % yVelP.D + (gammaP.D - 1) % tempP.D); + eq3FluxU = rhoP.U % (yVelP.U % yVelP.U + (gammaP.U - 1) % tempP.U); + eq3Flux = rho % (yVel % yVel + (gamma2d - 1) % temp); + + eq4FluxL = rhoP.L % xVelP.L % (0.5 * velL2 + gammaP.L % tempP.L); + eq4FluxR = rhoP.R % xVelP.R % (0.5 * velR2 + gammaP.R % tempP.R); + eq4FluxD = rhoP.D % yVelP.D % (0.5 * velD2 + gammaP.D % tempP.D); + eq4FluxU = rhoP.U % yVelP.U % (0.5 * velU2 + gammaP.U % tempP.U); + + // ------------------------------------------------ + // Calculate the wave speed for the diffusive flux: + + report.print(3, "Advection: Diffusive Fluxes"); + + wsL = sqrt(velL2) + sqrt(gammaP.L % (gammaP.L - 1) % tempP.L); + wsR = sqrt(velR2) + sqrt(gammaP.R % (gammaP.R - 1) % tempP.R); + wsD = sqrt(velD2) + sqrt(gammaP.D % (gammaP.D - 1) % tempP.D); + wsU = sqrt(velU2) + sqrt(gammaP.U % (gammaP.U - 1) % tempP.U); + + wsLR = wsR; + + for (int64_t i = 0; i < nX + 1; i++) { + for (int64_t j = 0; j < nY; j++) { + if (wsL(i, j) > wsLR(i, j)) + wsLR(i, j) = wsL(i, j); + } + } + + wsDU = wsD; + + for (int64_t i = 0; i < nX; i++) { + for (int64_t j = 0; j < nY + 1; j++) { + if (wsU(i, j) > wsDU(i, j)) + wsDU(i, j) = wsU(i, j); + } + } + + // ------------------------------------------------ + // Calculate average flux at the edges: + + report.print(3, "Advection: Averaging fluxes at edges"); + + diff = rhoP.R - rhoP.L; + eq1FluxLR = (eq1FluxL + eq1FluxR) / 2 + 0.5 * wsLR % diff; + diff = rhoP.U - rhoP.D; + eq1FluxDU = (eq1FluxD + eq1FluxU) / 2 + 0.5 * wsDU % diff; + + diff = xMomentumR - xMomentumL; + eq2FluxLR = (eq2FluxL + eq2FluxR) / 2 + 0.5 * wsLR % diff; + diff = xMomentumU - xMomentumD; + eq2FluxDU = (eq2FluxD + eq2FluxU) / 2 + 0.5 * wsDU % diff; + + diff = yMomentumR - yMomentumL; + eq3FluxLR = (eq3FluxL + eq3FluxR) / 2 + 0.5 * wsLR % diff; + diff = yMomentumU - yMomentumD; + eq3FluxDU = (eq3FluxD + eq3FluxU) / 2 + 0.5 * wsDU % diff; + + diff = totaleR - totaleL; + eq4FluxLR = (eq4FluxL + eq4FluxR) / 2 + 0.5 * wsLR % diff; + diff = totaleU - totaleD; + eq4FluxDU = (eq4FluxD + eq4FluxU) / 2 + 0.5 * wsDU % diff; + + // ------------------------------------------------ + // Update values: + report.print(3, "Advection: Updating equations of state"); + + area = grid.cell_area.slice(iAlt) * grid.radius2_scgc(1, 1, iAlt); + yWidth = grid.dy_Left.slice(iAlt) * grid.radius_scgc(1, 1, iAlt); + xWidth = grid.dx_Down.slice(iAlt) * grid.radius_scgc(1, 1, iAlt); + + geometry = + sin(grid.geoLat_scgc.slice(iAlt)) / + cos(grid.geoLat_scgc.slice(iAlt)); + + geometry.clamp(-100.0, 100.0); + geometry = geometry / grid.radius_scgc(1, 1, iAlt); + + for (int64_t j = nGCs; j < nY - nGCs; j++) { + for (int64_t i = nGCs; i < nX - nGCs; i++) { + rho(i, j) = rho(i, j) - dt * + (yWidth(i + 1, j) * eq1FluxLR(i + 1, j) - + yWidth(i, j) * eq1FluxLR(i, j) + + xWidth(i, j + 1) * eq1FluxDU(i, j + 1) - + xWidth(i, j) * eq1FluxDU(i, j)) / area(i, j); + lrflux = 1.0 * ( + (yWidth(i + 1, j) * eq2FluxLR(i + 1, j) - + yWidth(i, j) * eq2FluxLR(i, j)) / area(i, j) - + geometry(i, j) * eq2Flux(i, j)); + xMomentum(i, j) = xMomentum(i, j) - dt * + ((xWidth(i, j + 1) * eq2FluxDU(i, j + 1) - + xWidth(i, j) * eq2FluxDU(i, j)) / area(i, j) + + lrflux); + duflux = 1.0 * ( + (xWidth(i, j + 1) * eq3FluxDU(i, j + 1) - + xWidth(i, j) * eq3FluxDU(i, j)) / area(i, j) + + geometry(i, j) * eq3Flux(i, j)); + + yMomentum(i, j) = yMomentum(i, j) - dt * + ((yWidth(i + 1, j) * eq3FluxLR(i + 1, j) - + yWidth(i, j) * eq3FluxLR(i, j)) / area(i, j) + + duflux); + + totalE(i, j) = totalE(i, j) - dt * + (yWidth(i + 1, j) * eq4FluxLR(i + 1, j) - + yWidth(i, j) * eq4FluxLR(i, j) + + xWidth(i, j + 1) * eq4FluxDU(i, j + 1) - + xWidth(i, j) * eq4FluxDU(i, j)) / area(i, j); + } + } + + xVel = xMomentum / rho; + yVel = yMomentum / rho; + + velocity_vcgc[0].slice(iAlt) = xVel; + velocity_vcgc[1].slice(iAlt) = yVel; + temp = (totalE / rho - 0.5 * (xVel % xVel + yVel % yVel)) / t_to_e; + temp.clamp(200, 2000); + + //precision_t fac, dm, dp; + + for (int64_t j = nGCs; j < nY - nGCs; j++) { + for (int64_t i = nGCs; i < nX - nGCs; i++) { + //fac = 1.0; + //if (cos(grid.geoLat_scgc(i,j,iAlt)) < 0.2) { + // fac = fac * (0.2 - cos(grid.geoLat_scgc(i,j,iAlt))); + //} + //dm = (1.0 - fac) * temperature_scgc(i,j,iAlt); + //dp = (1.0 + fac) * temperature_scgc(i,j,iAlt); + //if (temp(i,j) < dm) temp(i,j) = dm; + //if (temp(i,j) > dp) temp(i,j) = dp; + temperature_scgc(i, j, iAlt) = temp(i, j); + + //dm = (1.0 - fac) * rho_scgc(i,j,iAlt); + //dp = (1.0 + fac) * rho_scgc(i,j,iAlt); + //if (rho(i,j) < dm) rho(i,j) = dm; + //if (rho(i,j) > dp) rho(i,j) = dp; + rho_scgc(i, j, iAlt) = rho(i, j); + } + } + + if (report.test_verbose(3) && iAlt == 8) { + std::cout << "end t : " << temperature_scgc.slice( + iAlt).min() << " " << temperature_scgc.slice(iAlt).max() << "\n"; + std::cout << "end temp : " << temp.min() << " " << temp.max() << "\n"; + std::cout << "end xVel : " << xVel.min() << " " << xVel.max() << "\n"; + std::cout << "end yVel : " << yVel.min() << " " << yVel.max() << "\n"; + } + } + + calc_density_from_mass_concentration(); + + // Assign bulk horizontal velocity to all species: + for (int64_t iSpecies = 0; iSpecies < nSpecies; iSpecies++) + for (int64_t iDir = 0; iDir < 2; iDir++) + species[iSpecies].velocity_vcgc[iDir] = velocity_vcgc[iDir]; + + report.exit(function); + return; +} diff --git a/src/solver_chemistry.cpp b/src/solver_chemistry.cpp index 3c9fd21d..ce40ca00 100644 --- a/src/solver_chemistry.cpp +++ b/src/solver_chemistry.cpp @@ -12,8 +12,20 @@ arma_cube solver_chemistry(arma_cube density, arma_cube source, arma_cube loss, precision_t dt) { - arma_cube normalized_loss = loss / (density + 1e-6); + arma_cube normalized_loss; + normalized_loss = loss / (density + 1e-6); arma_cube new_density = (density + dt * source) / (1.0 + dt * normalized_loss); return new_density; } + +arma_mat solver_chemistry(arma_mat density, + arma_mat source, + arma_mat loss, + precision_t dt) { + arma_mat normalized_loss; + normalized_loss = loss / (density + 1e-6); + arma_mat new_density = (density + dt * source) / + (1.0 + dt * normalized_loss); + return new_density; +} diff --git a/src/solver_conduction.cpp b/src/solver_conduction.cpp index a1254a88..e6de684a 100644 --- a/src/solver_conduction.cpp +++ b/src/solver_conduction.cpp @@ -6,20 +6,30 @@ #include "aether.h" // ----------------------------------------------------------------------- -// This code solves the conduction equation in 1D. +// This code solves the laplace equation in 1D: +// +// dV/dt = 1/front d/dx lambda dV/dx + source +// // Some assumptions: // - Assume that lambda and front are scaled by radius squared! // - The spacing can be non-uniform. // - At this point, the bottom BC is fixed, while the top BC is zero gradient // - The dx variable is assumed to be distance between the CURRENT cell center // (i) and the cell center of the cell BELOW the current one (i-1). +// +// The last two arguments are optional, with default values set in the func declaration. // ----------------------------------------------------------------------- arma_vec solver_conduction(arma_vec value, arma_vec lambda, arma_vec front, + arma_vec source, + arma_vec dx, precision_t dt, - arma_vec dx) { + int64_t nGCs, + bool return_diff, // (optional) False by default (return new `value`) + arma_vec source2 // (optional) Sources dependent on `value` + ) { int64_t nPts = value.n_elem; @@ -41,26 +51,33 @@ arma_vec solver_conduction(arma_vec value, arma_vec conduction(nPts); conduction.zeros(); + // If source2 is not given, set it to zero: + if (source2.n_elem == 0) { + source2.set_size(source.n_elem); + source2.zeros(); + } + int64_t i; - for (i = 2; i < nPts - 2; i++) + for (i = nGCs; i < nPts - nGCs; i++) dl(i) = di(i + 1) - di(i - 1) * r(i) * r(i) - di(i) * (1.0 - r(i) * r(i)); arma_vec a = di / du22 % r - dl / du12 % r % r; arma_vec c = di / du22 + dl / du12; - arma_vec b = -1.0 / m - di / du22 % (1.0 + r) - dl / du12 % (1.0 - r % r); - arma_vec d = -1.0 * value / m; + arma_vec b = -1.0 / m - di / du22 % (1.0 + r) - dl / du12 % + (1.0 - r % r) + source2 % front * dt; + arma_vec d = -1.0 * (value / m + source % front * dt); // Lower BCs (fixed value): - a(1) = 0.0; - b(1) = -1.0; - c(1) = 0.0; - d(1) = -1.0 * value(1); + a(nGCs - 1) = 0.0; + b(nGCs - 1) = -1.0; + c(nGCs - 1) = 0.0; + d(nGCs - 1) = -1.0 * value(nGCs - 1); // Upper BCs: // This assumes a constant-gradient BC (need to change for ion and ele temps. - i = nPts - 2; + i = nPts - nGCs; a(i) = 1.0 * (r(i) * (1.0 + r(i)) * di(i) * m(i) / du22(i)); b(i) = -1.0 * (1.0 + r(i) * (1 + r(i)) * di(i) * m(i) / du22(i)); c(i) = 0.0; @@ -70,26 +87,36 @@ arma_vec solver_conduction(arma_vec value, arma_vec dp(nPts, fill::zeros); arma_vec result(nPts, fill::zeros); - cp(1) = c(1) / b(1); + cp(nGCs - 1) = c(nGCs - 1) / b(nGCs - 1); - for (i = 2; i <= nPts - 2; i++) + for (i = nGCs; i <= nPts - nGCs; i++) cp(i) = c(i) / (b(i) - cp(i - 1) * a(i)); - dp(1) = d(1) / b(1); + dp(nGCs - 1) = d(nGCs - 1) / b(nGCs - 1); - for (i = 2; i <= nPts - 2; i++) + for (i = nGCs; i <= nPts - nGCs; i++) dp(i) = (d(i) - dp(i - 1) * a(i)) / (b(i) - cp(i - 1) * a(i)); - result(nPts - 2) = dp(nPts - 2); + result(nPts - nGCs) = dp(nPts - nGCs); - for (i = nPts - 3; i > 0; i--) + for (i = nPts - nGCs - 1; i > nGCs - 1; i--) result(i) = dp(i) - cp(i) * result(i + 1); - conduction = result - value; - conduction(0) = 0.0; - conduction(1) = 0.0; - conduction(nPts - 2) = 0.0; - conduction(nPts - 1) = 0.0; + if (return_diff) { + conduction = result - value; + + for (i = 0; i < nGCs; i++) { + conduction(i) = 0.0; + conduction(nPts - i - 1) = 0.0; + } + } else { + conduction = result; + + for (i = 0; i < nGCs; i++) { + conduction(i) = value(i); + conduction(nPts - nGCs + i) = conduction(nPts - nGCs - 1); + } + } return conduction; } diff --git a/src/solver_coriolis.cpp b/src/solver_coriolis.cpp index 4744f7b5..7bb6cd1b 100644 --- a/src/solver_coriolis.cpp +++ b/src/solver_coriolis.cpp @@ -1,23 +1,23 @@ -// Copyright 2020, the Aether Development Team (see doc/dev_team.md for members) -// Full license can be found in License.md - -// Added by S. Annamalai - June 12, 2023 - -// This function calculates the coriolis acceleration vector for an -// object in motion in a rotating frame of reference. It uses the -// coriolis terms in equations (14), (18), (19) in -// https://drive.google.com/file/d/1Q0cMzKhdd0IoXzBl3odTge9JhBwfAyk9 - -#include "../include/aether.h" - -std::vector coriolis(std::vector velocity, - precision_t rotation_rate, - arma_cube lat_scgc) { - std::vector coriolis_vec(3); - coriolis_vec[0] = -2 * rotation_rate * velocity[1] % sin(lat_scgc); - coriolis_vec[1] = - 2 * rotation_rate * velocity[0] % sin(lat_scgc) - - 2 * rotation_rate * velocity[2] % cos(lat_scgc); - coriolis_vec[2] = 2 * rotation_rate * cos(lat_scgc) % velocity[1]; - return coriolis_vec; -} +// Copyright 2020, the Aether Development Team (see doc/dev_team.md for members) +// Full license can be found in License.md + +// Added by S. Annamalai - June 12, 2023 + +// This function calculates the coriolis acceleration vector for an +// object in motion in a rotating frame of reference. It uses the +// coriolis terms in equations (14), (18), (19) in +// https://drive.google.com/file/d/1Q0cMzKhdd0IoXzBl3odTge9JhBwfAyk9 + +#include "../include/aether.h" + +std::vector coriolis(std::vector velocity, + precision_t rotation_rate, + arma_cube lat_scgc) { + std::vector coriolis_vec(3); + coriolis_vec[0] = ( + 2 * rotation_rate * velocity[1] % sin(lat_scgc) - + 2 * rotation_rate * velocity[2] % cos(lat_scgc)); + coriolis_vec[1] = -2 * rotation_rate * velocity[0] % sin(lat_scgc); + coriolis_vec[2] = 2 * rotation_rate * cos(lat_scgc) % velocity[1] * 0.0; + return coriolis_vec; +} diff --git a/src/solver_gradients.cpp b/src/solver_gradients.cpp index f2bf0cc9..15e9d3de 100644 --- a/src/solver_gradients.cpp +++ b/src/solver_gradients.cpp @@ -4,91 +4,367 @@ #include "../include/aether.h" // -------------------------------------------------------------------------- -// Calculate the gradient in the longitudinal direction +// Calculate the gradient in all directions, returning a vector +// It is assumed that this is lon, lat, rad // -------------------------------------------------------------------------- -std::vector calc_gradient_vector(arma_cube value_scgc, Grid grid) { +std::vector calc_gradient_vector(arma_cube value_scgc, Grid &grid) { std::vector gradient_vcgc; - if (input.get_is_cubesphere()) - gradient_vcgc = calc_gradient_cubesphere(value_scgc, grid); + if (report.test_verbose(4)) { + std::cout << "grid shape (1 = sphere; 2 = cube; 3 = dipole) : " << + grid.iGridShape_ << "\n"; + display_vector("gradient, value : ", value_scgc.tube(9, 9)); + } + if (grid.iGridShape_ == iCubesphere_) + gradient_vcgc = calc_gradient_cubesphere(value_scgc, grid); + else if (grid.iGridShape_ == iDipole_) + gradient_vcgc = calc_gradient_dipole(value_scgc, grid); else { - gradient_vcgc.push_back(calc_gradient_lon(value_scgc, grid)); - gradient_vcgc.push_back(calc_gradient_lat(value_scgc, grid)); + + report.print(4, "Going into calc_gradient_lon"); + gradient_vcgc.push_back(calc_gradient2o_i(value_scgc, grid)); + + if (report.test_verbose(4)) + display_vector("gradient[0] : ", gradient_vcgc[0].tube(9, 9)); + + report.print(4, "Going into calc_gradient_lat"); + gradient_vcgc.push_back(calc_gradient2o_j(value_scgc, grid)); + + if (report.test_verbose(4)) + display_vector("gradient[1] : ", gradient_vcgc[1].tube(9, 9)); + + report.print(4, "Going into calc_gradient_alt"); gradient_vcgc.push_back(calc_gradient_alt(value_scgc, grid)); + + if (report.test_verbose(4)) + display_vector("gradient[2] : ", gradient_vcgc[2].tube(9, 9)); } return gradient_vcgc; } +// -------------------------------------------------------------------------- +// Routines related to native i - direction +// - 2nd order uniform grid +// - 4th order uniform grid +// - 2nd order stretched grid +// -------------------------------------------------------------------------- + +// -------------------------------------------------------------------------- +// Calculate the 2nd order gradient in the native i direction +// - these formulas assume that the grid is uniform. +// -------------------------------------------------------------------------- + +arma_cube calc_gradient2o_i(arma_cube value, Grid &grid) { + + std::string function = "calc_gradient2o_i"; + static int iFunction = -1; + report.enter(function, iFunction); + + int64_t nX = grid.get_nX(); + int64_t nY = grid.get_nY(); + int64_t nZ = grid.get_nZ(); + int64_t iX; + + arma_cube gradient(nX, nY, nZ); + gradient.zeros(); + + if (grid.get_HasXdim()) { + // Interior: + for (iX = 1; iX < nX - 1; iX++) + gradient.row(iX) = + (value.row(iX + 1) - value.row(iX - 1)) / + (2.0 * grid.di_center_m_scgc.row(iX)); + + // Lower (one sided): + iX = 0; + gradient.row(iX) = + (value.row(iX + 1) - value.row(iX)) / + grid.di_center_m_scgc.row(iX); + + // Upper (one sided): + iX = nX - 1; + gradient.row(iX) = + (value.row(iX) - value.row(iX - 1)) / + grid.di_center_m_scgc.row(iX); + } + report.exit(function); + return gradient; +} + +// -------------------------------------------------------------------------- +// Calculate the 4th gradient in the native i direction +// - these formulas assume that the grid is uniform. +// -------------------------------------------------------------------------- + +arma_cube calc_gradient4o_i(arma_cube value, Grid &grid) { + + int64_t nX = grid.get_nX(); + int64_t nY = grid.get_nY(); + int64_t nZ = grid.get_nZ(); + int64_t iX; + + arma_cube gradient(nX, nY, nZ); + gradient.zeros(); + + if (grid.get_HasXdim()) { + // Interior, 5 point sencil: + for (iX = 2; iX < nX - 2; iX++) + gradient.row(iX) = (-value.row(iX + 2) + + 8 * value.row(iX + 1) - + 8 * value.row(iX - 1) + + value.row(iX - 2)) / + (12. * grid.di_center_m_scgc.row(iX)); + + // Points just inside edges (2nd order): + iX = 1; + gradient.row(iX) = + (value.row(iX + 1) - value.row(iX - 1)) / + (2 * grid.di_center_m_scgc.row(iX)); + iX = nX - 2; + gradient.row(iX) = + (value.row(iX + 1) - value.row(iX - 1)) / + (2 * grid.di_center_m_scgc.row(iX)); + + // Points at the edges (1st order): + iX = 0; + gradient.row(iX) = + (value.row(iX + 1) - value.row(iX)) / + grid.di_center_m_scgc.row(iX); + iX = nX - 1; + gradient.row(iX) = + (value.row(iX) - value.row(iX - 1)) / + grid.di_center_m_scgc.row(iX); + } + + return gradient; +} + +// -------------------------------------------------------------------------- +// Calculate the 2nd order gradient in the native i-direction, +// assuming a stretched grid +// -------------------------------------------------------------------------- + +arma_cube calc_gradient_stretched_i(arma_cube value, Grid grid) { + + int64_t nX = grid.get_nX(); + int64_t nY = grid.get_nY(); + int64_t nZ = grid.get_nZ(); + int64_t iX; + + arma_cube gradient(nX, nY, nZ); + gradient.zeros(); + + if (grid.get_HasXdim()) { + // Central part + for (iX = 1; iX < nX - 1; iX++) + gradient.row(iX) = + (value.row(iX + 1) + - grid.di_one_minus_r2.row(iX) % value.row(iX) + - grid.di_ratio_sq.row(iX) % value.row(iX - 1)) / + (grid.di_edge_m.row(iX + 1) % + (1.0 + grid.di_ratio.row(iX))); + + // Points at the edges (1st order): + iX = 0; + gradient.row(iX) = + (value.row(iX + 1) - value.row(iX)) / + grid.di_center_m_scgc.row(iX); + iX = nX - 1; + gradient.row(iX) = + (value.row(iX) - value.row(iX - 1)) / + grid.di_center_m_scgc.row(iX); + } + + return gradient; +} + + + // -------------------------------------------------------------------------- // Calculate the gradient in the longitudinal direction // -------------------------------------------------------------------------- -arma_cube calc_gradient_lon(arma_cube value, Grid grid) { +arma_cube calc_gradient_lon(arma_cube value, Grid &grid) { + return calc_gradient2o_i(value, grid); +} - int64_t nLons = grid.get_nLons(); - int64_t nLats = grid.get_nLats(); - int64_t nAlts = grid.get_nAlts(); - int64_t iLon; +// -------------------------------------------------------------------------- +// Calculate the 2nd order gradient in the native j direction +// - these formulas assume that the grid is uniform. +// -------------------------------------------------------------------------- - arma_cube gradient(nLons, nLats, nAlts); +arma_cube calc_gradient2o_j(arma_cube value, Grid &grid) { + + std::string function = "calc_gradient2o_j"; + static int iFunction = -1; + report.enter(function, iFunction); + + int64_t nX = grid.get_nX(); + int64_t nY = grid.get_nY(); + int64_t nZ = grid.get_nZ(); + int64_t iY; + + arma_cube gradient(nX, nY, nZ); gradient.zeros(); - // Interior: - for (iLon = 1; iLon < nLons - 1; iLon++) - gradient.row(iLon) = - (value.row(iLon + 1) - value.row(iLon - 1)) / - (2 * grid.dlon_center_dist_scgc.row(iLon)); + if (grid.get_HasYdim()) { + // Interior: + for (iY = 1; iY < nY - 1; iY++) + gradient.col(iY) = + (value.col(iY + 1) - value.col(iY - 1)) / + (2 * grid.dj_center_m_scgc.col(iY)); + + // Lower (one sided): + iY = 0; + gradient.col(iY) = + (value.col(iY + 1) - value.col(iY)) / + grid.dj_center_m_scgc.col(iY); + + // Upper (one sided): + iY = nY - 1; + gradient.col(iY) = + (value.col(iY) - value.col(iY - 1)) / + grid.dj_center_m_scgc.col(iY); + } + report.exit(function); + return gradient; +} + +// -------------------------------------------------------------------------- +// Calculate the 4th order gradient in the native j direction +// - these formulas assume that the grid is uniform. +// -------------------------------------------------------------------------- - // Lower (one sided): - iLon = 0; - gradient.row(iLon) = - (value.row(iLon + 1) - value.row(iLon)) / - grid.dlon_center_dist_scgc.row(iLon); +arma_cube calc_gradient4o_j(arma_cube value, Grid &grid) { - // Upper (one sided): - iLon = nLons - 1; - gradient.row(iLon) = - (value.row(iLon) - value.row(iLon - 1)) / - grid.dlon_center_dist_scgc.row(iLon); + int64_t nX = grid.get_nX(); + int64_t nY = grid.get_nY(); + int64_t nZ = grid.get_nZ(); + int64_t iY; + + arma_cube gradient(nX, nY, nZ); + gradient.zeros(); + + if (grid.get_HasYdim()) { + // Interior: + for (iY = 2; iY < nY - 2; iY++) + gradient.col(iY) = (-value.col(iY + 2) + + 8 * value.col(iY + 1) - + 8 * value.col(iY - 1) + + value.col(iY - 2)) / + (12. * grid.dj_center_m_scgc.col(iY)); + + // Points just inside edges (2nd order): + iY = 1; + gradient.col(iY) = + (value.col(iY + 1) - value.col(iY - 1)) / + (2 * grid.dj_center_m_scgc.col(iY)); + iY = nY - 2; + gradient.col(iY) = + (value.col(iY + 1) - value.col(iY - 1)) / + (2 * grid.dj_center_m_scgc.col(iY)); + + // Lower (one sided): + iY = 0; + gradient.col(iY) = + (value.col(iY + 1) - value.col(iY)) / + grid.dj_center_m_scgc.col(iY); + + // Upper (one sided): + iY = nY - 1; + gradient.col(iY) = + (value.col(iY) - value.col(iY - 1)) / + grid.dj_center_m_scgc.col(iY); + } return gradient; } // -------------------------------------------------------------------------- -// Calculate the gradient in the latitudinal direction +// Calculate the 2nd order gradient in the native j-direction, +// assuming a stretched grid // -------------------------------------------------------------------------- -arma_cube calc_gradient_lat(arma_cube value, Grid grid) { +arma_cube calc_gradient_stretched_j(arma_cube value, Grid grid) { - int64_t nLons = grid.get_nLons(); - int64_t nLats = grid.get_nLats(); - int64_t nAlts = grid.get_nAlts(); - int64_t iLat; + int64_t nX = grid.get_nX(); + int64_t nY = grid.get_nY(); + int64_t nZ = grid.get_nZ(); + int64_t iY; - arma_cube gradient(nLons, nLats, nAlts); + arma_cube gradient(nX, nY, nZ); gradient.zeros(); - // Interior: - for (iLat = 1; iLat < nLats - 1; iLat++) - gradient.col(iLat) = - (value.col(iLat + 1) - value.col(iLat - 1)) / - (2 * grid.dlat_center_dist_scgc.col(iLat)); + if (grid.get_HasYdim()) { + // Central part + for (iY = 1; iY < nY - 1; iY++) + gradient.col(iY) = + (value.col(iY + 1) + - grid.dj_one_minus_r2.col(iY) % value.col(iY) + - grid.dj_ratio_sq.col(iY) % value.col(iY - 1)) / + (grid.dj_edge_m.col(iY + 1) % + (1.0 + grid.dj_ratio.col(iY))); + + // Points at the edges (1st order): + iY = 0; + gradient.col(iY) = + (value.col(iY + 1) - value.col(iY)) / + grid.dj_center_m_scgc.col(iY); + iY = nY - 1; + gradient.col(iY) = + (value.col(iY) - value.col(iY - 1)) / + grid.dj_center_m_scgc.col(iY); + } - // Lower (one sided): - iLat = 0; - gradient.col(iLat) = - (value.col(iLat + 1) - value.col(iLat)) / - grid.dlat_center_dist_scgc.col(iLat); + return gradient; +} - // Upper (one sided): - iLat = nLats - 1; - gradient.col(iLat) = - (value.col(iLat) - value.col(iLat - 1)) / - grid.dlat_center_dist_scgc.col(iLat); +// -------------------------------------------------------------------------- +// Calculate the gradient in the latitudinal direction +// -------------------------------------------------------------------------- + +arma_cube calc_gradient_lat(arma_cube value, Grid &grid) { + return calc_gradient2o_j(value, grid); +} + +// -------------------------------------------------------------------------- +// Calculate the 2nd order gradient in the native k direction +// - these formulas assume that the grid is uniform. +// -------------------------------------------------------------------------- + +arma_cube calc_gradient2o_k(arma_cube value, Grid &grid) { + + int64_t nX = grid.get_nX(); + int64_t nY = grid.get_nY(); + int64_t nZ = grid.get_nZ(); + int64_t iZ; + + arma_cube gradient(nX, nY, nZ); + gradient.zeros(); + + if (grid.get_HasZdim()) { + // Interior: + for (iZ = 1; iZ < nZ - 1; iZ++) + gradient.slice(iZ) = + (value.slice(iZ + 1) - value.slice(iZ - 1)) / + (2 * grid.dk_center_m_scgc.slice(iZ)); + + // Lower (one sided): + iZ = 0; + gradient.slice(iZ) = + (value.slice(iZ + 1) - value.slice(iZ)) / + grid.dk_center_m_scgc.slice(iZ); + + // Upper (one sided): + iZ = nZ - 1; + gradient.slice(iZ) = + (value.slice(iZ) - value.slice(iZ - 1)) / + grid.dk_center_m_scgc.slice(iZ); + } return gradient; } @@ -97,39 +373,44 @@ arma_cube calc_gradient_lat(arma_cube value, Grid grid) { // Calculate the gradient in the altitudinal direction // -------------------------------------------------------------------------- -arma_cube calc_gradient_alt(arma_cube value, Grid grid) { +arma_cube calc_gradient_alt(arma_cube value, Grid &grid) { - int64_t nLons = grid.get_nLons(); - int64_t nLats = grid.get_nLats(); - int64_t nAlts = grid.get_nAlts(); - int64_t nGCs = grid.get_nGCs(); - int64_t iAlt; + std::string function = "calc_gradient_alt"; + static int iFunction = -1; + report.enter(function, iFunction); - arma_cube gradient(nLons, nLats, nAlts); + int64_t nX = grid.get_nX(); + int64_t nY = grid.get_nY(); + int64_t nZ = grid.get_nZ(); + int64_t iK; + + arma_cube gradient(nX, nY, nZ); gradient.zeros(); - arma_cube one_minus_r2 = 1.0 - grid.dalt_ratio_sq_scgc; + if (grid.get_HasZdim()) { + // Central part + for (iK = 1; iK < nZ - 1; iK++) + gradient.slice(iK) = + (value.slice(iK + 1) + - grid.dk_one_minus_r2.slice(iK) % value.slice(iK) + - grid.dk_ratio_sq.slice(iK) % value.slice(iK - 1)) / + (grid.dk_edge_m.slice(iK + 1) % + (1.0 + grid.dk_ratio.slice(iK))); + + // lower boundary + iK = 0; + gradient.slice(iK) = + (value.slice(iK + 1) - value.slice(iK)) / + grid.dk_edge_m.slice(iK); + + // upper boundary + iK = nZ - 1; + gradient.slice(iK) = + (value.slice(iK) - value.slice(iK - 1)) / + grid.dk_edge_m.slice(iK); + } + report.exit(function); - // Central part - for (iAlt = 1; iAlt < nAlts - 1; iAlt++) - gradient.slice(iAlt) = - (value.slice(iAlt + 1) - - one_minus_r2.slice(iAlt) % value.slice(iAlt) - - grid.dalt_ratio_sq_scgc.slice(iAlt) % value.slice(iAlt - 1)) / - (grid.dalt_lower_scgc.slice(iAlt + 1) % - (1.0 + grid.dalt_ratio_scgc.slice(iAlt))); - - // lower boundary - iAlt = 0; - gradient.slice(iAlt) = - (value.slice(iAlt + 1) - value.slice(iAlt)) / - grid.dalt_lower_scgc.slice(iAlt); - - // upper boundary - iAlt = nAlts - 1; - gradient.slice(iAlt) = - (value.slice(iAlt) - value.slice(iAlt - 1)) / - grid.dalt_lower_scgc.slice(iAlt); return gradient; } @@ -137,7 +418,7 @@ arma_cube calc_gradient_alt(arma_cube value, Grid grid) { // Calculate the 4th order gradient in the altitudinal direction // -------------------------------------------------------------------------- -arma_cube calc_gradient_alt_4th(arma_cube value, Grid grid) { +arma_cube calc_gradient_alt_4th(arma_cube value, Grid &grid) { int64_t nLons = grid.get_nLons(); int64_t nLats = grid.get_nLats(); @@ -159,10 +440,60 @@ arma_cube calc_gradient_alt_4th(arma_cube value, Grid grid) { return gradient; } +// -------------------------------------------------------------------------- +// Calculate the 3rd order (on-sided) gradient in the altitudinal direction +// - this is only defined for the bottom ghostcells! +// -------------------------------------------------------------------------- + +arma_mat project_onesided_alt_3rd(arma_cube value, Grid &grid, int64_t iAlt) { + + int64_t nLons = grid.get_nLons(); + int64_t nLats = grid.get_nLats(); + + arma_mat gradient(nLons, nLats), valueOut(nLons, nLats); + /* + gradient = + grid.MeshCoef1s3rdp1.slice(iAlt) % value.slice(iAlt + 1) + + grid.MeshCoef1s3rdp2.slice(iAlt) % value.slice(iAlt + 2) + + grid.MeshCoef1s3rdp3.slice(iAlt) % value.slice(iAlt + 3) + + grid.MeshCoef1s3rdp4.slice(iAlt) % value.slice(iAlt + 4) + + grid.MeshCoef1s3rdp5.slice(iAlt) % value.slice(iAlt + 5); + */ + gradient = (value.slice(iAlt + 2) - value.slice(iAlt + 1)) / + grid.dk_edge_m.slice(iAlt + 2); + + valueOut = value.slice(iAlt + 1) - gradient % grid.dk_edge_m.slice(iAlt + 1); + return valueOut; +} + +// -------------------------------------------------------------------------- +// Calculate the gradient on the dipole grid +// - This is identical to the spherical grid, except the k/alt direction. +// -------------------------------------------------------------------------- +std::vector calc_gradient_dipole(arma_cube value_scgc, Grid grid) { + + std::vector gradient_vcgc; + + report.print(3, "Calculating dipole griadient"); + + report.print(4, "Going into calc_gradient_i (dipole)"); + gradient_vcgc.push_back(calc_gradient2o_i(value_scgc, grid)); + + + report.print(4, "Going into calc_gradient_j (dipole)"); + gradient_vcgc.push_back(calc_gradient2o_j(value_scgc, grid)); + + + report.print(4, "Going into calc_gradient_K (DIPOLE)"); + gradient_vcgc.push_back(calc_gradient2o_k(value_scgc, grid)); + + return gradient_vcgc; +} + // -------------------------------------------------------------------------- // Calculate the gradient in cubesphere spatial discretization // -------------------------------------------------------------------------- -std::vector calc_gradient_cubesphere(arma_cube value, Grid grid) { +std::vector calc_gradient_cubesphere(arma_cube value, Grid &grid) { // Must be used for cubesphere (Probably need a boolean check) int64_t nXs = grid.get_nY(); int64_t nYs = grid.get_nX(); @@ -197,23 +528,27 @@ std::vector calc_gradient_cubesphere(arma_cube value, Grid grid) { // Only update interior cells // May vectorize for future improvements - if (nGCs >= - 2) { // if more than 1 nGCs, we do fourth order, some foolproofing in case we go into debug hell + // if more than 1 nGCs, we do fourth order, some foolproofing in case we go into debug hell + if (nGCs >= 2) { for (int j = nGCs; j < nYs - nGCs; j++) { for (int i = nGCs; i < nXs - nGCs; i++) { - grad_x_curr(i, j) = (-curr_value(i + 2, j) + 8 * curr_value(i + 1, - j) - 8 * curr_value(i - 1, j) + curr_value(i - 2, j)) * (1. / 12. / dx); - grad_y_curr(i, j) = (-curr_value(i, j + 2) + 8 * curr_value(i, - j + 1) - 8 * curr_value(i, j - 1) + curr_value(i, j - 2)) * (1. / 12. / dy); + grad_x_curr(i, j) = (-curr_value(i + 2, j) + + 8 * curr_value(i + 1, j) - + 8 * curr_value(i - 1, j) + + curr_value(i - 2, j)) * (1. / 12. / dx); + grad_y_curr(i, j) = (-curr_value(i, j + 2) + + 8 * curr_value(i, j + 1) - + 8 * curr_value(i, j - 1) + + curr_value(i, j - 2)) * (1. / 12. / dy); } } } else { // otherwise we do second order for (int j = nGCs; j < nYs - nGCs; j++) { for (int i = nGCs; i < nXs - nGCs; i++) { - grad_x_curr(i, j) = (curr_value(i + 1, j) - curr_value(i - 1, - j)) * (1. / 2. / dx); - grad_y_curr(i, j) = (curr_value(i, j + 1) - curr_value(i, - j - 1)) * (1. / 2. / dy); + grad_x_curr(i, j) = (curr_value(i + 1, j) - + curr_value(i - 1, j)) * (1. / 2. / dx); + grad_y_curr(i, j) = (curr_value(i, j + 1) - + curr_value(i, j - 1)) * (1. / 2. / dy); } } } diff --git a/src/solver_grid_interpolation.cpp b/src/solver_grid_interpolation.cpp index 39bb2dc3..e0cba3ca 100644 --- a/src/solver_grid_interpolation.cpp +++ b/src/solver_grid_interpolation.cpp @@ -3,7 +3,9 @@ #include "aether.h" -// Hepler varialbes / function begins. These are only used inside this cpp file and neither declared nor visible in any other file +// Hepler variables / function begins. +// These are only used inside this cpp file and neither declared +// nor visible in any other file // The size of a 2*2*2 arma cube const arma::SizeCube unit_cube_size = arma::size(2, 2, 2); @@ -69,10 +71,12 @@ int64_t get_cube_surface_number(const arma_vec &point_in) { } } -// Helper variables / function ends. The following are all member functions of Grid class +// Helper variables / function ends. The following are all member +// functions of Grid class // -------------------------------------------------------------------------- -// Return the index of the last element that has altitude smaller than or euqal to the input +// Return the index of the last element that has altitude smaller than +// or equal to the input // -------------------------------------------------------------------------- uint64_t Grid::search_altitude(const precision_t alt_in) const { @@ -99,6 +103,37 @@ uint64_t Grid::search_altitude(const precision_t alt_in) const { return first - 1; } +// -------------------------------------------------------------------------- +// Return the index of the last element that has a value smaller than +// or equal to the input +// - Optional argument (nGCs=0) since we cannot see grid info. +// -------------------------------------------------------------------------- + +// this replaces the above + +uint64_t bisect_search_array(precision_t val_in, arma_vec ref_arr, + int64_t nGCs = 0) { + uint64_t first, last, len; + first = nGCs; + last = ref_arr.size(); + len = last - first; + + while (len > 0) { + uint64_t half = len >> 1; + uint64_t mid = first + half; + + if (ref_arr(mid) > val_in) + len = half; + + else { + first = mid + 1; + len = len - half - 1; + } + } + + return first - 1; +} + // -------------------------------------------------------------------------- // Get the range of a spherical grid // -------------------------------------------------------------------------- @@ -179,34 +214,63 @@ void Grid::get_cubesphere_grid_range(struct cubesphere_range &cr) const { } } + +// -------------------------------------------------------------------------- +// Get the range of a Dipole grid +// -------------------------------------------------------------------------- + +void Grid::get_dipole_grid_range(struct dipole_range &dr) const { + // Retrieve the range and delta of longitude, latitude and altitude + // ** Note the max/min are magnetic coordinates. ** + dr.lon_min = i_corner_scgc(nGCs, nGCs, nGCs); + dr.lon_max = i_corner_scgc(nLons - nGCs, nLats - nGCs, nAlts - nGCs); + + dr.lat_min = j_corner_scgc(nGCs, nGCs, nGCs); + dr.lat_max = j_corner_scgc(nLons - nGCs, nLats - nGCs, nAlts - nGCs); + + // magAlt and geoAlt are the same, doesn't matter which we use: + dr.alt_min = k_corner_scgc(nGCs, nGCs, nGCs); + dr.alt_max = k_corner_scgc(nLons - nGCs, nLats - nGCs, nAlts - nGCs); + + // MagLon steps are uniform: + dr.dLon = magLon_Corner(1, 0, 0) - magLon_Corner(0, 0, 0); +} + + // -------------------------------------------------------------------------- // Set interpolation coefficients helper function for spherical grid // Almost the copy of interp_sphere_linear_helper // -------------------------------------------------------------------------- -void Grid::set_interp_coef_sphere(const sphere_range &sr, - const precision_t lon_in, - const precision_t lat_in, - const precision_t alt_in) { + +struct interp_coef_t Grid::get_interp_coef_sphere(const sphere_range &sr, + const precision_t lon_in, + const precision_t lat_in, + const precision_t alt_in) { + // WARNING: IF WE ARE DEALING WITH LESS THAN THE WHOLE EARTH, THEN ALL THE POINTS WITH // LONGITUDE = geo_grid_input.lon_max = settings["GeoGrid"]["MaxLon"] // OR LATITUDE = geo_grid_input.lat_max = settings["GeoGrid"]["MaxLat"] // ARE EXCLUDED. // TO FIX IT, EACH GRID SHOULD BE ABLE TO ACCESS THE MaxLon and MaxLat - // The structure which will be put into the interp_coefs. Initialize in_grid to be false + // The structure which will be put into the interp_coefs. + // Initialize in_grid to be false struct interp_coef_t coef; coef.in_grid = false; // Determine whether the point is inside this grid - // Treat north pole specially because latitude is inclusive for both -cPI/2 and cPI/2 + // Treat north pole specially because latitude is inclusive for + // both -cPI/2 and cPI/2 + // Don't check for altitude here! if (lon_in < sr.lon_min || lon_in >= sr.lon_max || lat_in < sr.lat_min - || lat_in > sr.lat_max || (lat_in == sr.lat_max && sr.lat_max != cPI / 2) - || alt_in < sr.alt_min || alt_in > sr.alt_max) { - interp_coefs.push_back(coef); - return; + || lat_in > sr.lat_max || (lat_in == sr.lat_max && sr.lat_max != cPI / 2)) { + return coef; } + // This point is in the grid! + coef.in_grid = true; + // ASSUMPTION: LONGITUDE AND LATITUDE ARE LINEARLY SPACED, nGCs >= 1 // For the cell containing it, directly calculate its x and y index // Find its z index using binary search @@ -228,13 +292,31 @@ void Grid::set_interp_coef_sphere(const sphere_range &sr, // The altitude may not be linearly spaced, so use binary search to find // the first element smaller than or equal to the altitude of the give point // Implemented in search_altitude - coef.iAlt = search_altitude(alt_in); - coef.rAlt = (alt_in - geoAlt_scgc(0, 0, coef.iAlt)) - / (geoAlt_scgc(0, 0, coef.iAlt + 1) - geoAlt_scgc(0, 0, coef.iAlt)); - // Put the coefficient into the vector - coef.in_grid = true; - interp_coefs.push_back(coef); + if (alt_in < sr.alt_min) { + coef.iAlt = nGCs; + coef.rAlt = alt_in - sr.alt_min; + coef.below_grid = true; + coef.above_grid = false; + } else { + if (alt_in > sr.alt_max) { + coef.iAlt = nAlts - nGCs; + coef.rAlt = alt_in - sr.alt_max; + coef.below_grid = false; + coef.above_grid = true; + } else { + coef.iAlt = bisect_search_array(alt_in, + geoAlt_scgc.tube(coef.iRow, coef.iCol), + nGCs); + coef.rAlt = + (alt_in - geoAlt_scgc(coef.iRow, coef.iCol, coef.iAlt)) + / (geoAlt_scgc(coef.iRow, coef.iCol, coef.iAlt + 1) - + geoAlt_scgc(coef.iRow, coef.iCol, coef.iAlt)); + coef.below_grid = false; + coef.above_grid = false; + } + } + return coef; } // -------------------------------------------------------------------------- @@ -242,7 +324,7 @@ void Grid::set_interp_coef_sphere(const sphere_range &sr, // Almost the copy of interp_cubesphere_linear_helper // -------------------------------------------------------------------------- -void Grid::set_interp_coef_cubesphere(const cubesphere_range &cr, +struct interp_coef_t Grid::get_interp_coef_cubesphere(const cubesphere_range &cr, const precision_t lon_in, const precision_t lat_in, const precision_t alt_in) { @@ -259,8 +341,7 @@ void Grid::set_interp_coef_cubesphere(const cubesphere_range &cr, // Determine whether the projection point is on the surface of the grid if (surface_in != cr.surface_number) { - interp_coefs.push_back(coef); - return; + return coef; } // Calculate the theoretical fractional row index and column index @@ -280,12 +361,13 @@ void Grid::set_interp_coef_cubesphere(const cubesphere_range &cr, || row_frac_index > row_index_max || (row_frac_index == row_index_max && cr.row_max_exclusive) || col_frac_index > col_index_max || (col_frac_index == col_index_max && - cr.col_max_exclusive) - || alt_in < cr.alt_min || alt_in > cr.alt_max) { - interp_coefs.push_back(coef); - return; + cr.col_max_exclusive)) { + return coef; } + // This point is in the grid! + coef.in_grid = true; + // Get the real integer index and the interpolation coefficient uint64_t row_index, col_index, alt_index; precision_t rRow, rCol, rAlt; @@ -302,34 +384,310 @@ void Grid::set_interp_coef_cubesphere(const cubesphere_range &cr, coef.iCol = static_cast(col_frac_index); coef.rCol = col_frac_index - coef.iCol; coef.iCol += nGCs - 1; - // Use binary search to find the index for altitude - coef.iAlt = search_altitude(alt_in); - coef.rAlt = (alt_in - geoAlt_scgc(0, 0, coef.iAlt)) - / (geoAlt_scgc(0, 0, coef.iAlt + 1) - geoAlt_scgc(0, 0, coef.iAlt)); + + + // The altitude may not be linearly spaced, so use binary search to find + // the first element smaller than or equal to the altitude of the give point + // Implemented in search_altitude + + if (alt_in < cr.alt_min) { + coef.iAlt = nGCs; + coef.rAlt = alt_in - cr.alt_min; + coef.below_grid = true; + coef.above_grid = false; + } else { + if (alt_in > cr.alt_max) { + coef.iAlt = nAlts - nGCs; + coef.rAlt = alt_in - cr.alt_max; + coef.below_grid = false; + coef.above_grid = true; + } else { + coef.iAlt = bisect_search_array(alt_in, + geoAlt_scgc.tube(coef.iRow, coef.iCol), + nGCs); + coef.rAlt = + (alt_in - geoAlt_scgc(coef.iRow, coef.iCol, coef.iAlt)) + / (geoAlt_scgc(coef.iRow, coef.iCol, coef.iAlt + 1) - + geoAlt_scgc(coef.iRow, coef.iCol, coef.iAlt)); + coef.below_grid = false; + coef.above_grid = false; + } + } + return coef; +} + + +struct interp_coef_t Grid::get_interp_coef_dipole(const dipole_range &dr, + const precision_t lon_in, + const precision_t lat_in, + const precision_t alt_in) { + + // The structure which will be put into the interp_coefs. Initialize + // in_grid to be false + struct interp_coef_t coef; + coef.in_grid = false; + + // Determine whether the point is inside this grid Treat north pole + // specially because latitude is inclusive for both -cPI/2 and cPI/2 + if (lon_in < dr.lon_min || + lon_in >= dr.lon_max || + lat_in < dr.lat_min || + lat_in > dr.lat_max || + (lat_in == dr.lat_max && dr.lat_max != cPI / 2) + || alt_in < dr.alt_min || alt_in > dr.alt_max) { + return coef; + } // Put the coefficient into the vector coef.in_grid = true; - interp_coefs.push_back(coef); + + // ASSUMPTION: LONGITUDE IS LINEARLY SPACED, nGCs >= 1 + // For the cell containing it, directly calculate its x index + // Find y & z indices using a bisecting search + + // The number of dLon between the innermost ghost cell and the given point + coef.rRow = (lon_in - dr.lon_min) / dr.dLon + 0.5; + // Take the integer part + coef.iRow = static_cast(coef.rRow); + // Calculate the fractional part, which is the ratio for Longitude + coef.rRow -= coef.iRow; + // The actual x-axis index of the bottom-left of the cube used for + // interpolation + coef.iRow += nGCs - 1; + + // Different from the sphere, latitude & altitude are not evenly spaced. + // Use the bisect search function for both. + + // Lat needs to be done a little different because it could be increasing or + // decreasing (depending on the hemisphere we're in). Take the absolute value! + coef.iCol = bisect_search_array(abs(lat_in), + abs(j_center_scgc.tube(coef.iRow, coef.iCol)), nGCs); + + // Use binary search to find the index for altitude + if (alt_in < dr.alt_min) { + coef.iAlt = nGCs; + coef.rAlt = 0.0; + coef.below_grid = true; + coef.above_grid = false; + } else { + if (alt_in > dr.alt_max) { + coef.iAlt = nAlts - nGCs; + coef.rAlt = 0.0; + coef.below_grid = false; + coef.above_grid = true; + } else { + // Use binary search to find the index for altitude (handles + // oblate planets) + + // need alt index to find lat coef + coef.iAlt = bisect_search_array(alt_in, + k_center_scgc.tube(coef.iRow, coef.iCol), + nGCs); + // then we can do the ratios: + coef.rCol = + (lat_in - magLat_scgc(coef.iRow, coef.iCol, coef.iAlt)) + / (magLat_scgc(coef.iRow, coef.iCol + 1, coef.iAlt) + - magLat_scgc(coef.iRow, coef.iCol, coef.iAlt)); + coef.rAlt = + (alt_in - geoAlt_scgc(coef.iRow, coef.iCol, coef.iAlt)) + / (geoAlt_scgc(coef.iRow, coef.iCol, coef.iAlt + 1) - + geoAlt_scgc(coef.iRow, coef.iCol, coef.iAlt)); + coef.below_grid = false; + coef.above_grid = false; + } + } + + return coef; } + // -------------------------------------------------------------------------- // Set the interpolation coefficients // -------------------------------------------------------------------------- -bool Grid::set_interpolation_coefs(const std::vector &Lons, - const std::vector &Lats, - const std::vector &Alts) { - // If this is not a geo grid, return false - if (!IsGeoGrid) - return false; +bool Grid::set_interpolation_coefs(const std::vector &i_coords, + const std::vector &j_coords, + const std::vector &k_coords, + bool areLocsGeo,// geo or mag? + bool areLocsIJK // Are locs in 'native' coords? + ) { + /* + Inputs: + i_coord: longitude, either geo or mag (depends if areLocsGeo) + j_coord: + - Latitude if geographic + - Invariant latitude if magnetic (areLocsGeo = false) + - L-shell / dipole 'p': if magnetic and (areLocsIJK = false) + k_coord: + - Altitude/radius if NOT areLocsIJK + - distance along field line, or dipole 'q' if areLocsIJK + */ + + std::string function = "Grid::set_interpolation_coefs"; + static int iFunction = -1; + report.enter(function, iFunction); + + report.print(1, "interpolation gridtype : " + gridType); + + struct interp_coef_t coef; // If the size of Lons, Lats and Alts are not the same, return false - if (Lons.size() != Lats.size() || Lats.size() != Alts.size()) + if (i_coords.size() != j_coords.size() || + j_coords.size() != k_coords.size()) { + report.error("Length of i,j,k vectors do not match!"); return false; + } // Clear the previous interpolation coefficients interp_coefs.clear(); + // --------------------------------------------------- + // Cubesphere + if (IsCubeSphereGrid) { + // Calculate the range of the grid + struct cubesphere_range cr; + get_cubesphere_grid_range(cr); + + // Calculate the index and coefficients for each point + for (size_t i = 0; i < i_coords.size(); ++i) { + coef = get_interp_coef_cubesphere(cr, + i_coords[i], + j_coords[i], + k_coords[i]); + interp_coefs.push_back(coef); + } + + } + + if (iGridShape_ == iSphere_) { + report.print(1, "interpolation grid is sphere"); + + struct sphere_range sr; + get_sphere_grid_range(sr); + + // Calculate the index and coefficients for each point + for (size_t i = 0; i < i_coords.size(); ++i) { + coef = get_interp_coef_sphere(sr, + i_coords[i], + j_coords[i], + k_coords[i]); + interp_coefs.push_back(coef); + } + } + + if (iGridShape_ == iDipole_) { // IsDipole + report.print(1, "interpolation grid is dipole"); + + // Calculate the range of the grid + struct dipole_range dr; + get_dipole_grid_range(dr); + + Planets planet; + + // make holders for dipole coordinates. + int64_t iLoc, nPts = i_coords.size(); + std::vector mlon(nPts), p_coord(nPts), q_coord(nPts), dipijk(3); + + // these are the magnetic coordinates. A temporary step! this is + // a vector of cubes with shape (nPts, 1, 1) - avoids having to + // overload things + std::vector magCoords; + + if (areLocsGeo) { + arma_cube cubeCoord; + cubeCoord = vec2cube(i_coords); + magCoords.push_back(cubeCoord); + cubeCoord = vec2cube(j_coords); + magCoords.push_back(cubeCoord); + cubeCoord = vec2cube(k_coords); + magCoords.push_back(cubeCoord); + + magCoords = geo_to_mag(magCoords[0], magCoords[1], magCoords[2], planet); + // for (iLoc = 0; iLoc < nPts; iLoc++) { + // magCoords = geo_to_mag(i_coords[iLoc], j_coords[iLoc], k_coords[iLoc], planet); + // mlon[iLoc] = magCoords[0]; + // p_coord[iLoc] = magCoords[1]; + // q_coord[iLoc] = magCoords[2]; + } + + else { + magCoords = {vec2cube(i_coords), vec2cube(j_coords), vec2cube(k_coords)}; + } + + // std::vector dipcoords = geo_to_mag(i_coords[0], j_coords[0], k_coords[0], planet); + std::vector dipCoords; + + if (!areLocsIJK) { + std::vector planet_radii(nPts); + + for (iLoc = 0; iLoc < nPts; iLoc++) { + // Convert from mag->dipole coordinates. + if (areLocsGeo) // we were given the geo-latitude + planet_radii[iLoc] = planet.get_radius(j_coords[iLoc]); + + else { + // equatorial radius :( + planet_radii[iLoc] = planet.get_radius(0.0); + } + + dipCoords = mag_to_ijk(i_coords[iLoc], j_coords[iLoc], k_coords[iLoc], + planet_radii[iLoc]); + mlon[iLoc] = dipCoords[0]; + p_coord[iLoc] = dipCoords[1]; + q_coord[iLoc] = dipCoords[2]; + } + } else { + // just save the values + for (iLoc = 0; iLoc < nPts; iLoc++) { + mlon[iLoc] = i_coords[iLoc]; + p_coord[iLoc] = j_coords[iLoc]; + q_coord[iLoc] = k_coords[iLoc]; + } + } + + // Calculate the index and coefficients for each point + for (size_t i = 0; i < i_coords.size(); ++i) { + coef = get_interp_coef_dipole(dr, mlon[i], p_coord[i], q_coord[i]); + interp_coefs.push_back(coef); + } + } + + report.exit(function); + return true; +} + +// -------------------------------------------------------------------------- +// Set the interpolation coefficients +// (v2 - return a list of interpolation coefficients) +// -------------------------------------------------------------------------- + +std::vector Grid::get_interpolation_coefs( + const std::vector &Lons, + const std::vector &Lats, + const std::vector &Alts) { + + int64_t nPts = Lons.size(), iPt; + std::vector listOfCoefs; + struct interp_coef_t singleCoef; + bool isBad = false; + + // If this is not a geo grid, return false + if (!IsGeoGrid) + isBad = true; + + // If the size of Lons, Lats and Alts are not the same, return false + if (Lons.size() != Lats.size() || Lats.size() != Alts.size()) + isBad = true; + + if (isBad) { + for (iPt = 0; iPt < nPts; ++iPt) { + // Put the coefficient into the vector + singleCoef.in_grid = false; + listOfCoefs.push_back(singleCoef); + } + return listOfCoefs; + } + // Handle according to whether it is cubesphere or not if (IsCubeSphereGrid) { // Calculate the range of the grid @@ -337,19 +695,23 @@ bool Grid::set_interpolation_coefs(const std::vector &Lons, get_cubesphere_grid_range(cr); // Calculate the index and coefficients for each point - for (size_t i = 0; i < Lons.size(); ++i) - set_interp_coef_cubesphere(cr, Lons[i], Lats[i], Alts[i]); + for (iPt = 0; iPt < nPts; ++iPt) { + singleCoef = get_interp_coef_cubesphere(cr, Lons[iPt], Lats[iPt], Alts[iPt]); + listOfCoefs.push_back(singleCoef); + } } else { // Calculate the range of the grid struct sphere_range sr; get_sphere_grid_range(sr); // Calculate the index and coefficients for each point - for (size_t i = 0; i < Lons.size(); ++i) - set_interp_coef_sphere(sr, Lons[i], Lats[i], Alts[i]); + for (iPt = 0; iPt < nPts; ++iPt) { + singleCoef = get_interp_coef_sphere(sr, Lons[iPt], Lats[iPt], Alts[iPt]); + listOfCoefs.push_back(singleCoef); + } } - return true; + return listOfCoefs; } // -------------------------------------------------------------------------- @@ -381,3 +743,34 @@ std::vector Grid::get_interpolation_values( return ans; } + +// -------------------------------------------------------------------------- +// Do the interpolation based on the coefficients passed in +// -------------------------------------------------------------------------- + +std::vector Grid::get_interpolation_values(arma_cube data, + std::vector coefArray ) { + std::vector ans; + + // If the size of data is not the same as the size of grid, return an empty vector + if (data.n_rows != nLons || data.n_cols != nLats || data.n_slices != nAlts) + return ans; + + for (auto &it : coefArray) { + // Do interpolation if in_grid = true. Push cNinf otherwise + if (it.in_grid) { + ans.push_back(interpolate_unit_cube( + data.subcube(it.iRow, it.iCol, it.iAlt, unit_cube_size), + it.rRow, + it.rCol, + it.rAlt + )); + // Add std::cout if needed here + // std::cout << "iProc = " << iProc << " interpolates the point successfully\n"; + } else + ans.push_back(cNinf); + } + + return ans; +} + diff --git a/src/solver_horizontal_cubesphere.cpp b/src/solver_horizontal_cubesphere.cpp index ebce8b2c..26192564 100644 --- a/src/solver_horizontal_cubesphere.cpp +++ b/src/solver_horizontal_cubesphere.cpp @@ -2,5 +2,1211 @@ // Full license can be found in License.md // Initial version: F. Cheng, July 2023 +// Moved to new solver: August 2025 -#include "../include/aether.h" \ No newline at end of file +#include "aether.h" + +// --------------------------------------------------------- +// Update States +// --------------------------------------------------------- + +void update_states_cubesphere(arma_mat rho, + arma_mat &xVel, + arma_mat &yVel, + arma_mat &temp, + arma_mat &drhodt, + arma_mat &dlonVeldt, + arma_mat &dlatVeldt, + arma_mat &dtempdt, + cubesphere_chars gridC, + cubesphere_chars gridL, + cubesphere_chars gridD, + precision_t dt, + int64_t iZ) { + + arma_mat xMomentum, yMomentum; + arma_mat rhoE, energy, vel2; + + precision_t cv = 1500.0; + + if (report.test_verbose(2)) + std::cout << " --> update_states\n"; + + // Derived variables: + xMomentum = rho % xVel; // x1momentum, pure scalar field + yMomentum = rho % yVel; // y1momentum, pure scalar field + rhoE = rho % temp; + + vel2 = xVel % xVel + yVel % yVel; + //energy = rho % (0.5 * vel2 + cv * temp); + energy = cv * rho % temp; + + /** Initialize projection constructs */ + static projection_struct rhoP; + static projection_struct xMomentumP, xVelP; + static projection_struct yMomentumP, yVelP; + static projection_struct energyP; + static projection_struct tempP; + + // They are all pure scalar fields without sqrt(g) + static arma_mat totaleL, totaleR, totaleD, totaleU; + static arma_mat velL2, velR2, velD2, velU2; + static arma_mat pressureL, pressureR, pressureD, pressureU; + + arma_mat dxVeldt = xVel * 0.0; + arma_mat dyVeldt = yVel * 0.0; + + dlonVeldt = dxVeldt * 0.0 + 1; + dlatVeldt = dyVeldt * 0.0 + 1; + + static arma_mat velNormL, velNormR, velNormU, velNormD; + + /** Initialize Flux and Wave Speed Storages */ + static arma_mat eq1FluxLR, eq1FluxDU; + static arma_mat eq1FluxL, eq1FluxR, eq1FluxD, eq1FluxU; + static arma_mat eq2FluxLR, eq2FluxDU; + static arma_mat eq2FluxL, eq2FluxR, eq2FluxD, eq2FluxU; + static arma_mat eq3FluxLR, eq3FluxDU; + static arma_mat eq3FluxL, eq3FluxR, eq3FluxD, eq3FluxU; + static arma_mat eq4FluxLR, eq4FluxDU; + static arma_mat eq4FluxL, eq4FluxR, eq4FluxD, eq4FluxU; + + arma_mat wsL, wsR, wsD, wsU, wsLR, wsDU; + + arma_mat diff; // for Riemann Solver + + if (report.test_verbose(3)) + std::cout << " ---> Projecting\n"; + + rhoP = project_to_edges(rho, gridC.xi, gridL.xi, gridC.nu, gridD.nu, + gridC.nGCs); + // project the lon / lat velocities to the edges: + xVelP = project_to_edges(xVel, gridC.xi, gridL.xi, gridC.nu, gridD.nu, + gridC.nGCs); + yVelP = project_to_edges(yVel, gridC.xi, gridL.xi, gridC.nu, gridD.nu, + gridC.nGCs); + xMomentumP = project_to_edges(xMomentum, gridC.xi, gridL.xi, gridC.nu, gridD.nu, + gridC.nGCs); + yMomentumP = project_to_edges(yMomentum, gridC.xi, gridL.xi, gridC.nu, gridD.nu, + gridC.nGCs); + energyP = project_to_edges(energy, gridC.xi, gridL.xi, gridC.nu, gridD.nu, + gridC.nGCs); + tempP = project_to_edges(temp, gridC.xi, gridL.xi, gridC.nu, gridD.nu, + gridC.nGCs); + + if (report.test_verbose(3)) + std::cout << " ---> Derived values\n"; + + velL2 = (xVelP.L % xVelP.L + yVelP.L % yVelP.L); + velR2 = (xVelP.R % xVelP.R + yVelP.R % yVelP.R); + velD2 = (xVelP.D % xVelP.D + yVelP.D % yVelP.D); + velU2 = (xVelP.U % xVelP.U + yVelP.U % yVelP.U); + + precision_t k = 1.38e-23; + // let's be Oxygen: + precision_t mass = 16.0 * 1.67e-27; + pressureL = k / mass * (rhoP.L % tempP.L); + pressureR = k / mass * (rhoP.R % tempP.R); + pressureD = k / mass * (rhoP.D % tempP.D); + pressureU = k / mass * (rhoP.U % tempP.U); + + arma_mat pressureLR = (pressureL + pressureR) / 2; + arma_mat pressureDU = (pressureD + pressureU) / 2; + + if (report.test_verbose(3)) + std::cout << " ---> Normal Velocities\n"; + + // Calculate the normal velocity at the boundaries: + velNormL = xVelP.L % gridL.nXiLon + yVelP.L % gridL.nXiLat; + velNormR = xVelP.R % gridL.nXiLon + yVelP.R % gridL.nXiLat; + velNormU = xVelP.U % gridD.nNuLon + yVelP.U % gridD.nNuLat; + velNormD = xVelP.D % gridD.nNuLon + yVelP.D % gridD.nNuLat; + + if (report.test_verbose(3)) + std::cout << " ---> Fluxes eq 1\n"; + + // Flux calculated from the left of the edge + eq1FluxL = rhoP.L % velNormL; + // Flux calculated from the right of the edge + eq1FluxR = rhoP.R % velNormR; + // Flux calculated from the down of the edge + eq1FluxD = rhoP.D % velNormD; + // Flux calculated from the up of the edge + eq1FluxU = rhoP.U % velNormU; + + if (report.test_verbose(3)) + std::cout << " ---> Fluxes eq 2\n"; + + eq2FluxL = (xMomentumP.L % velNormL); + eq2FluxR = (xMomentumP.R % velNormR); + eq2FluxD = (xMomentumP.D % velNormD); + eq2FluxU = (xMomentumP.U % velNormU); + + if (report.test_verbose(3)) + std::cout << " ---> Fluxes eq 3\n"; + + eq3FluxL = (yMomentumP.L % velNormL); + eq3FluxR = (yMomentumP.R % velNormR); + eq3FluxD = (yMomentumP.D % velNormD); + eq3FluxU = (yMomentumP.U % velNormU); + + eq4FluxL = energyP.L % velNormL; + eq4FluxR = energyP.R % velNormR; + eq4FluxD = energyP.D % velNormD; + eq4FluxU = energyP.U % velNormU; + + // ------------------------------------------------ + // Calculate the wave speed for the diffusive flux: + // In Reference velocities + if (report.test_verbose(3)) + std::cout << " ---> Diffusive Fluxes\n"; + + precision_t cGamma = 5.0 / 3.0; + + wsL.resize(gridC.nXt + 1, gridC.nYt); + wsR.resize(gridC.nXt + 1, gridC.nYt); + wsD.resize(gridC.nXt, gridC.nYt + 1); + wsU.resize(gridC.nXt, gridC.nYt + 1); + + wsL.zeros(); + wsR.zeros(); + wsU.zeros(); + wsD.zeros(); + + for (int64_t i = 0; i < gridC.nXt; i++) { + for (int64_t j = 0; j < gridC.nYt; j++) { + wsL(i, j) = sqrt(velL2(i, j)) + sqrt(cGamma * (cGamma - 1) * tempP.L(i, j)); + wsR(i, j) = sqrt(velR2(i, j)) + sqrt(cGamma * (cGamma - 1) * tempP.R(i, j)); + wsD(i, j) = sqrt(velD2(i, j)) + sqrt(cGamma * (cGamma - 1) * tempP.D(i, j)); + wsU(i, j) = sqrt(velU2(i, j)) + sqrt(cGamma * (cGamma - 1) * tempP.U(i, j)); + } + } + + wsLR = wsR; + + for (int64_t i = 0; i < gridC.nXt; i++) { + for (int64_t j = 0; j < gridC.nYt; j++) { + if (wsL(i, j) > wsLR(i, j)) + wsLR(i, j) = wsL(i, j); + } + } + + wsDU = wsD; + + for (int64_t i = 0; i < gridC.nXt; i++) { + for (int64_t j = 0; j < gridC.nYt; j++) { + if (wsU(i, j) > wsDU(i, j)) + wsDU(i, j) = wsU(i, j); + } + } + + // ------------------------------------------------ + // Calculate average flux at the edges (Rusanov Flux): + + if (report.test_verbose(3)) + std::cout << " ---> Averaging fluxes at edges\n"; + + diff = (rhoP.R - rhoP.L); + eq1FluxLR = (eq1FluxL + eq1FluxR) / 2 + 0.5 * wsLR % diff; + diff = (rhoP.U - rhoP.D); + eq1FluxDU = (eq1FluxD + eq1FluxU) / 2 + 0.5 * wsDU % diff; + + diff = (xMomentumP.R - xMomentumP.L); + eq2FluxLR = (eq2FluxL + eq2FluxR) / 2 + 0.5 * wsLR % diff; + diff = (xMomentumP.U - xMomentumP.D); + eq2FluxDU = (eq2FluxD + eq2FluxU) / 2 + 0.5 * wsDU % diff; + + diff = (yMomentumP.R - yMomentumP.L); + eq3FluxLR = (eq3FluxL + eq3FluxR) / 2 + 0.5 * wsLR % diff; + diff = (yMomentumP.U - yMomentumP.D); + eq3FluxDU = (eq3FluxD + eq3FluxU) / 2 + 0.5 * wsDU % diff; + + diff = (energyP.R - energyP.L); + eq4FluxLR = (eq4FluxL + eq4FluxR) / 2 + 0.5 * wsLR % diff; + diff = (energyP.U - energyP.D); + eq4FluxDU = (eq4FluxD + eq4FluxU) / 2 + 0.5 * wsDU % diff; + + // ------------------------------------------------ + // Update values: + if (report.test_verbose(3)) + std::cout << " ---> Updating equations of state\n"; + + precision_t dpdx, dpdn, pp, pm; + + arma_mat ax(gridC.nXt, gridC.nYt), an(gridC.nXt, gridC.nYt); + + ax.zeros(); + an.zeros(); + arma_mat dedt(gridC.nXt, gridC.nYt); + dedt.zeros(); + + arma_mat rhoNew = rho; + + // Only deal with inner cell + for (int64_t j = gridC.iYfirst_; j < gridC.iYlast_; j++) { + for (int64_t i = gridC.iXfirst_; i < gridC.iXlast_; i++) { + precision_t rhoResidual_ij = (gridL.dln(i + 1, j, iZ) * eq1FluxLR(i + 1, j) - + gridL.dln(i, j, iZ) * eq1FluxLR(i, j) + + gridD.dlx(i, j + 1, iZ) * eq1FluxDU(i, j + 1) - + gridD.dlx(i, j, iZ) * eq1FluxDU(i, j)); + drhodt(i, j) = rhoResidual_ij / gridC.dS(i, j, iZ); + + rhoNew(i, j) = rho(i, j) + dt * drhodt(i, j); + + precision_t xMomentumResidual_ij = (gridL.dln(i + 1, j, iZ) * eq2FluxLR(i + 1, + j) - + gridL.dln(i, j, iZ) * eq2FluxLR(i, j) + + gridD.dlx(i, j + 1, iZ) * eq2FluxDU(i, j + 1) - + gridD.dlx(i, j, iZ) * eq2FluxDU(i, j)); + dxVeldt(i, j) = xMomentumResidual_ij / gridC.dS(i, j, iZ) / rhoNew(i, j); + + precision_t yMomentumResidual_ij = (gridL.dln(i + 1, j, iZ) * eq3FluxLR(i + 1, + j) - + gridL.dln(i, j, iZ) * eq3FluxLR(i, j) + + gridD.dlx(i, j + 1, iZ) * eq3FluxDU(i, j + 1) - + gridD.dlx(i, j, iZ) * eq3FluxDU(i, j)); + dyVeldt(i, j) = yMomentumResidual_ij / gridC.dS(i, j, iZ) / rhoNew(i, j); + + // Calculate the gradient in the potential in the cubesphere + // coordinate system: + dpdx = 1 / gridC.R(iZ) * gridC.D(i, j) * + (pressureLR(i + 1, j) - pressureLR(i, j)) / gridC.dxi; + dpdn = 1 / gridC.R(iZ) * gridC.X(i, j) * gridC.Y(i, j) / + gridC.D(i, j) * + (pressureDU(i, j + 1) - pressureDU(i, j)) / gridC.dnu; + ax(i, j) = (dpdx + dpdn) / rhoNew(i, j); + + dpdx = 1 / gridC.R(iZ) * gridC.X(i, j) * gridC.Y(i, j) / + gridC.C(i, j) * (pressureLR(i + 1, j) - pressureLR(i, j)) / gridC.dxi; + dpdn = 1 / gridC.R(iZ) * gridC.C(i, j) * + (pressureDU(i, j + 1) - pressureDU(i, j)) / gridC.dnu; + an(i, j) = (dpdx + dpdn) / rhoNew(i, j); + + precision_t energyResidual_ij = (gridL.dln(i + 1, j, iZ) * eq4FluxLR(i + 1, j) - + gridL.dln(i, j, iZ) * eq4FluxLR(i, j) + + gridD.dlx(i, j + 1, iZ) * eq4FluxDU(i, j + 1) - + gridD.dlx(i, j, iZ) * eq4FluxDU(i, j)); + dedt(i, j) = energyResidual_ij / gridC.dS(i, j, iZ); + + } + } + + // lat is negative because of the Rochi definition of theta: + dlatVeldt = dyVeldt - (ax % gridC.Atx + an % gridC.Atn); + dlonVeldt = dxVeldt + ax % gridC.Apx + an % gridC.Apn; + dtempdt = dedt / rhoNew / cv; + + return; +} + + +// using namespace Cubesphere_tools; + +std::vector Neutrals::residual_horizontal_rusanov( + std::vector& states, + Grid & grid, + Times & time, + int64_t iAlt) { + + // Dimensions of Spatial Discretization + int64_t nXs = grid.get_nX(); + int64_t nYs = grid.get_nY(); + int64_t nGCs = grid.get_nGCs(); + int64_t nAlts = grid.get_nAlts(); + + /** Extract Grid Features **/ + arma_mat x = grid.refx_scgc.slice(iAlt); + arma_mat xEdges = grid.refx_Left.slice(iAlt); + arma_mat y = grid.refy_scgc.slice(iAlt); + arma_mat yEdges = grid.refy_Down.slice(iAlt); + + // Get reference grid dimensions (Assume dx = dy and equidistant) + arma_vec x_vec = x.col(0); + precision_t dx = x_vec(1) - x_vec(0); + precision_t area = dx * dx; + arma_mat jacobian = grid.sqrt_g_scgc.slice(iAlt); + + /** States preprocessing **/ + /* MASS DENSITY */ + arma_mat rho = states[0]; + + /* VELOCITY */ + // Get contravariant velocity + //arma_mat xVel = states[1]; // u^1 + //arma_mat yVel = states[2]; // u^2 + + // Generate contravriant momentum + arma_mat xMomentum = states[1]; // x1momentum + arma_mat yMomentum = states[2]; // x2momentum + + // Resolve to contravariant velocity + arma_mat xVel = xMomentum / rho; // u^1 + arma_mat yVel = yMomentum / rho; // u^2 + + // Generate velocity magnitude squared + arma_mat vel2 = xVel % xVel + yVel % yVel; + + /* TEMP and ENERGY */ + // Generate total energy (rhoE) (TODO: Verify) + arma_mat rhoE = states[3]; + + /** Advancing **/ + /* Initialize projection constructs and storages */ + projection_struct rhoP; + projection_struct xMomentumP; + projection_struct yMomentumP; + projection_struct rhoEP; + projection_struct gammaP; + projection_struct tempP; + projection_struct numberDensityP; + + // They are all pure scalar fields without sqrt(g) + arma_mat rhoL, rhoR, rhoD, rhoU; + arma_mat xVelL, xVelR, xVelD, xVelU; + arma_mat yVelL, yVelR, yVelD, yVelU; + arma_mat totalEL, totalER, totalED, totalEU; + + arma_mat velL2, velR2, velD2, velU2; + arma_mat internaleL, internaleR, internaleD, internaleU; + arma_mat pressureL, pressureR, pressureD, pressureU; + + /** Initialize Flux and Wave Speed Storages */ + arma_mat eq1FluxLR, eq1FluxDU; + arma_mat eq1FluxL, eq1FluxR, eq1FluxD, eq1FluxU; + + arma_mat eq2FluxLR, eq2FluxDU; + arma_mat eq2FluxL, eq2FluxR, eq2FluxD, eq2FluxU; + + arma_mat eq3FluxLR, eq3FluxDU; + arma_mat eq3FluxL, eq3FluxR, eq3FluxD, eq3FluxU; + + arma_mat eq4FluxLR, eq4FluxDU; + arma_mat eq4FluxL, eq4FluxR, eq4FluxD, eq4FluxU; + + arma_mat wsL, wsR, wsD, wsU, wsLR, wsDU; + + arma_mat diff; // for Riemann Solver + + /* Projection */ + rhoP = project_to_edges(rho, x, xEdges, y, yEdges, nGCs); + xMomentumP = project_to_edges(xMomentum, x, xEdges, y, yEdges, nGCs); + yMomentumP = project_to_edges(yMomentum, x, xEdges, y, yEdges, nGCs); + rhoEP = project_to_edges(rhoE, x, xEdges, y, yEdges, nGCs); + // Also need to project gamma and temp - these should be passed, since + // they need to be updated for the RK4 scheme: + gammaP = project_to_edges(gamma_scgc.slice(iAlt), x, xEdges, y, yEdges, nGCs); + tempP = project_to_edges(temperature_scgc.slice(iAlt), x, xEdges, y, yEdges, + nGCs); + numberDensityP = project_to_edges(density_scgc.slice(iAlt), x, xEdges, y, + yEdges, + nGCs); + + // Resolve Scalar Fields into rho, xVel, yVel, and totalE (without rho) + rhoL = rhoP.L; + rhoR = rhoP.R; + rhoD = rhoP.D; + rhoU = rhoP.U; + + xVelL = xMomentumP.L / rhoL; + xVelR = xMomentumP.R / rhoR; + xVelD = xMomentumP.D / rhoD; + xVelU = xMomentumP.U / rhoU; + + yVelL = yMomentumP.L / rhoL; + yVelR = yMomentumP.R / rhoR; + yVelD = yMomentumP.D / rhoD; + yVelU = yMomentumP.U / rhoU; + + totalEL = rhoEP.L / rhoL; + totalER = rhoEP.R / rhoR; + totalED = rhoEP.D / rhoD; + totalEU = rhoEP.U / rhoU; + + velL2 = xVelL % xVelL + yVelL % yVelL; + velR2 = xVelR % xVelR + yVelR % yVelR; + velD2 = xVelD % xVelD + yVelD % yVelD; + velU2 = xVelU % xVelU + yVelU % yVelU; + + internaleL = totalEL - 0.5 * velL2; + internaleR = totalER - 0.5 * velR2; + internaleD = totalED - 0.5 * velD2; + internaleU = totalEU - 0.5 * velU2; + + //pressureL = (gammaP.L - 1) % (rhoP.L % internaleL); + //pressureR = (gammaP.R - 1) % (rhoP.R % internaleR); + //pressureD = (gammaP.D - 1) % (rhoP.D % internaleD); + //pressureU = (gammaP.U - 1) % (rhoP.U % internaleU); + + pressureL = cKB * (numberDensityP.L % tempP.L); + pressureR = cKB * (numberDensityP.R % tempP.R); + pressureD = cKB * (numberDensityP.D % tempP.D); + pressureU = cKB * (numberDensityP.U % tempP.U); + + /* Calculate Edge Fluxes */ + // Note that dot product between normal vector at edge and flux vector + // resolves into a pure one component flux or either hat{x} or hat{y} + // Flux calculated from the left of the edge + eq1FluxL = rhoL % xVelL % grid.sqrt_g_Left.slice(iAlt); + // Flux calculated from the right of the edge + eq1FluxR = rhoR % xVelR % grid.sqrt_g_Left.slice(iAlt); + // Flux calculated from the down of the edge + eq1FluxD = rhoD % yVelD % grid.sqrt_g_Down.slice(iAlt); + // Flux calculated from the up of the edge + eq1FluxU = rhoU % yVelU % grid.sqrt_g_Down.slice(iAlt); + /* + eq2FluxL = (rhoL % xVelL % xVelL + + pressureL % grid.g11_upper_Left.slice(iAlt)) % + grid.sqrt_g_Left.slice(iAlt); + eq2FluxR = (rhoR % xVelR % xVelR + + pressureR % grid.g11_upper_Left.slice(iAlt)) % + grid.sqrt_g_Left.slice(iAlt); + eq2FluxD = (rhoD % yVelD % xVelD + + pressureD % grid.g12_upper_Down.slice(iAlt)) % + grid.sqrt_g_Down.slice(iAlt); + eq2FluxU = (rhoU % yVelU % xVelU + + pressureU % grid.g12_upper_Down.slice(iAlt)) % + grid.sqrt_g_Down.slice(iAlt); + */ + eq2FluxL = (rhoL % xVelL % xVelL + + pressureL) % + grid.sqrt_g_Left.slice(iAlt); + eq2FluxR = (rhoR % xVelR % xVelR + + pressureR) % + grid.sqrt_g_Left.slice(iAlt); + eq2FluxD = (rhoD % yVelD % xVelD + + pressureD) % + grid.sqrt_g_Down.slice(iAlt); + eq2FluxU = (rhoU % yVelU % xVelU + + pressureU) % + grid.sqrt_g_Down.slice(iAlt); + /* + eq3FluxL = (rhoL % xVelL % yVelL + + pressureL % grid.g21_upper_Left.slice(iAlt)) % + grid.sqrt_g_Left.slice(iAlt); + eq3FluxR = (rhoR % xVelR % yVelR + + pressureR % grid.g21_upper_Left.slice(iAlt)) % + grid.sqrt_g_Left.slice(iAlt); + eq3FluxD = (rhoD % yVelD % yVelD + + pressureD % grid.g22_upper_Down.slice(iAlt)) % + grid.sqrt_g_Down.slice(iAlt); + eq3FluxU = (rhoU % yVelU % yVelU + + pressureU % grid.g22_upper_Down.slice(iAlt)) % + grid.sqrt_g_Down.slice(iAlt); + */ + eq3FluxL = (rhoL % xVelL % yVelL + + pressureL) % + grid.sqrt_g_Left.slice(iAlt); + eq3FluxR = (rhoR % xVelR % yVelR + + pressureR) % + grid.sqrt_g_Left.slice(iAlt); + eq3FluxD = (rhoD % yVelD % yVelD + + pressureD) % + grid.sqrt_g_Down.slice(iAlt); + eq3FluxU = (rhoU % yVelU % yVelU + + pressureU) % + grid.sqrt_g_Down.slice(iAlt); + + eq4FluxL = (rhoEP.L + pressureL) % xVelL % grid.sqrt_g_Left.slice(iAlt); + eq4FluxR = (rhoEP.R + pressureR) % xVelR % grid.sqrt_g_Left.slice(iAlt); + eq4FluxD = (rhoEP.D + pressureD) % yVelD % grid.sqrt_g_Down.slice(iAlt); + eq4FluxU = (rhoEP.U + pressureU) % yVelU % grid.sqrt_g_Down.slice(iAlt); + + /* Wave Speed Calculation */ + wsL = sqrt(velL2) + sqrt(gammaP.L % (gammaP.L - 1.) % tempP.L); + wsR = sqrt(velR2) + sqrt(gammaP.R % (gammaP.R - 1.) % tempP.R); + wsD = sqrt(velD2) + sqrt(gammaP.D % (gammaP.D - 1.) % tempP.D); + wsU = sqrt(velU2) + sqrt(gammaP.U % (gammaP.U - 1.) % tempP.U); + + //wsL = abs(xVelL) + sqrt(gammaP.L % (gammaP.L - 1.) % internaleL); + //wsR = abs(xVelR) + sqrt(gammaP.R % (gammaP.R - 1.) % internaleR); + //wsD = abs(yVelD) + sqrt(gammaP.D % (gammaP.D - 1.) % internaleD); + //wsU = abs(yVelU) + sqrt(gammaP.U % (gammaP.U - 1.) % internaleU); + + // Find the maximum wave speed + wsLR = wsR; + + for (int i = 0; i < nXs + 1; i++) { + for (int j = 0; j < nYs; j++) { + if (wsL(i, j) > wsLR(i, j)) + wsLR(i, j) = wsL(i, j); + } + } + + wsDU = wsD; + + for (int i = 0; i < nXs; i++) { + for (int j = 0; j < nYs + 1; j++) { + if (wsU(i, j) > wsDU(i, j)) + wsDU(i, j) = wsU(i, j); + } + } + + /* Calculate average flux at the edges (Rusanov Flux) */ + /* Why is it + instead of - for the state difference? + * Because the projection actually works backwards + * Left states are actually right + * Right states are actually left + * Due to the convention in the past codes + * We keep it this way for consistency + */ + + // State difference, need to add sqrt(g) + diff = (rhoR - rhoL) % grid.sqrt_g_Left.slice(iAlt); + eq1FluxLR = (eq1FluxL + eq1FluxR) / 2 + 0.5 * wsLR % diff; + diff = (rhoU - rhoD) % grid.sqrt_g_Down.slice(iAlt); + eq1FluxDU = (eq1FluxD + eq1FluxU) / 2 + 0.5 * wsDU % diff; + + if (iAlt == -1) { + std::cout << "in solver: " << iProc << " " << + wsDU(13, 23) << " " << + wsU(13, 23) << " " << + wsD(13, 23) << " " << + gammaP.D(13, 23) << " " << + internaleD(13, 23) << " " << + gammaP.U(14, 23) << " " << + internaleU(13, 23) << " " << + diff(13, 22) << "\n"; + } + + diff = (rhoR % xVelR - rhoL % xVelL) % grid.sqrt_g_Left.slice(iAlt); + eq2FluxLR = (eq2FluxL + eq2FluxR) / 2 + 0.5 * wsLR % diff; + diff = (rhoU % xVelU - rhoD % xVelD) % grid.sqrt_g_Down.slice(iAlt); + eq2FluxDU = (eq2FluxD + eq2FluxU) / 2 + 0.5 * wsDU % diff; + + diff = (rhoR % yVelR - rhoL % yVelL) % grid.sqrt_g_Left.slice(iAlt); + eq3FluxLR = (eq3FluxL + eq3FluxR) / 2 + 0.5 * wsLR % diff; + diff = (rhoU % yVelU - rhoD % yVelD) % grid.sqrt_g_Down.slice(iAlt); + eq3FluxDU = (eq3FluxD + eq3FluxU) / 2 + 0.5 * wsDU % diff; + + diff = (rhoR % totalER - rhoL % totalEL) % grid.sqrt_g_Left.slice(iAlt); + eq4FluxLR = (eq4FluxL + eq4FluxR) / 2 + 0.5 * wsLR % diff; + diff = (rhoU % totalEU - rhoD % totalED) % grid.sqrt_g_Down.slice(iAlt); + eq4FluxDU = (eq4FluxD + eq4FluxU) / 2 + 0.5 * wsDU % diff; + + // Setup residual storage for return + arma_mat eq1_residual(nXs, nYs, fill::zeros); + arma_mat eq2_residual(nXs, nYs, fill::zeros); + arma_mat eq3_residual(nXs, nYs, fill::zeros); + arma_mat eq4_residual(nXs, nYs, fill::zeros); + + // State Update + // Note the ghost cells WILL NOT BE UPDATED + for (int j = nGCs; j < nYs - nGCs; j++) { + for (int i = nGCs; i < nXs - nGCs; i++) { + precision_t rhoResidual_ij = dx * eq1FluxLR(i + 1, j) - + dx * eq1FluxLR(i, j) + + dx * eq1FluxDU(i, j + 1) - + dx * eq1FluxDU(i, j); + eq1_residual(i, j) = -1 / area * rhoResidual_ij; + precision_t xMomentumResidual_ij = dx * eq2FluxLR(i + 1, j) - + dx * eq2FluxLR(i, j) + + dx * eq2FluxDU(i, j + 1) - + dx * eq2FluxDU(i, j); + eq2_residual(i, j) = -1 / area * xMomentumResidual_ij; + precision_t yMomentumResidual_ij = dx * eq3FluxLR(i + 1, j) - + dx * eq3FluxLR(i, j) + + dx * eq3FluxDU(i, j + 1) - + dx * eq3FluxDU(i, j); + eq3_residual(i, j) = -1 / area * yMomentumResidual_ij; + precision_t rhoEResidual_ij = dx * eq4FluxLR(i + 1, j) - + dx * eq4FluxLR(i, j) + + dx * eq4FluxDU(i, j + 1) - + dx * eq4FluxDU(i, j); + eq4_residual(i, j) = -1 / area * rhoEResidual_ij; + } + } + + if (iAlt == -1) { + std::cout << "in solver2: " << iProc << " " << + eq1_residual(13, 22) << " " << + eq2_residual(13, 22) << " " << + eq3_residual(13, 22) << " " << + eq4_residual(13, 22) << " " << + area << "\n"; + } + + + // Setup return vector + std::vector return_vector; + return_vector.push_back(eq1_residual); + return_vector.push_back(eq2_residual); + return_vector.push_back(eq3_residual); + return_vector.push_back(eq4_residual); + + return return_vector; +} + + +//-------------------------------------------------------------------- +// New solver using Rochi +//-------------------------------------------------------------------- + +void Neutrals::solver_horizontal_RK1_rochi(Grid & grid, Times & time) { + + std::string function = "Neutrals::solver_horizontal_RK1_rochi"; + static int iFunction = -1; + report.enter(function, iFunction); + + precision_t dt = time.get_dt(); + + int64_t nXs = grid.get_nX(); + int64_t nYs = grid.get_nY(); + int64_t nGCs = grid.get_nGCs(); + int64_t nAlts = grid.get_nAlts(); + + calc_concentration(); + + arma_mat temp(nXs, nYs), rho(nXs, nYs), vLon(nXs, nYs), vLat(nXs, nYs); + + arma_mat k1rho(nXs, nYs); + arma_mat k1vLon(nXs, nYs), k1vLat(nXs, nYs); + arma_mat k1temp(nXs, nYs); + + int64_t iAlt; + + for (iAlt = nGCs; iAlt < nAlts - nGCs; iAlt++) { + + rho = rho_scgc.slice(iAlt); + vLon = velocity_vcgc[0].slice(iAlt); + vLat = velocity_vcgc[1].slice(iAlt); + temp = temperature_scgc.slice(iAlt); + + // k1 - start at t0, go to t+1/2 to figure out slope at t0 (k1) + update_states_cubesphere( + rho, vLon, vLat, temp, + k1rho, k1vLon, k1vLat, k1temp, + grid.cubeC, grid.cubeL, grid.cubeD, dt, iAlt); + // Take full step using k1: + rho_scgc.slice(iAlt) = rho - k1rho * dt; + velocity_vcgc[0].slice(iAlt) = vLon - k1vLon * dt; + velocity_vcgc[1].slice(iAlt) = vLat - k1vLat * dt; + temperature_scgc.slice(iAlt) = temp - k1temp * dt; + } + + calc_density_from_mass_concentration(); + + report.exit(function); + return; + +} + + +void Neutrals::solver_horizontal_RK1(Grid & grid, Times & time) { + // Function Reporting + std::string function = "Neutrals::solver_horizontal_RK1"; + static int iFunction = -1; + report.enter(function, iFunction); + + // Dimensions of Spatial Discretization + int64_t nXs = grid.get_nX(); + int64_t nYs = grid.get_nY(); + int64_t nGCs = grid.get_nGCs(); + int64_t nAlts = grid.get_nAlts(); + int iAlt, iSpec; + + // Time Discretization (TODO: change dt calculation method) + precision_t dt = time.get_dt(); + + arma_mat x(nXs, nYs), y(nXs, nYs); + arma_mat jacobian(nXs, nYs), rho(nXs, nYs), rhoE(nXs, nYs), vel2(nXs, nYs); + arma_mat uVel(nXs, nYs), vVel(nXs, nYs), xVel(nXs, nYs), yVel(nXs, nYs); + arma_mat xMomentum(nXs, nYs), yMomentum(nXs, nYs); + arma_mat xMomentum_0(nXs, nYs), yMomentum_0(nXs, nYs); + arma_mat rho_0(nXs, nYs), rhoE_0(nXs, nYs); + arma_mat f_0_eq1(nXs, nYs), f_0_eq2(nXs, nYs); + arma_mat f_0_eq3(nXs, nYs), f_0_eq4(nXs, nYs); + + calc_concentration(); + + // Advance for bulk calculation first, calculate for every altitude + + for (iAlt = nGCs; iAlt < nAlts - nGCs; iAlt++) { + /** Extract Grid Features **/ + x = grid.refx_scgc.slice(iAlt); + arma_mat xEdges = grid.refx_Left.slice(iAlt); + y = grid.refy_scgc.slice(iAlt); + arma_mat yEdges = grid.refy_Down.slice(iAlt); + + // Get reference grid dimensions (Assume dx = dy and equidistant) + arma_vec x_vec = x.col(0); + precision_t dx = x_vec(1) - x_vec(0); + precision_t area = dx * dx; + jacobian = grid.sqrt_g_scgc.slice(iAlt); + + /** States preprocessing **/ + /* MASS DENSITY */ + rho = rho_scgc.slice(iAlt); + + /* VELOCITY */ + // Get spherical velocity + uVel = velocity_vcgc[0].slice(iAlt); + vVel = velocity_vcgc[1].slice(iAlt); + // Convert to contravariant (reference) velocity + xVel = uVel % grid.A11_inv_scgc.slice(iAlt) + vVel % + grid.A12_inv_scgc.slice(iAlt); // u^1 + yVel = uVel % grid.A21_inv_scgc.slice(iAlt) + vVel % + grid.A22_inv_scgc.slice(iAlt); // u^2 + vel2 = xVel % xVel + yVel % yVel; + // Generate contravriant momentum (no sqrt(g)) + xMomentum = rho % xVel; // x1momentum + yMomentum = rho % yVel; // x2momentum + + /* TEMP and ENERGY */ + // Generate total energy (rhoE (no sqrt(g))) + // (TODO: Verify units) + rhoE = rho % (temperature_scgc.slice(iAlt) % Cv_scgc.slice( + iAlt) + 0.5 * vel2); + + + if (iAlt == -1) { + std::cout << "before solve: " << iProc << " " << temperature_scgc(13, 22, + 2) << " " << + rhoE(13, 22) << " " << xVel(13, 22) << " " << yVel(13, 22) << " " << + rho_scgc(13, 22, 2) << "\n"; + } + + if (iAlt == -2) { + std::cout << "before solve: " << + temperature_scgc(13, 22, 2) << " " << + xVel(13, 22) << " " << yVel(13, 22) << " " << + rho_scgc(13, 22, 2) << "\n"; + } + + + /** Advancing with RK4 **/ + // Setup Containers + rho_0 = rho; + xMomentum_0 = xMomentum; + yMomentum_0 = yMomentum; + rhoE_0 = rhoE; + + // FIRST (1) STEP, Compute F_0-> State_1 + // Pass in state vector + std::vector state_0; + state_0.push_back(rho_0); + state_0.push_back(xMomentum_0); + state_0.push_back(yMomentum_0); + state_0.push_back(rhoE_0); + std::vector f_0_vec = residual_horizontal_rusanov(state_0, grid, time, + iAlt); + // Extract Gradients + f_0_eq1 = f_0_vec[0]; + f_0_eq2 = f_0_vec[1]; + f_0_eq3 = f_0_vec[2]; + f_0_eq4 = f_0_vec[3]; + + /* Update Bulk Scalars and Contravariant velocity */ + // Euler State Update + for (int j = nGCs; j < nYs - nGCs; j++) { + for (int i = nGCs; i < nXs - nGCs; i++) { + rho(i, j) = rho_0(i, j) + dt * f_0_eq1(i, j) / jacobian(i, j); + xMomentum(i, j) = xMomentum_0(i, j) - dt * f_0_eq2(i, j) / jacobian(i, j); + yMomentum(i, j) = yMomentum_0(i, j) - dt * f_0_eq3(i, j) / jacobian(i, j); + rhoE(i, j) = rhoE_0(i, j) + dt * f_0_eq4(i, j) / jacobian(i, j); + } + } + + if (iAlt == -1) { + std::cout << "after solve: " << iProc << " " << + dt << " " << + f_0_eq1(13, 22) << " " << + f_0_eq2(13, 22) << " " << + f_0_eq3(13, 22) << " " << + f_0_eq4(13, 22) << " " << + rhoE(13, 22) << " " << xMomentum(13, 22) << " " << yMomentum(13, 22) << " " << + rho_scgc(13, 22, 2) << "\n"; + } + + + /* Re-derive Spherical Velocity and Bulk States */ + // Density + rho_scgc.slice(iAlt) = rho; + + // Bulk Velocity + xVel = xMomentum / rho; // u^1 + yVel = yMomentum / rho; // u^2 + vel2 = xVel % xVel + yVel % yVel; // Squared Magnitude of Contravariant + + if (iProc == 0 && iAlt == -2) { + std::cout << "a11 : " << grid.A11_scgc(13, 20, 2) << " " + << grid.A12_scgc(13, 20, 2) << "\n"; + std::cout << "inv : " << grid.A11_inv_scgc(13, 20, 2) << " " + << grid.A12_inv_scgc(13, 20, 2) << "\n"; + } + + velocity_vcgc[0].slice(iAlt) = xVel % grid.A11_scgc.slice( + iAlt) + yVel % grid.A12_scgc.slice(iAlt); + velocity_vcgc[1].slice(iAlt) = + xVel % grid.A21_scgc.slice(iAlt) + + yVel % grid.A22_scgc.slice(iAlt); + + /* Update temperature */ + temperature_scgc.slice(iAlt) = (rhoE / rho - 0.5 * vel2) / Cv_scgc.slice(iAlt); + + + //if (iAlt == 10) { + std::cout << "after solve: " << iAlt << " " << + temperature_scgc(13, 22, 10) << " " << + velocity_vcgc[0](13, 22, 10) << " " << velocity_vcgc[1](13, 22, 10) << " " << + rho_scgc(13, 22, 10) << "\n"; + //} + + calc_density_from_mass_concentration(); + //assign_bulk_velocity(); + + } + + report.exit(function); + return; +} + +/* +void Neutrals::solver_horizontal_RK1(Grid& grid, Times& time) { + // Function Reporting + std::string function = "Neutrals::solver_horizontal_RK1"; + static int iFunction = -1; + report.enter(function, iFunction); + + // Dimensions of Spatial Discretization + int64_t nXs = grid.get_nX(); + int64_t nYs = grid.get_nY(); + int64_t nGCs = grid.get_nGCs(); + int64_t nAlts = grid.get_nAlts(); + int iAlt, iSpec; + + // Time Discretization (TODO: change dt calculation method) + precision_t dt = time.get_dt(); + + iAlt = 0; + + arma_mat x(nXs, nYs), y(nXs, nYs); + arma_mat jacobian(nXs, nYs), rho(nXs, nYs), rhoE(nXs, nYs), vel2(nXs, nYs); + arma_mat uVel(nXs, nYs), vVel(nXs, nYs), xVel(nXs, nYs), yVel(nXs, nYs); + arma_mat xMomentum(nXs, nYs), yMomentum(nXs, nYs); + arma_mat xMomentum_0(nXs, nYs), yMomentum_0(nXs, nYs); + arma_mat rho_0(nXs, nYs), rhoE_0(nXs, nYs); + arma_mat f_0_eq1(nXs, nYs), f_0_eq2(nXs, nYs); + arma_mat f_0_eq3(nXs, nYs), f_0_eq4(nXs, nYs); + +// Advance for bulk calculation first, calculate for every altitude +for (iAlt = nGCs; iAlt < nAlts - nGCs; iAlt++) { + // Extract Grid Features +arma_mat x = grid.refx_scgc.slice(iAlt); +arma_mat xEdges = grid.refx_Left.slice(iAlt); +arma_mat y = grid.refy_scgc.slice(iAlt); +arma_mat yEdges = grid.refy_Down.slice(iAlt); + +// Get reference grid dimensions (Assume dx = dy and equidistant) +arma_vec x_vec = x.col(0); +precision_t dx = x_vec(1) - x_vec(0); +precision_t area = dx * dx; +arma_mat jacobian = grid.sqrt_g_scgc.slice(iAlt); + +// States preprocessing +// MASS DENSITY +arma_mat rho = rho_scgc.slice(iAlt); + +// VELOCITY +// Get spherical velocity +arma_mat uVel = velocity_vcgc[0].slice(iAlt); +arma_mat vVel = velocity_vcgc[1].slice(iAlt); +// Convert to contravariant (reference) velocity +arma_mat xVel = uVel % grid.A11_inv_scgc.slice(iAlt) + vVel % + grid.A12_inv_scgc.slice(iAlt); // u^1 +arma_mat yVel = uVel % grid.A21_inv_scgc.slice(iAlt) + vVel % + grid.A22_inv_scgc.slice(iAlt); // u^2 +arma_mat vel2 = xVel % xVel + yVel % yVel; +// Generate contravriant momentum (no sqrt(g)) +arma_mat xMomentum = rho % xVel; // x1momentum +arma_mat yMomentum = rho % yVel; // x2momentum + +// TEMP and ENERGY +// Generate total energy (rhoE (no sqrt(g))) +// (TODO: Verify units) +arma_mat rhoE = rho % (temperature_scgc.slice(iAlt) % + Cv_scgc.slice(iAlt) + 0.5 * vel2); + +// Advancing with RK4 +// Setup Containers +arma_mat rho_0 = rho; +arma_mat xMomentum_0 = xMomentum; +arma_mat yMomentum_0 = yMomentum; +arma_mat rhoE_0 = rhoE; + +// FIRST (1) STEP, Compute F_0-> State_1 +// Pass in state vector +std::vector state_0; +state_0.push_back(rho_0); +state_0.push_back(xMomentum_0); +state_0.push_back(yMomentum_0); +state_0.push_back(rhoE_0); +std::vector f_0_vec = residual_horizontal_rusanov(state_0, grid, time, + iAlt); +// Extract Gradients +arma_mat f_0_eq1 = f_0_vec[0]; +arma_mat f_0_eq2 = f_0_vec[1]; +arma_mat f_0_eq3 = f_0_vec[2]; +arma_mat f_0_eq4 = f_0_vec[3]; + +// Update Bulk Scalars and Contravariant velocity +// Euler State Update +for (int j = nGCs; j < nYs - nGCs; j++) { + for (int i = nGCs; i < nXs - nGCs; i++) { + rho(i, j) = rho_0(i, j) + dt * f_0_eq1(i, j) / jacobian(i, j); + xMomentum(i, j) = xMomentum_0(i, j) - dt * f_0_eq2(i, j) / jacobian(i, j); + yMomentum(i, j) = yMomentum_0(i, j) - dt * f_0_eq3(i, j) / jacobian(i, j); + rhoE(i, j) = rhoE_0(i, j) + dt * f_0_eq4(i, j) / jacobian(i, j); + } +} + +// Re-derive Spherical Velocity and Bulk States +// Density +rho_scgc.slice(iAlt) = rho; + +// Bulk Velocity +xVel = xMomentum / rho; // u^1 +yVel = yMomentum / rho; // u^2 +vel2 = xVel % xVel + yVel % yVel; // Squared Magnitude of Contravariant +velocity_vcgc[0].slice(iAlt) = xVel % grid.A11_scgc.slice( + iAlt) + yVel % grid.A12_scgc.slice(iAlt); +velocity_vcgc[1].slice(iAlt) = xVel % grid.A21_scgc.slice( + iAlt) + yVel % grid.A22_scgc.slice(iAlt); + +// Update specie number density and velocity +for (iSpec = 0; iSpec < nSpecies; iSpec++) { + //species[iSpec].density_scgc.slice(iAlt) = rho % species[iSpec].mass_concentration_scgc.slice(iAlt); + species[iSpec].density_scgc.slice(iAlt) = rho / species[iSpec].mass; + species[iSpec].velocity_vcgc[0].slice(iAlt) = velocity_vcgc[0].slice(iAlt); + species[iSpec].velocity_vcgc[1].slice(iAlt) = velocity_vcgc[1].slice(iAlt); +} + +// Update temperature +temperature_scgc.slice(iAlt) = (rhoE / rho - 0.5 * vel2) / Cv_scgc.slice(iAlt); + +report.exit(function); +return; +} + +*/ + +void Neutrals::solver_horizontal_RK4(Grid & grid, Times & time) { + // Function Reporting + std::string function = "Neutrals::solver_horizontal_RK4"; + static int iFunction = -1; + report.enter(function, iFunction); + + // Dimensions of Spatial Discretization + int64_t nXs = grid.get_nX(); + int64_t nYs = grid.get_nY(); + int64_t nGCs = grid.get_nGCs(); + int64_t nAlts = grid.get_nAlts(); + int iAlt, iSpec; + + // Time Discretization (TODO: change dt calculation method) + precision_t dt = time.get_dt() / 10; + + // Advance for bulk calculation first, calculate for every altitude + for (iAlt = nGCs; iAlt < nAlts - nGCs; iAlt++) { + /** Extract Grid Features **/ + arma_mat x = grid.refx_scgc.slice(iAlt); + arma_mat xEdges = grid.refx_Left.slice(iAlt); + arma_mat y = grid.refy_scgc.slice(iAlt); + arma_mat yEdges = grid.refy_Down.slice(iAlt); + + // Get reference grid dimensions (Assume dx = dy and equidistant) + arma_vec x_vec = x.col(0); + precision_t dx = x_vec(1) - x_vec(0); + precision_t area = dx * dx; + arma_mat jacobian = grid.sqrt_g_scgc.slice(iAlt); + + /** States preprocessing **/ + /* MASS DENSITY */ + arma_mat rho = rho_scgc.slice(iAlt); + + /* VELOCITY */ + // Get spherical velocity + arma_mat uVel = velocity_vcgc[0].slice(iAlt); + arma_mat vVel = velocity_vcgc[1].slice(iAlt); + // Convert to contravariant (reference) velocity + arma_mat xVel = uVel % grid.A11_inv_scgc.slice(iAlt) + vVel % + grid.A12_inv_scgc.slice(iAlt); // u^1 + arma_mat yVel = uVel % grid.A21_inv_scgc.slice(iAlt) + vVel % + grid.A22_inv_scgc.slice(iAlt); // u^2 + arma_mat vel2 = xVel % xVel + yVel % yVel; + // Generate contravriant momentum (no sqrt(g)) + arma_mat xMomentum = rho % xVel; // x1momentum + arma_mat yMomentum = rho % yVel; // x2momentum + + /* TEMP and ENERGY */ + // Generate total energy (rhoE (no sqrt(g))) + // (TODO: Verify units) + //arma_mat rhoE = rho % (temperature_scgc.slice(iAlt) % Cv_scgc.slice( + // iAlt) + 0.5 * vel2); + arma_mat rhoE = rho % (temperature_scgc.slice(iAlt) % + Cv_scgc.slice(iAlt) + + 0.5 * vel2); + + /** Advancing with RK4 **/ + // Setup Containers + arma_mat rho_0 = rho; + arma_mat rho_1(nXs, nYs, fill::zeros); // corresponding f_1 + arma_mat rho_2(nXs, nYs, fill::zeros); // corresponding f_2 + arma_mat rho_3(nXs, nYs, fill::zeros); // corresponding f_3 + + arma_mat xMomentum_0 = xMomentum; + arma_mat xMomentum_1(nXs, nYs, fill::zeros); // corresponding f_1 + arma_mat xMomentum_2(nXs, nYs, fill::zeros); // corresponding f_2 + arma_mat xMomentum_3(nXs, nYs, fill::zeros); // corresponding f_3 + + arma_mat yMomentum_0 = yMomentum; + arma_mat yMomentum_1(nXs, nYs, fill::zeros); // corresponding f_1 + arma_mat yMomentum_2(nXs, nYs, fill::zeros); // corresponding f_2 + arma_mat yMomentum_3(nXs, nYs, fill::zeros); // corresponding f_3 + + arma_mat rhoE_0 = rhoE; + arma_mat rhoE_1(nXs, nYs, fill::zeros); // corresponding f_1 + arma_mat rhoE_2(nXs, nYs, fill::zeros); // corresponding f_2 + arma_mat rhoE_3(nXs, nYs, fill::zeros); // corresponding f_3 + + // FIRST (1) STEP, Compute F_0-> State_1 + // Pass in state vector + std::vector state_0; + state_0.push_back(rho_0); + state_0.push_back(xMomentum_0); + state_0.push_back(yMomentum_0); + state_0.push_back(rhoE_0); + std::vector f_0_vec = residual_horizontal_rusanov(state_0, grid, time, + iAlt); + // Extract Gradients + arma_mat f_0_eq1 = f_0_vec[0]; + arma_mat f_0_eq2 = f_0_vec[1]; + arma_mat f_0_eq3 = f_0_vec[2]; + arma_mat f_0_eq4 = f_0_vec[3]; + + /* Update Bulk Scalars and Contravariant velocity */ + // Euler State Update + for (int j = nGCs; j < nYs - nGCs; j++) { + for (int i = nGCs; i < nXs - nGCs; i++) { + rho_1(i, j) = rho_0(i, j) + 0.5 * dt * f_0_eq1(i, j) / jacobian(i, j); + xMomentum_1(i, j) = xMomentum_0(i, j) + 0.5 * dt * f_0_eq2(i, j) / jacobian(i, + j); + yMomentum_1(i, j) = yMomentum_0(i, j) + 0.5 * dt * f_0_eq3(i, j) / jacobian(i, + j); + rhoE_1(i, j) = rhoE_0(i, j) + 0.5 * dt * f_0_eq4(i, j) / jacobian(i, j); + } + } + + // SECOND (2) STEP, Compute F_1-> State_2 + // Pass in state vector + std::vector state_1; + state_1.push_back(rho_1); + state_1.push_back(xMomentum_1); + state_1.push_back(yMomentum_1); + state_1.push_back(rhoE_1); + std::vector f_1_vec = residual_horizontal_rusanov(state_1, grid, time, + iAlt); + // Extract Gradients + arma_mat f_1_eq1 = f_1_vec[0]; + arma_mat f_1_eq2 = f_1_vec[1]; + arma_mat f_1_eq3 = f_1_vec[2]; + arma_mat f_1_eq4 = f_1_vec[3]; + + /* Update Bulk Scalars and Contravariant velocity */ + // Euler State Update + for (int j = nGCs; j < nYs - nGCs; j++) { + for (int i = nGCs; i < nXs - nGCs; i++) { + rho_2(i, j) = rho_0(i, j) + 0.5 * dt * f_1_eq1(i, j) / jacobian(i, j); + xMomentum_2(i, j) = xMomentum_0(i, j) + 0.5 * dt * f_1_eq2(i, j) / jacobian(i, + j); + yMomentum_2(i, j) = yMomentum_0(i, j) + 0.5 * dt * f_1_eq3(i, j) / jacobian(i, + j); + rhoE_2(i, j) = rhoE_0(i, j) + 0.5 * dt * f_1_eq4(i, j) / jacobian(i, j); + } + } + + // THIRD (3) STEP, Compute F_2-> State_3 + // Pass in state vector + std::vector state_2; + state_2.push_back(rho_2); + state_2.push_back(xMomentum_2); + state_2.push_back(yMomentum_2); + state_2.push_back(rhoE_2); + std::vector f_2_vec = residual_horizontal_rusanov(state_2, grid, time, + iAlt); + // Extract Gradients + arma_mat f_2_eq1 = f_2_vec[0]; + arma_mat f_2_eq2 = f_2_vec[1]; + arma_mat f_2_eq3 = f_2_vec[2]; + arma_mat f_2_eq4 = f_2_vec[3]; + + /* Update Bulk Scalars and Contravariant velocity */ + // Euler State Update + for (int j = nGCs; j < nYs - nGCs; j++) { + for (int i = nGCs; i < nXs - nGCs; i++) { + rho_3(i, j) = rho_0(i, j) + dt * f_2_eq1(i, j) / jacobian(i, j); + xMomentum_3(i, j) = xMomentum_0(i, j) + dt * f_2_eq2(i, j) / jacobian(i, j); + yMomentum_3(i, j) = yMomentum_0(i, j) + dt * f_2_eq3(i, j) / jacobian(i, j); + rhoE_3(i, j) = rhoE_0(i, j) + dt * f_2_eq4(i, j) / jacobian(i, j); + } + } + + // FOURTH (4) STEP, Compute F_3 + // Pass in state vector + std::vector state_3; + state_3.push_back(rho_3); + state_3.push_back(xMomentum_3); + state_3.push_back(yMomentum_3); + state_3.push_back(rhoE_3); + std::vector f_3_vec = residual_horizontal_rusanov(state_3, grid, time, + iAlt); + // Extract Gradients + arma_mat f_3_eq1 = f_3_vec[0]; + arma_mat f_3_eq2 = f_3_vec[1]; + arma_mat f_3_eq3 = f_3_vec[2]; + arma_mat f_3_eq4 = f_3_vec[3]; + + // Summing all steps for final update + arma_mat f_sum_eq1 = f_0_eq1 + 2 * f_1_eq1 + 2 * f_2_eq1 + f_3_eq1; + arma_mat f_sum_eq2 = f_0_eq2 + 2 * f_1_eq2 + 2 * f_2_eq2 + f_3_eq2; + arma_mat f_sum_eq3 = f_0_eq3 + 2 * f_1_eq3 + 2 * f_2_eq3 + f_3_eq3; + arma_mat f_sum_eq4 = f_0_eq4 + 2 * f_1_eq4 + 2 * f_2_eq4 + f_3_eq4; + + /* Update Bulk Scalars and Contravariant velocity */ + // Euler State Update + for (int j = nGCs; j < nYs - nGCs; j++) { + for (int i = nGCs; i < nXs - nGCs; i++) { + rho(i, j) = rho(i, j) + dt / 6 * f_sum_eq1(i, j) / jacobian(i, j); + xMomentum(i, j) = xMomentum(i, j) + dt / 6 * f_sum_eq2(i, j) / jacobian(i, j); + yMomentum(i, j) = yMomentum(i, j) + dt / 6 * f_sum_eq3(i, j) / jacobian(i, j); + rhoE(i, j) = rhoE(i, j) + dt / 6 * f_sum_eq4(i, j) / jacobian(i, j); + } + } + + /* Re-derive Spherical Velocity and Bulk States */ + // Density + rho_scgc.slice(iAlt) = rho; + + // Bulk Velocity + xVel = xMomentum / rho; // u^1 + yVel = yMomentum / rho; // u^2 + vel2 = xVel % xVel + yVel % yVel; // Squared Magnitude of Contravariant + velocity_vcgc[0].slice(iAlt) = xVel % grid.A11_scgc.slice( + iAlt) + yVel % grid.A12_scgc.slice(iAlt); + velocity_vcgc[1].slice(iAlt) = xVel % grid.A21_scgc.slice( + iAlt) + yVel % grid.A22_scgc.slice(iAlt); + + /* Update specie number density and velocity */ + for (iSpec = 0; iSpec < nSpecies; iSpec++) { + //species[iSpec].density_scgc.slice(iAlt) = rho % species[iSpec].concentration_scgc.slice(iAlt); + species[iSpec].density_scgc.slice(iAlt) = rho / species[iSpec].mass; + species[iSpec].velocity_vcgc[0].slice(iAlt) = velocity_vcgc[0].slice(iAlt); + species[iSpec].velocity_vcgc[1].slice(iAlt) = velocity_vcgc[1].slice(iAlt); + } + + /* Update temperature */ + temperature_scgc.slice(iAlt) = (rhoE / rho - 0.5 * vel2) / Cv_scgc.slice(iAlt); + + report.exit(function); + return; + } +} diff --git a/src/solver_horizontal_cubesphere_advection.cpp b/src/solver_horizontal_cubesphere_advection.cpp new file mode 100644 index 00000000..e96b1e88 --- /dev/null +++ b/src/solver_horizontal_cubesphere_advection.cpp @@ -0,0 +1,993 @@ +// Copyright 2023, the Aether Development Team (see doc/dev_team.md for members) +// Full license can be found in License.md + +// Initial version: F. Cheng, July 2023 + +#include "aether.h" + +using namespace Cubesphere_tools; + +// DOES NOT WORK WELL +std::vector Neutrals::residual_horizontal_hlle_advection( + std::vector& states, Grid& grid, Times& time) { + // Dimensions of Spatial Discretization + int64_t nXs = grid.get_nX(); + int64_t nYs = grid.get_nY(); + int64_t nGCs = grid.get_nGCs(); + int64_t nAlts = grid.get_nAlts(); + int iAlt, iSpec; + + /** Extract Grid Features **/ + arma_mat x = grid.refx_scgc.slice(iAlt); + arma_mat xEdges = grid.refx_Left.slice(iAlt); + arma_mat y = grid.refy_scgc.slice(iAlt); + arma_mat yEdges = grid.refy_Down.slice(iAlt); + + // Get reference grid dimensions (Assume dx = dy and equidistant) + arma_vec x_vec = x.col(0); + precision_t dx = x_vec(1) - x_vec(0); + precision_t area = dx * dx; + arma_mat jacobian = grid.sqrt_g_scgc.slice(iAlt); + + /** State/Velocity extraction **/ + /* MASS DENSITY */ + arma_mat rho = states[0]; + + /* VELOCITY */ + // Convert to contravariant (reference) velocity + arma_mat xVel = states[1]; // u^1 + arma_mat yVel = states[2]; // u^2 + + // Generate velocity magnitude squared + arma_mat vel2 = xVel % xVel + yVel % yVel; + + /** Advancing **/ + /* Initialize projection constructs and storages */ + projection_struct rhoP; + projection_struct xVelP; + projection_struct yVelP; + + // They are all pure scalar fields without sqrt(g) + arma_mat rhoL, rhoR, rhoD, rhoU; + arma_mat xVelL, xVelR, xVelD, xVelU; + arma_mat yVelL, yVelR, yVelD, yVelU; + + arma_mat velL2, velR2, velD2, velU2; + + /** Initialize Flux and Wave Speed Storages */ + arma_mat eq1FluxLR_left, eq1FluxDU_down; + arma_mat eq1FluxLR_right, eq1FluxDU_upper; + arma_mat eq1FluxL, eq1FluxR, eq1FluxD, eq1FluxU; + + arma_mat wsL, wsR, wsD, wsU; + arma_mat wsL_min, wsL_max, wsR_min, wsR_max; + arma_mat wsD_min, wsD_max, wsU_min, wsU_max; + arma_mat wsLR_max, wsDU_max, wsLR_min, wsDU_min; + + arma_mat diff; // for Riemann Solver + + /* Projection */ + rhoP = project_to_edges(rho, x, xEdges, y, yEdges, nGCs); + xVelP = project_to_edges(xVel, x, xEdges, y, yEdges, nGCs); + yVelP = project_to_edges(yVel, x, xEdges, y, yEdges, nGCs); + + // Resolve Scalar Fields into rho, xVel, yVel, and totalE (without rho) + rhoL = rhoP.L; + rhoR = rhoP.R; + rhoD = rhoP.D; + rhoU = rhoP.U; + + xVelL = xVelP.L; + xVelR = xVelP.R; + xVelD = xVelP.D; + xVelU = xVelP.U; + + yVelL = yVelP.L; + yVelR = yVelP.R; + yVelD = yVelP.D; + yVelU = yVelP.U; + + //velL2 = xVelL % xVelL + yVelL % yVelL; + //velR2 = xVelR % xVelR + yVelR % yVelR; + //velD2 = xVelD % xVelD + yVelD % yVelD; + //velU2 = xVelU % xVelU + yVelU % yVelU; + + /* Calculate Edge Fluxes */ + // Note that dot product between normal vector at edge and flux vector + // resolves into a pure one component flux or either hat{x} or hat{y} + + // Flux calculated from the left of the edge + eq1FluxL = rhoL % xVelL % grid.sqrt_g_Left.slice(iAlt); + // Flux calculated from the right of the edge + eq1FluxR = rhoR % xVelR % grid.sqrt_g_Left.slice(iAlt); + // Flux calculated from the down of the edge + eq1FluxD = rhoD % yVelD % grid.sqrt_g_Down.slice(iAlt); + // Flux calculated from the up of the edge + eq1FluxU = rhoU % yVelU % grid.sqrt_g_Down.slice(iAlt); + + /* Wave Speed Calculation (Left/Down) */ + wsL = xVelL; + wsR = xVelR; + wsD = yVelD; + wsU = yVelU; + + wsL_max = wsL; + wsL_min = wsL; + wsR_max = wsR; + wsR_min = wsR; + wsD_max = wsD; + wsD_min = wsD; + wsU_max = wsU; + wsU_min = wsU; + + // Process wave speeds from each direction first + for (int i = 0; i < nXs + 1; i++) { + for (int j = 0; j < nYs; j++) { + + if (wsL(i, j) > 0.) + wsL_min(i, j) = 0.; + + else + wsL_max(i, j) = 0.; + + if (wsR(i, j) > 0.) + wsR_min(i, j) = 0.; + + else + wsR_max(i, j) = 0.; + } + } + + for (int i = 0; i < nXs; i++) { + for (int j = 0; j < nYs + 1; j++) { + if (wsD(i, j) > 0.) + wsD_min(i, j) = 0.; + + else + wsD_max(i, j) = 0.; + + if (wsU(i, j) > 0.) + wsU_min(i, j) = 0.; + + else + wsU_max(i, j) = 0.; + } + } + + // Process edge wave speeds + wsLR_max = wsR_max; + + for (int i = 0; i < nXs + 1; i++) { + for (int j = 0; j < nYs; j++) { + if (wsL_max(i, j) > wsLR_max(i, j)) + wsLR_max(i, j) = wsL_max(i, j); + } + } + + wsDU_max = wsD_max; + + for (int i = 0; i < nXs; i++) { + for (int j = 0; j < nYs + 1; j++) { + if (wsU_max(i, j) > wsDU_max(i, j)) + wsDU_max(i, j) = wsU_max(i, j); + } + } + + wsLR_min = wsR_min; + + for (int i = 0; i < nXs + 1; i++) { + for (int j = 0; j < nYs; j++) { + if (wsL_min(i, j) < wsLR_min(i, j)) + wsLR_min(i, j) = wsL_min(i, j); + } + } + + wsDU_min = wsD_min; + + for (int i = 0; i < nXs; i++) { + for (int j = 0; j < nYs + 1; j++) { + if (wsU_min(i, j) < wsDU_min(i, j)) + wsDU_min(i, j) = wsU_min(i, j); + } + } + + /* Calculate average flux at the edges (HLLE Flux) */ + arma_mat wsLR_sum = wsLR_max + wsLR_min; + arma_mat wsLR_diff = wsLR_max - wsLR_min; + diff = (rhoR - rhoL) % grid.sqrt_g_Left.slice( + iAlt); // State difference, need to add sqrt(g) + eq1FluxLR_left = 0.5 * (eq1FluxL + eq1FluxR) + 0.5 * (wsLR_sum / wsLR_diff) % + (eq1FluxR - eq1FluxL) - (wsLR_max % wsLR_min) / wsLR_diff % diff; + + arma_mat wsDU_sum = wsDU_max + wsDU_min; + arma_mat wsDU_diff = wsDU_max - wsDU_min; + diff = (rhoU - rhoD) % grid.sqrt_g_Down.slice(iAlt); + eq1FluxDU_down = 0.5 * (eq1FluxU + eq1FluxD) + 0.5 * (wsDU_sum / wsDU_diff) % + (eq1FluxD - eq1FluxU) - (wsDU_max % wsDU_min) / wsDU_diff % diff; + + /* Wave Speed Calculation (Right/Up) */ + wsL = -xVelL; + wsR = -xVelR; + wsD = -yVelD; + wsU = -yVelU; + + wsL_max = wsL; + wsL_min = wsL; + wsR_max = wsR; + wsR_min = wsR; + wsD_max = wsD; + wsD_min = wsD; + wsU_max = wsU; + wsU_min = wsU; + + // Process wave speeds from each direction first + for (int i = 0; i < nXs + 1; i++) { + for (int j = 0; j < nYs; j++) { + + if (wsL(i, j) > 0.) + wsL_min(i, j) = 0.; + + else + wsL_max(i, j) = 0.; + + if (wsR(i, j) > 0.) + wsR_min(i, j) = 0.; + + else + wsR_max(i, j) = 0.; + } + } + + for (int i = 0; i < nXs; i++) { + for (int j = 0; j < nYs + 1; j++) { + if (wsD(i, j) > 0.) + wsD_min(i, j) = 0.; + + else + wsD_max(i, j) = 0.; + + if (wsU(i, j) > 0.) + wsU_min(i, j) = 0.; + + else + wsU_max(i, j) = 0.; + } + } + + // Process edge wave speeds + wsLR_max = wsR_max; + + for (int i = 0; i < nXs + 1; i++) { + for (int j = 0; j < nYs; j++) { + if (wsL_max(i, j) > wsLR_max(i, j)) + wsLR_max(i, j) = wsL_max(i, j); + } + } + + wsDU_max = wsD_max; + + for (int i = 0; i < nXs; i++) { + for (int j = 0; j < nYs + 1; j++) { + if (wsU_max(i, j) > wsDU_max(i, j)) + wsDU_max(i, j) = wsU_max(i, j); + } + } + + wsLR_min = wsR_min; + + for (int i = 0; i < nXs + 1; i++) { + for (int j = 0; j < nYs; j++) { + if (wsL_min(i, j) < wsLR_min(i, j)) + wsLR_min(i, j) = wsL_min(i, j); + } + } + + wsDU_min = wsD_min; + + for (int i = 0; i < nXs; i++) { + for (int j = 0; j < nYs + 1; j++) { + if (wsU_min(i, j) < wsDU_min(i, j)) + wsDU_min(i, j) = wsU_min(i, j); + } + } + + /* Calculate average flux at the edges (HLLE Flux) */ + wsLR_sum = wsLR_max + wsLR_min; + wsLR_diff = wsLR_max - wsLR_min; + diff = (rhoR - rhoL) % grid.sqrt_g_Left.slice( + iAlt); // State difference, need to add sqrt(g) + eq1FluxLR_right = 0.5 * (eq1FluxL + eq1FluxR) + 0.5 * (wsLR_sum / wsLR_diff) % + (eq1FluxR - eq1FluxL) - (wsLR_max % wsLR_min) / wsLR_diff % diff; + + wsDU_sum = wsDU_max + wsDU_min; + wsDU_diff = wsDU_max - wsDU_min; + diff = (rhoU - rhoD) % grid.sqrt_g_Down.slice(iAlt); + eq1FluxDU_upper = 0.5 * (eq1FluxU + eq1FluxD) + 0.5 * (wsDU_sum / wsDU_diff) % + (eq1FluxD - eq1FluxU) - (wsDU_max % wsDU_min) / wsDU_diff % diff; + + + // Setup residual storage for return + arma_mat eq1_residual(nXs, nYs, fill::zeros); + + // State Update + // Note the ghost cells WILL NOT BE UPDATED + for (int j = nGCs; j < nYs - nGCs; j++) { + for (int i = nGCs; i < nXs - nGCs; i++) { + precision_t rhoResidual_ij = dx * eq1FluxLR_right(i + 1, j) - + dx * eq1FluxLR_left(i, j) + + dx * eq1FluxDU_upper(i, j + 1) - + dx * eq1FluxDU_down(i, j); + eq1_residual(i, j) = -1 / area * rhoResidual_ij; + } + } + + // Setup return vector + std::vector return_vector; + return_vector.push_back(eq1_residual); + + return return_vector; +} + +// WORKS, but diffusive +std::vector Neutrals::residual_horizontal_rusanov_advection( + std::vector& states, Grid& grid, Times& time) { + // Dimensions of Spatial Discretization + int64_t nXs = grid.get_nX(); + int64_t nYs = grid.get_nY(); + int64_t nGCs = grid.get_nGCs(); + int64_t nAlts = grid.get_nAlts(); + int iAlt, iSpec; + + /** Extract Grid Features **/ + arma_mat x = grid.refx_scgc.slice(iAlt); + arma_mat xEdges = grid.refx_Left.slice(iAlt); + arma_mat y = grid.refy_scgc.slice(iAlt); + arma_mat yEdges = grid.refy_Down.slice(iAlt); + + // Get reference grid dimensions (Assume dx = dy and equidistant) + arma_vec x_vec = x.col(0); + precision_t dx = x_vec(1) - x_vec(0); + precision_t area = dx * dx; + arma_mat jacobian = grid.sqrt_g_scgc.slice(iAlt); + + /** State/Velocity extraction **/ + /* MASS DENSITY */ + arma_mat rho = states[0]; + + /* VELOCITY */ + // Convert to contravariant (reference) velocity + arma_mat xVel = states[1]; // u^1 + arma_mat yVel = states[2]; // u^2 + + // Generate velocity magnitude squared + arma_mat vel2 = xVel % xVel + yVel % yVel; + + /** Advancing **/ + /* Initialize projection constructs and storages */ + projection_struct rhoP; + projection_struct xVelP; + projection_struct yVelP; + + // They are all pure scalar fields without sqrt(g) + arma_mat rhoL, rhoR, rhoD, rhoU; + arma_mat xVelL, xVelR, xVelD, xVelU; + arma_mat yVelL, yVelR, yVelD, yVelU; + + arma_mat velL2, velR2, velD2, velU2; + + /** Initialize Flux and Wave Speed Storages */ + arma_mat eq1FluxLR, eq1FluxDU; + arma_mat eq1FluxL, eq1FluxR, eq1FluxD, eq1FluxU; + + arma_mat wsL, wsR, wsD, wsU, wsLR, wsDU; + + arma_mat diff; // for Riemann Solver + + /* Projection */ + rhoP = project_to_edges(rho, x, xEdges, y, yEdges, nGCs); + xVelP = project_to_edges(xVel, x, xEdges, y, yEdges, nGCs); + yVelP = project_to_edges(yVel, x, xEdges, y, yEdges, nGCs); + + // Resolve Scalar Fields into rho, xVel, yVel, and totalE (without rho) + rhoL = rhoP.L; + rhoR = rhoP.R; + rhoD = rhoP.D; + rhoU = rhoP.U; + + xVelL = xVelP.L; + xVelR = xVelP.R; + xVelD = xVelP.D; + xVelU = xVelP.U; + + yVelL = yVelP.L; + yVelR = yVelP.R; + yVelD = yVelP.D; + yVelU = yVelP.U; + + velL2 = xVelL % xVelL + yVelL % yVelL; + velR2 = xVelR % xVelR + yVelR % yVelR; + velD2 = xVelD % xVelD + yVelD % yVelD; + velU2 = xVelU % xVelU + yVelU % yVelU; + + /* Calculate Edge Fluxes */ + // Note that dot product between normal vector at edge and flux vector + // resolves into a pure one component flux or either hat{x} or hat{y} + + // Flux calculated from the left of the edge + eq1FluxL = rhoL % xVelL % grid.sqrt_g_Left.slice(iAlt); + // Flux calculated from the right of the edge + eq1FluxR = rhoR % xVelR % grid.sqrt_g_Left.slice(iAlt); + // Flux calculated from the down of the edge + eq1FluxD = rhoD % yVelD % grid.sqrt_g_Down.slice(iAlt); + // Flux calculated from the up of the edge + eq1FluxU = rhoU % yVelU % grid.sqrt_g_Down.slice(iAlt); + + /* Wave Speed Calculation */ + wsL = sqrt(velL2); + wsR = sqrt(velR2); + wsD = sqrt(velD2); + wsU = sqrt(velU2); + + wsLR = wsR; + + for (int i = 0; i < nXs + 1; i++) { + for (int j = 0; j < nYs; j++) { + if (wsL(i, j) > wsLR(i, j)) + wsLR(i, j) = wsL(i, j); + } + } + + wsDU = wsD; + + for (int i = 0; i < nXs; i++) { + for (int j = 0; j < nYs + 1; j++) { + if (wsU(i, j) > wsDU(i, j)) + wsDU(i, j) = wsU(i, j); + } + } + + /* Calculate average flux at the edges (Rusanov Flux) */ + diff = (rhoR - rhoL) % grid.sqrt_g_Left.slice( + iAlt); // State difference, need to add sqrt(g) + eq1FluxLR = (eq1FluxL + eq1FluxR) / 2 + 0.5 * wsLR % diff; + diff = (rhoU - rhoD) % grid.sqrt_g_Down.slice(iAlt); + eq1FluxDU = (eq1FluxD + eq1FluxU) / 2 + 0.5 * wsDU % diff; + + // Setup residual storage for return + arma_mat eq1_residual(nXs, nYs, fill::zeros); + + // State Update + // Note the ghost cells WILL NOT BE UPDATED + for (int j = nGCs; j < nYs - nGCs; j++) { + for (int i = nGCs; i < nXs - nGCs; i++) { + precision_t rhoResidual_ij = dx * eq1FluxLR(i + 1, j) - + dx * eq1FluxLR(i, j) + + dx * eq1FluxDU(i, j + 1) - + dx * eq1FluxDU(i, j); + eq1_residual(i, j) = -1 / area * rhoResidual_ij; + } + } + + // Setup return vector + std::vector return_vector; + return_vector.push_back(eq1_residual); + + return return_vector; +} + +void Neutrals::solver_horizontal_rusanov_advection(Grid& grid, Times& time) { + // Function Reporting + std::string function = "Neutrals::solver_horizontal_rusanov_advection"; + static int iFunction = -1; + report.enter(function, iFunction); + + // Dimensions of Spatial Discretization + int64_t nXs = grid.get_nX(); + int64_t nYs = grid.get_nY(); + int64_t nGCs = grid.get_nGCs(); + int64_t nAlts = grid.get_nAlts(); + int iAlt, iSpec; + + // Time Discretization (TODO: change dt calculation method) + precision_t dt = time.get_dt(); + + + // Advance for bulk calculation first, calculate for every altitude + for (iAlt = nGCs; iAlt < nAlts - nGCs; iAlt++) { + /** Extract Grid Features **/ + arma_mat x = grid.refx_scgc.slice(iAlt); + arma_mat xEdges = grid.refx_Left.slice(iAlt); + arma_mat y = grid.refy_scgc.slice(iAlt); + arma_mat yEdges = grid.refy_Down.slice(iAlt); + + // Get reference grid dimensions (Assume dx = dy and equidistant) + arma_vec x_vec = x.col(0); + precision_t dx = x_vec(1) - x_vec(0); + precision_t area = dx * dx; + arma_mat jacobian = grid.sqrt_g_scgc.slice(iAlt); + + /** States preprocessing **/ + /* MASS DENSITY */ + arma_mat rho = rho_scgc.slice(iAlt); + + /* VELOCITY */ + // Get spherical velocity + arma_mat uVel = velocity_vcgc[0].slice(iAlt); + arma_mat vVel = velocity_vcgc[1].slice(iAlt); + // Convert to contravariant (reference) velocity + arma_mat xVel = uVel % grid.A11_inv_scgc.slice(iAlt) + vVel % + grid.A12_inv_scgc.slice(iAlt); // u^1 + arma_mat yVel = uVel % grid.A21_inv_scgc.slice(iAlt) + vVel % + grid.A22_inv_scgc.slice(iAlt); // u^2 + + // Generate velocity magnitude squared + arma_mat vel2 = xVel % xVel + yVel % yVel; + + /** Advancing **/ + /* Initialize projection constructs and storages */ + projection_struct rhoP; + projection_struct xVelP; + projection_struct yVelP; + + // They are all pure scalar fields without sqrt(g) + arma_mat rhoL, rhoR, rhoD, rhoU; + arma_mat xVelL, xVelR, xVelD, xVelU; + arma_mat yVelL, yVelR, yVelD, yVelU; + + arma_mat velL2, velR2, velD2, velU2; + + /** Initialize Flux and Wave Speed Storages */ + arma_mat eq1FluxLR, eq1FluxDU; + arma_mat eq1FluxL, eq1FluxR, eq1FluxD, eq1FluxU; + + arma_mat wsL, wsR, wsD, wsU, wsLR, wsDU; + + arma_mat diff; // for Riemann Solver + + /* Projection */ + rhoP = project_to_edges(rho, x, xEdges, y, yEdges, nGCs); + xVelP = project_to_edges(xVel, x, xEdges, y, yEdges, nGCs); + yVelP = project_to_edges(yVel, x, xEdges, y, yEdges, nGCs); + + // Resolve Scalar Fields into rho, xVel, yVel, and totalE (without rho) + rhoL = rhoP.L; + rhoR = rhoP.R; + rhoD = rhoP.D; + rhoU = rhoP.U; + + xVelL = xVelP.L; + xVelR = xVelP.R; + xVelD = xVelP.D; + xVelU = xVelP.U; + + yVelL = yVelP.L; + yVelR = yVelP.R; + yVelD = yVelP.D; + yVelU = yVelP.U; + + velL2 = xVelL % xVelL + yVelL % yVelL; + velR2 = xVelR % xVelR + yVelR % yVelR; + velD2 = xVelD % xVelD + yVelD % yVelD; + velU2 = xVelU % xVelU + yVelU % yVelU; + + + /* Calculate Edge Fluxes */ + // Note that dot product between normal vector at edge and flux vector + // resolves into a pure one component flux or either hat{x} or hat{y} + + // Flux calculated from the left of the edge + eq1FluxL = rhoL % xVelL % grid.sqrt_g_Left.slice(iAlt); + // Flux calculated from the right of the edge + eq1FluxR = rhoR % xVelR % grid.sqrt_g_Left.slice(iAlt); + // Flux calculated from the down of the edge + eq1FluxD = rhoD % yVelD % grid.sqrt_g_Down.slice(iAlt); + // Flux calculated from the up of the edge + eq1FluxU = rhoU % yVelU % grid.sqrt_g_Down.slice(iAlt); + + /* Wave Speed Calculation */ + wsL = sqrt(velL2); + wsR = sqrt(velR2); + wsD = sqrt(velD2); + wsU = sqrt(velU2); + + wsLR = wsR; + + for (int i = 0; i < nXs + 1; i++) { + for (int j = 0; j < nYs; j++) { + if (wsL(i, j) > wsLR(i, j)) + wsLR(i, j) = wsL(i, j); + } + } + + wsDU = wsD; + + for (int i = 0; i < nXs; i++) { + for (int j = 0; j < nYs + 1; j++) { + if (wsU(i, j) > wsDU(i, j)) + wsDU(i, j) = wsU(i, j); + } + } + + /* Calculate average flux at the edges (Rusanov Flux) */ + diff = (rhoR - rhoL) % grid.sqrt_g_Left.slice( + iAlt); // State difference, need to add sqrt(g) + eq1FluxLR = (eq1FluxL + eq1FluxR) / 2 + 0.5 * wsLR % diff; + diff = (rhoU - rhoD) % grid.sqrt_g_Down.slice(iAlt); + eq1FluxDU = (eq1FluxD + eq1FluxU) / 2 + 0.5 * wsDU % diff; + + /* Update Bulk Scalars and Contravariant velocity */ + // Euler State Update + for (int j = nGCs; j < nYs - nGCs; j++) { + for (int i = nGCs; i < nXs - nGCs; i++) { + precision_t rhoResidual_ij = dx * eq1FluxLR(i + 1, j) - + dx * eq1FluxLR(i, j) + + dx * eq1FluxDU(i, j + 1) - + dx * eq1FluxDU(i, j); + rho(i, j) = rho(i, j) - dt / area / jacobian(i, j) * rhoResidual_ij; + } + } + + /* Re-derive Spherical Velocity and Bulk States */ + // Density + rho_scgc.slice(iAlt) = rho; + + // Bulk Velocity + //vel2 = xVel % xVel + yVel % yVel; // Squared Magnitude of Contravariant + //velocity_vcgc[0].slice(iAlt) = xVel%grid.A11_scgc.slice(iAlt) + yVel%grid.A12_scgc.slice(iAlt); + //velocity_vcgc[1].slice(iAlt) = xVel%grid.A21_scgc.slice(iAlt) + yVel%grid.A22_scgc.slice(iAlt); + + /* Update specie density */ + for (iSpec = 0; iSpec < nSpecies; iSpec++) { + //species[iSpec].density_scgc.slice(iAlt) = rho % species[iSpec].concentration_scgc.slice(iAlt); + species[iSpec].density_scgc.slice(iAlt) = rho / species[iSpec].mass; + } + + + report.exit(function); + return; + } +} + +void Neutrals::solver_horizontal_RK1_advection(Grid& grid, Times& time) { + // Function Reporting + std::string function = "Neutrals::solver_horizontal_RK1_advection"; + static int iFunction = -1; + report.enter(function, iFunction); + + // Dimensions of Spatial Discretization + int64_t nXs = grid.get_nX(); + int64_t nYs = grid.get_nY(); + int64_t nGCs = grid.get_nGCs(); + int64_t nAlts = grid.get_nAlts(); + int iAlt, iSpec; + + // Time Discretization (TODO: change dt calculation method) + precision_t dt = time.get_dt(); + + // Advance for bulk calculation first, calculate for every altitude + for (iAlt = nGCs; iAlt < nAlts - nGCs; iAlt++) { + /** Extract Grid Features **/ + arma_mat x = grid.refx_scgc.slice(iAlt); + arma_mat xEdges = grid.refx_Left.slice(iAlt); + arma_mat y = grid.refy_scgc.slice(iAlt); + arma_mat yEdges = grid.refy_Down.slice(iAlt); + + // Get reference grid dimensions (Assume dx = dy and equidistant) + arma_vec x_vec = x.col(0); + precision_t dx = x_vec(1) - x_vec(0); + precision_t area = dx * dx; + arma_mat jacobian = grid.sqrt_g_scgc.slice(iAlt); + + /** States preprocessing **/ + /* MASS DENSITY */ + arma_mat rho = rho_scgc.slice(iAlt); + + /* VELOCITY */ + // Get spherical velocity + arma_mat uVel = velocity_vcgc[0].slice(iAlt); + arma_mat vVel = velocity_vcgc[1].slice(iAlt); + // Convert to contravariant (reference) velocity + arma_mat xVel = uVel % grid.A11_inv_scgc.slice(iAlt) + vVel % + grid.A12_inv_scgc.slice(iAlt); // u^1 + arma_mat yVel = uVel % grid.A21_inv_scgc.slice(iAlt) + vVel % + grid.A22_inv_scgc.slice(iAlt); // u^2 + + /** Advancing with RK4 **/ + // Setup Containers + arma_mat rho_0 = rho; + + // FIRST (1) STEP, Compute F_0-> State_1 + // Pass in state vector + std::vector state_0; + state_0.push_back(rho_0); + state_0.push_back(xVel); + state_0.push_back(yVel); + std::vector f_0_vec = residual_horizontal_rusanov_advection(state_0, + grid, time); + + // Extract Gradients + arma_mat f_0_eq1 = f_0_vec[0]; + + /* Update Bulk Scalars and Contravariant velocity */ + // Euler State Update + for (int j = nGCs; j < nYs - nGCs; j++) { + for (int i = nGCs; i < nXs - nGCs; i++) + rho(i, j) = rho_0(i, j) + dt * f_0_eq1(i, j) / jacobian(i, j); + } + + /* Re-derive Spherical Velocity and Bulk States */ + // Density + rho_scgc.slice(iAlt) = rho; + + // Bulk Velocity + //vel2 = xVel % xVel + yVel % yVel; // Squared Magnitude of Contravariant + //velocity_vcgc[0].slice(iAlt) = xVel%grid.A11_scgc.slice(iAlt) + yVel%grid.A12_scgc.slice(iAlt); + //velocity_vcgc[1].slice(iAlt) = xVel%grid.A21_scgc.slice(iAlt) + yVel%grid.A22_scgc.slice(iAlt); + + /* Update specie density */ + for (iSpec = 0; iSpec < nSpecies; iSpec++) { + //species[iSpec].density_scgc.slice(iAlt) = rho % species[iSpec].concentration_scgc.slice(iAlt); + species[iSpec].density_scgc.slice(iAlt) = rho / species[iSpec].mass; + } + + + report.exit(function); + return; + } +} + +void Neutrals::solver_horizontal_RK2_advection(Grid& grid, Times& time) { + // Function Reporting + std::string function = "Neutrals::solver_horizontal_RK2_advection"; + static int iFunction = -1; + report.enter(function, iFunction); + + // Dimensions of Spatial Discretization + int64_t nXs = grid.get_nX(); + int64_t nYs = grid.get_nY(); + int64_t nGCs = grid.get_nGCs(); + int64_t nAlts = grid.get_nAlts(); + int iAlt, iSpec; + + // Time Discretization (TODO: change dt calculation method) + precision_t dt = time.get_dt(); + + // Advance for bulk calculation first, calculate for every altitude + for (iAlt = nGCs; iAlt < nAlts - nGCs; iAlt++) { + /** Extract Grid Features **/ + arma_mat x = grid.refx_scgc.slice(iAlt); + arma_mat xEdges = grid.refx_Left.slice(iAlt); + arma_mat y = grid.refy_scgc.slice(iAlt); + arma_mat yEdges = grid.refy_Down.slice(iAlt); + + // Get reference grid dimensions (Assume dx = dy and equidistant) + arma_vec x_vec = x.col(0); + precision_t dx = x_vec(1) - x_vec(0); + precision_t area = dx * dx; + arma_mat jacobian = grid.sqrt_g_scgc.slice(iAlt); + + /** States preprocessing **/ + /* MASS DENSITY */ + arma_mat rho = rho_scgc.slice(iAlt); + + /* VELOCITY */ + // Get spherical velocity + arma_mat uVel = velocity_vcgc[0].slice(iAlt); + arma_mat vVel = velocity_vcgc[1].slice(iAlt); + // Convert to contravariant (reference) velocity + arma_mat xVel = uVel % grid.A11_inv_scgc.slice(iAlt) + vVel % + grid.A12_inv_scgc.slice(iAlt); // u^1 + arma_mat yVel = uVel % grid.A21_inv_scgc.slice(iAlt) + vVel % + grid.A22_inv_scgc.slice(iAlt); // u^2 + + /** Advancing with RK4 **/ + // Setup Containers + arma_mat rho_0 = rho; + arma_mat rho_1(nXs, nYs, fill::zeros); // corresponding f_1 + + // FIRST (1) STEP, Compute F_0-> State_1 + // Pass in state vector + std::vector state_0; + state_0.push_back(rho_0); + state_0.push_back(xVel); + state_0.push_back(yVel); + std::vector f_0_vec = residual_horizontal_hlle_advection(state_0, + grid, time); + // Extract Gradients + arma_mat f_0_eq1 = f_0_vec[0]; + + /* Update Bulk Scalars and Contravariant velocity */ + // Euler State Update + for (int j = nGCs; j < nYs - nGCs; j++) { + for (int i = nGCs; i < nXs - nGCs; i++) + rho_1(i, j) = rho_0(i, j) + dt * f_0_eq1(i, j) / jacobian(i, j); + } + + // SECOND (2) STEP, Compute F_1-> State_2 + // Pass in state vector + std::vector state_1; + state_1.push_back(rho_1); + state_1.push_back(xVel); + state_1.push_back(yVel); + std::vector f_1_vec = residual_horizontal_hlle_advection(state_1, + grid, time); + // Extract Gradients + arma_mat f_1_eq1 = f_1_vec[0]; + + // Summing all steps for final update + arma_mat f_sum_eq1 = f_0_eq1 + f_1_eq1; + + /* Update Bulk Scalars and Contravariant velocity */ + // Euler State Update + for (int j = nGCs; j < nYs - nGCs; j++) { + for (int i = nGCs; i < nXs - nGCs; i++) + rho(i, j) = rho(i, j) + 0.5 * dt * f_sum_eq1(i, j) / jacobian(i, j); + } + + /* Re-derive Spherical Velocity and Bulk States */ + // Density + rho_scgc.slice(iAlt) = rho; + + // Bulk Velocity + //vel2 = xVel % xVel + yVel % yVel; // Squared Magnitude of Contravariant + //velocity_vcgc[0].slice(iAlt) = xVel%grid.A11_scgc.slice(iAlt) + yVel%grid.A12_scgc.slice(iAlt); + //velocity_vcgc[1].slice(iAlt) = xVel%grid.A21_scgc.slice(iAlt) + yVel%grid.A22_scgc.slice(iAlt); + + /* Update specie density */ + for (iSpec = 0; iSpec < nSpecies; iSpec++) { + //species[iSpec].density_scgc.slice(iAlt) = rho % species[iSpec].concentration_scgc.slice(iAlt); + species[iSpec].density_scgc.slice(iAlt) = rho / species[iSpec].mass; + } + + + report.exit(function); + return; + } +} + +void Neutrals::solver_horizontal_RK4_advection(Grid& grid, Times& time) { + // Function Reporting + std::string function = "Neutrals::solver_horizontal_RK4_advection"; + static int iFunction = -1; + report.enter(function, iFunction); + + // Dimensions of Spatial Discretization + int64_t nXs = grid.get_nX(); + int64_t nYs = grid.get_nY(); + int64_t nGCs = grid.get_nGCs(); + int64_t nAlts = grid.get_nAlts(); + int iAlt, iSpec; + + // Time Discretization (TODO: change dt calculation method) + precision_t dt = time.get_dt(); + + // Advance for bulk calculation first, calculate for every altitude + for (iAlt = nGCs; iAlt < nAlts - nGCs; iAlt++) { + /** Extract Grid Features **/ + arma_mat x = grid.refx_scgc.slice(iAlt); + arma_mat xEdges = grid.refx_Left.slice(iAlt); + arma_mat y = grid.refy_scgc.slice(iAlt); + arma_mat yEdges = grid.refy_Down.slice(iAlt); + + // Get reference grid dimensions (Assume dx = dy and equidistant) + arma_vec x_vec = x.col(0); + precision_t dx = x_vec(1) - x_vec(0); + precision_t area = dx * dx; + arma_mat jacobian = grid.sqrt_g_scgc.slice(iAlt); + + /** States preprocessing **/ + /* MASS DENSITY */ + arma_mat rho = rho_scgc.slice(iAlt); + + /* VELOCITY */ + // Get spherical velocity + arma_mat uVel = velocity_vcgc[0].slice(iAlt); + arma_mat vVel = velocity_vcgc[1].slice(iAlt); + // Convert to contravariant (reference) velocity + arma_mat xVel = uVel % grid.A11_inv_scgc.slice(iAlt) + vVel % + grid.A12_inv_scgc.slice(iAlt); // u^1 + arma_mat yVel = uVel % grid.A21_inv_scgc.slice(iAlt) + vVel % + grid.A22_inv_scgc.slice(iAlt); // u^2 + + /** Advancing with RK4 **/ + // Setup Containers + arma_mat rho_0 = rho; + arma_mat rho_1(nXs, nYs, fill::zeros); // corresponding f_1 + arma_mat rho_2(nXs, nYs, fill::zeros); // corresponding f_2 + arma_mat rho_3(nXs, nYs, fill::zeros); // corresponding f_3 + + // FIRST (1) STEP, Compute F_0-> State_1 + // Pass in state vector + std::vector state_0; + state_0.push_back(rho_0); + state_0.push_back(xVel); + state_0.push_back(yVel); + std::vector f_0_vec = residual_horizontal_rusanov_advection(state_0, + grid, time); + // Extract Gradients + arma_mat f_0_eq1 = f_0_vec[0]; + + /* Update Bulk Scalars and Contravariant velocity */ + // Euler State Update + for (int j = nGCs; j < nYs - nGCs; j++) { + for (int i = nGCs; i < nXs - nGCs; i++) + rho_1(i, j) = rho_0(i, j) + 0.5 * dt * f_0_eq1(i, j) / jacobian(i, j); + } + + // SECOND (2) STEP, Compute F_1-> State_2 + // Pass in state vector + std::vector state_1; + state_1.push_back(rho_1); + state_1.push_back(xVel); + state_1.push_back(yVel); + std::vector f_1_vec = residual_horizontal_rusanov_advection(state_1, + grid, time); + // Extract Gradients + arma_mat f_1_eq1 = f_1_vec[0]; + + /* Update Bulk Scalars and Contravariant velocity */ + // Euler State Update + for (int j = nGCs; j < nYs - nGCs; j++) { + for (int i = nGCs; i < nXs - nGCs; i++) + rho_2(i, j) = rho_0(i, j) + 0.5 * dt * f_1_eq1(i, j) / jacobian(i, j); + } + + // THIRD (3) STEP, Compute F_2-> State_3 + // Pass in state vector + std::vector state_2; + state_2.push_back(rho_2); + state_2.push_back(xVel); + state_2.push_back(yVel); + std::vector f_2_vec = residual_horizontal_rusanov_advection(state_2, + grid, time); + // Extract Gradients + arma_mat f_2_eq1 = f_2_vec[0]; + + /* Update Bulk Scalars and Contravariant velocity */ + // Euler State Update + for (int j = nGCs; j < nYs - nGCs; j++) { + for (int i = nGCs; i < nXs - nGCs; i++) + rho_3(i, j) = rho_0(i, j) + dt * f_2_eq1(i, j) / jacobian(i, j); + } + + // FOURTH (4) STEP, Compute F_3 + // Pass in state vector + std::vector state_3; + state_3.push_back(rho_3); + state_3.push_back(xVel); + state_3.push_back(yVel); + std::vector f_3_vec = residual_horizontal_rusanov_advection(state_3, + grid, time); + // Extract Gradients + arma_mat f_3_eq1 = f_3_vec[0]; + + // Summing all steps for final update + arma_mat f_sum_eq1 = f_0_eq1 + 2 * f_1_eq1 + 2 * f_2_eq1 + f_3_eq1; + + /* Update Bulk Scalars and Contravariant velocity */ + // Euler State Update + for (int j = nGCs; j < nYs - nGCs; j++) { + for (int i = nGCs; i < nXs - nGCs; i++) + rho(i, j) = rho(i, j) + dt / 6 * f_sum_eq1(i, j) / jacobian(i, j); + } + + /* Re-derive Spherical Velocity and Bulk States */ + // Density + rho_scgc.slice(iAlt) = rho; + + // Bulk Velocity + //vel2 = xVel % xVel + yVel % yVel; // Squared Magnitude of Contravariant + //velocity_vcgc[0].slice(iAlt) = xVel%grid.A11_scgc.slice(iAlt) + yVel%grid.A12_scgc.slice(iAlt); + //velocity_vcgc[1].slice(iAlt) = xVel%grid.A21_scgc.slice(iAlt) + yVel%grid.A22_scgc.slice(iAlt); + + /* Update specie density */ + for (iSpec = 0; iSpec < nSpecies; iSpec++) { + //species[iSpec].density_scgc.slice(iAlt) = rho % species[iSpec].concentration_scgc.slice(iAlt); + species[iSpec].density_scgc.slice(iAlt) = rho / species[iSpec].mass; + } + + + report.exit(function); + return; + } +} \ No newline at end of file diff --git a/src/solver_vertical_rusanov.cpp b/src/solver_vertical_rusanov.cpp index 0b9258aa..f71b843a 100644 --- a/src/solver_vertical_rusanov.cpp +++ b/src/solver_vertical_rusanov.cpp @@ -26,20 +26,22 @@ void calc_facevalues_alts_rusanov(Grid &grid, precision_t beta = 1.5; // inverse delta-alt at cell edge - arma_mat ida; + arma_mat ida(nXs, nYs); // Projection of variables to the cell edge: arma_mat dVarUp(nXs, nYs), dVarDown(nXs, nYs); arma_cube dVarLimited(nXs, nYs, nZs); + dVarLimited.zeros(); + // Only do calculation on physical cells for (iZ = nGCs; iZ < nZs - nGCs; iZ++) { - ida = 2.0 / grid.dalt_lower_scgc.slice(iZ + 1); + ida = 2.0 / grid.dk_edge_m.slice(iZ + 1); dVarUp = ida % (factor1 * (inVar.slice(iZ + 1) - inVar.slice(iZ)) - factor2 * (inVar.slice(iZ + 2) - inVar.slice(iZ - 1))); - ida = 2.0 / grid.dalt_lower_scgc.slice(iZ); + ida = 2.0 / grid.dk_edge_m.slice(iZ); dVarDown = ida % (factor1 * (inVar.slice(iZ) - inVar.slice(iZ - 1)) - factor2 * (inVar.slice(iZ + 1) - inVar.slice(iZ - 2))); @@ -53,9 +55,9 @@ void calc_facevalues_alts_rusanov(Grid &grid, // Ghostcell closest to the bottom physical cell: iZ = nGCs - 1; - ida = 1.0 / grid.dalt_lower_scgc.slice(iZ + 1); + ida = 1.0 / grid.dk_edge_m.slice(iZ + 1); dVarUp = ida % (inVar.slice(iZ + 1) - inVar.slice(iZ)); - ida = 1.0 / grid.dalt_lower_scgc.slice(iZ); + ida = 1.0 / grid.dk_edge_m.slice(iZ); dVarDown = ida % (inVar.slice(iZ) - inVar.slice(iZ - 1)); for (iX = nGCs; iX < nXs - nGCs; iX++) @@ -65,9 +67,9 @@ void calc_facevalues_alts_rusanov(Grid &grid, // Ghostcell closest to the top physical cell: iZ = nZs - nGCs; - ida = 1.0 / grid.dalt_lower_scgc.slice(iZ + 1); + ida = 1.0 / grid.dk_edge_m.slice(iZ + 1); dVarUp = ida % (inVar.slice(iZ + 1) - inVar.slice(iZ)); - ida = 1.0 / grid.dalt_lower_scgc.slice(iZ); + ida = 1.0 / grid.dk_edge_m.slice(iZ); dVarDown = ida % (inVar.slice(iZ) - inVar.slice(iZ - 1)); for (iX = nGCs; iX < nXs - nGCs; iX++) @@ -78,10 +80,10 @@ void calc_facevalues_alts_rusanov(Grid &grid, for (iZ = nGCs; iZ < nZs - nGCs + 1; iZ++) { outLeft.slice(iZ) = inVar.slice(iZ - 1) + - 0.5 * dVarLimited.slice(iZ - 1) % grid.dalt_lower_scgc.slice(iZ); + 0.5 * dVarLimited.slice(iZ - 1) % grid.dk_edge_m.slice(iZ); outRight.slice(iZ) = inVar.slice(iZ) - - 0.5 * dVarLimited.slice(iZ) % grid.dalt_lower_scgc.slice(iZ); + 0.5 * dVarLimited.slice(iZ) % grid.dk_edge_m.slice(iZ); } return; @@ -123,7 +125,7 @@ void calc_grad_and_diff_alts_rusanov(Grid &grid, outGrad.slice(iZ) = 0.5 * (varLeft.slice(iZ + 1) + varRight.slice(iZ + 1) - varLeft.slice(iZ) - varRight.slice(iZ)) / - grid.dalt_center_scgc.slice(iZ); + grid.dk_center_m_scgc.slice(iZ); for (iZ = nGCs; iZ < nZs - nGCs + 1; iZ++) { for (iX = nGCs; iX < nXs - nGCs; iX++) @@ -135,11 +137,7 @@ void calc_grad_and_diff_alts_rusanov(Grid &grid, diffFlux(iX, iY, iZ) = 0.5 * cMaxLocal * (varRight(iX, iY, iZ) - varLeft(iX, iY, iZ)); - //if (iZ <= 10 && iX == 4 && iY == 4) - // std::cout << "diff flux : " << diffFlux(iX, iY, iZ) - // << " " << cMaxLocal - // << " " << varRight(iX, iY, iZ) - // << " " << varLeft(iX, iY, iZ) << "\n"; + } } @@ -148,7 +146,7 @@ void calc_grad_and_diff_alts_rusanov(Grid &grid, for (iZ = nGCs; iZ < nZs - nGCs; iZ++) outDiff.slice(iZ) = (diffFlux.slice(iZ + 1) - diffFlux.slice(iZ)) / - grid.dalt_center_scgc.slice(iZ); + grid.dk_center_m_scgc.slice(iZ); report.exit(function); return; @@ -158,7 +156,7 @@ void calc_grad_and_diff_alts_rusanov(Grid &grid, // // -------------------------------------------------------------------------- -void Neutrals::solver_vertical_rusanov(Grid grid, +void Neutrals::solver_vertical_rusanov(Grid &grid, Times time) { std::string function = "Neutrals::solver_vertical_rusanov"; @@ -225,6 +223,7 @@ void Neutrals::solver_vertical_rusanov(Grid grid, cMax_vcgc[2], gradDummy, diffDummy); + gradLogN_s[iSpecies] = gradDummy; diffLogN_s[iSpecies] = diffDummy; @@ -251,6 +250,14 @@ void Neutrals::solver_vertical_rusanov(Grid grid, v2or = (velocity_vcgc[0] % velocity_vcgc[0] + velocity_vcgc[1] % velocity_vcgc[1]) / grid.radius_scgc; + // calculate vertical momentum due to eddy diffusion: + vertical_momentum_eddy(grid); + + bool useImplicitFriction = input.get_advection_neutrals_implicitfriction(); + + if (useImplicitFriction) + calc_neutral_friction_coefs(); + // ----------------------------------------------------------- // Now calculate new states: precision_t mass; @@ -259,6 +266,8 @@ void Neutrals::solver_vertical_rusanov(Grid grid, arma_cube gmo(nXs, nYs, nZs); gmo = gamma_scgc - one; + arma_cube accTotal(nXs, nYs, nZs); + for (iSpecies = 0; iSpecies < nSpecies; iSpecies++) { if (species[iSpecies].DoAdvect) { @@ -272,50 +281,50 @@ void Neutrals::solver_vertical_rusanov(Grid grid, + dt * diffLogN_s[iSpecies]; species[iSpecies].newDensity_scgc = exp(log_s); + accTotal = + dt * grid.gravity_vcgc[2] + - dt * temperature_scgc % gradLogN_s[iSpecies] * cKB / mass + + dt * diffVertVel_s[iSpecies] + - dt * species[iSpecies].velocity_vcgc[2] % gradVertVel_s[iSpecies] + + dt * v2or + + dt * species[iSpecies].acc_eddy + + dt * acc_coriolis[2] + + dt * grid.cent_acc_vcgc[2]; + // vertical velocities: - species[iSpecies].newVelocity_vcgc[2] = - species[iSpecies].velocity_vcgc[2] - - dt * (species[iSpecies].velocity_vcgc[2] % gradVertVel_s[iSpecies] - - v2or - + 0.1 * (temperature_scgc % gradLogN_s[iSpecies] * cKB / mass - + gradTemp * cKB / mass - + abs(grid.gravity_vcgc[2]))) - + dt * diffVertVel_s[iSpecies]; + if (useImplicitFriction) { + species[iSpecies].newVelocity_vcgc[2] = + (species[iSpecies].velocity_vcgc[2] + accTotal + + dt * species[iSpecies].acc_neutral_friction[2]) / + (1.0 + dt * species[iSpecies].neutral_friction_coef); + } else { + species[iSpecies].newVelocity_vcgc[2] = + (species[iSpecies].velocity_vcgc[2] + accTotal); + } + } else { species[iSpecies].newVelocity_vcgc[2].zeros(); species[iSpecies].newDensity_scgc = species[iSpecies].density_scgc; } } + if (!useImplicitFriction) + calc_neutral_friction_implicit(dt); + newTemperature_scgc = temperature_scgc - dt * (velocity_vcgc[2] % gradTemp + gmo % (temperature_scgc % divBulkVertVel)) + dt * diffTemp; + precision_t maxVerticalVelocity = 100.0; + for (iSpecies = 0; iSpecies < nSpecies; iSpecies++) - if (species[iSpecies].DoAdvect) { + if (species[iSpecies].DoAdvect) + species[iSpecies].newVelocity_vcgc[2].clamp(-maxVerticalVelocity, + maxVerticalVelocity); - for (iX = nGCs; iX < nXs - nGCs; iX++) - for (iY = nGCs; iY < nYs - nGCs; iY++) - for (iZ = nGCs; iZ < nZs - nGCs; iZ++) { - if (abs(species[iSpecies].newVelocity_vcgc[2](iX, iY, iZ)) > 100.0) { - if (species[iSpecies].newVelocity_vcgc[2](iX, iY, iZ) > 100.0) - species[iSpecies].newVelocity_vcgc[2](iX, iY, iZ) = 100.0; - else - species[iSpecies].newVelocity_vcgc[2](iX, iY, iZ) = -100.0; - } - - if (newTemperature_scgc(iX, iY, iZ) < 100.0 || - std::isnan(newTemperature_scgc(iX, iY, iZ))) { - std::cout << "low temp found : " - << iX << " " - << iY << " " - << iZ << " " - << newTemperature_scgc(iX, iY, iZ) << " "; - } - } - } + newTemperature_scgc.clamp(150, 1e32); for (iX = nGCs; iX < nXs - nGCs; iX++) for (iY = nGCs; iY < nYs - nGCs; iY++) @@ -336,13 +345,116 @@ void Neutrals::solver_vertical_rusanov(Grid grid, } } - // If you don't advect a species, then fill with hydrostatic: + calc_mass_density(); + // Calculate bulk vertical winds: + velocity_vcgc[2].zeros(); + for (iSpecies = 0; iSpecies < nSpecies; iSpecies++) - if (!species[iSpecies].DoAdvect) - fill_with_hydrostatic(iSpecies, nGCs, nZs, grid); + if (species[iSpecies].DoAdvect) { + velocity_vcgc[2] = velocity_vcgc[2] + + species[iSpecies].mass * species[iSpecies].density_scgc % + species[iSpecies].velocity_vcgc[2] / rho_scgc; + } - calc_mass_density(); - calc_bulk_velocity(); + report.exit(function); + return; +} + + +// -------------------------------------------------------------------------- +// +// -------------------------------------------------------------------------- + +void Ions::solver_vertical_rusanov(Grid &grid, + Times time) { + + std::string function = "Ions::solver_vertical_rusanov"; + static int iFunction = -1; + report.enter(function, iFunction); + + int64_t nXs = grid.get_nX(), iX; + int64_t nYs = grid.get_nY(), iY; + int64_t nZs = grid.get_nZ(), iZ; + int64_t nGCs = grid.get_nGCs(); + int iDir, iSpecies; + + precision_t dt = time.get_dt(); + + // ----------------------------------------------------------- + // Bulk Variables: + std::vector gradVel, diffVel; + gradVel = make_cube_vector(nXs, nYs, nZs, 3); + diffVel = make_cube_vector(nXs, nYs, nZs, 3); + + arma_cube gradDummy(nXs, nYs, nZs), diffDummy(nXs, nYs, nZs); + + // ----------------------------------------------------------- + // species dependent variables: + std::vector gradLogN_s, diffLogN_s; + std::vector gradVertVel_s, diffVertVel_s, divVertVel_s; + gradLogN_s = make_cube_vector(nXs, nYs, nZs, nSpecies); + diffLogN_s = make_cube_vector(nXs, nYs, nZs, nSpecies); + gradVertVel_s = make_cube_vector(nXs, nYs, nZs, nSpecies); + diffVertVel_s = make_cube_vector(nXs, nYs, nZs, nSpecies); + divVertVel_s = make_cube_vector(nXs, nYs, nZs, nSpecies); + + arma_cube log_s(nXs, nYs, nZs), vv_s(nXs, nYs, nZs); + + for (iSpecies = 0; iSpecies < nSpecies; iSpecies++) { + if (species[iSpecies].DoAdvect) { + + // Log(number density): + //log_s = log(species[iSpecies].density_scgc); + log_s = species[iSpecies].density_scgc; + + calc_grad_and_diff_alts_rusanov(grid, + log_s, + cMax_vcgc[2], + gradDummy, + diffDummy); + + gradLogN_s[iSpecies] = gradDummy; + diffLogN_s[iSpecies] = diffDummy; + + // Vertical Velocity for each species: + vv_s = species[iSpecies].velocity_vcgc[2]; + calc_grad_and_diff_alts_rusanov(grid, + vv_s, + cMax_vcgc[2], + gradDummy, + diffDummy); + gradVertVel_s[iSpecies] = gradDummy; + diffVertVel_s[iSpecies] = diffDummy; + divVertVel_s[iSpecies] = gradDummy + 2 * vv_s / grid.radius_scgc; + } else { + gradVertVel_s[iSpecies].zeros(); + diffVertVel_s[iSpecies].zeros(); + divVertVel_s[iSpecies].zeros(); + } + } + + for (iSpecies = 0; iSpecies < nSpecies; iSpecies++) { + if (species[iSpecies].DoAdvect) { + + // densities: + log_s = + species[iSpecies].density_scgc + //log(species[iSpecies].density_scgc) + - dt * (//divVertVel_s[iSpecies] + + species[iSpecies].velocity_vcgc[2] % gradLogN_s[iSpecies]) + + dt * diffLogN_s[iSpecies]; + //species[iSpecies].newDensity_scgc = exp(log_s); + species[iSpecies].newDensity_scgc = log_s; + + } else + species[iSpecies].newDensity_scgc = species[iSpecies].density_scgc; + } + + for (iSpecies = 0; iSpecies < nSpecies; iSpecies++) + if (species[iSpecies].DoAdvect) + species[iSpecies].density_scgc = species[iSpecies].newDensity_scgc; + + fill_electrons(); report.exit(function); return; diff --git a/src/time.cpp b/src/time.cpp index 69621999..e15d4a0d 100644 --- a/src/time.cpp +++ b/src/time.cpp @@ -58,11 +58,22 @@ bool Times::restart_file(std::string dir, bool DoRead) { iStep--; dt = 0; increment_time(); - std::cout << "Restarted time, Current time : "; - display_itime(iCurrent); + + if (report.test_verbose(0)) { + std::cout << "Restarted time, Current time : "; + display_itime(iCurrent); + } } else { - restart_time_json = { {"currenttime", current}, - {"istep", iStep} + restart_time_json = { + {"currenttime", current}, + {"istep", iStep}, + {"year", year}, + {"month", month}, + {"day", day}, + {"hour", hour}, + {"minute", minute}, + {"second", second}, + {"millisecond", milli}, }; DidWork = write_json(filename, restart_time_json); } @@ -115,7 +126,7 @@ int Times::check_time_gate(precision_t dt_check) { void Times::calc_dt(precision_t dtNeutral, precision_t dtIon) { dt = end - current; - double cfl = 0.5; + double cfl = 0.25; if (cfl * dtNeutral < dt) dt = cfl * dtNeutral; @@ -192,6 +203,14 @@ double Times::get_julian_day() { return julian_day; } +// ----------------------------------------------------------------------------- +// Get the current simulation time (in sec since start of run) +// ----------------------------------------------------------------------------- + +double Times::get_simulation_time() { + return simulation; +} + // ----------------------------------------------------------------------------- // Get the current time array // ----------------------------------------------------------------------------- diff --git a/src/tools.cpp b/src/tools.cpp index fc9e55c9..9601d868 100644 --- a/src/tools.cpp +++ b/src/tools.cpp @@ -111,6 +111,39 @@ arma_vec interpolate1d(arma_vec inY, return outY; } +// ---------------------------------------------------------------------------- +// Fix corners in an arma cube +// - basically fill in the corners with values near them +// ---------------------------------------------------------------------------- + +void fill_horizontal_ghostcels(arma_cube &values, int64_t nGCs) { + + int64_t nXs = values.n_rows, iX; + int64_t nYs = values.n_cols, iY; + int64_t nZs = values.n_slices, iZ; + int64_t iGCx, iGCy, iGCz; + + for (iGCx = 0; iGCx < nGCs; iGCx++) { + for (iY = 0; iY < nYs; iY++) { + // Bottom: + values.tube(iGCx, iY) = values.tube(nGCs, iY); + values.tube(nXs - iGCx - 1, iY) = values.tube(nXs - nGCs - 1, iY); + } + } + + for (iX = 0; iX < nXs; iX++) { + for (iGCy = 0; iGCy < nGCs; iGCy++) { + // Bottom: + values.tube(iX, iGCy) = values.tube(iX, nGCs); + values.tube(iX, nYs - iGCy - 1) = values.tube(iX, nYs - nGCs - 1); + } + } + + //fill_corners(values, nGCs); + + return; + +} // ---------------------------------------------------------------------------- // Fix corners in an arma cube @@ -121,7 +154,44 @@ void fill_corners(arma_cube &values, int64_t nGCs) { int64_t nXs = values.n_rows, iX; int64_t nYs = values.n_cols, iY; - int64_t iGCx, iGCy; + int64_t nZs = values.n_slices, iZ; + int64_t iGCx, iGCy, iGCz; + + // Bottom: + for (iGCz == 0; iGCz < nGCs; iGCz++) { + for (iGCx = 0; iGCx < nGCs; iGCx++) { + for (iY = 0; iY < nYs; iY++) { + // Bottom: + values(iGCx, iY, iGCz) = + values(nGCs, iY, nGCs); + values(nXs - iGCx - 1, iY, iGCz) = + values(nXs - nGCs - 1, iY, nGCs); + // top: + values(iGCx, iY, nZs - iGCz - 1) = + values(nGCs, iY, nZs - nGCs - 1); + values(nXs - iGCx - 1, iY, nZs - iGCz - 1) = + values(nXs - nGCs - 1, iY, nZs - nGCs - 1); + } + } + } + + for (iGCz = 0; iGCz < nGCs; iGCz++) { + for (iGCy = 0; iGCy < nGCs; iGCy++) { + for (iX = 0; iX < nXs; iX++) { + // Bottoms: + values(iX, iGCy, iGCz) = + values(iX, nGCs, nGCs); + values(iX, nYs - iGCy - 1, iGCz) = + values(iX, nYs - nGCs - 1, nGCs); + // tops: + values(iX, iGCy, nZs - iGCz - 1) = + values(iX, nGCs, nZs - nGCs - 1); + values(iX, nYs - iGCy - 1, nZs - iGCz - 1) = + values(iX, nYs - nGCs - 1, nZs - nGCs - 1); + + } + } + } for (iGCx = 0; iGCx < nGCs; iGCx++) { for (iGCy = 0; iGCy < nGCs; iGCy++) { @@ -159,6 +229,62 @@ void display_vector(arma_vec vec) { std::cout << "\n"; } +// ---------------------------------------------------------------------------- +// Neatly display an armadillo matrix with a name +// ---------------------------------------------------------------------------- + +void display_cube(std::string name, arma_cube values) { + std::cout << name << " "; + + for (int64_t i = 0; i < values.n_slices; i++) { + std::cout << "Slice : " << i << ":\n"; + display_matrix(" ", values.slice(i)); + } + +} + +// ---------------------------------------------------------------------------- +// Neatly display an armadillo matrix with a name +// ---------------------------------------------------------------------------- + +void display_matrix(std::string name, arma_mat mat) { + std::cout << name << "\n"; + + for (int64_t i = 0; i < mat.n_cols; i++) + display_vector(" ", mat.col(i)); + + std::cout << "\n"; +} + + + +// ---------------------------------------------------------------------------- +// Neatly display an armadillo vector with a name +// ---------------------------------------------------------------------------- + +void display_vector(std::string name, arma_vec vec) { + std::cout << name << " "; + + for (int64_t i = 0; i < vec.n_rows; i++) + std::cout << vec(i) << " "; + + std::cout << "\n"; +} + +// ---------------------------------------------------------------------------- +// Neatly display a c++ vector with a name +// ---------------------------------------------------------------------------- + +void display_vector(std::string name, std::vector vec) { + std::cout << name << " "; + + for (int64_t i = 0; i < vec.size(); i++) + std::cout << vec[i] << " "; + + std::cout << "\n"; +} + + // ---------------------------------------------------------------------------- // synchronize a (boolean) variable across all processors // ---------------------------------------------------------------------------- @@ -211,6 +337,23 @@ precision_t sync_mean_across_all_procs(precision_t value) { return global_value; } +// ---------------------------------------------------------------------------- +// Calculate the average value across all processors +// - this is the same as sync_mean_across_all_procs, but is limited to +// processors in a given member +// ---------------------------------------------------------------------------- + +precision_t sync_mean_across_member(precision_t value) { + precision_t global_value; + double vSend, vReceive; + double nSend, nReceive; + vSend = value; + nSend = 1.0; + MPI_Allreduce(&vSend, &vReceive, 1, MPI_DOUBLE, MPI_SUM, aether_member_comm); + MPI_Allreduce(&nSend, &nReceive, 1, MPI_DOUBLE, MPI_SUM, aether_member_comm); + global_value = vReceive / nReceive; + return global_value; +} // ---------------------------------------------------------------------------- // Generate a vector of normally distributed random doubles // ---------------------------------------------------------------------------- @@ -602,13 +745,11 @@ void refvect2sph(arma_mat &u1, arma_mat &u2, arma_mat &u, arma_mat &v, //---------------------------------------------------------------------- std::vector index_to_ijk(arma_cube cube, int index) { - arma::uword x = cube.n_rows; - arma::uword y = cube.n_cols; - int altitude = index / (x * y); - int remainder = index % (x * y); - int lattitude = remainder / y; - int longitude = remainder % y; - return std::vector {lattitude, longitude, altitude}; + uvec u = ind2sub(size(cube), index); + int iLon = u(0); + int iLat = u(1); + int iAlt = u(2); + return std::vector {iLon, iLat, iAlt}; } //---------------------------------------------------------------------- @@ -629,6 +770,8 @@ bool all_finite(arma_cube cube, std::string name) { "," + std::to_string(loc[1]) + "," + std::to_string(loc[2]) + ")"; int size = locations.size(); + std::cout << "all_finite (" << name << "): " << cube(loc[0], loc[1], + loc[2]) << "\n"; std::string error_message = std::to_string(size) + " Nonfinite values exist in " + name + @@ -813,3 +956,125 @@ arma_vec sphere_to_cube(precision_t lon_in, precision_t lat_in) { return ans; } + +//////////////////////////////////////////// +// convert cell coordinates to geographic // +//////////////////////////////////////////// +std::vector mag_to_geo(arma_cube magLon, arma_cube magLat, + arma_cube magAlt, + Planets planet) { + std::string function = "Grid::mag_to_geo"; + static int iFunction = -1; + report.enter(function, iFunction); + + std::vector llr, xyz_mag, xyz_geo, xyzRot1, xyzRot2; + llr.push_back(magLon); + llr.push_back(magLat); + llr.push_back(magAlt); + xyz_mag = transform_llr_to_xyz_3d(llr); + + precision_t magnetic_pole_rotation = planet.get_dipole_rotation(); + precision_t magnetic_pole_tilt = planet.get_dipole_tilt(); + std::vector dipole_center = planet.get_dipole_center(); + + // Reverse our dipole rotations: + xyzRot1 = rotate_around_y_3d(xyz_mag, magnetic_pole_tilt); + xyzRot2 = rotate_around_z_3d(xyzRot1, magnetic_pole_rotation); + + // offset dipole (not fully suported yet, so will be zero) + if ((dipole_center[0] != 0.0) || (dipole_center[1] != 0.0) || + (dipole_center[2] != 0.0)) { + + dipole_center = {0.0, 0.0, 0.0}; + } + + xyz_geo.push_back(xyzRot2[0] + dipole_center[0]); + xyz_geo.push_back(xyzRot2[1] + dipole_center[1]); + xyz_geo.push_back(xyzRot2[2] + dipole_center[2]); + + // transform back to lon, lat, radius: + llr = transform_xyz_to_llr_3d(xyzRot2); + + report.exit(function); + return llr; +} + +//////////////////////////////////////////// +// convert cell coordinates to magnetic // +//////////////////////////////////////////// + +std::vector geo_to_mag(arma_cube glon, + arma_cube glat, + arma_cube radius, + Planets &planet) { + + std::string function = "Grid::geo_to_gmag"; + static int iFunction = -1; + report.enter(function, iFunction); + + std::vector llr, xyz_mag, xyz_geo, xyzRot1, xyzRot2; + llr.push_back(glon); + llr.push_back(glat); + llr.push_back(radius); + xyz_mag = transform_llr_to_xyz_3d(llr); + + precision_t magnetic_pole_rotation = planet.get_dipole_rotation(); + precision_t magnetic_pole_tilt = planet.get_dipole_tilt(); + std::vector dipole_center = planet.get_dipole_center(); + + // Reverse our dipole rotations: + xyzRot1 = rotate_around_z_3d(xyz_mag, -magnetic_pole_tilt); + xyzRot2 = rotate_around_y_3d(xyzRot1, -magnetic_pole_rotation); + + // offset dipole (not fully suported yet, so will be zero) + if ((dipole_center[0] != 0.0) || (dipole_center[1] != 0.0) || + (dipole_center[2] != 0.0)) { + + dipole_center = {0.0, 0.0, 0.0}; + } + + xyz_geo.push_back(xyzRot2[0] - dipole_center[0]); + xyz_geo.push_back(xyzRot2[1] - dipole_center[1]); + xyz_geo.push_back(xyzRot2[2] - dipole_center[2]); + + // transform back to lon, lat, radius: + llr = transform_xyz_to_llr_3d(xyzRot2); + + report.exit(function); + return llr; +} + + +std::vector mag_to_ijk(precision_t mlon, + precision_t mLat, + precision_t radius, + precision_t planet_radius) { + + precision_t i_lon, j_p, k_q; + + // precision_t planet_radius = planet.get_radius(); + + i_lon = mlon; + j_p = radius / planet_radius / pow(cos(mLat), 2); + k_q = sin(mLat) / pow(radius / planet_radius, 2.); + + return {i_lon, j_p, k_q}; +} + +// ----------------------------------------------------------------------- +// Transform a flat vector into a 1D cube (avoids having to overload everything) +// - this is overloaded for one vec/cube +// ----------------------------------------------------------------------- + +arma_cube vec2cube(std::vector ivec) { + arma_cube outvec; + int sizei = ivec.size(); + arma_cube I; + + I.set_size(sizei, 1, 1); + + for (int i = 0; i < sizei; i++) + I[i] = ivec[i]; + + return I; +} \ No newline at end of file diff --git a/src/transform.cpp b/src/transform.cpp index b18a6fab..524fe9da 100644 --- a/src/transform.cpp +++ b/src/transform.cpp @@ -26,10 +26,10 @@ std::string mklower(std::string inString) { // - then in fortran, we convert back // ----------------------------------------------------------------------- -int* copy_string_to_int(std::string inString) { +int *copy_string_to_int(std::string inString) { const int length = inString.length(); // declaring character array - int* outArray = new int[400]; + int *outArray = new int[400]; for (int i = 0; i < length; i++) outArray[i] = inString[i]; @@ -40,14 +40,13 @@ int* copy_string_to_int(std::string inString) { return outArray; } - // ----------------------------------------------------------------------- // copy from c++ vector to c-native array // ----------------------------------------------------------------------- -void copy_vector_to_array(std::vector vector_in, +void copy_vector_to_array(std::vector vector_in, int64_t nElements, - float *array_out) { + precision_t *array_out) { for (int64_t i = 0; i < nElements; i++) array_out[i] = vector_in[i]; @@ -58,7 +57,7 @@ void copy_vector_to_array(std::vector vector_in, // ----------------------------------------------------------------------- void copy_cube_to_array(arma_cube cube_in, - float *array_out) { + precision_t *array_out) { int64_t nX = cube_in.n_rows; int64_t nY = cube_in.n_cols; @@ -80,7 +79,7 @@ void copy_cube_to_array(arma_cube cube_in, // ----------------------------------------------------------------------- void copy_mat_to_array(arma_mat mat_in, - float *array_out, + precision_t *array_out, bool isFortran) { int64_t nX = mat_in.n_rows; @@ -109,7 +108,7 @@ void copy_mat_to_array(arma_mat mat_in, // If isFortran is set, the columns / rows are flipped // ----------------------------------------------------------------------- -void copy_array_to_mat(float *array_in, +void copy_array_to_mat(precision_t *array_in, arma_mat &mat_out, bool isFortran) { @@ -131,6 +130,38 @@ void copy_array_to_mat(float *array_in, return; } +// ----------------------------------------------------------------------- +// Calculate the magnitude of a arma_cube vector +// ----------------------------------------------------------------------- +arma_cube calc_magnitude(std::vector xyz) { + arma_cube r = sqrt(xyz[0] % xyz[0] + + xyz[1] % xyz[1] + + xyz[2] % xyz[2]); + return r; +} + +// ----------------------------------------------------------------------- +// Transform X, Y, Z to +// Longitude (llr[0]), Latitude (llr[1]), Radius (llr[2]) +// Use armidillo cubes +// ----------------------------------------------------------------------- + +std::vector transform_xyz_to_llr_3d(std::vector xyz) { + std::vector llr; + arma_cube xy, r, lon, rat; + r = calc_magnitude(xyz); + xy = sqrt(xyz[0] % xyz[0] + + xyz[1] % xyz[1]); + rat = xyz[0] / xy; + rat.clamp(-0.99999, 0.99999); + lon = acos(rat); + uvec ind_ = find(xyz[1] < 0.0); + lon.elem(ind_) = 2 * cPI - lon.elem(ind_); + llr.push_back(lon); + llr.push_back(asin(xyz[2] / r)); + llr.push_back(r); + return llr; +} // ----------------------------------------------------------------------- // Transform Longitude (llr[0]), Latitude (llr[1]), Radius (llr[2]) to @@ -175,7 +206,7 @@ std::vector rotate_around_z_3d(std::vector XYZ_in, precision_t ca = cos(angle); precision_t sa = sin(angle); - XYZ_out.push_back( X * ca + Y * sa); + XYZ_out.push_back(X * ca + Y * sa); XYZ_out.push_back(-X * sa + Y * ca); XYZ_out.push_back(Z); @@ -222,7 +253,7 @@ std::vector rotate_around_x_3d(std::vector XYZ_in, precision_t sa = sin(angle); XYZ_out.push_back(X); - XYZ_out.push_back( Y * ca + Z * sa); + XYZ_out.push_back(Y * ca + Z * sa); XYZ_out.push_back(-Y * sa + Z * ca); return XYZ_out; @@ -237,9 +268,9 @@ void transform_rot_z(precision_t xyz_in[3], precision_t angle_in, precision_t xyz_out[3]) { precision_t ca = cos(angle_in); precision_t sa = sin(angle_in); - xyz_out[0] = xyz_in[0] * ca + xyz_in[1] * sa; + xyz_out[0] = xyz_in[0] * ca + xyz_in[1] * sa; xyz_out[1] = -xyz_in[0] * sa + xyz_in[1] * ca; - xyz_out[2] = xyz_in[2]; + xyz_out[2] = xyz_in[2]; } // ----------------------------------------------------------------------- @@ -257,10 +288,10 @@ void transform_rot_y(precision_t xyz_in[3], precision_t angle_in, } // ----------------------------------------------------------------------- -// Simply move data from a vector to a C-native array (float) +// Simply move data from a vector to a C-native array (precision_t) // ----------------------------------------------------------------------- -void transform_float_vector_to_array(std::vector input, +void transform_float_vector_to_array(std::vector input, precision_t output[3]) { for (int i = 0; i < 3; i++) output[i] = input[i]; @@ -275,12 +306,12 @@ void transform_vector_xyz_to_env(precision_t xyz_in[3], precision_t lat, precision_t env_out[3]) { - env_out[2] = xyz_in[0] * cos(lat) * cos(lon) + - xyz_in[1] * cos(lat) * sin(lon) + xyz_in[2] * sin(lat); + env_out[2] = xyz_in[0] * cos(lat) * cos(lon) + + xyz_in[1] * cos(lat) * sin(lon) + xyz_in[2] * sin(lat); env_out[1] = -(xyz_in[0] * sin(lat) * cos(lon) + xyz_in[1] * sin(lat) * sin(lon) - xyz_in[2] * cos(lat)); - env_out[0] = - xyz_in[0] * sin(lon) + + env_out[0] = -xyz_in[0] * sin(lon) + xyz_in[1] * cos(lon); } @@ -303,3 +334,14 @@ void vector_diff(precision_t vect_in_1[3], for (int i = 0; i < 3; i++) vect_out[i] = vect_in_1[i] - vect_in_2[i]; } + +// ----------------------------------------------------------------------- +// Simple 3-element vector addition +// ----------------------------------------------------------------------- + +void vector_add(precision_t vect_in_1[3], + precision_t vect_in_2[3], + precision_t vect_out[3]) { + for (int i = 0; i < 3; i++) + vect_out[i] = vect_in_1[i] + vect_in_2[i]; +} diff --git a/srcPython/fism.py b/srcPython/fism.py new file mode 100644 index 00000000..857845be --- /dev/null +++ b/srcPython/fism.py @@ -0,0 +1,437 @@ +#!/usr/bin/env python + +# Authors of this code: +# Daniel A. Brandt, Ph.D., Michigan Tech Research Institute, daabrand@mtu.edu +# Aaron L. Bukowski, Ph.D., University of Michigan, abukowski@umich.edu +# Aaron J. Ridley, Ph.D., University of Michigan, ridley@umich.edu + +# This file contains a suite of tools that do the following: +# 1. Download FISM2 data for a time period the user desires. +# 2. Rebin that data into the binning scheme the user desires (i.e. EUVAC-37, NEUVAC-59, or SOLOMON). +# 3. Outputs a FISM2 file with the rebinnined irradiances in the desired bins (for use by euv.cpp) + +# Top-level imports: +import argparse +import numpy as np +from datetime import datetime, timedelta +import pathlib +import os, sys +import pooch +from netCDF4 import Dataset +import scipy.integrate as integ + +# Directory management: +here = pathlib.Path(__file__).parent.resolve() +euvDir = here.parent.joinpath('share/run/UA/inputs') + +# Physical constants: +h = 6.62607015e-34 # Planck's constant in SI units of J s +c = 299792458 # Speed of light in m s^-1 + +# Helper Functions: +def getFism2(dateStart, dateEnd, source, downloadDir=None): + """ + Given a starting date and an ending date, automatically download irradiance data from LISIRD for a specific source, + including FISM2 daily or FISM2 in the Standard Bands. + :param dateStart: str + The starting date for the data in YYYY-MM-DD format. + :param dateEnd: str + The ending date for the data in YYYY-MM-DD format. + :param source: str + The type of data to be obtained. Valid inputs are: + - FISM2 (for daily averages of FISM2 data) + - FISM2S (for daily averages of FISM2 standard bands, according to Solomon and Qian 2005) + :return times: ndarray + Datetime values for each spectrum. + :return wavelengths: ndarray + Wavelength bins (bin boundaries) for the spectral data. + :return irradiance: ndarray + A 2D array where each row is a spectrum at a particular time, and the columns are wavelength bands. + """ + # Converting the input time strings to datetimes: + try: + dateStartDatetime = datetime.strptime(dateStart, "%Y-%m-%d") + dateEndDatetime = datetime.strptime(dateEnd, "%Y-%m-%d") + except: + dateStartDatetime = datetime.strptime(dateStart, "%Y%m%d") + dateEndDatetime = datetime.strptime(dateEnd, "%Y%m%d") + + # Check if the user has asked for a source that can be obtained: + validSources = ['FISM2', 'FISM2S'] + if source not in validSources: + raise ValueError("Variable 'source' must be either 'FISM2' or 'FISM2S.") + + # If the download directory is not specified, set it to the top directory that the package is in: + if downloadDir is None: + downloadDir = os.getcwd() + + # Download the most recent file for the corresponding source and read it in: + if source == 'FISM2': + url = 'https://lasp.colorado.edu/eve/data_access/eve_data/fism/daily_hr_data/daily_data.nc' + fname = 'FISM2_daily_data.nc' + urlObtain(url, loc=downloadDir, fname=fname) # hash='dbee404e1c75689b47691b8a4a733236bb66abbdc0f01b8cbd8236f69fe9d469' + datetimes, wavelengths, irradiance, uncertainties = obtainFism2(os.path.join(downloadDir, fname)) + else: + url = 'https://lasp.colorado.edu/eve/data_access/eve_data/fism/daily_bands/daily_bands.nc' + fname = 'FISM2_daily_bands.nc' + urlObtain(url, loc=downloadDir, fname=fname) # hash='27e3183f8ad6b289de191a63d3feada64c9d3f6b2973315ceda4a42c41638465' + datetimes, wavelengths, irradiance, uncertainties = obtainFism2(os.path.join(downloadDir, fname), bands=True) + + # Subset the data according to user demands: + validInds = np.where((datetimes >= dateStartDatetime) & (datetimes <= dateEndDatetime))[0] + times = datetimes[validInds] + if source == 'FISM2S': + irradiance = irradiance[-1, validInds, :] + else: + irradiance = irradiance[validInds, :] + + # Return the resulting data: + return times, wavelengths, irradiance + +def obtainFism2(myFism2File, bands=False): + """ + Load in spectrum data from a FISM2 file. + :param myFism2File: str + The location of the NETCDF4 file. + :param bands: bool + If True, loads in the data segmented into the Solomon and Qian 2005 standard bands. + :return datetimes: ndarray + An array of datetimes for each TIMED/SEE spectra. + :return wavelengths: ndarray + A one-dimensional array of wavelengths at which there are irradiance values. + :return irradiances: ndarray + A two-dimensional array of irradiance values at each time. + :return uncertainties: ndarray + A two-dimensional array of irradiance uncertainty values at each time. + """ + fism2Data = Dataset(myFism2File) + wavelengths = np.asarray(fism2Data.variables["wavelength"]) + if bands == True: # STANDARD BANDS + flux = np.asarray(fism2Data.variables["ssi"]) # photons/cm2/second + # bandwidths = np.asarray(fism2Data.variables['band_width']) + pFlux = flux * 1.0e4 # photons/m2/second + # Convert fluxes to irradiances: + irr = np.zeros_like(flux) + for i in range(flux.shape[1]): + irr[:, i] = spectralIrradiance(pFlux[:, i], wavelengths[i] * 10.0) # W/m^2 + irradiance = np.array([flux, irr]) + uncertainties = np.full_like(irradiance, fill_value=np.nan) # TODO: Replace with an estimation of uncertainty + else: # NATIVE DATA + irradiance = np.asarray(fism2Data.variables["irradiance"]) # W/m^2/nm + uncertainties = np.asarray(fism2Data.variables["uncertainty"]) + dates = fism2Data.variables["date"] + datetimes = [] + for i in range(len(dates)): + year = dates[i][:4] + day = dates[i][4:] + currentDatetime = ( + datetime(int(year), 1, 1) + + timedelta(int(day) - 1) + + timedelta(hours=12) + ) + datetimes.append(currentDatetime) + datetimes = np.asarray(datetimes) + return datetimes, wavelengths, irradiance, uncertainties + +def rebin(fism_out, saveLoc=os.getcwd(), binning_scheme='EUVAC', zero=True): + """ + Takes the output of getFism and rebins the data into whatever format the user desires. + Args: + fism_out: arraylike + The output of getFism2. Contains 4 elements: (1) datetime values for the FISM2 spectra, (2) the wavelengths + of the spectrum, (3) the actual FISM2 irradiance spectra. + saveLoc: path + Path to save data files to. Defaults to the current working directory. + binning_scheme: str + Determines the binning scheme to be used. Valid arguments include the following: + 'EUVAC' or 'Euvac' or 'euvac': Uses the 37 wavelength band scheme described in Richards, et al. 1994; doi.org/10.1029/94JA00518 + 'NEUVAC' or 'Neuvac' or 'neuvac': Uses the 59 wavelength band scheme described in Brandt and Ridley, 2024; doi.org/10.1029/2024SW004043 + 'HFG': Uses the 23 wavelength band scheme described in Solomon and Qian, 2005; https://doi.org/10.1029/2005JA011160 + 'SOLOMON' or 'Solomon' or 'solomon': Same situation as for argument 'HFG'. + NOTE: If 'HFG' or 'SOLOMON' is chosen, the values of fism_out must correspond to getFism2 being run with the + argument source='FISM2'. If this IS NOT the case, an error will be thrown. + zero: bool + Controls whether singular (bright) wavelength lines are set to a value of zero after they are extracted. + Default is True. + Returns: + fism2_file: str + The location of the rebinned FISM data. + fism2_data: arraylike + Contains 3 elements: (a) a list of datetimes for the data and (b) the rebinned FISM2 data. + """ + # Unpack the contents of fism_out: + datetimes, wavelengths, irradiance = fism_out + + # Get the native wavelength resolution of the input data: + # nativeResolution = np.concatenate((np.diff(wavelengths), np.array([np.diff(wavelengths)[-1]])), axis=0) + nativeWavelengths = wavelengths.copy() + + if binning_scheme != 'HFG' and binning_scheme != 'SOLOMON' and binning_scheme != 'Solomon' and binning_scheme != 'solomon': + if binning_scheme == 'EUVAC' or binning_scheme == 'Euvac' or binning_scheme == 'euvac': + # Grab the euv_37.csv file: + fileStr = str(euvDir.joinpath('euv.csv')) + bin_bounds = read_euv_csv_file(fileStr) + tag = '_37' + elif binning_scheme == 'NEUVAC' or binning_scheme == 'Neuvac' or binning_scheme == 'neuvac': + # Grab the euv_59.csv file: + fileStr = str(euvDir.joinpath('euv_59.csv')) + bin_bounds = read_euv_csv_file(fileStr) + tag = '_59' + else: + raise FileNotFoundError('The .csv files for specifying bin boundaries cannot be found!!') + + # Perform the rebinning! + shorts = bin_bounds['short'] / 10. + longs = bin_bounds['long'] / 10. + newWaves = 0.5 * (shorts + longs) + + # Instantiate the new data array: + if len(irradiance.shape) < 2: + fism2_data = np.zeros((1, newWaves.shape[0])) + else: + fism2_data = np.zeros((irradiance.shape[0], newWaves.shape[0])) + + # First go through all the wavelengths that are singular + myData = irradiance + for iWave, short in enumerate(shorts): + long = longs[iWave] + if (long == short): + i = np.argmin(np.abs(wavelengths - short)) + i2 = np.argmin(np.abs(nativeWavelengths - short)) + try: + fism2_data[:, iWave] = myData[:, i] * (nativeWavelengths[i2 + 1] - nativeWavelengths[i2]) + except: + fism2_data[:, iWave] = myData[i] * (nativeWavelengths[i2 + 1] - nativeWavelengths[i2]) + if zero == True: + # Zero out bin so we don't double count it. + try: + myData[:, i] = np.zeros_like(myData[:, i]) + except: + myData[i] = 0.0 + + # Then go through the ranges + for iWave, short in enumerate(shorts): + long = longs[iWave] + if (long != short): + d1 = np.abs(wavelengths - short) + iStart = np.argmin(d1) + d2 = np.abs(wavelengths - long) + iEnd = np.argmin(d2) + wave_int = 0.0 + # For wavelengths at or below 0.2 nm, just compute the sum: + if long <= 0.2: + for i in range(iStart + 1, iEnd + 1): + fism2_data[:, iWave] += myData[:, i] * \ + (wavelengths[i + 1] - wavelengths[i]) + wave_int += (wavelengths[i + 1] - wavelengths[i]) + else: + # For issues computing the sum, integrate instead: + try: + fism2_data[:, iWave] = integ.trapezoid(myData[:, iStart:iEnd], wavelengths[iStart:iEnd], axis=1) + except: + fism2_data[:, iWave] = integ.trapezoid(myData[iStart:iEnd], wavelengths[iStart:iEnd]) + + elif binning_scheme == 'HFG' or binning_scheme == 'SOLOMON' or binning_scheme == 'Solomon' or binning_scheme == 'solomon': + # Determine whether the supplied data already conforms to the Solomon and Qian binning scheme. + tag = '_solomon' + if fism_out[2].shape[1] != 23: + raise ValueError("Incorrect dimensions for element 3 of argument 'fism_out'. Dimensions must be (n,23), " + "resulting from running function 'getFism' with argument 'stanBands'=True. ") + # Should the data confirm to the proper dimensions, there is no rebinning step that needs to be done. Simply + # continue. + fism2_data = fism_out[2] + else: + # If the input irradiance data DOES NOT conform to the Solomon and Qian binning scheme, throw an error. + raise ValueError("Invalid value for argument 'binning_scheme'. Must be 'EUVAC', 'NEUVAC', 'HFG', or 'SOLOMON'.") + + # Save the rebinned data to a relative path (outside the package directory) in the form of a .txt file: + fism2_file = pathlib.Path(os.getcwd()).joinpath('fism2_file'+tag+'.txt') + saveFism(fism2_data, datetimes, fism2_file) + + return fism2_file, fism2_data + +def saveFism(data, times, filename): + """ + Takes (rebinned) FISM2 data and saves it a .txt file at a user-defined location. + Args: + data: numpy.ndarray + Irradiance data in a nxm array where the first dimension corresponds to observations (the spectrum number) + and the second dimension corresponds to wavelengths. + times: numpy.ndarray + The time values at which each spectrum is recorded. + filename: str + The desired location where the data will be saved. + Returns: + Nothing. Simply saves a file. + """ + # A helper function for working with integers: + def numStr(num): + return ',' + str(int(num)) + + # Define a helper function for opening a file to write the data, in such a way as to include parent directories if + # needed: + def safe_open_w(path): + ''' Open "path" for writing, creating any parent directories as needed. + (https://stackoverflow.com/questions/23793987/write-a-file-to-a-directory-that-doesnt-exist) + ''' + os.makedirs(os.path.dirname(path), exist_ok=True) + return open(path, 'w') + + # Open the new file and begin writing, line by line: + with safe_open_w(str(filename)) as output: + # Write the header information: + # output.write("#START\n") + # Write the irradiances themselves: + firstLine = ['%.6g' % (element) for element in data[0, :]] + firstLine_joined = ','.join(firstLine) + # The first line should always be a duplicate of the first line of data, but starting at UTC=00:00 of the first date: + output.write(str(times[0].year) + numStr(times[0].month) + numStr( + times[0].day) + ',0,0,0,' + firstLine_joined + '\n') + # The rest of the lines can be straight from the data: + for i in range(data.shape[0]): + currentLine_joined = ','.join(['%.6g' % (element) for element in data[i, :]]) + output.writelines(str(times[i].year) + numStr(times[i].month) + numStr( + times[i].day) + numStr(times[i].hour) + ',0,0,' + currentLine_joined + '\n') + # The last line should occur 12 hours from the last datapoint, but have duplicate values there: + lastLine_joined = ','.join(['%.6g' % (element) for element in data[-1, :]]) + lastTime = times[-1] + timedelta(hours=12) + output.write(str(lastTime.year) + numStr(lastTime.month) + numStr( + lastTime.day) + ',0,0,0,' + lastLine_joined + '\n') + + print('Irradiance data saved to: ') + os.system('readlink -f '+str(filename)) + return + +def spectralIrradiance(photonFlux, wavelength): + """ + Convert the photon flux to the corresponding spectral irradiance, given a specific wavelength. + Args: + photonFlux: numpy.ndarray, float, or int + Photon flux in units of photons s^-1 m^-2. For a singular wavelength, units are in photons m^-2. + wavelength: wavelength: float + A specific wavelength in Angstroms. + Returns: + irradiance: numpy.ndarray or float + The corresponding spectral irradiance in units of W/m^2/nm. + """ + photonEnergy = (h*c) / (wavelength*1e-10) # Convert the wavelength in the denominator to meters. + irradiance= photonFlux * photonEnergy + return irradiance + +def read_euv_csv_file(file): + """ + Originally written by Aaron J. Ridley, within the file 'fism2_process.py': + https://github.com/aaronjridley/EUV/blob/main/fism2_process.py + + This file reads in binning data from a CSV file that specifies bin boundaries and cross sections for either the + EUVAC model or the NEUVAC model. + Args: + file: str + The location of the .csv file to be read. + Returns: + wavelengths: numpy.ndarray + The wavelength bin boundaries for either the EUVAC model or the NEUVAC model. + """ + fpin = open(file, 'r') + + iFound = 0 + afac = [] + f74113 = [] + for line in fpin: + aline = line.split(',') + s = aline[-1].strip().split('.')[0] + if (aline[0].strip() == "Short"): + if (s.isnumeric()): + short = np.asarray(aline[5:], dtype=float) + else: + short = np.asarray(aline[5:-1], dtype=float) + iFound += 1 + if (aline[0].strip() == "Long"): + if (s.isnumeric()): + long = np.asarray(aline[5:], dtype=float) + else: + long = np.asarray(aline[5:-1], dtype=float) + if (aline[0].strip() == "F74113"): + if (s.isnumeric()): + f74113 = np.asarray(aline[5:], dtype=float) + else: + f74113 = np.asarray(aline[5:-1], dtype=float) + iFound += 1 + if (aline[0].strip() == "AFAC"): + if (s.isnumeric()): + afac = np.asarray(aline[5:], dtype=float) + else: + afac = np.asarray(aline[5:-1], dtype=float) + iFound += 1 + # Save and convert from Angstroms to nm (FISM is in nm) + wavelengths = {'short': short / 10.0, + 'long': long / 10.0, + 'afac': afac, + 'f74113': f74113} + return wavelengths + +def urlObtain(URL, loc=None, fname=None, hash=None): + """ + Helper function that uses Pooch to download files to a location specified by the user. + :param URL: str + The location of a file to be downloaded. + :param loc: str + The place the file will be downloaded. + :param fname: str + The name the file will have once it is downloaded. + :param hash: str + A known hash (checksum) of the file. Will be used to verify the download or check if an existing file needs to + be updated. + :return: + """ + if loc is None: + loc = os.getcwd() + if os.path.isfile(str(loc) + '/' + fname) is False: + fname_loc = pooch.retrieve(url=URL, known_hash=hash, fname=fname, path=loc) + else: + fname_loc = str(loc) + '/' + fname + + return fname_loc + +def get_args(): + + parser = argparse.ArgumentParser(description = 'Create FISM input data') + parser.add_argument('start', + help='Start date (format YYYYMMDD)', + type=str) + parser.add_argument('end', + help='End date (format YYYYMMDD)', + type=str) + parser.add_argument('-b', '--binning', + help="Binning scheme to use. Can be [solomon,neuvac,euvac] " + "(case insensitive)", + type=str, default="neuvac") + + args = parser.parse_args() + + return args + +# Execution (testing): +if __name__ == '__main__': + # Download some FISM2 data for the time period stated by the user. + + args = get_args() + dateStart = args.start + dateEnd = args.end + binning_scheme = args.binning + + if binning_scheme == 'HFG' or binning_scheme == 'SOLOMON' or binning_scheme == 'Solomon' or binning_scheme == 'solomon': + # SOLOMON (STAN BANDS; b23) + fism2_out_23 = getFism2(dateStart, dateEnd, 'FISM2S', downloadDir=here) + fism2_file_23, fism2_data_23 = rebin(fism2_out_23, binning_scheme=binning_scheme) + else: + fism2_out_raw = getFism2(dateStart, dateEnd, 'FISM2', downloadDir=here) + if binning_scheme == 'NEUVAC' or binning_scheme == 'Neuvac' or binning_scheme == 'neuvac': + # NEUVAC BINS (b59) + fism2_file_59, fism2_data_59 = rebin(fism2_out_raw, binning_scheme=binning_scheme, zero=True) + else: + # EUVAC BINS (b37) + fism2_file_37, fism2_data_37 = rebin(fism2_out_raw, binning_scheme=binning_scheme, zero=True) + + # Exit with a zero error code: + sys.exit(0) diff --git a/srcPython/format_json.py b/srcPython/format_json.py new file mode 100755 index 00000000..2b4b6960 --- /dev/null +++ b/srcPython/format_json.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python3 + +import os +import argparse +import json + +# ---------------------------------------------------------------------------- +# Get arguments as inputs into the code +#----------------------------------------------------------------------------- + +def get_args(): + + parser = argparse.ArgumentParser( + description = 'reformat json files') + + # Get the files to plot: + parser.add_argument('filelist', nargs='+', \ + help = 'list of files for formatting') + + args = parser.parse_args() + + return args + +# ---------------------------------------------------------------------- +# do system command +# ---------------------------------------------------------------------- + +def run_command(command, verbose = False): + if (verbose): + print(" -> Running Command : ") + print(" ", command) + os.system(command) + return True + +# Needed to run main script as the default executable from the command line +if __name__ == '__main__': + + # Get the input arguments + args = get_args() + filelist = args.filelist + + for file in filelist: + + fileSave = file + '.orig' + command = 'mv ' + file + ' ' + fileSave + run_command(command, verbose = True) + + with open(fileSave, 'r') as handle: + print('-> Reading : ', fileSave) + parsed = json.load(handle) + + fpOut = open(file, 'w') + print('-> Writing : ', file) + json.dump(parsed, fpOut, indent=4) + fpOut.close() + diff --git a/srcPython/neuvac.py b/srcPython/neuvac.py new file mode 100644 index 00000000..9134e899 --- /dev/null +++ b/srcPython/neuvac.py @@ -0,0 +1,478 @@ +#!/usr/bin/env python + +# Authors of this code: +# Daniel A. Brandt, Ph.D., Michigan Tech Research Institute, daabrand@mtu.edu + +# This file contains a suite of tools that do the following: +# 1 - Obtain F10.7 data between any dates of the user's choosing. +# 2 - Generate NEUVAC irradiances between any two dates of the user's choosing. +# 3 - Output the NEUVAC irradiances to a .csv file to be used by Aether, either in the b37 or b59 bins. + +# Top-level imports: +import argparse +import numpy as np +from datetime import datetime +import pathlib +from pathlib import Path +import pandas as pd +from scipy.interpolate import CubicSpline +import urllib.request, pickle +from fism import saveFism +import os, sys +import pooch + +# Directory management: +here = pathlib.Path(__file__).parent.resolve() +euvDir = here.parent.joinpath('share/run/UA/inputs') + +# Physical constants: +h = 6.62607015e-34 # Planck's constant in SI units of J s +c = 299792458 # Speed of light in m s^-1 + +# Global variable(s): +# Waves Table (coefficients for the old NEUVAC Model): +# Format: 0-Min, 1-Max, 2-S_1i, 3-S_Ai, 4-S_Di, 5-I_i, 6-Pi, 7-Ai +waveTable = np.array([ + [1700.00, 1750.00, 1.31491e-06, 6.71054e-06, 5.78034e-07, 0.00355128, 1.05517, 0.901612], + [1650.00, 1700.00, 5.19285e-07, 2.62376e-06, 3.08447e-07, 0.00218156, 1.06245, 0.964892], + [1600.00, 1650.00, 3.85348e-07, 1.73851e-06, 3.34911e-07, 0.00115310, 1.07246, 0.959562], + [1550.00, 1600.00, 2.96220e-07, 1.29250e-06, 2.61812e-07, 0.000814814, 1.04567, 0.967804], + [1500.00, 1550.00, 2.35326e-07, 1.21123e-06, 2.27793e-07, 0.000566574, 1.13520, 0.970257], + [1450.00, 1500.00, 1.86793e-07, 5.96399e-07, 1.48283e-07, 0.000331058, 1.01564, 0.940506], + [1400.00, 1450.00, 1.96396e-07, 5.84154e-07, 1.82438e-07, 0.000207013, 1.67546, 0.945697], + [1350.00, 1400.00, 1.04362e-07, 5.02422e-07, 1.45100e-07, 0.000153277, 1.04246, 0.992749], + [1300.00, 1350.00, 1.74403e-07, 6.32214e-07, 4.03009e-07, 0.000311075, 1.00964, 1.09381], + [1250.00, 1300.00, 7.12738e-08, 2.44220e-07, 9.56532e-08, 9.68823e-05, 1.15737, 1.01121], + [1200.00, 1250.00, 8.74335e-06, 5.02272e-05, 1.32536e-05, 0.00263307, 1.46273, 0.987493], + [1215.67, 1215.67, 6.43713e-06, 5.16823e-05, 1.11399e-05, 0.00247063, 1.26340, 0.998295], + [1150.00, 1200.00, 1.15468e-07, 2.74916e-07, 1.65125e-07, 0.000105178, 1.66887, 1.00997], + [1100.00, 1150.00, 7.71861e-08, 2.15061e-07, 1.44227e-07, 5.16157e-05, 0.971988, 1.05634], + [1050.00, 1100.00, 5.84127e-08, 3.08808e-07, 1.25160e-07, 4.65227e-05, 1.58808, 1.05327], + [1000.00, 1050.00, 2.23073e-07, 6.92710e-07, 5.19444e-07, 5.44992e-05, 0.449052, 1.10271], + [1031.91, 1031.91, 6.18723e-08, 1.21679e-07, 2.28527e-07, 3.14905e-05, 1.42684, 1.17863], + [1025.72, 1025.72, 1.61504e-07, 4.38856e-07, 2.79663e-07, 1.06365e-05, 1.09262, 1.05186], + [950.00, 1000.00, 1.70358e-07, 5.20531e-07, 3.86006e-07, 3.34989e-05, 0.491283, 1.09676], + [977.02, 977.02, 1.51857e-07, 5.60743e-07, 2.74541e-07, 6.71100e-06, 1.44918, 1.04869], + [900.00, 950.00, 7.27646e-08, 4.53511e-07, 1.91513e-07, 3.93851e-05, 1.21476, 1.06473], + [850.00, 900.00, 1.45264e-07, 2.82927e-07, 4.22856e-07, 4.83494e-05, 1.15579, 1.14948], + [800.00, 850.00, 6.69560e-08, 1.26613e-07, 1.76066e-07, 3.69687e-05, 1.14722, 1.12832], + [750.00, 800.00, 3.22816e-08, 7.81757e-08, 6.32959e-08, 4.42679e-05, 0.969748, 1.06692], + [789.36, 789.36, 1.19733e-08, 2.53334e-08, 1.58546e-08, 1.25539e-05, 1.48302, 1.00982], + [770.41, 770.41, 7.33597e-09, 2.10650e-08, 1.63125e-08, 8.88041e-06, 1.18634, 1.06584], + [765.15, 765.15, 4.85967e-09, 1.05567e-08, 5.42104e-09, 1.15262e-05, 1.17912, 1.03352], + [700.00, 750.00, 1.85139e-08, 3.63837e-08, 3.29576e-08, 1.72134e-05, 1.25328, 1.06364], + [703.36, 703.36, 5.34708e-09, 9.65120e-09, 4.54419e-09, 8.80278e-06, 1.51207, 0.972520], + [650.00, 700.00, 1.79851e-08, 6.39605e-08, 1.86000e-08, 1.41950e-05, 1.11181, 0.945801], + [600.00, 650.00, 1.52595e-07, 5.29641e-07, 1.41837e-07, 3.96165e-05, 1.00554, 0.949913], + [629.73, 629.73, 4.96048e-08, 2.46454e-07, 3.12902e-08, 1.59200e-05, 1.01611, 0.846628], + [609.76, 609.76, 2.80641e-08, 3.24530e-07, 1.81554e-08, 1.68460e-06, 0.973085, 0.793355], + [550.00, 600.00, 1.12234e-07, 6.29889e-07, 1.56092e-07, 2.79143e-05, 0.961457, 0.970150], + [584.33, 584.33, 7.91646e-08, 3.05430e-07, 5.14430e-08, 1.70372e-05, 0.844250, 0.881026], + [554.31, 554.31, 2.47485e-08, 2.68042e-07, 5.40951e-08, 1.16226e-06, 1.08699, 1.01483], + [500.00, 550.00, 1.12037e-07, 7.84515e-07, 6.32364e-08, 4.55230e-06, 1.13480, 0.816868], + [450.00, 500.00, 1.10016e-07, 3.96192e-07, 7.37101e-08, 2.62692e-05, 1.15344, 0.865234], + [465.22, 465.22, 9.60010e-09, 1.75358e-08, 6.91440e-11, 1.45142e-05, 1.62256, -0.203971], + [400.00, 450.00, 5.15555e-08, 2.89821e-07, 3.85807e-08, 1.64207e-05, 1.36652, 0.893190], + [350.00, 400.00, 3.91955e-07, 1.43942e-06, 3.16713e-07, -2.36108e-06, 1.05819, 0.910235], + [368.07, 368.07, 1.38855e-07, 7.21254e-07, 1.01814e-07, 8.71098e-07, 1.26707, 0.890513], + [300.00, 350.00, 1.35439e-06, 1.09238e-05, 8.24308e-07, 4.35250e-05, 1.22619, 0.816515], + [303.78, 303.78, 7.43959e-07, 5.94012e-06, 4.05188e-07, 9.23799e-05, 1.32976, 0.796970], + [303.31, 303.31, 5.25977e-07, 7.87164e-06, 3.07932e-07, 7.87468e-05, 0.945961, 0.759694], + [250.00, 300.00, 9.10710e-07, 3.91586e-06, 1.20177e-06, -9.64301e-06, 1.07360, 0.958369], + [284.15, 284.15, 8.67633e-07, 6.00671e-06, 3.97664e-07, -0.000107230, 1.20608, 0.773950], + [256.30, 256.30, 6.44996e-08, 4.12637e-07, 1.05193e-07, 6.61853e-06, 1.48670, 1.03265], + [200.00, 250.00, 4.83013e-07, 1.18898e-06, 8.94772e-07, 5.34779e-05, 1.04532, 1.07888], + [150.00, 200.00, 7.13305e-07, 2.47623e-06, 9.78936e-07, 0.000261230, 1.47374, 1.01156], + [100.00, 150.00, 4.03676e-08, 2.28270e-07, 4.43965e-08, 2.16162e-05, 1.09062, 0.970310], + [50.00, 100.00, 1.69769e-07, 6.93618e-07, 2.89457e-07, 2.03013e-05, 1.07887, 1.06022], + [32.00, 50.00, 1.23478e-07, 4.43644e-07, 1.75749e-07, -1.34567e-05, 1.27409, 1.01254], + [23.00, 32.00, 6.10174e-08, 2.34313e-07, 1.10591e-07, -1.22729e-05, 0.699812, 1.04841], + [16.00, 23.00, 2.23866e-07, 7.97533e-07, 3.03563e-07, -5.62012e-05, 0.706360, 0.987835], + [8.00, 16.00, 3.10773e-07, 1.22767e-06, 3.74797e-07, -8.41459e-05, 1.39529, 0.963859], + [4.00, 8.00, 1.17378e-08, 7.13970e-08, 1.38839e-08, -3.63146e-06, 0.811119, 0.920702], + [2.00, 4.00, 3.97985e-09, 4.12085e-08, 4.71914e-09, -1.86099e-06, 1.15214, 0.916686], + [1.00, 2.00, 3.52498e-09, 1.57342e-08, 4.03741e-09, -8.84488e-07, 0.951714, 0.943490] + ]) + +# Helper Functions: +def rollingAverage(myData, window_length=1, impute_edges=True, center=True): + """ + Using pandas, compute a rolling average of over 'data' using a window length of 'windowlength'. Sets the leading and + trailing windows to the values of the original data. + :param myData: arraylike + The data over which to compute the rolling average. + :param window_length: int + The size of the window over which to average. + :param impute_edges: bool + A boolean determining whether the edges will be interpolated. Default is True. + :param center: bool + A boolean determining whether the centered average will be used. + :return: rolled, arraylike + The rolling average data. + """ + myDataframe = pd.DataFrame(data=myData, columns=['Var']) + myDataframe['Rolling'] = myDataframe['Var'].rolling(window=window_length, center=center).mean() + firstValidIndex = myDataframe['Rolling'].first_valid_index() + lastValidIndex = myDataframe['Rolling'].last_valid_index() + if impute_edges == True: + # Sample x-axis: + sampleXaxis = np.linspace(0, window_length, window_length) + middleIndex = int(0.5*window_length) + # Use cubic interpolation to fill the gaps on the edges: + leadingEdgeStartingVal = myDataframe['Var'][:window_length].values[0] + leadingEndingVal = myDataframe['Rolling'][firstValidIndex] + leadingEdgeMiddleVal = np.mean([leadingEdgeStartingVal, leadingEndingVal]) + leadingSpline = CubicSpline([sampleXaxis[0], sampleXaxis[middleIndex], sampleXaxis[-1]], + [leadingEdgeStartingVal, leadingEdgeMiddleVal, leadingEndingVal]) + leadingImputedValues = leadingSpline(sampleXaxis) + + trailingEdgeStartingVal = myDataframe['Rolling'][lastValidIndex] + trailingEndingVal = myDataframe['Var'].values[-1] + trailingEdgeMiddleVal = np.mean([trailingEdgeStartingVal, trailingEndingVal]) + trailingSpline = CubicSpline([sampleXaxis[0], sampleXaxis[middleIndex], sampleXaxis[-1]], + [trailingEdgeStartingVal, trailingEdgeMiddleVal, trailingEndingVal]) + trailingImputedValues = trailingSpline(sampleXaxis) + # Ingest the imputed values: + myDataframe['Rolling'][:window_length] = leadingImputedValues + myDataframe['Rolling'][-window_length:] = trailingImputedValues + else: + myDataframe['Rolling'][:window_length] = myDataframe['Var'][:window_length] + myDataframe['Rolling'][-window_length:] = myDataframe['Var'][-window_length:] + rolled = myDataframe['Rolling'].values + return rolled + +def readCLS(filename): + """ + Load in flare-corrected, Sun-Earth distance adjusted flux values recorded by the Collecte Localisation Satellites + (CLS). + :param filename: str + The location of the data file. + :return times: list + The datetimes for each data value. + :return data: ndarray + The solar flux data for F30, F15, F10.7, F8, and F3.2. + """ + times = [] + precisionVals = [] + with open(filename, 'r') as myFile: + allLines = myFile.readlines() + data = np.zeros((len(allLines)-25, 5)) + i = 0 + j = 0 + for line in allLines: + if i >= 25: + elements = line.split() + data[j, :] = np.array([float(elements[5]), float(elements[9]), float(elements[13]), float(elements[17]), float(elements[21])]) + times.append( datetime(int(elements[0]), int(elements[1]), int(elements[2]), 12) ) + precisionVals.append( [float(elements[6]), float(elements[10]), float(elements[14]), float(elements[18]), float(elements[22])] ) + j += 1 + i += 1 + # Print the precision: + # print('Mean precision values...') + # print('F30: '+str(np.nanmean([element[0] for element in precisionVals]))+' sfu') # 6 + # print('F15: ' + str(np.nanmean([element[1] for element in precisionVals])) + ' sfu') # 8 + # print('F10.7: ' + str(np.nanmean([element[2] for element in precisionVals])) + ' sfu') # 13 + # print('F8: ' + str(np.nanmean([element[3] for element in precisionVals])) + ' sfu') # 12 + # print('F3.2: ' + str(np.nanmean([element[4] for element in precisionVals])) + ' sfu') # 11 + return times, data + +def getCLSF107(dateStart, dateEnd, truncate=True): + """ + Obtains flare-corrected F10.7 data from Collecte Localisation Satellites. The "adjusted" here means that it has been + adjusted from measurements from Earth to 1AU. (Aether/GITM need measurements at 1AU, so they can adjust to the + proper sun-planet distance, where planet can be Earth, Venus, Mars, etc.) A description of the data is + provided here: https://spaceweather.cls.fr/services/radioflux/. + Downloads the most recent measurements to a file. Reads the file and extracts the F10.7 values between two dates. + Note that if the ending date is less than or equal to the last date in the version of the file that has already + been downloaded, the file IS NOT re-downloaded, but simply parsed. Otherwise, the file is redownloaded. + :param dateStart: str + The starting date in YYYYMMDD format. + :param dateEnd: str + The ending date in YYYYMMDD format. + :param truncate: bool + Controls whether to truncate the data to exclude the most recent 81 days. Defaults is True. + """ + dateStart = dateStart[:4]+'-'+dateStart[4:6]+'-'+dateStart[6:] + dateEnd = dateEnd[:4]+'-'+dateEnd[4:6]+'-'+dateEnd[6:] + dateTimeStart = datetime.strptime(dateStart, '%Y-%m-%d') + dateTimeEnd = datetime.strptime(dateEnd, '%Y-%m-%d') + fname = euvDir.joinpath("radio_flux_adjusted_observation.txt") + if fname.exists(): + # Read in the file: + times, data = readCLS(fname) + # Check if the ending date exceeds the ending date in the file. If so, redownloading the file: + if times[-1] > dateTimeEnd: + out = urllib.request.urlretrieve( + 'ftp://ftpsedr.cls.fr/pub/previsol/solarflux/observation/radio_flux_adjusted_observation.txt', fname) + times, data = readCLS(fname) + else: + # Download the file: + out = urllib.request.urlretrieve('ftp://ftpsedr.cls.fr/pub/previsol/solarflux/observation/radio_flux_adjusted_observation.txt', fname) + times, data = readCLS(fname) + + # Compute the 81-day (centered) averaged F10.7 and 54-day averaged (: + F107 = data[:, 2] + F107A = rollingAverage(F107, window_length=81, impute_edges=True) + F107B = rollingAverage(F107, window_length=54, impute_edges=True, center=False) + print(f'\n\nlen(F107) = {len(F107)}, len(F107B) = {len(F107B)}, len(F107B) = {len(F107B)}') + # Extract the values in the desired time range: + goodInds = np.where((np.asarray(times) >= dateTimeStart) & (np.asarray(times) <= dateTimeEnd))[0] + # Truncation: + if truncate and len(goodInds) >= 2*81: + goodInds = goodInds[:-81] + return np.asarray(times)[goodInds], np.asarray(F107)[goodInds], np.asarray(F107A)[goodInds], np.asarray(F107B)[goodInds] + +def mycorrelate2d(df, normalized=False): + """ + Compute the correlation matrix from 2D data, where each row is cross correlated with the others. + This function handles NaN values by ignoring them. + :param df: ndarray + A 2D array of dimensions n x m. + :param normalized: bool + Determines whether the resulting correlation matrix is normalized. Default is False. + :returns ccm: ndarray + The [normalized] cross-correlation matrix. + Source: https://stackoverflow.com/questions/54292947/basics-of-normalizing-cross-correlation-with-a-view-to-comparing-signals + """ + # Initialize cross correlation matrix with zeros + ccm = np.zeros((df.shape[1], df.shape[1])) + # Fill in each entry of the matrix one-by-one: + for i in range(df.shape[1]): + outer_row = df[:, i] + for j in range(df.shape[1]): + inner_row = df[:, j] + goodInds = np.logical_and(~np.isnan(outer_row), ~np.isnan(inner_row)) + if (not normalized): + x = np.correlate(outer_row[goodInds], inner_row[goodInds]) + else: + x = get_cc(outer_row[goodInds], inner_row[goodInds]) + # a = (inner_row - np.mean(inner_row)) / (np.std(inner_row) * len(inner_row)) + # b = (outer_row - np.mean(outer_row)) / (np.std(outer_row) ) + # x = np.correlate(a, b) + ccm[i, j] = x + return ccm + +def get_cc(array1, array2, normalize=True): + """ + Compute the cross-correlation of two 1D arrays of the same length. + :param array1: ndarray + A 1D array of length n. + :param array2: ndarray + A 1D array of length n. + :return c: float + The normalized correlation of the two arrays. + """ + if normalize: + a = (array1 - np.mean(array1)) / (np.std(array1) * len(array1)) + b = (array2 - np.mean(array2)) / (np.std(array2)) + c = np.correlate(a, b) + else: + c = np.correlate(array1, array2) + return c + +def loadPickle(pickleFilename): + """ + Given the name of a (pre-existing) pickle file, load its contents. + :param: pickleFilename, str + A string with the location/name of the filename. + :return: var + The loaded data. + """ + with open(pickleFilename, 'rb') as pickleFile: + var = pickle.load(pickleFile) + return var + +# CORE NEUVAC FUNCTIONS: +def irrFunc(F107input, A, B, C, D, E, F): + F107, F107A = F107input + return A * (F107 ** B) + C * (F107A ** D) + E * (F107A - F107) + F + +def neuvacEUV(f107, f107b, bands=None, tableFile=None, statsFiles=None): + """ + Use a parametric model to compute solar flux in the 59 conventional wavelength bands used by Aether/GITM. Capable + of returning perturbed irradiance values that are perturbed according to the variations of in the intensity of each + bin + :param f107: ndarray + F10.7 values. + :param f107b: ndarray + 81-day center-averaged F10.7 values; must be the same length as f107. + :param bands: str + If None or 'NEUVAC', returns irradiances in the GITM Bands. If 'EUVAC', returns them in the 37 bands used by + EUVAC. If 'SOLOMON', returns them in the 22 bands used by Solomon and Qian. + :param tableFile: str + Corresponds to the .txt file holding the NEUVAC coefficients most recently-generated by fitNeuvac.py. If + not given, simply uses the table file corresponding to the selected bin structure. Default is None. + :param statsFiles: Bool + Determines whether data for uncertainty quantification is exploited. Involves usage of a list containing + 2 elements where the first element is a file containing the 59x59 correlation matrix and the second + element is a file containing the 1x59 standard deviation values for NEUVAC. NOT REQUIRED. + :return euvIrradiance: ndarray + A nxm ndarray where n is the number of EUV irradiance values and m is the number of wavelength bands. + :return perturbedEuvIrradiance: ndarray + A nxm ndarray where n is the number of EUV irradiance values perturbed due to inherent uncertainty and m is the + number of wavelength bands. + :return savedPerts: ndarray + A nxm ndarray of the perturbations (time series of the NEUVAC+Perturbation - NEUVAC) + :return cc2: ndarray + A mxm ndarray of the correlation matrix between each wavelength's time-series of the NEUVAC+Perturbation - + NEUVAC. + """ + if type(f107) != np.ndarray: + f107 = np.asarray([f107]) + f107b = np.asarray([f107b]) + if bands == 'SOLOMON': + solarFlux = np.zeros((1, 22)) + else: + solarFlux = np.zeros((1, waveTable.shape[0])) + else: + if bands == 'SOLOMON': + solarFlux = np.zeros((len(f107), 22)) + else: + solarFlux = np.zeros((len(f107), waveTable.shape[0])) + euvIrradiance = np.zeros_like(solarFlux) + perturbedEuvIrradiance = np.zeros_like(solarFlux) + # Gather the model parameters: + if tableFile is None: + if bands == 'SOLOMON': + tableFile = euvDir.joinpath('neuvac_table_stan_bands.txt') #'../data/neuvac_table_stan_bands.txt' + else: + tableFile = euvDir.joinpath('neuvac_table.txt') #'../data/neuvac_table.txt' + neuvacTable = [] + with open(here.parent.joinpath(tableFile)) as neuvacFile: # open(tableFile) + contents = neuvacFile.readlines() + i = 0 + for line in contents: + if i > 17: + neuvacTable.append([float(element) for element in line.split(' ')]) + i+=1 + neuvacTable = np.asarray(neuvacTable) + + # If no stats file is provided, simply return the base model output (using the required table file): + if not statsFiles: + # Loop across the F10.7 (and F10.7A) values: + for i in range(len(f107)): + k = 0 + for j in (range(solarFlux.shape[1])): + irrRes = irrFunc([f107[i], f107b[i]], *neuvacTable[j, 2:]) + if irrRes < 0: + irrRes = 0 + euvIrradiance[i, k] = irrRes + else: + euvIrradiance[i, k] = irrRes + k += 1 + if bands == 'EUVAC': # Returns values ONLY for those corresponding to the wavelengths used by EUVAC + return euvIrradiance[:, 7:44], None, None, None + else: + return euvIrradiance, None, None, None + else: + # Include statistical data for calculating uncertainties via perturbations: + if bands == 'NEUVAC': + statsFiles = [euvDir.joinpath('corMat.pkl'), euvDir.joinpath('sigma_NEUVAC.pkl')] + elif bands == 'EUVAC': + statsFiles = [euvDir.joinpath('corMatEUVAC.pkl'), euvDir.joinpath('sigma_EUVAC.pkl')] + else: + statsFiles = [euvDir.joinpath('corMatStanBands.pkl'), euvDir.joinpath('sigma_NEUVAC_StanBands.pkl')] + corMatFile = statsFiles[0] + corMat = loadPickle(corMatFile) + sigmaFile = statsFiles[1] + STDNeuvacResids = loadPickle(sigmaFile) + # Loop across the F10.7 (and F10.7A) values: + nTimes = len(f107) + nWaves = solarFlux.shape[1] + savedPerts = np.zeros((nTimes, nWaves)) + for i in range(len(f107)): + # Loop across the wavelengths (59 conventional wavelengths): + k = 0 + P_n = [] + for j in (range(solarFlux.shape[1])): + # Percentage perturbation: + P_j = np.random.normal(0, 1.0) + P_n.append(P_j) + P_1 = P_n[0] + # Normalized Correlated Perturbation: + if bands == 'SOLOMON': + if j < 5: + C_j1 = corMat[0, j] # 3 # Only consider correlation with the third wavelength bin of the SOLOMON bins! + else: + C_j1 = corMat[5, j] # Only consider correlation with the fifth wavelength bin of the SOLOMON bins! + else: + if j < 7: + # Only consider correlation with the third wavelength bin (of the NEUVAC bins!) when bands are below 8. + C_j1 = corMat[0, j] # 2 + else: + # Only consider correlation with the first wavelength bin (of the EUVAC bins!) when bands are above 8. + C_j1 = corMat[7, j] + N_j = C_j1 * P_1 + (1.0 - C_j1) * P_j + # Actual Normalized Correlated Perturbation: + A_j = STDNeuvacResids[j] * N_j + irrRes = irrFunc([f107[i], f107b[i]], *neuvacTable[j, 2:]) + if irrRes < 0: + irrRes = 0 + euvIrradiance[i, k] = irrRes + if irrRes + A_j < 0: + perturbedEuvIrradiance[i, k] = 0 + else: + perturbedEuvIrradiance[i, k] = irrRes + A_j + else: + euvIrradiance[i, k] = irrRes + perturbedEuvIrradiance[i, k] = irrRes + A_j + savedPerts[i, j] = A_j + k += 1 + + # Generate a correlation matrix of the perturbations (to compare to the input correlation matrix as a sanity check): + cc2 = mycorrelate2d(savedPerts, normalized=True) + + if bands == 'EUVAC': # Returns values ONLY for those corresponding to the wavelengths used by EUVAC + return euvIrradiance[:, 7:44], perturbedEuvIrradiance[:, 7:44], savedPerts, cc2 + else: + return euvIrradiance, perturbedEuvIrradiance, savedPerts, cc2 + +# ----------------------------------------------------------------------------------------------------------------------------------------- +# Argument Parsing Function: +def get_args(): + + parser = argparse.ArgumentParser(description = 'Create NEUVAC input data') + parser.add_argument('start', + help='Start date (format YYYYMMDD)', + type=str) + parser.add_argument('end', + help='End date (format YYYYMMDD)', + type=str) + parser.add_argument('-b', '--binning', + help="Binning scheme to use. Can be [solomon,neuvac,euvac] " + "(case insensitive)", + type=str, default="neuvac") + args = parser.parse_args() + + return args +# ----------------------------------------------------------------------------------------------------------------------------------------- + +# Example Execution: + +# python neuvac.py 20110319 20110321 -b euvac + +args = get_args() +dateStart = args.start +dateEnd = args.end +binning_scheme = args.binning + +# Load F10.7 data (from Collecte Localisation Satellites): +times, F107, F107A, F107B = getCLSF107(dateStart, dateEnd) + +# Generate NEUVAC Irradiance from that F10.7 data: +if binning_scheme == 'HFG' or binning_scheme == 'SOLOMON' or binning_scheme == 'Solomon' or binning_scheme == 'solomon': + # SOLOMON (STAN BANDS; b23) + irradiance, _, _, _ = neuvacEUV(F107, F107B, bands='SOLOMON') +else: + if binning_scheme == 'NEUVAC' or binning_scheme == 'Neuvac' or binning_scheme == 'neuvac': + # NEUVAC BINS (b59) + irradiance, _, _, _ = neuvacEUV(F107, F107B, bands='NEUVAC') + else: + # EUVAC BINS (b37) + irradiance, _, _, _ = neuvacEUV(F107, F107B, bands='EUVAC') + +# Save the NEUVAC Irradiance to a file that Aether can use: +tag = str(irradiance.shape[1]) +fname = os.getcwd() + '/neuvac_file_'+tag+'.txt' +saveFism(irradiance, times, fname) + diff --git a/srcPython/plot_logfiles.py b/srcPython/plot_logfiles.py index 5483b90a..82eb40be 100755 --- a/srcPython/plot_logfiles.py +++ b/srcPython/plot_logfiles.py @@ -64,21 +64,23 @@ def read_ssv_file(file): while (iLine < iEnd): aline = lines[iLine].split(' ') - year = int(aline[0]) - month = int(aline[1]) - day = int(aline[2]) - hour = int(aline[3]) - minute = int(aline[4]) - second = int(aline[5]) - if (iOff == 6): - milli = 0 - else: - milli = int(aline[6]) - t = dt.datetime(year, month, day, hour, minute, second, milli) + if ((len(aline) - iOff) == nVars): + + year = int(aline[0]) + month = int(aline[1]) + day = int(aline[2]) + hour = int(aline[3]) + minute = int(aline[4]) + second = int(aline[5]) + if (iOff == 6): + milli = 0 + else: + milli = int(aline[6]) + t = dt.datetime(year, month, day, hour, minute, second, milli) - data["times"].append(t) - for iVar in range(nVars): - allValues[iVar, iLine - iStart] = float(aline[iOff + iVar]) + data["times"].append(t) + for iVar in range(nVars): + allValues[iVar, iLine - iStart] = float(aline[iOff + iVar]) iLine += 1 data['values'] = allValues @@ -317,6 +319,7 @@ def assign_file_to_color(file): print("Reading file : ",file) #data = read_timeline_file(file) data = read_ssv_file(file) + nT = len(data["times"])-1 for iVar in args.vars: label = data["vars"][iVar] color = 'black' @@ -326,7 +329,7 @@ def assign_file_to_color(file): if (nVars > 1): color,line,label = assign_var_to_color(data['vars'][iVar]) - ax.plot(data["times"], data["values"][iVar], label = label, + ax.plot(data["times"][:nT], data["values"][iVar,:nT], label = label, color = color, linestyle = line, linewidth = 2.0) iVar = args.vars[0] diff --git a/srcPython/postAether.py b/srcPython/postAether.py index 2b958a39..a938ffb2 100755 --- a/srcPython/postAether.py +++ b/srcPython/postAether.py @@ -8,12 +8,47 @@ import matplotlib.pyplot as plt import numpy as np import matplotlib.cm as cm -from netCDF4 import Dataset -from h5py import File import argparse import os import json from struct import unpack +try: + from netCDF4 import Dataset + from h5py import File +except ImportError: + print("NetCDF and/or h5py not found") + +# ---------------------------------------------------------------------- +# Function to parse input arguments +# ---------------------------------------------------------------------- + +def parse_args(): + + parser = argparse.ArgumentParser(description = 'Post process Aether files') + parser.add_argument('-hdf5', \ + help='output HDF5 files', \ + action="store_true") + parser.add_argument('-rm', \ + help='removes processed files', \ + action="store_true") + parser.add_argument('-alt', default = -1, type = int, \ + help='altitude to plot (-1 for no plot!)') + parser.add_argument('-v', \ + help='turn on verbose mode', \ + action="store_true") + parser.add_argument('-oned', \ + help='strip 1d files of ghostcells and store in one file', \ + action="store_true") + parser.add_argument('-combine', \ + help='combine all of the blocks into a single block (spherical only)', \ + action="store_true") + parser.add_argument('-dir', default=None, type=str, + help="Directory to find Aether files in. Will look in current" + " directory & $PWD/UA/output/") + + args = parser.parse_args() + + return args # ---------------------------------------------------------------------- # Want to eliminate need for aetherpy to be installed for ease of use. @@ -111,6 +146,7 @@ def read_aether_headers(filelist, finds=None, filetype="netcdf"): nlons - number of longitude grids nlats - number of latitude grids nalts - number of altitude grids + ngcs - number of ghost cells vars - list of data variable names time - list of datetimes for the processed file start times filename - list of the input filenames @@ -271,6 +307,7 @@ def read_aether_json_header(filename): nlons - number of longitude grids nlats - number of latitude grids nalts - number of altitude grids + ngcs - number of ghost cells nvars - number of data variable names time - datetime for the file vars - variables in the file @@ -349,7 +386,7 @@ def read_aether_one_binary_file(header, ifile, vars_to_read, isVerbose = True): data = {hkey: header[hkey] for hkey in ["version", "nlons", "nlats", - "nalts", "nvars", "vars", + "nalts", "ngcs", "nvars", "vars", "units", "long_name"]} data["time"] = header["time"][0] with open(file_to_read, 'rb') as fin: @@ -431,28 +468,6 @@ def read_aether_file(filename, file_vars=None, epoch_name='time'): return data -# ---------------------------------------------------------------------- -# Function to parse input arguments -# ---------------------------------------------------------------------- - -def parse_args(): - - parser = argparse.ArgumentParser(description = 'Post process Aether files') - parser.add_argument('-hdf5', \ - help='output HDF5 files', \ - action="store_true") - parser.add_argument('-rm', \ - help='removes processed files', \ - action="store_true") - parser.add_argument('-alt', default = -1, type = int, \ - help='altitude to plot (-1 for no plot!)') - parser.add_argument('-v', \ - help='turn on verbose mode', \ - action="store_true") - - args = parser.parse_args() - - return args #---------------------------------------------------------------------------- # This returns the core of the filename without the _g????.nc @@ -538,6 +553,13 @@ def get_base_files(): IsFound, item = if_unique(ensembleFiles, fileInfo['ensembleFile']) if (IsFound): filesInfo[i]['ensembleMembers'] = ensembleCounter[item] + + if len(filesInfo) == 0: + try: + os.chdir("UA/output") + filesInfo = get_base_files() + except: + print("No input files found!!") return filesInfo @@ -595,10 +617,6 @@ def plot_block(data, varToPlot, altToPlot, ax, mini, maxi, i): alts = data[iAlt][0][0] / 1000.0 # Convert from m to km # Change to 2d representation: - - #lons = data[iLon][2:-2, 2:-2, 0] - #lats = data[iLat][2:-2, 2:-2, 0] - #v = data[iVar][2:-2, 2:-2, altToPlot] lons = data[iLon][:, :, 0] lats = data[iLat][:, :, 0] v = data[iVar][:, :, altToPlot] @@ -713,23 +731,28 @@ def get_sizes(allBlockData): # Write a NetCDF file from the data #---------------------------------------------------------------------------- -def write_netcdf(allBlockData, fileName, isVerbose = True): +def write_netcdf(allBlockData, fileName, \ + isVerbose = True, \ + isConsolidated = False): if (isVerbose): print(' Outputting file : ', fileName) ncfile = Dataset(fileName, 'w') - nBlocks = len(allBlockData) - nLons, nLats, nZ = get_sizes(allBlockData) + if (not isConsolidated): + oneBlock = allBlockData[0] + nBlocks = len(allBlockData) + nLons, nLats, nZ = get_sizes(allBlockData) + block_dim = ncfile.createDimension('block', None) + else: + oneBlock = allBlockData + nLons, nLats, nZ = np.shape(allBlockData[0]) lon_dim = ncfile.createDimension('lon', nLons) lat_dim = ncfile.createDimension('lat', nLats) z_dim = ncfile.createDimension('z', nZ) - block_dim = ncfile.createDimension('block', None) time_dim = ncfile.createDimension('time', None) - oneBlock = allBlockData[0] - time_out = ncfile.createVariable('time', np.float64, ('time',)) time_out[0] = datetime_to_epoch(oneBlock["time"]) @@ -745,14 +768,22 @@ def write_netcdf(allBlockData, fileName, isVerbose = True): else: longName = v unitName = oneBlock['units'][iV] - allNetCDFVars.append(ncfile.createVariable(v, np.float32, \ + if (isConsolidated): + allNetCDFVars.append(ncfile.createVariable(v, np.float32, \ + ('lon', 'lat', 'z'))) + else: + allNetCDFVars.append(ncfile.createVariable(v, np.float32, \ ('block', 'lon', 'lat', 'z'))) allNetCDFVars[-1].units = unitName allNetCDFVars[-1].long_name = longName - for iB, oneBlock in enumerate(allBlockData): - tmp = np.asarray(oneBlock[iV]) - allNetCDFVars[-1][iB,:,:,:] = tmp + if (isConsolidated): + tmp = np.asarray(allBlockData[iV]) + allNetCDFVars[-1][:,:,:] = tmp + else: + for iB, oneBlock in enumerate(allBlockData): + tmp = np.asarray(oneBlock[iV]) + allNetCDFVars[-1][iB,:,:,:] = tmp ncfile.close() @@ -912,6 +943,165 @@ def calc_std_of_ensembles(filesInfo, return stdData +#---------------------------------------------------------------------------- +# Test to see if grid is uniform: +#---------------------------------------------------------------------------- + +def calc_if_uniform_grid(dataToWrite): + + nBlocks = len(dataToWrite) + + # Let's figure out if we have a uniform horizontal grid: + isUniform = True + + for iBlock in range(nBlocks): + # Assume first 3 variables are lon, lat, alt: + longitude = dataToWrite[iBlock][0] + latitude = dataToWrite[iBlock][1] + + if (iBlock == 0): + dLon = longitude[1, 0, 0] - longitude[0, 0, 0] + dLat = latitude[0, 1, 0] - latitude[0, 0, 0] + else: + dLonT = longitude[1, 0, 0] - longitude[0, 0, 0] + dLatT = latitude[0, 1, 0] - latitude[0, 0, 0] + if (np.abs(dLat - dLatT) > dLat/1000.0): + isUniform = False + if (np.abs(dLon - dLonT) > dLon/1000.0): + isUniform = False + + return isUniform + + +#---------------------------------------------------------------------------- +# Figure out number of ghostcells +# - Simple method works if grid touches the south pole +#---------------------------------------------------------------------------- + +def calc_ghostcells(dataToWrite): + + nGCs = -1 + # --------------------------------------------- + # Try simple method first: + # Assume first 3 variables of first block are lon, lat, alt: + lon1d = dataToWrite[0][0][:, 0, 0] + lat1d = dataToWrite[0][1][0, :, 0] + + nGCs = 0 + while (lat1d[nGCs] < -90.0): + # Checking to see how many points are below south pole: + nGCs = nGCs + 1 + + if (nGCs < 0): + # Didn't find GCs, test longitude + while (lon1d[nGCs] < 0): + # Checking to see how many points are below south pole: + nGCs = nGCs + 1 + + return nGCs + + +#---------------------------------------------------------------------------- +# Figure out number of blocks in lat and lon +# - Assume a quadtree!!! +#---------------------------------------------------------------------------- + +def calc_blocks(dataToWrite, iLon_ = 0, iLat_ = 1): + + nBlocksLon = 1 + nBlocksLat = 1 + + nBlocksTotal = len(dataToWrite) + + # Brute force method: + # assume that all longitude blocks will have same latitude + # assume that all latitude blocks will have same longitude + + # assume var 0 is longitude and var 1 is latitude + iBlock = 0 + testLon = dataToWrite[iBlock][iLon_][0, 0, 0] + testLat = dataToWrite[iBlock][iLat_][0, 0, 0] + + iBlock = 1 + while (iBlock < nBlocksTotal): + if ((np.abs(dataToWrite[iBlock][iLon_][0, 0, 0] - testLon) > 0.1) and + (np.abs(dataToWrite[iBlock][iLat_][0, 0, 0] - testLat) < 0.1)): + nBlocksLon = nBlocksLon + 1 + if ((np.abs(dataToWrite[iBlock][iLat_][0, 0, 0] - testLat) > 0.1) and + (np.abs(dataToWrite[iBlock][iLon_][0, 0, 0] - testLon) < 0.1)): + nBlocksLat = nBlocksLat + 1 + iBlock = iBlock + 1 + + if (not (nBlocksLat * nBlocksLon == nBlocksTotal)): + print("Finding nBlocksLat and nBlocksLon didn't work!") + print("Tell Aaron to fix this!") + nBlocksLat = -1 + nBlocksLon = -1 + + return nBlocksLon, nBlocksLat + +#---------------------------------------------------------------------------- +# Consolidate Blocks +#---------------------------------------------------------------------------- + +def consolidate_blocks(originalData, iLon_ = 0, iLat_ = 1): + + nBlocksLon, nBlocksLat = calc_blocks(originalData) + nGCs = calc_ghostcells(originalData) + nLons, nLats, nAlts = np.shape(originalData[0][0]) + nLons = nLons - 2 * nGCs + nLats = nLats - 2 * nGCs + nVars = len(originalData[0]) + nLonsTotal = nLons * nBlocksLon + 2 * nGCs + nLatsTotal = nLats * nBlocksLat + 2 * nGCs + Lat0 = originalData[0][iLat_][nGCs, nGCs, nGCs] + Lon0 = originalData[0][iLon_][nGCs, nGCs, nGCs] + dLat = originalData[0][iLat_][nGCs, nGCs + 1, nGCs] - Lat0 + dLon = originalData[0][iLon_][nGCs + 1, nGCs, nGCs] - Lon0 + nBlocks = len(originalData) + + consolidatedData = {} + for key in originalData[0].keys(): + if (isinstance(key, str)): + consolidatedData[key] = originalData[0][key] + else: + # need to move data over + #print('variable : ', key) + data = np.zeros((nLonsTotal, nLatsTotal, nAlts)) + for iBlock in range(nBlocks): + # interior points: + iLatS = int(round((originalData[iBlock][iLat_][nGCs, nGCs, nGCs] - Lat0)/dLat)) + nGCs + iLatE = iLatS + nLats + iLonS = int(round((originalData[iBlock][iLon_][nGCs, nGCs, nGCs] - Lon0)/dLon)) + nGCs + iLonE = iLonS + nLons + iLonSO = nGCs + iLonEO = nGCs + nLons + iLatSO = nGCs + iLatEO = iLatSO + nLats + #print('lons : ', iLonS, iLonE, nLonsTotal, ' -> ', iLonSO, iLonEO, nLons) + #print('lats : ', iLatS, iLatE, nLatsTotal, ' -> ', iLatSO, iLatEO, nLats) + data[iLonS:iLonE, iLatS:iLatE, 0:nAlts] = \ + originalData[iBlock][key][iLonSO:iLonEO, iLatSO:iLatEO, 0:nAlts] + + # Lat down edge: + if (iLatS == nGCs): + data[iLonS-nGCs:iLonE+nGCs, 0:nGCs, :] = \ + originalData[iBlock][key][0:nLons+2*nGCs, 0:nGCs, :] + # Lon Left edge: + if (iLonS == nGCs): + data[0:nGCs, iLatS-nGCs:iLatE+nGCs, :] = \ + originalData[iBlock][key][0:nGCs, 0:nLats+2*nGCs, :] + # Lat up edge + if (iLatE == nLatsTotal - nGCs): + data[iLonS-nGCs:iLonE+nGCs, iLatE:iLatE+nGCs, :] = \ + originalData[iBlock][key][0:nLons+2*nGCs, nLats:nLats+nGCs, :] + # long right edge + if (iLonE == nLonsTotal - nGCs): + data[iLonE:iLonE+nGCs, iLatS-nGCs:iLatE+nGCs, :] = \ + originalData[iBlock][key][nLons:nLons+nGCs, 0:nLats+2*nGCs, :] + consolidatedData[key] = data + + return consolidatedData #---------------------------------------------------------------------------- # write and plot data @@ -925,10 +1115,26 @@ def write_and_plot_data(dataToWrite, output_netcdf, isVerbose = True): + # We want to figure out whether we can combine our blocks into + # a single block and just write that out - it is much easier to + # deal with in this case! + + canConsolidateBlocks = False + isUniform = calc_if_uniform_grid(dataToWrite) + + if (isUniform): + nBlocksLon, nBlocksLat = calc_blocks(dataToWrite) + if (nBlocksLon > 0): + canConsolidateBlocks = True + + print(' -> can consolidate blocks: ', canConsolidateBlocks) + if (canConsolidateBlocks): + dataToWrite = consolidate_blocks(dataToWrite) + if output_netcdf: netcdfFile = fileStart + fileAddon + '.nc' print(' --> Outputting nc file : ', netcdfFile) - write_netcdf(dataToWrite, netcdfFile, isVerbose = isVerbose) + write_netcdf(dataToWrite, netcdfFile, isVerbose = isVerbose, isConsolidated = canConsolidateBlocks) else: hdf5File = fileStart + fileAddon + '.hdf5' print(' --> Outputting hdf5 file : ', hdf5File) @@ -946,12 +1152,19 @@ def write_and_plot_data(dataToWrite, # main code #---------------------------------------------------------------------------- -if __name__ == '__main__': # main code block +def main(args): - args = parse_args() isVerbose = args.v + + if args.dir: + if isVerbose: + print("changing directory to: ", args.dir) + os.chdir(args.dir) filesInfo = get_base_files() + + if len(filesInfo) == 0: + return iVar = 3 iAlt = args.alt @@ -1002,4 +1215,12 @@ def write_and_plot_data(dataToWrite, if (isVerbose): print(' ', command) os.system(command) + +# call main: +if __name__ == '__main__': + + args = parse_args() + + # This allows code to cleanly exit on error + main(args) diff --git a/srcPython/read_armadillo.py b/srcPython/read_armadillo.py new file mode 100644 index 00000000..9f9427ed --- /dev/null +++ b/srcPython/read_armadillo.py @@ -0,0 +1,174 @@ +#!/usr/bin/env python3 +""" +Routines to read Armadillo objects +================================== + + +This is just a couple of functions which will read Armadillo exports into Python. +Directly exporting Armadillo cubes can be very useful during development and/or +debugging, but is not suitable for production runs. + +To export an Armadillo cube from Aether: +(substitute the cube name & file name. This does support multiple processors) + +grid.geoLon_scgc.save("geoLon_" + tostr(iProc, 3) + ".txt", arma_ascii)); + +Notes: +- tostr() is defined in src/tools.cpp of Aether & zero-pads an int to return a str. +- This will rewrite the existing file each time it is called. +- Output is to the same directory the executable is called from. +- This uses the arma_ascii format, which is way less efficient than HDF5 or binary. + I have found this format is the easiest to work with, but your mileage may vary. +- The several python armadillo implementations look abandoned and/or did not work for me. +- See the armadillo documentation for more information on saving cubes or other data types: + https://arma.sourceforge.net/docs.html#save_load_mat + +""" + +import numpy as np +from glob import glob +import os, errno + +def check_file_inputs(files): + """ Make sorted list of files (that exist) from a str or list + + Inputs + ------ + files (str or list) Can be list of files, single file, directory, or a pattern to glob + + Returns + ------- + list: sorted list of files that so indeed exist + + """ + + if isinstance(files, str): # Probably need to glob + if "*" in files: # Definitely need to glob + files2read = np.sort(glob(files)) + elif os.path.isfile(files): + files2read = [files] # Single file needs to be made into list + elif os.path.isdir(files): + # We were given a directory. Read all .txt files without log in name + files_ = np.sort(glob(os.path.join(files, "*.txt"))) + files2read = [f for f in files_ if "log" not in f] + else: # pretty error message from stack overflow + raise FileNotFoundError(errno.ENOENT, os.strerror(errno.ENOENT), *files) + + if len(files2read) == 0: + raise ValueError( + f"Could not find any armadillo cubes from '{files}'." + " Check path or provide files.\n") + + return files2read + + # Sort list & check if all files exist. error if not. + try: # attempt to handle anything listlike (np arrays, dict keys, etc.) + files2read = [f for f in np.sort(files) if os.path.isfile(f)] + if len(files2read) != len(files): + bad_files = [f for f in files if f not in files2read] + raise FileNotFoundError(errno.ENOENT, os.strerror(errno.ENOENT), *bad_files) + + except: # Not expected types + raise TypeError("Need list or str. Could not handle type: " + type(files)) + + return files2read + + +def cube2np(files2read): + """ Read armadillo cubes from .txt files, automatically globs input. + return np array of shape (nFiles, n_x, n_y, n_z) + + Inputs + ------ + files (str or list-like): either path to files or list of files. If it's a str, + the pattern is globbed & sorted, or the directory's .txt files are sorted. + If it's list-like, the list is sorted. + + Outputs + ------- + np.array of shape (nFiles, n_x, n_y, n_z) & dtype float. If we are only reading + one file, return shape is just (n_x, n_y, n_z) + + Usage + ----- + + lons = cube2np("../run/geolon_*.txt") + lons = cube2np(np.sort(glob.glob("../run/geolon_*.txt"))) + + """ + + # Sanitize input + files2read = check_file_inputs(files2read) + + out = [] # output holder + for thisf in files2read: + with open(thisf, 'r') as f: + _ = f.readline() # first line is a header, not needed + shape = f.readline().strip() # next line holds the shape of the cube + shape = shape.split(' ') + if len(shape) != 3: + raise ValueError( + f"File ({thisf}) does not appear to be an armadillo cube.\n" + f"Found shape: {shape}") + shape = np.array(shape, dtype=int) # convert shape to np array of int's + # Read in cube, transform shape, use same indexing as arma does + one_cube = np.loadtxt(thisf, skiprows=2, ).reshape(shape) + + out.append(one_cube) # speed not a huge issue, work with lists + + # remove 0th dimension if we only are reading one file + if len(files2read) == 1: + out = out[0] + + return np.array(out) + + + + +def mat2np(files2read): + """ Read armadillo matrices from .txt files, automatically globs input. + return np array of shape (nFiles, n_x, n_y) + + Inputs + ------ + files (str or list-like): either path to files or list of files. If it's a str, + the pattern is globbed & sorted, or the directory's .txt files are sorted. + If it's list-like, the list is sorted. + + Outputs + ------- + np.array of shape (nFiles, n_x, n_y) & dtype float. If we are only reading + one file, return shape is just (n_x, n_y) + + Usage + ----- + + lons = mat2np("../run/geolon_*.txt") + lons = mat2np(np.sort(glob.glob("../run/geolon_*.txt"))) + + """ + + # Sanitize input + files2read = check_file_inputs(files2read) + + out = [] # output holder + for thisf in files2read: + with open(thisf, 'r') as f: + _ = f.readline() # first line is a header, not needed + shape = f.readline().strip() # next line holds the shape of the cube + shape = shape.split(' ') + if len(shape) != 2: + raise ValueError( + f"File ({thisf}) does not appear to be an armadillo matrix.\n" + f"Found shape: {shape}") + shape = np.array(shape, dtype=int) # convert shape to np array of int's + + one_mat = np.loadtxt(thisf, skiprows=2).reshape(shape) + + out.append(ls) # speed not a huge issue, work with lists + + # remove 0th dimension if we only are reading one file + if len(files2read) == 1: + out = out[0] + + return np.array(out) diff --git a/srcPython/run_restarts.py b/srcPython/run_restarts.py new file mode 100755 index 00000000..c89a63e3 --- /dev/null +++ b/srcPython/run_restarts.py @@ -0,0 +1,278 @@ +#!/usr/bin/env python3 + +import argparse +import datetime as dt +import json +import os + +# ---------------------------------------------------------------------- +# Function to parse input arguments +# ---------------------------------------------------------------------- + +def get_args_restart(): + + parser = argparse.ArgumentParser(description = + 'Run series of restarts for Aether') + parser.add_argument('-input', + help = 'aether json file for whole run', + default = 'aether.json.whole') + + parser.add_argument('-mpi', + help = 'mpirun command', + default = 'mpirun') + + parser.add_argument('-post', + help = 'post processing command', + default = '~/bin/postAether.py') + + parser.add_argument('-aether', + help = 'aether command', + default = './aether') + + parser.add_argument('-rundir', + help = 'path to the default run directory', + default = './share/run') + + parser.add_argument('-restarts', + help = 'number of restarts', + default = 1, type = int) + + parser.add_argument('-ensembles', + help = 'number of ensemble members', + default = 3, type = int) + + parser.add_argument('-blocks', + help = 'number of blocks in each ensemble member', + default = 1, type = int) + + parser.add_argument('-totaltime', + help = 'total time (in seconds) of run (-1 = ignore)', + default = -1, type = int) + + parser.add_argument('-test', \ + help='just output the files and dont run', \ + action="store_true") + + parser.add_argument('-dowhole', \ + help='include the whole run for comparison', \ + action="store_true") + + args = parser.parse_args() + + return args + +# ---------------------------------------------------------------------- +# Get the start time, end time, and delta-t from the whole run dict: +# ---------------------------------------------------------------------- + +def get_times(wholeDict): + + if ('StartTime' in wholeDict): + st = wholeDict['StartTime'] + startTime = dt.datetime(st[0], st[1], st[2], st[3], st[4], st[5]) + else: + startTime = None + if ('EndTime' in wholeDict): + et = wholeDict['EndTime'] + endTime = dt.datetime(et[0], et[1], et[2], et[3], et[4], et[5]) + else: + endTime = None + if (startTime and endTime): + deltaTime = (endTime - startTime).total_seconds() + else: + deltaTime = -1.0 + + return startTime, endTime, deltaTime + +# ---------------------------------------------------------------------- +# run os command +# ---------------------------------------------------------------------- + +def run(command, isTest, isVerbose): + if (isVerbose): + print(' -> Running : ', command) + if (not isTest): + os.system(command) + return + +# ---------------------------------------------------------------------- +# Main code: +# ---------------------------------------------------------------------- + +if __name__ == '__main__': + + args = get_args_restart() + + isVerbose = True + + inFile = args.input + nRestarts = args.restarts + nMembers = args.ensembles + nBlocks = args.blocks + + nProcs = nBlocks * nMembers + + aetherCommand = args.aether + + runDir = args.rundir + notInRunDir = False + + if (not os.path.exists(aetherCommand)): + print('-> Can not find aether command : ', aetherCommand) + notInRunDir = True + + if (not os.path.exists('./UA')): + print('-> Can not find UA directory!') + notInRunDir = True + + if (notInRunDir): + if (os.path.exists(runDir)): + print('Found rundir... copying') + + dirPre = './run.restarts' + cdPre = 'cd ' + dirPre + ' ; ' + cdPost = ' ; cd ..' + command = 'rm -rf ' + dirPre + run(command, args.test, isVerbose) + command = 'cp -r ' + runDir + ' ' + dirPre + run(command, args.test, isVerbose) + else: + print('-> Can not find rundir to copy!') + print('use -rundir to tell where to find the default run directory') + exit() + else: + cdPre = '' + cdPost = '' + dirPre = '.' + + runCommand = cdPre + args.mpi + ' -np %d ' % nProcs + runCommand = runCommand + aetherCommand + cdPost + + postCommand = args.post + ' -rm' + + print('Number of Ensemble Members : ', nMembers) + print('Number of blocks in each member : ', nBlocks) + print(' --> nProcessors : ', nProcs) + + with open(inFile, 'r') as filePointer: + # Reading from json file + wholeDict = json.load(filePointer) + filePointer.close() + + sTime, eTime, dTime = get_times(wholeDict) + + if (args.totaltime > 0): + dTime = args.totaltime + + if (dTime < 0.0): + print('Some sort of error determining time interval for run') + print('please check StartTime and EndTime in whole run file') + exit() + + if ('Perturb' in wholeDict): + perturb = wholeDict['Perturb'] + else: + perturb = {'f107': {'Mean' : 1.0, + 'Std' : 0.0, + 'Add': False, + 'Constant': True}} + wholeDict['Perturb'] = perturb + + if ('Ensembles' in wholeDict): + wholeDict['Ensembles']['nMembers'] = nMembers + else: + wholeDict['Ensembles']['nMembers'] = nMembers + + interval = dTime / (nRestarts + 1) + + if ('Restart' in wholeDict): + wholeDict['Restart']['do'] = False + wholeDict['Restart']['dt'] = interval + else: + wholeDict['Restart'] = {'do' : False, + 'dt' : interval} + + subDict = {'Ensembles' : {'nMembers': nMembers}, + 'Restart': {'do' : True, 'dt': interval}, + 'Perturb': perturb} + + print(' --> StartTime set to : ', sTime) + + for iRun in range(nRestarts + 2): + + isTest = args.test + if (iRun == 0): + if (not args.dowhole): + isTest = True + + cRun = '%04d' % iRun + print('Iteration: ', iRun) + if (iRun > 0): + endtime = sTime + dt.timedelta(seconds = interval * iRun) + else: + endtime = sTime + dt.timedelta(seconds = dTime) + endtimeAsArray = [endtime.year, + endtime.month, + endtime.day, + endtime.hour, + endtime.minute, + endtime.second] + print(' --> EndTime set to : ', endtime) + + if (args.test): + outFile = dirPre + '/aether_' + cRun + '.json' + else: + outFile = dirPre + '/aether.json' + + if (iRun <= 1): + wholeDict['EndTime'] = endtimeAsArray + jsonObject = json.dumps(wholeDict) + else: + subDict['EndTime'] = endtimeAsArray + jsonObject = json.dumps(subDict) + + print(' --> Writing File : ', outFile) + with open(outFile, "w") as outfile: + outfile.write(jsonObject) + + # ------------------------------------------------------------------ + # run Aether + command = runCommand + ' 2>&1 | tee output_' + cRun + '.log' + run(command, isTest, isVerbose) + + # ---------------------- + # remove target directories + command = \ + 'cd ' + dirPre + '/UA ; ' + \ + 'rm -rf output_' + cRun + \ + ' ; cd ..' + cdPost + run(command, isTest, isVerbose) + + command = \ + 'cd ' + dirPre + '/UA ; ' + \ + 'rm -rf restartOut_' + cRun + \ + ' ; cd ..' + cdPost + run(command, isTest, isVerbose) + + # ---------------------- + # Post Processing + command = \ + 'cd ' + dirPre + '/UA/output ; ' + \ + postCommand + \ + ' ; cd .. ; ' + \ + 'mv output output_' + cRun + \ + ' ; mkdir output ' + \ + ' ; cd ..' + cdPost + run(command, isTest, isVerbose) + + # ---------------------- + # Set up restart directories + command = \ + 'cd ' + dirPre + '/UA ; ' + \ + 'mv restartOut restartOut_' + cRun + \ + ' ; rm -f ./restartIn ' + \ + ' ; ln -s restartOut_' + cRun + ' ./restartIn ' + \ + ' ; mkdir restartOut ' + \ + ' ; cd ..' + cdPost + run(command, isTest, isVerbose) + diff --git a/srcTest/test_gradient.cpp b/srcTest/test_gradient.cpp new file mode 100644 index 00000000..cc0e546f --- /dev/null +++ b/srcTest/test_gradient.cpp @@ -0,0 +1,348 @@ + +// Copyright 2020, the Aether Development Team (see doc/dev_team.md for members) +// Full license can be found in License.md + +#include + +#include "aether.h" + + +// Modularize the test function so it's easy to change +std::vector test_func(Grid grid, Planets planet, bool debug) { + + // one element for each coord; compatibility w/ doing individual functions + // out_vals has 6 elements: + // - first 3 are the function & last 3 are expected gradient + std::vector out_vals; + arma_cube one_elem, i_coords, j_coords, k_coords; + + if (grid.IsLatLonGrid) { + i_coords = grid.geoLon_scgc; + j_coords = grid.geoLat_scgc; + k_coords = grid.radius_scgc; + + // use the func cos(i) * sin(j) * r^2 + one_elem = cos(i_coords) % sin(j_coords) % k_coords % k_coords; + out_vals.push_back(one_elem); + out_vals.push_back(one_elem); + out_vals.push_back(one_elem); + + // The true gradient values: + out_vals.push_back(-600.0 * sin(i_coords) % tan(j_coords) % k_coords); + out_vals.push_back(cos(i_coords) % cos(j_coords) % k_coords); + out_vals.push_back(2.0 * cos(i_coords) % sin(j_coords) % k_coords); + } + + if (grid.IsDipole) { + std::cout<<"I AMN DIPOLE\n"; + precision_t planetRadius = planet.get_radius(0.0); + i_coords = grid.magLon_scgc; + j_coords = grid.magP_scgc; + k_coords = grid.magQ_scgc; + + // use the func cos(i) * sin(j) * r^2 + // one_elem = cos(grid.magLon_scgc) % sin(grid.magLat_scgc) % grid.radius_scgc % grid.radius_scgc; + one_elem = i_coords % i_coords + j_coords % j_coords + k_coords % k_coords; + out_vals.push_back(one_elem); + out_vals.push_back(one_elem); + out_vals.push_back(one_elem); + + arma_cube delT = pow(1 + 3.0 * cos(cPI/2. - grid.magLat_scgc) % cos(cPI/2. - grid.magLat_scgc), + 0.5); + + // arma_cube r = grid.radius_scgc / planetRadius; + // // The true gradient values: + // out_vals.push_back(-k_coords % k_coords % sin(i_coords) % j_coords % j_coords + // / (r % pow(cos(grid.magLat_scgc), 2.0))); // mayB sin + // out_vals.push_back(2.0 * delT % j_coords % j_coords % cos(i_coords) % j_coords + // / pow(cos(grid.magLat_scgc), 3.0)); // mayb sin??? + // out_vals.push_back(2.0 * delT % k_coords % cos(i_coords) % j_coords % j_coords + // / pow(r, 3.0)); + + out_vals.push_back(2.0 * i_coords + / (grid.radius_scgc % cos(grid.magLat_scgc))); // mayB sin + out_vals.push_back(2.0 * j_coords + % delT / pow(cos(grid.magLat_scgc), 3.0)); // mayb sin??? + out_vals.push_back(2.0 * k_coords + % delT / pow(grid.radius_scgc, 3.0)); + + } + + if (debug) { + std::string numproc = tostr(iProc, 2); + std::string gridshape = "gridshape-" + tostr(grid.iGridShape_, 2); + i_coords.save(gridshape + "_proc-" + numproc + "_i_center.txt", arma_ascii); + j_coords.save(gridshape + "_proc-" + numproc + "_j_center.txt", arma_ascii); + k_coords.save(gridshape + "_proc-" + numproc + "_k_center.txt", arma_ascii); + } + + return out_vals; +} + +bool test_gradient(Planets planet, Quadtree quadtree, json test_config, + Grid gGrid, Grid mGrid) { + std::string function = "test_gradient"; + static int iFunction = -1; + report.enter(function, iFunction); + + bool didWork = true; + bool debug = test_config["dump_debug_cubes"]; + + report.print(2, "Testing neutral grid"); + + if (gGrid.IsDipole || gGrid.IsLatLonGrid) + didWork = didWork && test_gradient_ijk(planet, gGrid, debug); + else + report.error("Cubesphere gradient test not built yet sorry"); + + if (!didWork && test_config["exit_on_fail"]) + throw std::string("Gradient test failed - neutral grid"); + + report.print(2, "Testing ion grid"); + + if (mGrid.IsCubeSphereGrid) // it's technically possible... + didWork = didWork && test_gradient_cubesphere(planet, quadtree, mGrid); + + if (mGrid.IsDipole || mGrid.IsLatLonGrid) + didWork = didWork && test_gradient_ijk(planet, mGrid, debug); + + // if (!didWork && test_config["exit_on_fail"]) + // throw std::string("Gradient test failed - ion grid"); + + report.exit(function); + + return didWork; +} + +void send_message(std::string Message, int nGood, int nBad) { + std::string newMessage; + newMessage = "iProc: " + tostr(iProc, 2) + " " + Message; + printf("%s has FAILED! (%i/%i); or (%f) perc\n", newMessage.data(), nBad, nGood, + 100.*nBad / nGood); + return; +} + + +bool test_gradient_ijk(Planets planet, Grid grid, bool debug) { + + std::string function = "test_gradient_ijk"; + static int iFunction = -1; + report.enter(function, iFunction); + + int64_t nX = grid.get_nX(); + int64_t nY = grid.get_nY(); + int64_t nZ = grid.get_nZ(); + int64_t nGCs = grid.get_nGCs(); + + // numbers of grid points without ghost cells: + int64_t nI, nJ, nK; + nI = nX - 2 * nGCs; + nJ = nY - 2 * nGCs; + nK = nZ - 2 * nGCs; + + bool didWork = true; + + int64_t nCellsTot = nX * nY * nZ; + int64_t nCellsNGCs = nI * nJ * nK; + + report.print(2, "Beginning gradient test"); + + std::vector tmp, func_values, true_gradient, predicted_gradient; + tmp = test_func(grid, planet, debug); + + func_values.push_back(tmp[0]); + func_values.push_back(tmp[1]); + func_values.push_back(tmp[2]); + true_gradient.push_back(tmp[3]); + true_gradient.push_back(tmp[4]); + true_gradient.push_back(tmp[5]); + + if (grid.IsDipole) { + predicted_gradient.push_back(calc_gradient2o_i(func_values[0], grid)); + predicted_gradient.push_back(calc_gradient2o_j(func_values[1], grid)); + predicted_gradient.push_back(calc_gradient2o_k(func_values[2], grid)); + } else { + predicted_gradient.push_back(calc_gradient2o_i(func_values[0], grid)); + predicted_gradient.push_back(calc_gradient2o_j(func_values[1], grid)); + predicted_gradient.push_back(calc_gradient2o_k(func_values[2], grid)); + } + + arma::uvec bad_is, bad_js, bad_ks; + + // Look for values > 5% different from expected + bad_is = find(abs( + (predicted_gradient[0].subcube(2, 2, 2, nI + 2, nJ + 2, nK + 2) + - true_gradient[0].subcube(2, 2, 2, nI + 2, nJ + 2, nK + 2)) + / true_gradient[0].subcube(2, 2, 2, nI + 2, nJ + 2, nK + 2)) > 0.25); + bad_js = find(abs( + (predicted_gradient[1].subcube(2, 2, 2, nI + 2, nJ + 2, nK + 2) + - true_gradient[1].subcube(2, 2, 2, nI + 2, nJ + 2, nK + 2)) + / true_gradient[1].subcube(2, 2, 2, nI + 2, nJ + 2, nK + 2)) > 0.25); + bad_ks = find(abs( + (predicted_gradient[2].subcube(2, 2, 2, nI + 2, nJ + 2, nK + 2) + - true_gradient[2].subcube(2, 2, 2, nI + 2, nJ + 2, nK + 2)) + / true_gradient[2].subcube(2, 2, 2, nI + 2, nJ + 2, nK + 2)) > 0.25); + + // ghost cells are hard; if more than 1% of *real* cells are out of spec, the test fails. + if (bad_is.n_elem > 0.1 * nCellsNGCs) { + send_message("grad_i:", nCellsNGCs, bad_is.n_elem); + didWork = false; + } + + if (bad_js.n_elem > 0.1 * nCellsNGCs) { + send_message("grad_j:", nCellsNGCs, bad_js.n_elem); + didWork = false; + } + + if (bad_ks.n_elem > 0.1 * nCellsNGCs) { + send_message("grad_k:", nCellsNGCs, bad_ks.n_elem); + didWork = false; + } + + // Output if requested: + std::string numproc = tostr(iProc, 2); + + if (debug) { + std::string numproc = tostr(iProc, 2); + std::string gridshape = "gridshape-" + tostr(grid.iGridShape_, 2) + "_iproc-"; + grid.di_center_m_scgc.save(gridshape + numproc + "_di_center_m.txt", + arma_ascii); + grid.dj_center_m_scgc.save(gridshape + numproc + "_dj_center_m.txt", + arma_ascii); + grid.dk_center_m_scgc.save(gridshape + numproc + "_dk_center_m.txt", + arma_ascii); + + func_values[0].save(gridshape + numproc + "_testfunc.txt", arma_ascii); + true_gradient[0].save(gridshape + numproc + "_actual_grad_i.txt", + arma_ascii); + true_gradient[1].save(gridshape + numproc + "_actual_grad_j.txt", + arma_ascii); + true_gradient[2].save(gridshape + numproc + "_actual_grad_k.txt", + arma_ascii); + + predicted_gradient[0].save(gridshape + numproc + "_i-predicted-grad.txt", + arma_ascii); + predicted_gradient[1].save(gridshape + numproc + "_j-predicted-grad.txt", + arma_ascii); + predicted_gradient[2].save(gridshape + numproc + "_k-predicted-grad.txt", + arma_ascii); + } + + // For completeness, check for non-finites + didWork = didWork && all_finite(true_gradient, "TRUE GRADIENT"); + didWork = didWork && all_finite(func_values, "FUNCTION"); + didWork = didWork && all_finite(predicted_gradient, "AETHER'S GRADIENT"); + + report.report_errors(); + + report.exit(function); + + return didWork; +} + + +// This is non-functional. +// Taken from src/main/main_test_gradient.cpp with enough edits to compile. +bool test_gradient_cubesphere(Planets planet, Quadtree quadtree, Grid grid) { + + + std::string function = "test_gradient_cubesphere"; + static int iFunction = -1; + report.enter(function, iFunction); + + // Set tolerance limit + precision_t tol = 1e-5; + + // Print current side number + std::string side_num = std::to_string(quadtree.iSide + 1); + std::cout << "Initiating Test 1 for Side Number (1-based index): " << side_num + << std::endl; + + /** + * Extract some test data generated by Aether Model + */ + + // Cell center coordinates + arma_mat aether_lon_cc = grid.geoLon_scgc.slice(0); + arma_mat aether_lat_cc = grid.geoLat_scgc.slice(0); + + int64_t nXs = grid.get_nY(); + int64_t nYs = grid.get_nX(); + int64_t nGCs = grid.get_nGCs(); + int64_t nAlts = grid.get_nAlts(); + + // Test scalar field and gradients + arma_cube scgc(nXs, nYs, nAlts); + arma_cube grad_lon_analytical(nXs, nYs, nAlts); + arma_cube grad_lat_analytical(nXs, nYs, nAlts); + + // Radius Information + precision_t planet_R = planet.get_radius(0); + // radius of planet + altitude + // just pick alt at (0,0) loction + arma_vec R_Alts = grid.geoAlt_scgc.tube(0, 0) + planet_R; + + for (int iAlt = 0; iAlt < nAlts; iAlt++) { + arma_mat curr_scalar(nXs, nYs, arma::fill::zeros); // setup zero mat + arma_mat curr_grad_lon(nXs, nYs); + arma_mat curr_grad_lat(nXs, nYs); + precision_t A = 1; + precision_t B = 1; + + for (int j = 0; j < nYs; j++) { + for (int i = 0; i < nXs; i++) { + precision_t curr_lat = aether_lat_cc(i, j); + precision_t curr_lon = aether_lon_cc(i, j); + + curr_scalar(i, j) = std::sin(curr_lat); + curr_grad_lon(i, j) = 0.; + curr_grad_lat(i, j) = std::cos( + curr_lat); // Assume R=1, we will scale the numerical result + } + } + + scgc.slice(iAlt) = curr_scalar; + grad_lon_analytical.slice(iAlt) = curr_grad_lon; + grad_lat_analytical.slice(iAlt) = curr_grad_lat; + } + + std::vector test_res = calc_gradient_cubesphere(scgc, grid); + + // Perform Tests + for (int iAlt = 0; iAlt < nAlts; iAlt++) { + arma_mat curr_grad_lon = grad_lon_analytical.slice(iAlt); + arma_mat curr_grad_lat = grad_lat_analytical.slice(iAlt); + arma_mat curr_numgrad_lon = test_res[0].slice(iAlt); + arma_mat curr_numgrad_lat = test_res[1].slice(iAlt); + + + // Evaluate actual cells only + for (int j = nGCs; j < nYs - nGCs; j++) { + for (int i = nGCs; i < nXs - nGCs; i++) { + if (std::abs(curr_grad_lat(i, j) - curr_numgrad_lat(i, + j) * R_Alts(iAlt)) > 1e-4) { // For float precision + std::cout << "Found Incorrect latitudinal gradient for face " + side_num + + ", test f = sin(lat)" << std::endl; + std::cout << std::abs(curr_grad_lat(i, j) - curr_numgrad_lat(i, + j)* R_Alts(iAlt)) << std::endl; + std::cout << iAlt << std::endl; + goto endloop1; + } + + if (std::abs(curr_grad_lon(i, j) - curr_numgrad_lon(i, + j) * R_Alts(iAlt)) > 1e-4) { // For float precision + std::cout << "Found Incorrect longitudinal gradient for face " + side_num + + ", test f = sin(lat)" << std::endl; + goto endloop1; + } + } + } + } + +endloop1: + + report.exit(function); + report.times(); + + return false; +} \ No newline at end of file diff --git a/tests/1d_alt_tube/aether.json.1d_alt_tube b/tests/1d_alt_tube/aether.json.1d_alt_tube new file mode 100644 index 00000000..70ab35f3 --- /dev/null +++ b/tests/1d_alt_tube/aether.json.1d_alt_tube @@ -0,0 +1,64 @@ + +{ + "Ensembles" : { + "nMembers" : 1}, + + "Debug" : { + "iVerbose" : 0, + "iFunctionVerbose" : { + "Grid::create_altitudes": 0}, + "TimingPercent" : 10.0, + "dt" : 10.0, + "check_for_nans" : false + }, + + "EndTime" : [2011, 3, 20, 2, 0, 0], + + "GeoBlockSize" : { + "nLons" : 18, + "nLats" : 18, + "nAlts" : 50}, + + "neuGrid" : { + "Shape" : "sphere", + "LatRange" : [10.0, 10.0], + "nLatsPerBlock" : 1, + "LonRange" : [20.0, 20.0], + "nLonsPerBlock" : 1, + "nAlts" : 50, + "MinAlt" : 100.0, + "dAltkm" : 5.0, + "dAltScale" : 0.25, + "IsUniformAlt" : false, + "AltFile" : ""}, + + "ionGrid" : { + "Shape" : "sphere", + "LatRange" : [10.0, 10.0], + "nLatsPerBlock" : 1, + "LonRange" : [20.0, 20.0], + "nLonsPerBlock" : 1, + "nAlts" : 200, + "MinAlt" : 80.0, + "MinApex" : 120.0, + "MaxAlt" : 1000.0, + "IsUniformAlt" : true, + "dAltkm" : 5.0, + "AltFile" : ""}, + + "OmniwebFiles" : ["UA/inputs/omni_20110319.txt"], + + "Electrodynamics" : { + "Potential" : "Weimer05", + "DiffuseAurora" : "fta", + "File": "UA/inputs/b20110320n_omni.bin"}, + + "Outputs" : { + "type" : ["states", "grid"], + "dt" : [600, -1] }, + + "DoCalcBulkIonTemp" : false, + + "PlanetFile" : "UA/inputs/earth.in" + +} diff --git a/tests/1d_alt_tube/run_test.sh b/tests/1d_alt_tube/run_test.sh new file mode 100755 index 00000000..ebcd0412 --- /dev/null +++ b/tests/1d_alt_tube/run_test.sh @@ -0,0 +1,15 @@ +#!/bin/sh + + +rm -rf run.1d + +cp -r ../../share/run ./run.1d +cd run.1d +cp ../aether.json.1d_alt_tube ./aether.json + +./aether + +cd UA/output + +~/bin/postAether.py -rm -alt=-1 +~/bin/aether_plot_simple.py 3DALG_20110320_*.nc diff --git a/tests/2d_alt/aether.json.2d b/tests/2d_alt/aether.json.2d index 282b398d..545e9037 100644 --- a/tests/2d_alt/aether.json.2d +++ b/tests/2d_alt/aether.json.2d @@ -1,17 +1,40 @@ { - "GeoBlockSize" : { - "nLons" : 50, - "nLats" : 50, - "nAlts" : 1}, - - "GeoGrid" : { - "dAlt" : 2.0, - "IsUniformAlt" : true}, + "Ensembles" : { + "nMembers" : 1}, + + "Debug" : { + "iVerbose" : 0, + "iFunctionVerbose" : { + "Grid::create_altitudes": 0, + "Electrodynamics::update":0, + "Electrodynamics::set_all_indices_for_ie" : 0, + "read_and_store_indices": 0}, + "TimingPercent" : 1.0, + "dt" : 10.0, + "check_for_nans" : true + }, + + "StartTime" : [2011, 3, 20, 12, 0, 0], + "EndTime" : [2011, 3, 20, 13, 0, 0], + + "neuGrid" : { + "Shape" : "sphere", + "nLatsPerBlock" : 36, + "nLonsPerBlock" : 72, + "nAlts" : 1, + "MinAlt" : 100.0}, + + "ionGrid" : { + "Shape" : "sphere", + "nLatsPerBlock" : 36, + "nLonsPerBlock" : 72, + "nAlts" : 1, + "MinAlt" : 100.0}, "Euv" : { - "doUse" : false}, + "doUse" : true}, "Eddy" : { "UseInEnergy": false, @@ -24,22 +47,12 @@ "NO_cool" : false, "O_cool": false } }, - "Ensembles" : { - "nMembers" : 1}, - - "Debug" : { - "iVerbose" : 0, - "iFunctionVerbose" : { - "Grid::create_altitudes": 0}, - "dt" : 10.0, - "check_for_nans" : false - }, - - "EndTime" : [2011, 3, 20, 1, 0, 0], + "Electrodynamics" : { + "Potential" : "Weimer05", + "DiffuseAurora" : "fta", + "File": "UA/inputs/b20110320n_omni.bin"}, "OmniwebFiles" : ["UA/inputs/omni_20110319.txt"], - - "ElectrodynamicsFile" : "UA/inputs/b20110320n_omni.bin", "Outputs" : { "type" : ["states"], diff --git a/tests/2d_alt/run_test.sh b/tests/2d_alt/run_test.sh old mode 100644 new mode 100755 index 2d625a82..864bd282 --- a/tests/2d_alt/run_test.sh +++ b/tests/2d_alt/run_test.sh @@ -11,5 +11,5 @@ cp ../aether.json.2d ./aether.json cd UA/output -~/bin/postAether.py -rm -alt=-1 -~/bin/aether_plot.py -var=Temperature -alt=2 3DALL_20110320_010000.nc +~/bin/postAether.py -rm +~/bin/aether_plot_simple.py -var=Temperature_neutral -alt=2 3DALG_20110320_130000.nc diff --git a/tests/grid_shapes/aether.json.whole b/tests/grid_shapes/aether.json.whole new file mode 100644 index 00000000..84033c7b --- /dev/null +++ b/tests/grid_shapes/aether.json.whole @@ -0,0 +1,42 @@ + +{ + "Debug" : { + "dt": 1.0, + "TimingPercent": 10.0, + "iVerbose" : 0}, + + "EndTime" : [2011, 3, 20, 0, 1, 0], + + "neuGrid" : { + "Shape": "cubesphere", + "nLonsPerBlock" : 22, + "nLatsPerBlock" : 22, + "nAlts" : 30, + "MinAlt": 95, + "LatRange": [-90, 90], + "LonRange": [0.0, 360.0], + "dAltScale" : 0.3, + "IsUniformAlt" : false}, + + "ionGrid": { + "Shape": "sphere6", + "nLonsPerBlock": 32, + "nLatsPerBlock": 16, + "nAlts": 40, + "MinAlt": 80, + "LatRange": [-90.0, 90.0], + "LonRange": [0.0, 360.0], + "dAltScale" : 0.3, + "IsUniformAlt" : false}, + + "OmniwebFiles" : ["UA/inputs/omni_20110319.txt"], + + "Electrodynamics" : { + "Potential" : "Weimer05", + "DiffuseAurora" : "fta"}, + + "Outputs" : { + "type" : ["states"], + "dt" : [60] } + +} diff --git a/tests/grid_shapes/aether_cube_cube.json b/tests/grid_shapes/aether_cube_cube.json new file mode 100644 index 00000000..b8e19691 --- /dev/null +++ b/tests/grid_shapes/aether_cube_cube.json @@ -0,0 +1,42 @@ + +{ + "Debug" : { + "dt": 1.0, + "TimingPercent": 10.0, + "iVerbose" : 0}, + + "EndTime" : [2011, 3, 20, 0, 1, 0], + + "neuGrid" : { + "Shape": "cubesphere", + "nLonsPerBlock" : 22, + "nLatsPerBlock" : 22, + "nAlts" : 30, + "MinAlt": 95, + "LatRange": [-90, 90], + "LonRange": [0.0, 360.0], + "dAltScale" : 0.3, + "IsUniformAlt" : false}, + + "ionGrid": { + "Shape": "cubesphere", + "nLonsPerBlock": 32, + "nLatsPerBlock": 32, + "nAlts": 40, + "MinAlt": 80, + "LatRange": [-90, 90], + "LonRange": [0.0, 360.0], + "dAltScale" : 0.3, + "IsUniformAlt" : false}, + + "OmniwebFiles" : ["UA/inputs/omni_20110319.txt"], + + "Electrodynamics" : { + "Potential" : "Weimer05", + "DiffuseAurora" : "fta"}, + + "Outputs" : { + "type" : ["states"], + "dt" : [60] } + +} diff --git a/tests/grid_shapes/aether_cube_dipole6.json b/tests/grid_shapes/aether_cube_dipole6.json new file mode 100644 index 00000000..696d0352 --- /dev/null +++ b/tests/grid_shapes/aether_cube_dipole6.json @@ -0,0 +1,42 @@ + +{ + "Debug" : { + "dt": 1.0, + "TimingPercent": 10.0, + "iVerbose" : 0}, + + "EndTime" : [2011, 3, 20, 0, 1, 0], + + "neuGrid" : { + "Shape": "cubesphere", + "nLonsPerBlock" : 22, + "nLatsPerBlock" : 22, + "nAlts" : 30, + "MinAlt": 95, + "LatRange": [-90, 90], + "LonRange": [0.0, 360.0], + "dAltScale" : 0.3, + "IsUniformAlt" : false}, + + "ionGrid": { + "Shape": "dipole6", + "nLonsPerBlock": 32, + "nLatsPerBlock": 16, + "nAlts": 40, + "MinAlt": 80, + "LatRange": [10.0, 80.0], + "LonRange": [0.0, 360.0], + "dAltScale" : 0.3, + "IsUniformAlt" : false}, + + "OmniwebFiles" : ["UA/inputs/omni_20110319.txt"], + + "Electrodynamics" : { + "Potential" : "Weimer05", + "DiffuseAurora" : "fta"}, + + "Outputs" : { + "type" : ["states"], + "dt" : [60] } + +} diff --git a/tests/grid_shapes/aether_cube_sphere6.json b/tests/grid_shapes/aether_cube_sphere6.json new file mode 100644 index 00000000..84033c7b --- /dev/null +++ b/tests/grid_shapes/aether_cube_sphere6.json @@ -0,0 +1,42 @@ + +{ + "Debug" : { + "dt": 1.0, + "TimingPercent": 10.0, + "iVerbose" : 0}, + + "EndTime" : [2011, 3, 20, 0, 1, 0], + + "neuGrid" : { + "Shape": "cubesphere", + "nLonsPerBlock" : 22, + "nLatsPerBlock" : 22, + "nAlts" : 30, + "MinAlt": 95, + "LatRange": [-90, 90], + "LonRange": [0.0, 360.0], + "dAltScale" : 0.3, + "IsUniformAlt" : false}, + + "ionGrid": { + "Shape": "sphere6", + "nLonsPerBlock": 32, + "nLatsPerBlock": 16, + "nAlts": 40, + "MinAlt": 80, + "LatRange": [-90.0, 90.0], + "LonRange": [0.0, 360.0], + "dAltScale" : 0.3, + "IsUniformAlt" : false}, + + "OmniwebFiles" : ["UA/inputs/omni_20110319.txt"], + + "Electrodynamics" : { + "Potential" : "Weimer05", + "DiffuseAurora" : "fta"}, + + "Outputs" : { + "type" : ["states"], + "dt" : [60] } + +} diff --git a/tests/grid_shapes/aether_sphere4_dipole4.json b/tests/grid_shapes/aether_sphere4_dipole4.json new file mode 100644 index 00000000..19b55f43 --- /dev/null +++ b/tests/grid_shapes/aether_sphere4_dipole4.json @@ -0,0 +1,42 @@ + +{ + "Debug" : { + "dt": 1.0, + "TimingPercent": 10.0, + "iVerbose" : 0}, + + "EndTime" : [2011, 3, 20, 0, 1, 0], + + "neuGrid" : { + "Shape": "sphere4", + "nLonsPerBlock" : 22, + "nLatsPerBlock" : 22, + "nAlts" : 30, + "MinAlt": 95, + "LatRange": [-90, 90], + "LonRange": [0.0, 360.0], + "dAltScale" : 0.3, + "IsUniformAlt" : false}, + + "ionGrid": { + "Shape": "dipole4", + "nLonsPerBlock": 32, + "nLatsPerBlock": 16, + "nAlts": 40, + "MinAlt": 80, + "LatRange": [10.0, 80.0], + "LonRange": [0.0, 360.0], + "dAltScale" : 0.3, + "IsUniformAlt" : false}, + + "OmniwebFiles" : ["UA/inputs/omni_20110319.txt"], + + "Electrodynamics" : { + "Potential" : "Weimer05", + "DiffuseAurora" : "fta"}, + + "Outputs" : { + "type" : ["states"], + "dt" : [60] } + +} diff --git a/tests/grid_shapes/aether_sphere4_sphere4.json b/tests/grid_shapes/aether_sphere4_sphere4.json new file mode 100644 index 00000000..b402b0f5 --- /dev/null +++ b/tests/grid_shapes/aether_sphere4_sphere4.json @@ -0,0 +1,42 @@ + +{ + "Debug" : { + "dt": 1.0, + "TimingPercent": 10.0, + "iVerbose" : 0}, + + "EndTime" : [2011, 3, 20, 0, 1, 0], + + "neuGrid" : { + "Shape": "sphere4", + "nLonsPerBlock" : 22, + "nLatsPerBlock" : 22, + "nAlts" : 30, + "MinAlt": 95, + "LatRange": [-90, 90], + "LonRange": [0.0, 360.0], + "dAltScale" : 0.3, + "IsUniformAlt" : false}, + + "ionGrid": { + "Shape": "sphere4", + "nLonsPerBlock": 32, + "nLatsPerBlock": 16, + "nAlts": 40, + "MinAlt": 80, + "LatRange": [-90, 90], + "LonRange": [0.0, 360.0], + "dAltScale" : 0.3, + "IsUniformAlt" : false}, + + "OmniwebFiles" : ["UA/inputs/omni_20110319.txt"], + + "Electrodynamics" : { + "Potential" : "Weimer05", + "DiffuseAurora" : "fta"}, + + "Outputs" : { + "type" : ["states"], + "dt" : [60] } + +} diff --git a/tests/grid_shapes/aether_sphere6_dipole6.json b/tests/grid_shapes/aether_sphere6_dipole6.json new file mode 100644 index 00000000..c0bac693 --- /dev/null +++ b/tests/grid_shapes/aether_sphere6_dipole6.json @@ -0,0 +1,42 @@ + +{ + "Debug" : { + "dt": 1.0, + "TimingPercent": 10.0, + "iVerbose" : 0}, + + "EndTime" : [2011, 3, 20, 0, 1, 0], + + "neuGrid" : { + "Shape": "sphere6", + "nLonsPerBlock" : 26, + "nLatsPerBlock" : 22, + "nAlts" : 30, + "MinAlt": 95, + "LatRange": [-90, 90], + "LonRange": [0.0, 360.0], + "dAltScale" : 0.3, + "IsUniformAlt" : false}, + + "ionGrid": { + "Shape": "dipole6", + "nLonsPerBlock": 32, + "nLatsPerBlock": 16, + "nAlts": 40, + "MinAlt": 80, + "LatRange": [10.0, 80.0], + "LonRange": [0.0, 360.0], + "dAltScale" : 0.3, + "IsUniformAlt" : false}, + + "OmniwebFiles" : ["UA/inputs/omni_20110319.txt"], + + "Electrodynamics" : { + "Potential" : "Weimer05", + "DiffuseAurora" : "fta"}, + + "Outputs" : { + "type" : ["states"], + "dt" : [60] } + +} diff --git a/tests/grid_shapes/aether_sphere6_sphere6.json b/tests/grid_shapes/aether_sphere6_sphere6.json new file mode 100644 index 00000000..3b8a1c68 --- /dev/null +++ b/tests/grid_shapes/aether_sphere6_sphere6.json @@ -0,0 +1,42 @@ + +{ + "Debug" : { + "dt": 1.0, + "TimingPercent": 10.0, + "iVerbose" : 0}, + + "EndTime" : [2011, 3, 20, 0, 1, 0], + + "neuGrid" : { + "Shape": "sphere6", + "nLonsPerBlock" : 22, + "nLatsPerBlock" : 22, + "nAlts" : 30, + "MinAlt": 95, + "LatRange": [-90, 90], + "LonRange": [0.0, 360.0], + "dAltScale" : 0.3, + "IsUniformAlt" : false}, + + "ionGrid": { + "Shape": "sphere6", + "nLonsPerBlock": 32, + "nLatsPerBlock": 16, + "nAlts": 40, + "MinAlt": 80, + "LatRange": [-90.0, 90.0], + "LonRange": [0.0, 360.0], + "dAltScale" : 0.3, + "IsUniformAlt" : false}, + + "OmniwebFiles" : ["UA/inputs/omni_20110319.txt"], + + "Electrodynamics" : { + "Potential" : "Weimer05", + "DiffuseAurora" : "fta"}, + + "Outputs" : { + "type" : ["states"], + "dt" : [60] } + +} diff --git a/tests/grid_shapes/aether_sphere_sphere.json b/tests/grid_shapes/aether_sphere_sphere.json new file mode 100644 index 00000000..935880b3 --- /dev/null +++ b/tests/grid_shapes/aether_sphere_sphere.json @@ -0,0 +1,42 @@ + +{ + "Debug" : { + "dt": 1.0, + "TimingPercent": 10.0, + "iVerbose" : 0}, + + "EndTime" : [2011, 3, 20, 0, 1, 0], + + "neuGrid" : { + "Shape": "sphere", + "nLonsPerBlock" : 32, + "nLatsPerBlock" : 16, + "nAlts" : 30, + "MinAlt": 95, + "LatRange": [-90, 90], + "LonRange": [0.0, 360.0], + "dAltScale" : 0.3, + "IsUniformAlt" : false}, + + "ionGrid": { + "Shape": "sphere", + "nLonsPerBlock": 42, + "nLatsPerBlock": 22, + "nAlts": 40, + "MinAlt": 80, + "LatRange": [-90, 90], + "LonRange": [0.0, 360.0], + "dAltScale" : 0.3, + "IsUniformAlt" : false}, + + "OmniwebFiles" : ["UA/inputs/omni_20110319.txt"], + + "Electrodynamics" : { + "Potential" : "Weimer05", + "DiffuseAurora" : "fta"}, + + "Outputs" : { + "type" : ["states"], + "dt" : [60] } + +} diff --git a/tests/grid_shapes/run_test.sh b/tests/grid_shapes/run_test.sh new file mode 100755 index 00000000..4c87f3d0 --- /dev/null +++ b/tests/grid_shapes/run_test.sh @@ -0,0 +1,92 @@ +#!/bin/sh + +RUN=sphere_sphere +PE=1 +rm -rf ./run.${RUN} +cp -R ../../share/run ./run.${RUN} +cd run.${RUN} +cp ../aether_${RUN}.json ./aether.json +mpirun -np ${PE} ./aether +../../../srcPython/postAether.py -rm +cd .. + +RUN=sphere_sphere +PE=4 +rm -rf ./run.${RUN} +cp -R ../../share/run ./run.${RUN} +cd run.${RUN} +cp ../aether_${RUN}.json ./aether.json +mpirun -np ${PE} ./aether +../../../srcPython/postAether.py -rm +cd .. + +RUN=sphere4_sphere4 +PE=4 +rm -rf ./run.${RUN} +cp -R ../../share/run ./run.${RUN} +cd run.${RUN} +cp ../aether_${RUN}.json ./aether.json +mpirun -np ${PE} ./aether +../../../srcPython/postAether.py -rm +cd .. + +RUN=sphere6_sphere6 +PE=6 +rm -rf ./run.${RUN} +cp -R ../../share/run ./run.${RUN} +cd run.${RUN} +cp ../aether_${RUN}.json ./aether.json +mpirun -np ${PE} ./aether +../../../srcPython/postAether.py -rm +cd .. + +RUN=cube_cube +PE=6 +rm -rf ./run.${RUN} +cp -R ../../share/run ./run.${RUN} +cd run.${RUN} +cp ../aether_${RUN}.json ./aether.json +mpirun -np ${PE} ./aether +../../../srcPython/postAether.py -rm +cd .. + +RUN=cube_sphere6 +PE=6 +rm -rf ./run.${RUN} +cp -R ../../share/run ./run.${RUN} +cd run.${RUN} +cp ../aether_${RUN}.json ./aether.json +mpirun -np ${PE} ./aether +../../../srcPython/postAether.py -rm +cd .. + +RUN=sphere4_dipole4 +PE=4 +rm -rf ./run.${RUN} +cp -R ../../share/run ./run.${RUN} +cd run.${RUN} +cp ../aether_${RUN}.json ./aether.json +mpirun -np ${PE} ./aether +../../../srcPython/postAether.py -rm +cd .. + +RUN=cube_dipole6 +PE=6 +rm -rf ./run.${RUN} +cp -R ../../share/run ./run.${RUN} +cd run.${RUN} +cp ../aether_${RUN}.json ./aether.json +mpirun -np ${PE} ./aether +../../../srcPython/postAether.py -rm +cd .. + +RUN=sphere6_dipole6 +PE=6 +rm -rf ./run.${RUN} +cp -R ../../share/run ./run.${RUN} +cd run.${RUN} +cp ../aether_${RUN}.json ./aether.json +mpirun -np ${PE} ./aether +../../../srcPython/postAether.py -rm +cd .. + diff --git a/tests/restart_cubesphere/aether.whole.json b/tests/restart_cubesphere/aether.whole.json index 8a70fef8..7e683f29 100644 --- a/tests/restart_cubesphere/aether.whole.json +++ b/tests/restart_cubesphere/aether.whole.json @@ -15,8 +15,6 @@ "Electrodynamics" : { "File" : "UA/inputs/b20110320n_omni.bin"}, - "OmniwebFiles" : ["UA/inputs/omni_20110319.txt"], - "CubeSphere" : { "is" : true}, diff --git a/tests/restart_ensembles/aether.json.restart1 b/tests/restart_ensembles/aether.json.restart1 deleted file mode 100644 index ecf11375..00000000 --- a/tests/restart_ensembles/aether.json.restart1 +++ /dev/null @@ -1,67 +0,0 @@ - -{ - "Ensembles" : { - "nMembers" : 5}, - - "Perturb": { - "f107" : { "Mean" : 1.0, - "Std" : 0.1, - "Add" : false, - "Constant" : true}, - "f107a" : { "Mean" : 1.0, - "Std" : 0.02, - "Add" : false, - "Constant" : true}}, - - "Restart" : { - "do" : true, - "OutDir" : "UA/restartOut", - "InDir" : "UA/restartIn", - "dt" : 3600.0}, - - "Debug" : { - "iVerbose" : 0, - "iFunctionVerbose" : { - "Grid::create_altitudes": 0}, - "dt" : 10.0, - "check_for_nans" : false - }, - - "EndTime" : [2011, 3, 20, 0, 10, 0], - - "GeoBlockSize" : { - "nLons" : 18, - "nLats" : 18, - "nAlts" : 50}, - - "GeoGrid" : { - "dAlt" : 0.25, - "IsUniformAlt" : false}, - - "InitialConditions" : { - "type" : "msis"}, - - "BoundaryConditions" : { - "type" : "msis"}, - - "Advection" : { - "Neutrals" : { - "Vertical" : "hydro", - "Horizontal" : "default"}, - "Ions" : { - "Along" : "rusanov", - "Across" : "default"} }, - - "OmniwebFiles" : ["UA/inputs/omni_20110319.txt"], - - "ElectrodynamicsFile" : "UA/inputs/b20110320n_omni.bin", - - "Outputs" : { - "type" : ["states"], - "dt" : [900] }, - - "DoCalcBulkIonTemp" : false, - - "PlanetFile" : "UA/inputs/earth.in" - -} diff --git a/tests/restart_ensembles/aether.json.restart2 b/tests/restart_ensembles/aether.json.restart2 deleted file mode 100644 index 2d83d738..00000000 --- a/tests/restart_ensembles/aether.json.restart2 +++ /dev/null @@ -1,67 +0,0 @@ - -{ - "Ensembles" : { - "nMembers" : 5}, - - "Perturb": { - "f107" : { "Mean" : 0.9, - "Std" : 0.1, - "Add" : false, - "Constant" : true}, - "f107a" : { "Mean" : 1.0, - "Std" : 0.02, - "Add" : false, - "Constant" : true}}, - - "Restart" : { - "do" : true, - "OutDir" : "UA/restartOut", - "InDir" : "UA/restartIn", - "dt" : 3600.0}, - - "Debug" : { - "iVerbose" : 0, - "iFunctionVerbose" : { - "Grid::create_altitudes": 0}, - "dt" : 10.0, - "check_for_nans" : false - }, - - "EndTime" : [2011, 3, 20, 0, 10, 0], - - "GeoBlockSize" : { - "nLons" : 18, - "nLats" : 18, - "nAlts" : 50}, - - "GeoGrid" : { - "dAlt" : 0.25, - "IsUniformAlt" : false}, - - "InitialConditions" : { - "type" : "msis"}, - - "BoundaryConditions" : { - "type" : "msis"}, - - "Advection" : { - "Neutrals" : { - "Vertical" : "hydro", - "Horizontal" : "default"}, - "Ions" : { - "Along" : "rusanov", - "Across" : "default"} }, - - "OmniwebFiles" : ["UA/inputs/omni_20110319.txt"], - - "ElectrodynamicsFile" : "UA/inputs/b20110320n_omni.bin", - - "Outputs" : { - "type" : ["states"], - "dt" : [900] }, - - "DoCalcBulkIonTemp" : false, - - "PlanetFile" : "UA/inputs/earth.in" - -} diff --git a/tests/restart_ensembles/aether.json.start b/tests/restart_ensembles/aether.json.start deleted file mode 100644 index da15c5ee..00000000 --- a/tests/restart_ensembles/aether.json.start +++ /dev/null @@ -1,67 +0,0 @@ - -{ - "Ensembles" : { - "nMembers" : 5}, - - "Perturb": { - "f107" : { "Mean" : 1.0, - "Std" : 0.1, - "Add" : false, - "Constant" : true}, - "f107a" : { "Mean" : 1.0, - "Std" : 0.02, - "Add" : false, - "Constant" : true}}, - - "Restart" : { - "do" : false, - "OutDir" : "UA/restartOut", - "InDir" : "UA/restartIn", - "dt" : 3600.0}, - - "Debug" : { - "iVerbose" : 0, - "iFunctionVerbose" : { - "Grid::create_altitudes": 0}, - "dt" : 10.0, - "check_for_nans" : false - }, - - "EndTime" : [2011, 3, 20, 0, 5, 0], - - "GeoBlockSize" : { - "nLons" : 18, - "nLats" : 18, - "nAlts" : 50}, - - "GeoGrid" : { - "dAlt" : 0.25, - "IsUniformAlt" : false}, - - "InitialConditions" : { - "type" : "msis"}, - - "BoundaryConditions" : { - "type" : "msis"}, - - "Advection" : { - "Neutrals" : { - "Vertical" : "hydro", - "Horizontal" : "default"}, - "Ions" : { - "Along" : "rusanov", - "Across" : "default"} }, - - "OmniwebFiles" : ["UA/inputs/omni_20110319.txt"], - - "ElectrodynamicsFile" : "UA/inputs/b20110320n_omni.bin", - - "Outputs" : { - "type" : ["states"], - "dt" : [900] }, - - "DoCalcBulkIonTemp" : false, - - "PlanetFile" : "UA/inputs/earth.in" - -} diff --git a/tests/restart_ensembles/aether.json.whole b/tests/restart_ensembles/aether.json.whole index 5805cf9b..797526d5 100644 --- a/tests/restart_ensembles/aether.json.whole +++ b/tests/restart_ensembles/aether.json.whole @@ -1,42 +1,48 @@ { "Ensembles" : { - "nMembers" : 5}, + "nMembers" : 3}, "Perturb": { "f107" : { "Mean" : 1.0, "Std" : 0.1, "Add" : false, - "Constant" : true}, - "f107a" : { "Mean" : 1.0, - "Std" : 0.02, - "Add" : false, - "Constant" : true}}, + "Constant" : true}}, "Restart" : { "do" : false, - "OutDir" : "UA/restartOut", - "InDir" : "UA/restartIn", - "dt" : 3600.0}, + "dt" : 900.0}, "Debug" : { - "iVerbose" : 0, - "iFunctionVerbose" : { - "Grid::create_altitudes": 0}, - "dt" : 10.0, - "check_for_nans" : false - }, + "iVerbose" : 0}, - "EndTime" : [2011, 3, 20, 0, 10, 0], + "StartTime" : [2011, 3, 20, 0, 0, 0], + "EndTime" : [2011, 3, 20, 0, 6, 0], - "GeoBlockSize" : { - "nLons" : 18, - "nLats" : 18, - "nAlts" : 50}, - - "GeoGrid" : { - "dAlt" : 0.25, - "IsUniformAlt" : false}, + "Perturb": { + "f107" : { "Mean" : 1.0, + "Std" : 0.10, + "Add" : false, + "Constant" : true}}, + + "neuGrid" : { + "Shape": "cubesphere", + "nLonsPerBlock" : 20, + "nLatsPerBlock" : 20, + "nAlts" : 30, + "dAltScale" : 0.3, + "IsUniformAlt" : false}, + + "ionGrid": { + "Shape": "cubesphere", + "nLonsPerBlock": 16, + "nLatsPerBlock": 16, + "nAlts": 30, + "LatRange": [-90, 90], + "AltRange": [100.0, 1000], + "LonRange": [0.0, 360.0], + "dAltScale" : 0.3, + "IsUniformAlt" : false}, "InitialConditions" : { "type" : "msis"}, @@ -44,24 +50,15 @@ "BoundaryConditions" : { "type" : "msis"}, - "Advection" : { - "Neutrals" : { - "Vertical" : "hydro", - "Horizontal" : "default"}, - "Ions" : { - "Along" : "rusanov", - "Across" : "default"} }, + "Electrodynamics" : { + "Potential" : "Weimer05", + "DiffuseAurora" : "fta", + "File": "UA/inputs/b20110320n_omni.bin"}, "OmniwebFiles" : ["UA/inputs/omni_20110319.txt"], - - "ElectrodynamicsFile" : "UA/inputs/b20110320n_omni.bin", "Outputs" : { "type" : ["states"], - "dt" : [900] }, - - "DoCalcBulkIonTemp" : false, - - "PlanetFile" : "UA/inputs/earth.in" + "dt" : [60] } } diff --git a/tests/restart_ensembles/run_all.sh b/tests/restart_ensembles/run_all.sh index 64de4caa..636549b8 100755 --- a/tests/restart_ensembles/run_all.sh +++ b/tests/restart_ensembles/run_all.sh @@ -1,38 +1,17 @@ #!/bin/sh -rm -rf run.test -cp -R ../../share/run ./run.test -cd run.test - -rm -f aether.json UA/output/* -rm -rf UA/restart* ; mkdir UA/restartOut -rm -rf UA/output_whole -rm -rf UA/output_nonperturbed -rm -rf UA/output_perturbed -rm -rf UA/output_save - -cp ../aether.json.whole aether.json -mpirun -np 20 ./aether -cd UA/output ; ../../../../../srcPython/plot_logfiles.py -vars=10 log_m00*.txt ; cd - -cd UA ; mv output output_whole ; mkdir output ; cd - -rm -f aether.json - -rm -f aether.json UA/output/* UA/restartOut/* -cp ../aether.json.start aether.json -mpirun -np 20 ./aether -cd UA ; mv restartOut restartIn ; mkdir restartOut ; cd - -cd UA ; cp -R output output_save ; cd .. - -rm -f aether.json -cp ../aether.json.restart1 aether.json -mpirun -np 20 ./aether -cd UA/output ; ../../../../../srcPython/plot_logfiles.py -vars=10 log_m00*.txt ; cd - -cd UA ; mv output output_nonperturbed ; cp -R output_save output ; cd - - -rm -f aether.json -cp ../aether.json.restart2 aether.json -mpirun -np 20 ./aether -cd UA/output ; ../../../../../srcPython/plot_logfiles.py -vars=10 log_m00*.txt ; cd - -cd UA ; mv output output_perturbed ; mkdir output ; cd - - +# cubesphere has 6 blocks: +NBLOCKS=6 +# run with 3 members: +NMEMBERS=2 +# run for a total of 180s +TOTALTIME=180 +# this is the mpi command +MPI=/usr/bin/mpirun +# stop this many times +NTIMES=2 + +# include -dowhole to run the whole simulation as comparison: + +../../srcPython/run_restarts.py -totaltime=${TOTALTIME} -mpi=${MPI} -rundir=../../share/run -ensembles=${NMEMBERS} -restarts=${NTIMES} -blocks=${NBLOCKS} diff --git a/tests/restarts/aether.first.json b/tests/restarts/aether.first.json index 614f0596..d8ae5f16 100644 --- a/tests/restarts/aether.first.json +++ b/tests/restarts/aether.first.json @@ -5,21 +5,49 @@ "iVerbose" : 0, "dt" : 10.0}, - "GeoBlockSize" : { - "nLons" : 18, - "nLats" : 18, - "nAlts" : 50}, + "neuGrid" : { + "Shape" : "sphere", + "nLons" : 12, + "nLats" : 12, + "nAlts" : 30, + "dAltScale" : 0.3, + "IsUniformAlt" : false}, + + "ionGrid": { + "Shape": "sphere", + "nLonsPerBlock": 18, + "nLatsPerBlock" : 18, + "nAlts":36, + "LatRange": [-90, 90], + "AltRange": [100.0, 1000], + "LonRange": [0.0, 360.0], + "dAltScale" : 0.3, + "IsUniformAlt" : false}, "StartTime" : [2011, 3, 20, 0, 0, 0], - "EndTime" : [2011, 3, 20, 0, 15, 0], + "EndTime" : [2011, 3, 20, 0, 5, 0], "Electrodynamics" : { - "File" : "UA/inputs/b20110320n_omni.bin"}, + "Potential" : "Weimer05", + "DiffuseAurora" : "fta", + "File": "UA/inputs/b20110320n_omni.bin"}, + "InitialConditions" : { + "type" : "msis"}, + + "BoundaryConditions" : { + "type" : "msis"}, + "OmniwebFiles" : ["UA/inputs/omni_20110319.txt"], + "Outputs" : { + "type" : ["states"], + "dt" : [60]}, + "Restart" : { "do" : false, - "dt" : 900.0} + "dt" : 900.0}, + + "PlanetFile" : "UA/inputs/earth.in" } diff --git a/tests/restarts/aether.second.json b/tests/restarts/aether.second.json index 1852fdd1..d9aa928b 100644 --- a/tests/restarts/aether.second.json +++ b/tests/restarts/aether.second.json @@ -5,21 +5,9 @@ "iVerbose" : 0, "dt" : 10.0}, - "GeoBlockSize" : { - "nLons" : 18, - "nLats" : 18, - "nAlts" : 50}, - - "StartTime" : [2011, 3, 20, 0, 0, 0], - "EndTime" : [2011, 3, 20, 0, 30, 0], + "EndTime" : [2011, 3, 20, 0, 10, 0], - "Electrodynamics" : { - "File" : "UA/inputs/b20110320n_omni.bin"}, - - "OmniwebFiles" : ["UA/inputs/omni_20110319.txt"], - "Restart" : { - "do" : true, - "dt" : 900.0} + "do" : true} } diff --git a/tests/restarts/aether.whole.json b/tests/restarts/aether.whole.json index 3403f37f..f421033d 100644 --- a/tests/restarts/aether.whole.json +++ b/tests/restarts/aether.whole.json @@ -5,21 +5,49 @@ "iVerbose" : 0, "dt" : 10.0}, - "GeoBlockSize" : { - "nLons" : 18, - "nLats" : 18, - "nAlts" : 50}, + "neuGrid" : { + "Shape" : "sphere", + "nLons" : 12, + "nLats" : 12, + "nAlts" : 30, + "dAltScale" : 0.3, + "IsUniformAlt" : false}, + + "ionGrid": { + "Shape": "sphere", + "nLonsPerBlock": 18, + "nLatsPerBlock" : 18, + "nAlts":36, + "LatRange": [-90, 90], + "AltRange": [100.0, 1000], + "LonRange": [0.0, 360.0], + "dAltScale" : 0.3, + "IsUniformAlt" : false}, "StartTime" : [2011, 3, 20, 0, 0, 0], - "EndTime" : [2011, 3, 20, 0, 30, 0], + "EndTime" : [2011, 3, 20, 0, 10, 0], "Electrodynamics" : { - "File" : "UA/inputs/b20110320n_omni.bin"}, + "Potential" : "Weimer05", + "DiffuseAurora" : "fta", + "File": "UA/inputs/b20110320n_omni.bin"}, + "InitialConditions" : { + "type" : "msis"}, + + "BoundaryConditions" : { + "type" : "msis"}, + "OmniwebFiles" : ["UA/inputs/omni_20110319.txt"], + "Outputs" : { + "type" : ["states"], + "dt" : [60]}, + "Restart" : { "do" : false, - "dt" : 900.0} + "dt" : 900.0}, + + "PlanetFile" : "UA/inputs/earth.in" } diff --git a/tests/restarts/run_test.sh b/tests/restarts/run_test.sh index 1373de1e..1389ad96 100755 --- a/tests/restarts/run_test.sh +++ b/tests/restarts/run_test.sh @@ -7,20 +7,25 @@ cd run.halves # first part of the run cp ../aether.first.json ./aether.json ./aether + cd UA ; rm -f restartIn ; cp -R restartOut restartIn ; cd .. # second part of the run cp ../aether.second.json ./aether.json ./aether + + # plot the output cd UA/output ../../../../../srcPython/postAether.py -alt=-1 -rm # [O]: -aether_plot_simple.py -var=density_O -alt=250 3DALL_20110320_003000.nc +aether_plot_simple.py -var=density_O -alt=250 3DALG_20110320_00*.nc # Tn: -aether_plot_simple.py -var=Temperature_neutral -alt=250 3DALL_20110320_003000.nc +aether_plot_simple.py -var=Temperature_neutral -alt=250 3DALG_20110320_00*.nc # [e-] -aether_plot_simple.py -var=density_e- -alt=250 3DALL_20110320_003000.nc +aether_plot_simple.py -var=density_e- -alt=120 3DALG_20110320_00*.nc +# East Velocity +aether_plot_simple.py -var=velocity_east_neutral -alt=250 3DALG_20110320_00*.nc cd ../../.. @@ -32,11 +37,13 @@ cp ../aether.whole.json ./aether.json cd UA/output ../../../../../srcPython/postAether.py -alt=-1 -rm # [O]: -aether_plot_simple.py -var=density_O -alt=250 3DALL_20110320_003000.nc +aether_plot_simple.py -var=density_O -alt=250 3DALG_20110320_00*.nc # Tn: -aether_plot_simple.py -var=Temperature_neutral -alt=250 3DALL_20110320_003000.nc +aether_plot_simple.py -var=Temperature_neutral -alt=250 3DALG_20110320_00*.nc # [e-] -aether_plot_simple.py -var=density_e- -alt=250 3DALL_20110320_003000.nc +aether_plot_simple.py -var=density_e- -alt=120 3DALG_20110320_00*.nc +# East Velocity +aether_plot_simple.py -var=velocity_east_neutral -alt=250 3DALG_20110320_00*.nc cd ../../..