Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Domain - Create netCDF Files #383

Merged
merged 77 commits into from
Jan 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
b0683b6
New files - `SW_netCDF.c/h`
N1ckP3rsl3y Nov 11, 2023
968a6e2
Add stub functions for branch
N1ckP3rsl3y Nov 12, 2023
66a8c23
Generate basic domain netCDF
N1ckP3rsl3y Nov 12, 2023
c4e9472
Replace `sprintf()` with `snprintf()` in `SW_netCDF.c`
N1ckP3rsl3y Nov 12, 2023
9e56405
Fill `SW_DOM_calc_ncStartSuid()`
N1ckP3rsl3y Nov 12, 2023
1b8fbc0
New directory - `Input_nc/` and `files_nc.in`
N1ckP3rsl3y Nov 12, 2023
76281ed
Read `files_nc.in`
N1ckP3rsl3y Nov 13, 2023
a77b0fd
Fill `SW_NC_check_input_files()`
N1ckP3rsl3y Nov 13, 2023
931d5d9
Simplify `SW_NC_create_domain_template()` interface
N1ckP3rsl3y Nov 13, 2023
cc8dfde
Correct variable dimensions when creating domain netCDF
N1ckP3rsl3y Nov 13, 2023
c2b76c4
Replace `#ifdef SW_NETCDF` with `#if defined(SWNETCDF)`
N1ckP3rsl3y Nov 13, 2023
3e7ca8b
makefile for netCDF support
dschlaep Nov 13, 2023
0277360
New `CopyFile()` to copy a file as is
dschlaep Nov 13, 2023
9707623
Merge branch 'release/devel_v8.0.0' into feature_nc_domain
dschlaep Nov 14, 2023
e3bf1d6
New struct SW_CRS
N1ckP3rsl3y Nov 25, 2023
847f4d5
New struct SW_NETCDF
N1ckP3rsl3y Nov 25, 2023
c9950c9
New user inputs: bounding box coordinates (domain.in)
N1ckP3rsl3y Nov 25, 2023
831ce41
Make netCDF-related code more general
N1ckP3rsl3y Nov 27, 2023
d127dbc
Correct `LogError()` messages in SW_Control & SW_netCDF
N1ckP3rsl3y Nov 27, 2023
6c810e6
Correct start SUID calculation in `SW_DOM_calc_ncStartSuid()`
N1ckP3rsl3y Nov 27, 2023
f64bc56
Update `files_nc.in` to specify first and second "value" in key-value…
N1ckP3rsl3y Nov 27, 2023
f4c4888
New input file: attributes_nc.in
N1ckP3rsl3y Nov 28, 2023
9903b40
nc_read_atts(): read 1 or 2 values for standard parallel
dschlaep Nov 29, 2023
8f5a722
New generic function `key_to_id()`
N1ckP3rsl3y Dec 6, 2023
4294ae3
Replace all `ncStartSuid` with `ncSuid`
N1ckP3rsl3y Dec 6, 2023
1f0417c
Update input buffer sizes for large (CRS) values
N1ckP3rsl3y Dec 6, 2023
55e4a07
Correct `attributes_nc.in` information
N1ckP3rsl3y Dec 6, 2023
8c2430c
Move `ncFileIDs` between structs + change primary geo CRS identifier
N1ckP3rsl3y Dec 6, 2023
2ba3009
Correct the read-in indices for `attribute_nc.in` key-value pairs
N1ckP3rsl3y Dec 6, 2023
ba4d0e1
Allow spaces in user input of "crs_bbox"
dschlaep Dec 6, 2023
9e84c4b
Make input reading more secure
N1ckP3rsl3y Dec 10, 2023
46e49fb
Generate CRS & global netCDF attributes
N1ckP3rsl3y Dec 10, 2023
9a1e987
Update `crs_wkt` in `attributes_nc.in` to no longer include '\'
N1ckP3rsl3y Dec 10, 2023
5cf1a91
Restructure `fill_domain_netCDF_s` + add attributes to function
N1ckP3rsl3y Dec 16, 2023
a84134a
New function `fill_domain_netCDF_domain()`
N1ckP3rsl3y Dec 16, 2023
8a94782
Clean code of `fill_netCDF_with_global_atts` + add frequency netCDF var
N1ckP3rsl3y Dec 16, 2023
b9cbd60
Write attributes for variables in domain type "xy"
N1ckP3rsl3y Dec 17, 2023
acaa9db
Simplify `fill_netCDF_with_*_CRS_atts()`
N1ckP3rsl3y Dec 17, 2023
473ff66
Remove/modify unnecessary arguments for `fill_netCDF_with_invariants()`
N1ckP3rsl3y Dec 17, 2023
961ebe5
New function `write_uint_att()`
N1ckP3rsl3y Dec 18, 2023
9d566f9
Fill domain variables with values (domain netCDF)
N1ckP3rsl3y Dec 18, 2023
1aebbd6
Correct misspelling of "dimension"
N1ckP3rsl3y Dec 18, 2023
3cb941c
Calculate nc-attribute coordinate_system from other inputs
dschlaep Dec 18, 2023
4b7a6f6
Fail if user inputs primary CRS type but not corresponding attributes
dschlaep Dec 18, 2023
25ff435
Address 'char *' vs. 'const char *'
dschlaep Dec 18, 2023
1b8b60c
Use backwards compatible input values for spatial bbox
dschlaep Dec 18, 2023
810fedc
Fill domain file variable `*_bnds` with values
N1ckP3rsl3y Dec 20, 2023
ff65c83
Correct lat/lon & y/x unit attribute within domain netCDF
N1ckP3rsl3y Dec 20, 2023
3bccf24
Correct netCDF function doc argument directions (in/out)
N1ckP3rsl3y Dec 20, 2023
25573d3
Implement SW_NETCDF memory management
N1ckP3rsl3y Dec 20, 2023
5f0850e
Fill function stub `SW_NC_check()`
N1ckP3rsl3y Dec 22, 2023
a93b56b
Update SW_DOMAIN memory management
N1ckP3rsl3y Dec 22, 2023
6bb7d9f
Correct `SW_NC_check()` + remove `SW_NC_read_domain()`
N1ckP3rsl3y Dec 23, 2023
ba602a9
Horz. coord. writing depends on CRS bounding box
N1ckP3rsl3y Dec 25, 2023
50b9c07
Fill `SW_NC_read_inputs()`
N1ckP3rsl3y Dec 26, 2023
08a9ad4
Silence mp-gcc12 complier in `SW_NC_init_ptrs()`
N1ckP3rsl3y Dec 26, 2023
c328106
Add compression to netCDF variables
N1ckP3rsl3y Dec 26, 2023
41628ba
Rename `ncInfo` to `SW_netCDF`
N1ckP3rsl3y Dec 29, 2023
19724a8
Misc. SW_netCDF.c changes including whitespace + documenation
N1ckP3rsl3y Dec 29, 2023
2d1c6e4
Close files upon error in SW_netCDF.c
N1ckP3rsl3y Jan 2, 2024
581cca6
Fix segmentation fault + dealloc rest of SW_NETCDF
N1ckP3rsl3y Jan 2, 2024
9858bf0
Remove one site/grid cell exception in `SW_CTL_run_sw()`
N1ckP3rsl3y Jan 2, 2024
703bffb
Check required input from key-value input files
dschlaep Jan 3, 2024
1b1765d
Wrapping up feature_nc_domain
dschlaep Jan 3, 2024
49c87c6
Clarify documentation of `LogError()` and usage of `LogInfo` function…
dschlaep Jan 3, 2024
69cd470
Merge branch 'release/devel_v8.0.0' into feature_nc_domain
dschlaep Jan 3, 2024
bf32168
Guarantee domain netCDF files will be closed
N1ckP3rsl3y Jan 3, 2024
44edc31
`SW_NC_check()` fails upon no geographic CRS
N1ckP3rsl3y Jan 3, 2024
b1d842e
Only get lat/lon values from geographic CRS
N1ckP3rsl3y Jan 3, 2024
528c17b
`SW_NC_read_inputs()` - only get horz. coord. values values from geog…
N1ckP3rsl3y Jan 3, 2024
b20a66c
Rename `DOMAIN_NC` define to `vNCdom`
N1ckP3rsl3y Jan 3, 2024
fa6d965
Update NEWS, README, and user guide
dschlaep Jan 4, 2024
0decf3b
Read suid-specific netCDF inputs into `local_sw` (and not `sw_template`)
dschlaep Jan 4, 2024
2578db8
SW_DOM_read(): check that min <= max of bounding box axes
dschlaep Jan 4, 2024
1207ffa
domain_template.nc now fills both horizontal coordinates increasingly
dschlaep Jan 4, 2024
e9ca483
netCDF domain template: clarify between XY-axes and horizontal coordi…
dschlaep Jan 4, 2024
4e370cd
GHA: new step to compile SOILWAT2 with netCDF support
dschlaep Jan 4, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions .github/workflows/main_nix.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,25 @@ jobs:
run: make clean test_sanitizer


