Skip to content

atmoschem/flan

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

59 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Fortran LagrangiAN Inverse Model (FLAN)

My cool new project!

Cool thing, it is an fpm project that already compiles with

  • LAPACK
  • BLAS
  • STDLIB
  • NETCDF
  • OPENMP

package dependencies

see fpm.toml

fpm will find libraries in teh system such as openblas, netcdf, df5 and openmp. Also, it will download and compile

  • stdlib
  • csv-fortran, to read csv files

Installation

fpm needs access to libraries above mentioned. For instance, for an HPC, you could:

module load slurm
module load netcdf-c
module load netcdf-fortran
module load hdf5/1.14.3
module load openblas

then

build

fpm build

fpm build
 found blas package: openblas
stdlib_system_subprocess.c             done.
stdlib_system.c                        done.
stdlib_kinds.f90                       done.
csv_kinds.f90                          done.
fpm_os.c                               done.
fpm_environment.c                      done.
fpm_backend_console.f90                done.
filesystem_utilities.c                 done.
fpm_strings.f90                        done.
iscygpty.c                             done.
isatty.c                               done.
datetime_module.f90                    done.
strptime.cpp                           done.
constants.f90                          done.
version.f90                            done.
token.f90                              done.
M_CLI2.F90                             done.
regex.f90                              done.
version.f90                            done.
shlex_module.f90                       done.
stdlib_ascii.f90                       done.
stdlib_linalg_constants.F90            done.
stdlib_optval.f90                      done.
csv_parameters.f90                     done.
error.f90                              done.
error.f90                              done.
datetime.f90                           done.
io.f90                                 done.
stdlib_error.f90                       done.
stdlib_linalg_blas_aux.f90             done.
stdlib_string_type.f90                 done.
stdlib_blas_constants.f90              done.
csv_utilities.f90                      done.
fpm_environment.f90                    done.
versioning.f90                         done.
utils.f90                              done.
abc.f90                                done.
f08estop.f90                           done.
stdlib_strings.f90                     done.
stdlib_blas.f90                        done.
stdlib_io.f90                          done.
csv_module.F90                         done.
fpm_filesystem.F90                     done.
fpm_release.F90                        done.
terminal.f90                           done.
value.f90                              done.
lexer.f90                              done.
io_manager.f90                         done.
stdlib_codata_type.f90                 done.
stdlib_linalg_state.f90                done.
stdlib_blas_level2_sym.f90             done.
stdlib_strings_to_string.f90           done.
stdlib_blas_level2_tri.f90             done.
stdlib_blas_level2_ban.f90             done.
stdlib_blas_level3_tri.f90             done.
stdlib_blas_level3_gen.f90             done.
stdlib_blas_level3_sym.f90             done.
stdlib_blas_level2_pac.f90             done.
stdlib_string_type_constructor.f90     done.
stdlib_linalg_blas.F90                 done.
stdlib_blas_level2_gen.f90             done.
stdlib_blas_level1.f90                 done.
fpm_os.F90                             done.
fpm_pkg_config.f90                     done.
diagnostic.f90                         done.
sort.f90                               done.
keyval.f90                             done.
node.f90                               done.
map.f90                                done.
list.f90                               done.
stdlib_codata.f90                      done.
stdlib_linalg.f90                      done.
stdlib_linalg_lapack_aux.f90           done.
fpm_command_line.f90                   done.
context.f90                            done.
array_list.f90                         done.
ordered_map.f90                        done.
linear_algebra.f90                     done.
stdlib_constants.f90                   done.
stdlib_lapack_base.f90                 done.
stdlib_linalg_cross_product.f90        done.
stdlib_linalg_diag.f90                 done.
stdlib_linalg_kronecker.f90            done.
stdlib_linalg_outer_product.f90        done.
structure.f90                          done.
lexer.f90                              done.
main.f90                               done.
stdlib_lapack_blas_like_scalar.f90     done.
stdlib_lapack_auxiliary.f90            done.
stdlib_lapack_blas_like_l1.f90         done.
stdlib_lapack_blas_like_base.f90       done.
stdlib_lapack_blas_like_mnorm.f90      done.
stdlib_lapack_solve.f90                done.
stdlib_lapack_givens_jacobi_rot.f90    done.
stdlib_lapack_blas_like_l2.f90         done.
stdlib_lapack_blas_like_l3.f90         done.
stdlib_lapack_householder_reflectors.f9done.
stdlib_lapack_orthogonal_factors.f90   done.
table.f90                              done.
array.f90                              done.
stdlib_lapack_solve_chol_comp.f90      done.
stdlib_lapack_solve_tri_comp.f90       done.
stdlib_lapack_solve_ldl_comp4.f90      done.
stdlib_lapack_solve_ldl.f90            done.
stdlib_lapack_eig_svd_lsq.f90          done.
stdlib_lapack_solve_ldl_comp3.f90      done.
stdlib_lapack_solve_ldl_comp.f90       done.
stdlib_lapack_solve_lu.f90             done.
stdlib_lapack_orthogonal_factors_rz.f90done.
stdlib_lapack_solve_lu_comp.f90        done.
stdlib_lapack_orthogonal_factors_ql.f90done.
stdlib_lapack_orthogonal_factors_qr.f90done.
stdlib_lapack_solve_chol.f90           done.
stdlib_lapack_solve_aux.f90            done.
stdlib_lapack_others.f90               done.
stdlib_lapack_solve_ldl_comp2.f90      done.
type.f90                               done.
stdlib_lapack_eigv_svd_drivers.f90     done.
stdlib_lapack_cosine_sine.f90          done.
stdlib_lapack_eigv_std_driver.f90      done.
stdlib_lapack_eigv_svd_bidiag_dc.f90   done.
stdlib_lapack_eigv_gen2.f90            done.
stdlib_lapack_eigv_tridiag3.f90        done.
stdlib_linalg_lapack.F90               done.
stdlib_lapack_svd_comp.f90             done.
stdlib_lapack_svd_bidiag_qr.f90        done.
stdlib_lapack_lsq_aux.f90              done.
stdlib_lapack_eigv_gen3.f90            done.
stdlib_lapack_eigv_sym.f90             done.
stdlib_lapack_cosine_sine2.f90         done.
stdlib_lapack_lsq.f90                  done.
stdlib_lapack_eigv_comp2.f90           done.
stdlib_lapack_lsq_constrained.f90      done.
stdlib_lapack_others_sm.f90            done.
stdlib_lapack_eigv_svd_drivers2.f90    done.
stdlib_lapack_eigv_svd_drivers3.f90    done.
stdlib_lapack_eigv_gen.f90             done.
stdlib_lapack_eigv_sym_comp.f90        done.
stdlib_lapack_eigv_comp.f90            done.
stdlib_lapack_eigv_tridiag2.f90        done.
stdlib_lapack_svd_comp2.f90            done.
stdlib_lapack_eigv_tridiag.f90         done.
ser.f90                                done.
merge.f90                              done.
keyval.f90                             done.
parser.f90                             done.
ser.f90                                done.
stdlib_linalg_schur.f90                done.
stdlib_linalg_matrix_functions.f90     done.
stdlib_linalg_qr.f90                   done.
stdlib_linalg_inverse.f90              done.
stdlib_linalg_least_squares.f90        done.
stdlib_linalg_determinant.f90          done.
stdlib_linalg_eigenvalues.f90          done.
stdlib_linalg_svd.f90                  done.
stdlib_linalg_solve.f90                done.
stdlib_linalg_norms.f90                done.
stdlib_linalg_pinv.f90                 done.
stdlib_linalg_cholesky.f90             done.
de.f90                                 done.
table.f90                              done.
array.f90                              done.
path.f90                               done.
build.f90                              done.
tomlf.f90                              done.
parser.f90                             done.
jonquil.f90                            done.
downloader.f90                         done.
toml.f90                               done.
fpm_settings.f90                       done.
fpm_compile_commands.F90               done.
git.f90                                done.
fortran.f90                            done.
library.f90                            done.
profiles.f90                           done.
build.f90                              done.
preprocess.f90                         done.
meta.f90                               done.
install.f90                            done.
fpm_compiler.F90                       done.
dependency.f90                         done.
platform.f90                           done.
executable.f90                         done.
test.f90                               done.
example.f90                            done.
feature.f90                            done.
feature_collection.f90                 done.
package.f90                            done.
manifest.f90                           done.
dependency.f90                         done.
fpm_model.f90                          done.
fpm_source_parsing.f90                 done.
fpm_meta_base.f90                      done.
fpm_sources.f90                        done.
fpm_meta_openmp.f90                    done.
fpm_meta_util.f90                      done.
fpm_meta_stdlib.f90                    done.
fpm_meta_minpack.f90                   done.
fpm_targets.f90                        done.
fpm_meta_mpi.f90                       done.
fpm_meta_netcdf.f90                    done.
fpm_meta_blas.f90                      done.
fpm_meta_hdf5.f90                      done.
fpm_meta.f90                           done.
fpm_backend_output.f90                 done.
fpm_backend.F90                        done.
fpm.f90                                done.
publish.f90                            done.
libflan.a                              done.
flan                                   done.
[100%] Project compiled successfully.

run

fpm run
 found blas package: openblas
Project is up to date
 ---------------------------------------------------
 Reading configuration from 'namelists/config.nml'...
 input_config: receptor: receptors/receptor_1h.csv
 input_config: prior: /media/sergio/ext6/noaa/co2_nmolm2s_denver_240.nc
 model_config: add_bg: true 
 model_config: spatial_corr:    50.000000000000000     
 model_config: temp_corr:    12.000000000000000     
 model_config: time_res_hours:            3
  model_config: coord_units: degrees
  >>> 'degrees' selected. Haversine distance will be used. <<<
 ---------------------------------------------------
 Reading CSV file: receptors/receptor_1h.csv
 --- CSV Summary ---
 Total records:            7
 First Record:
   Time:         2024           9          17           7           0           0
   Gas:    435100.00000000000     
   Bg:    425000.00000000000     
   Path: /media/sergio/ext6/2024/09/tmp_2024x09x17x07x00x39.7861Nx104.9886Wx00002/hysplit2024x09x17x07x00x39.7861Nx104.9886Wx00002.nc                                                                                                                                    
 Last Record:
   Time:         2024           9          17           7           0           0
   Gas:    428200.00000000000     
   Bg:    425000.00000000000     
   Path: /media/sergio/ext6/2024/09/tmp_2024x09x17x07x00x39.4381Nx108.0261Wx00002/hysplit2024x09x17x07x00x39.4381Nx108.0261Wx00002.nc                                                                                                                                    
 First receptor time object: 2024-09-17T07:00:00.000
 Total receptors loaded:            7
 ---------------------------------------------------
 Reading prior components...
 Anthro Prior dimensions (lon, lat, time):           25          20         240
 Anthro Prior sum:    152436660.70426941     
 Total Combined Prior sum:    152436660.70426941     
 ---------------------------------------------------
 Reading footprints
 WARNING: State vector is massive (      120000 ).
 B matrix will require approx    115.20000000000000       GB of RAM.
 State vector size (N_grid):          500
 Time blocks:          240
 Total State Vector Size:       120000
 --- Step 1: Processing Footprints (Constructing H) ---
 Processing footprint            1 : /media/sergio/ext6/2024/09/tmp_2024x09x17x07x00x39.7861Nx104.9886Wx00002/hysplit2024x09x17x07x00x39.7861Nx104.9886Wx00002.nc
    Footprint            1  range (min, max):    0.0000000000000000        6.5165825188159943E-002
 Processing footprint            2 : /media/sergio/ext6/2024/09/tmp_2024x09x17x07x00x37.3039Nx107.4842Wx00002/hysplit2024x09x17x07x00x37.3039Nx107.4842Wx00002.nc
    Footprint            2  range (min, max):    0.0000000000000000        0.0000000000000000     
 Processing footprint            3 : /media/sergio/ext6/2024/09/tmp_2024x09x17x07x00x39.9128Nx105.1886Wx00002/hysplit2024x09x17x07x00x39.9128Nx105.1886Wx00002.nc
    Footprint            3  range (min, max):    0.0000000000000000        4.0791746228933334E-002
 Processing footprint            4 : /media/sergio/ext6/2024/09/tmp_2024x09x17x07x00x39.7795Nx105.0052Wx00002/hysplit2024x09x17x07x00x39.7795Nx105.0052Wx00002.nc
    Footprint            4  range (min, max):    0.0000000000000000        5.4270178079605103E-002
 Processing footprint            5 : /media/sergio/ext6/2024/09/tmp_2024x09x17x07x00x39.8381Nx104.9498Wx00002/hysplit2024x09x17x07x00x39.8381Nx104.9498Wx00002.nc
    Footprint            5  range (min, max):    0.0000000000000000        4.9182698130607605E-002
 Processing footprint            6 : /media/sergio/ext6/2024/09/tmp_2024x09x17x07x00x39.7322Nx105.0153Wx00002/hysplit2024x09x17x07x00x39.7322Nx105.0153Wx00002.nc
    Footprint            6  range (min, max):    0.0000000000000000        4.7325719147920609E-002
 Processing footprint            7 : /media/sergio/ext6/2024/09/tmp_2024x09x17x07x00x39.4381Nx108.0261Wx00002/hysplit2024x09x17x07x00x39.4381Nx108.0261Wx00002.nc
    Footprint            7  range (min, max):    0.0000000000000000        0.0000000000000000     
 H matrix dimensions (n_obs, n_grid):            7      120000
 --- Step 2: Calculating Modeled Enhancements (HSP) ---
 Enhancements co2 (ppb)
   1 :      3468.28477
   2 :         0.00000
   3 :        47.05454
   4 :      2402.17249
   5 :      3661.73907
   6 :      1386.99579
   7 :         0.00000
 ---------------------------------------------------
 Adding background
 Writing hsp to: hsp/hsp_output.txt
 ---------------------------------------------------
 Creating R matrix (measurement and model error covariance)
 R matrix dimensions (n_obs, n_obs):            7           7
 R diagonal (first 5 elements):    20000000.000000000        20000000.000000000        20000000.000000000        20000000.000000000        20000000.000000000     
 ---------------------------------------------------
 Performing Kalman Inversion...
 Constructing B matrix components (Implicit Kronecker)
    > Building Temporal Covariance (B_t)...
    > Building Spatial Covariance (B_s)...
 --- Step 3: Implicit Kronecker Multiplication (B * H^T) ---
    > Avoiding full B matrix allocation...
 B * H^T computed.
 --- Step 4: Solving Inversion (S Matrix & Kalman Gain) ---
 S matrix dimensions (n_obs, n_obs):            7           7
 Kalman Gain K dimensions (n_grid, n_obs):       120000           7
 --- Step 5: Updating Posterior State ---
 Posterior state x_post size:       120000
 Posterior scaling factors range:    1.0000000000000000       to    1.3917493301699611     
 Average scaling factor:    1.0066774491326598     
 ---------------------------------------------------
 Saving posterior outputs...
 Reshaped scaling factors (sf_map_3d) dimensions:           25          20         240
 Writing 3D scaling factors to: scaling_factors_3d.nc
 Reshaped scaling factors (sf_map) dimensions:           25          20
 Writing scaling factors to: nc/scaling_factors.nc
 --- Step 6: Calculating Posterior Fluxes ---
 Posterior flux dimensions:           25          20         240
 Average posterior flux:    1280.1999511191359     
 Writing posterior flux to: nc/posterior_flux.nc
 ---------------------------------------------------
 Calculating Posterior Uncertainty...
 Posterior SD range:   0.44516751777394714       0.50000000000000000     
 Prior SD was:   0.50000000000000000     
 Writing 3D posterior uncertainty to: posterior_uncertainty.nc
 Writing 2D average posterior uncertainty to: nc/posterior_uncertainty_2d.nc
 ---------------------------------------------------
 Calculating Chi-Square Diagnostic...
 Chi-Square Diagnostic Results:
   Observations (n_obs):                  7
   State Vector (n_state):            120000
   Observation Cost (J_obs):      5.5231492369936479     
   Prior Cost (J_prior):         0.69388329338569255     
   Total Cost (J_total):          6.2170325303793401     
   Reduced Chi-Square (avg):     0.88814750433990575     
     (Ideally close to 1.0)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published