build_ncSW2:
runs-on: ubuntu-latest

steps:
- name: Checkout repository and submodules
uses: actions/checkout@v3
with:
submodules: recursive

- name: Install netCDF-C
run: |
sudo apt-get update
sudo apt-get install libnetcdf-dev

- name: Build binary with netCDF support
run: CPPFLAGS=-DSWNETCDF make clean all



check_code_coverage:
runs-on: ubuntu-latest

Expand Down
37 changes: 34 additions & 3 deletions NEWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,33 @@

# SOILWAT2 v8.0.0-devel

* SOILWAT2 can now be compiled in one of two modes
(#361, #362; @N1ckP3rsl3y, @dschlaep):
* `"netCDF"`-based input (currently limited to the `"domain"`);
this mode is compiled if the new preprocessor definition `"SWNETCDF"`
and the `"netCDF"` library are available,
e.g., `CPPFLAGS=-DSWNETCDF make all`
* text-based input and output (as previously)

* SOILWAT2 now represents a simulation `"domain"`, i.e.,
a set of (independent) simulation units/runs (#360; @N1ckP3rsl3y, @dschlaep).
A `"domain"` is defined by either a set of `"sites"` or by a `"xy"`-grid.
The simulation set consists of simulation units within a `"domain"` that
have not yet been simulated.
Simulation units are identified via `"suid"` (simulation unit identifier).
* Input files are read once and now populate a `"template"`.
* New `SW_CTL_RunSimSet()` loops over the simulation set or runs
one user specified simulation unit.
* Input text files are read once and now populate a `"template"`
that is used for each simulation unit.
* New `SW_CTL_RunSimSet()` loops over the simulation set or
runs one user specified simulation unit.
It writes warning and error messages from all simulation units to the
`logfile` but does not exit if a simulation unit fails
(`main()` will exit with an error if it fails or
if every simulation unit produced an error).
* New `SW_CTL_run_sw()` takes a deep copy of the `"template"` as basis
for each simulation unit.
* For `"netCDF"`-based SOILWAT2, information about the `"domain"`
(i.e., simulation units and their geographic locations) is obtained from
`"domain.nc"` (#361; @N1ckP3rsl3y, @dschlaep).

* Tests now utilize the same template/deep-copy approach (@dschlaep),
i.e., input files from `test/example/` populate a `"template"` and
Expand Down Expand Up @@ -48,6 +60,7 @@
topography (previously in `"siteparam.in"`).
* Input file `"siteparam.in"` lost inputs for geographic coordinates and
topography (content moved to `"modelrun.in"`).
* Input file `"files.in"` gained two entries for `"netCDF"`-based SOILWAT2.
* New command line option `"-s X"` where `X` is a simulation unit identifier;
if the option `"-s X"` is absent or `X` is `0`, then all simulation units
in the simulation `"domain"` are run;
Expand All @@ -58,6 +71,24 @@
then there is (practically) no wall time limit.


## Changes to inputs for `"netCDF"`-based SOILWAT2
* `"netCDF"`-based SOILWAT2 is compiled if the new preprocessor definition
`"SWNETCDF"` is made available, e.g., `CPPFLAGS=-DSWNETCDF make all`
* User-specified paths to `"netCDF"` header and library can be provided as well,
e.g., `CPPFLAGS=-DSWNETCDF NC_CFLAGS="-I/path/to/include" NC_LIBS="-L/path/to/lib" make all`
* New input directory `"Input_nc/"` that describes `"netCDF"`-based inputs
(paths provided by new entries in `"files.in"`).
* New text input file `"files_nc.in"` that lists for each input purpose
(currently, only `"domain"` is implemented)
the path to the `"netCDF"` input file and associated variable name.
* New text input file `"attribues_nc.in"` to provide global attributes and a
geographic (and optionally a projected) `"CRS"` (coordinate reference system)
that describe the `"domain.nc"`.
* A user provided `"domain.nc"` that describes the simulation `"domain"`.
Specifications must be consistent with `"domain.in"`.
If absent, a template is automatically generated based on `"domain.in"`.


# SOILWAT2 v7.2.0
* Simulation output remains the same as the previous version.

Expand Down
24 changes: 13 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
[doxygen]: https://github.com/doxygen/doxygen
[GoogleTest]: https://github.com/google/googletest
[semantic versioning]: https://semver.org/
[netCDF]: https://downloads.unidata.ucar.edu/netcdf/

<br>

Expand Down Expand Up @@ -101,26 +102,27 @@ A full code documentation may be built, see [here](#get_documentation).
- `POSIX API`
- GNU-compliant `make`
- On Windows OS: an installation of `cygwin`
- the `netCDF-C` library (if compiled with [netCDF][] support)

* Clone the repository
(details can be found in the
[manual](doc/additional_pages/A_SOILWAT2_user_guide.md)), for instance,
```{.sh}
```{.sh}
git clone --recursive https://github.com/DrylandEcology/SOILWAT2.git SOILWAT2
```
```

* Build with `make` (see `make help` to print information about all
available targets), for instance,
```{.sh}
cd SOILWAT2/
make
```

You can use a specific compiler, e.g.,
```{.sh}
available targets). For instance,
```{.sh}
make # text-based mode
CPPFLAGS=-DSWNETCDF make # netCDF-based mode
```

* You can use a specific compiler, e.g.,
```{.sh}
CC=gcc make
CC=clang make
```
```
<br>


Expand Down
22 changes: 16 additions & 6 deletions doc/additional_pages/A_SOILWAT2_user_guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
[SOILWAT2]: https://github.com/DrylandEcology/SOILWAT2
[tinytex]: https://yihui.name/tinytex/
[xcode]: https://developer.apple.com/xcode
[netCDF]: https://downloads.unidata.ucar.edu/netcdf/


Note: this document is best viewed as part of the doxygen-built documentation
Expand Down Expand Up @@ -53,11 +54,11 @@ on your side.
- xcode command line tools (run `xcode-select --install` on the command line)
- having agreed to the xcode license (run `xcodebuild -license`)
- or, alternatively, the full [xcode][] installation
- optional:
- to build the documentation (optional)
- [doxygen][] (ideally `>= v1.9.3`) and
a minimal `latex` installation (see below)
to generate a local copy of the documentation

- a minimal `latex` installation (see below)
- to build with [netCDF][] support (optional)
- the `netCDF-C` library


#### Example instructions for a minimal `latex` installation
Expand Down Expand Up @@ -106,12 +107,21 @@ on your side.


### Compilation
* Compile an executable binary, e.g.,
* Compile an executable binary with text-based input/output, e.g.,
```{.sh}
cd SOILWAT2/
make
```

* Compile an executable binary with [netCDF][] support, e.g.,
```{.sh}
CPPFLAGS=-DSWNETCDF make
```

* User-specified paths to [netCDF][] header and library can be provided, e.g.,
```{.sh}
CPPFLAGS=-DSWNETCDF NC_CFLAGS="-I/path/to/include" NC_LIBS="-L/path/to/lib" make
```

<br>


Expand Down
6 changes: 3 additions & 3 deletions include/SW_Control.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ extern "C" {
/* =================================================== */
/* Global Function Declarations */
/* --------------------------------------------------- */
void SW_CTL_init_ptrs(SW_ALL* sw);
void SW_CTL_init_ptrs(SW_ALL* sw) ;
void SW_CTL_alloc_outptrs(SW_ALL* sw, LOG_INFO* LogInfo);
void SW_ALL_deepCopy(SW_ALL* source, SW_ALL* dest, LOG_INFO* LogInfo);
void SW_CTL_setup_domain(unsigned long userSUID,
Expand All @@ -48,8 +48,8 @@ void SW_CTL_RunSimSet(SW_ALL *sw_template, SW_OUTPUT_POINTERS SW_OutputPtrs[],
LOG_INFO *main_LogInfo);
void SW_CTL_run_current_year(SW_ALL* sw, SW_OUTPUT_POINTERS* SW_OutputPtrs,
LOG_INFO* LogInfo);
void SW_CTL_run_sw(SW_ALL* sw_template, SW_DOMAIN* SW_Domain, unsigned long ncStartSuid[],
char* ncInFiles[], SW_OUTPUT_POINTERS SW_OutputPtrs[],
void SW_CTL_run_sw(SW_ALL* sw_template, SW_DOMAIN* SW_Domain, unsigned long ncSuid[],
SW_OUTPUT_POINTERS SW_OutputPtrs[],
RealD p_OUT[][SW_OUTNPERIODS], LOG_INFO* LogInfo);


Expand Down
3 changes: 3 additions & 0 deletions include/SW_Defines.h
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,9 @@ extern "C" {
#define MAX_FILENAMESIZE 512
#define MAX_PATHSIZE 2048

/* Large storage for a value when reading in key-value pairs from an input file */
#define LARGE_VALUE 1024

/* Maximum number of messages to store in LOG_INFO */
#define MAX_MSGS 10

Expand Down
10 changes: 6 additions & 4 deletions include/SW_Domain.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,18 @@ extern "C" {
/* =================================================== */
/* Local Definitions */
/* --------------------------------------------------- */
void SW_DOM_calc_ncStartSuid(SW_DOMAIN* SW_Domain, unsigned long suid,
unsigned long ncStartSuid[]);
void SW_DOM_calc_ncSuid(SW_DOMAIN* SW_Domain, unsigned long suid,
unsigned long ncSuid[]);
void SW_DOM_calc_nSUIDs(SW_DOMAIN* SW_Domain);
Bool SW_DOM_CheckProgress(char* domainType, unsigned long ncStartSuid[]);
Bool SW_DOM_CheckProgress(char* domainType, unsigned long ncSuid[]);
void SW_DOM_CreateProgress(SW_DOMAIN* SW_Domain);
void SW_DOM_read(SW_DOMAIN* SW_Domain, LOG_INFO* LogInfo);
void SW_DOM_SetProgress(char* domainType, unsigned long ncStartSuid[]);
void SW_DOM_SetProgress(char* domainType, unsigned long ncSuid[]);
void SW_DOM_SimSet(SW_DOMAIN* SW_Domain, unsigned long userSUID,
LOG_INFO* LogInfo);
void SW_DOM_deepCopy(SW_DOMAIN* source, SW_DOMAIN* dest, LOG_INFO* LogInfo);
void SW_DOM_init_ptrs(SW_DOMAIN* SW_Domain);
void SW_DOM_deconstruct(SW_DOMAIN* SW_Domain);

#ifdef __cplusplus
}
Expand Down
2 changes: 2 additions & 0 deletions include/SW_Files.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ typedef enum {
eNoFile = -1,
/* List of all input files */
eFirst = 0,
/* netCDF-related input files directory */
eNCIn, eNCInAtt,
/* Domain information */
eDomain,
/* Description of a model run */
Expand Down
48 changes: 46 additions & 2 deletions include/SW_datastructs.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@
#define SW_OUTTEXT
#endif

#define SW_NFILES 24 // For `InFiles`
#define SW_NFILES 26 // For `InFiles`
#define SW_NVARNC 1 // For `InFilesNC`


/* =================================================== */
Expand Down Expand Up @@ -131,7 +132,7 @@ typedef struct {
Bool newperiod[SW_OUTNPERIODS];
Bool isnorth;

int ncStartSuid[2]; // First element used for domain "s", both used for "xy"
int ncSuid[2]; // First element used for domain "s", both used for "xy"

#ifdef STEPWAT
/* Variables from GlobalType (STEPWAT2) used in SOILWAT2 */
Expand Down Expand Up @@ -1033,6 +1034,40 @@ typedef struct {
#endif
} SW_GEN_OUT;

/* =================================================== */
/* Coordinate Reference System struct */
/* --------------------------------------------------- */

typedef struct {
char *long_name, *grid_mapping_name, *crs_wkt;
double longitude_of_prime_meridian, semi_major_axis, inverse_flattening;

// Possible attributes if the type is "projected"
char *datum, *units;
double standard_parallel[2]; // first and second standard parallels; 2nd may be missing (NAN)
double longitude_of_central_meridian,
latitude_of_projection_origin,
false_easting,
false_northing;
} SW_CRS;

/* =================================================== */
/* SOILWAT2 netCDF struct */
/* --------------------------------------------------- */

typedef struct {

char *title, *author, *institution, *comment, *coordinate_system;
Bool primary_crs_is_geographic;

SW_CRS crs_geogsc, crs_projsc;

char *varNC[SW_NVARNC];
char *InFilesNC[SW_NVARNC];

int ncFileIDs[SW_NVARNC];
} SW_NETCDF;

/* =================================================== */
/* Domain struct */
/* --------------------------------------------------- */
Expand All @@ -1052,6 +1087,12 @@ typedef struct {
startSimSet, /**< First SUID in simulation set within domain to simulate */
endSimSet; /**< Last SUID in simulation set within domain to simulate */

char crs_bbox[27]; /**< Input name/CRS type (domain.in) - holds up to "World Geodetic System 1984" (26) */
double min_x, /**< Minimum x coordinate of the bounding box */
min_y, /**< Minimum y coordinate of the bounding box */
max_x, /**< Maximum x coordinate of the bounding box */
max_y; /**< Maximum y coordinate of the bounding box */

// Temporal domain information
TimeInt startyr, /**< First calendar year of the simulation runs */
endyr, /**< Last calendar year of the simulation runs */
Expand All @@ -1060,6 +1101,9 @@ typedef struct {

// Information on input files
PATH_INFO PathInfo;

// Information dealing with netCDFs
SW_NETCDF netCDFInfo;
} SW_DOMAIN;

/* =================================================== */
Expand Down
40 changes: 40 additions & 0 deletions include/SW_netCDF.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
#ifndef SWNETCDF_H
#define SWNETCDF_H

#include "include/SW_datastructs.h"

#ifdef __cplusplus
extern "C" {
#endif

/* =================================================== */
/* Local Definitions */
/* --------------------------------------------------- */

#define vNCdom 0 // Domain netCDF index within `InFilesNC` and `varNC` (SW_NETCDF)

#define DOMAIN_TEMP "Input_nc/domain_template.nc"

/* =================================================== */
/* Global Function Declarations */
/* --------------------------------------------------- */
void SW_NC_check(SW_DOMAIN* SW_Domain, int ncFileID, const char* fileName,
LOG_INFO* LogInfo);
void SW_NC_create_domain_template(SW_DOMAIN* SW_Domain, LOG_INFO* LogInfo);
void SW_NC_create_template(const char* fileName, unsigned long timeSize,
unsigned long vertSize, const char* varName,
char* varAttributes[], LOG_INFO* LogInfo);
void SW_NC_read_inputs(SW_ALL* sw, SW_DOMAIN* SW_Domain, unsigned long ncSUID[],
LOG_INFO* LogInfo);
void SW_NC_check_input_files(SW_DOMAIN* SW_Domain, LOG_INFO* LogInfo);
void SW_NC_read(SW_NETCDF* SW_netCDF, PATH_INFO* PathInfo, LOG_INFO* LogInfo);
void SW_NC_init_ptrs(SW_NETCDF* SW_netCDF);
void SW_NC_deconstruct(SW_NETCDF* SW_netCDF);
void SW_NC_open_files(SW_NETCDF* SW_netCDF, LOG_INFO* LogInfo);
void SW_NC_close_files(SW_NETCDF* SW_netCDF);

#ifdef __cplusplus
}
#endif

#endif // SWNETCDF_H
Loading