roms-tools 1.6.1__py3-none-any.whl → 1.7.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (362) hide show
  1. ci/environment.yml +1 -1
  2. roms_tools/__init__.py +5 -1
  3. roms_tools/_version.py +1 -1
  4. roms_tools/setup/boundary_forcing.py +128 -146
  5. roms_tools/setup/datasets.py +779 -192
  6. roms_tools/setup/download.py +30 -0
  7. roms_tools/setup/grid.py +8 -10
  8. roms_tools/setup/initial_conditions.py +77 -96
  9. roms_tools/setup/plot.py +144 -24
  10. roms_tools/setup/river_forcing.py +589 -0
  11. roms_tools/setup/surface_forcing.py +33 -138
  12. roms_tools/setup/tides.py +24 -76
  13. roms_tools/setup/utils.py +274 -7
  14. roms_tools/tests/test_setup/test_boundary_forcing.py +98 -5
  15. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/.zattrs +1 -1
  16. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/.zmetadata +157 -130
  17. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/ALK_ALT_CO2_east/.zattrs +1 -1
  18. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/ALK_ALT_CO2_east/0.0.0 +0 -0
  19. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/ALK_ALT_CO2_north/.zattrs +1 -1
  20. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/ALK_ALT_CO2_south/.zattrs +1 -1
  21. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/ALK_ALT_CO2_south/0.0.0 +0 -0
  22. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/ALK_ALT_CO2_west/.zattrs +1 -1
  23. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/ALK_ALT_CO2_west/0.0.0 +0 -0
  24. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/ALK_east/.zattrs +1 -1
  25. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/ALK_east/0.0.0 +0 -0
  26. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/ALK_north/.zattrs +1 -1
  27. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/ALK_south/.zattrs +1 -1
  28. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/ALK_south/0.0.0 +0 -0
  29. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/ALK_west/.zattrs +1 -1
  30. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/ALK_west/0.0.0 +0 -0
  31. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DIC_ALT_CO2_east/.zattrs +1 -1
  32. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DIC_ALT_CO2_east/0.0.0 +0 -0
  33. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DIC_ALT_CO2_north/.zattrs +1 -1
  34. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DIC_ALT_CO2_south/.zattrs +1 -1
  35. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DIC_ALT_CO2_south/0.0.0 +0 -0
  36. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DIC_ALT_CO2_west/.zattrs +1 -1
  37. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DIC_ALT_CO2_west/0.0.0 +0 -0
  38. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DIC_east/.zattrs +1 -1
  39. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DIC_east/0.0.0 +0 -0
  40. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DIC_north/.zattrs +1 -1
  41. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DIC_south/.zattrs +1 -1
  42. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DIC_south/0.0.0 +0 -0
  43. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DIC_west/.zattrs +1 -1
  44. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DIC_west/0.0.0 +0 -0
  45. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DOC_east/.zattrs +1 -1
  46. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DOC_east/0.0.0 +0 -0
  47. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DOC_north/.zattrs +1 -1
  48. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DOC_south/.zattrs +1 -1
  49. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DOC_south/0.0.0 +0 -0
  50. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DOC_west/.zattrs +1 -1
  51. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DOC_west/0.0.0 +0 -0
  52. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DOCr_east/.zattrs +1 -1
  53. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DOCr_east/0.0.0 +0 -0
  54. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DOCr_north/.zattrs +1 -1
  55. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DOCr_south/.zattrs +1 -1
  56. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DOCr_south/0.0.0 +0 -0
  57. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DOCr_west/.zattrs +1 -1
  58. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DOCr_west/0.0.0 +0 -0
  59. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DON_east/.zattrs +1 -1
  60. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DON_east/0.0.0 +0 -0
  61. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DON_north/.zattrs +1 -1
  62. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DON_south/.zattrs +1 -1
  63. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DON_south/0.0.0 +0 -0
  64. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DON_west/.zattrs +1 -1
  65. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DON_west/0.0.0 +0 -0
  66. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DONr_east/.zattrs +1 -1
  67. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DONr_east/0.0.0 +0 -0
  68. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DONr_north/.zattrs +1 -1
  69. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DONr_south/.zattrs +1 -1
  70. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DONr_south/0.0.0 +0 -0
  71. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DONr_west/.zattrs +1 -1
  72. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DONr_west/0.0.0 +0 -0
  73. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DOP_east/.zattrs +1 -1
  74. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DOP_east/0.0.0 +0 -0
  75. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DOP_north/.zattrs +1 -1
  76. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DOP_south/.zattrs +1 -1
  77. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DOP_south/0.0.0 +0 -0
  78. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DOP_west/.zattrs +1 -1
  79. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DOP_west/0.0.0 +0 -0
  80. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DOPr_east/.zattrs +1 -1
  81. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DOPr_east/0.0.0 +0 -0
  82. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DOPr_north/.zattrs +1 -1
  83. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DOPr_south/.zattrs +1 -1
  84. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DOPr_south/0.0.0 +0 -0
  85. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DOPr_west/.zattrs +1 -1
  86. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/DOPr_west/0.0.0 +0 -0
  87. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/Fe_east/.zattrs +1 -1
  88. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/Fe_east/0.0.0 +0 -0
  89. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/Fe_north/.zattrs +1 -1
  90. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/Fe_south/.zattrs +1 -1
  91. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/Fe_south/0.0.0 +0 -0
  92. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/Fe_west/.zattrs +1 -1
  93. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/Fe_west/0.0.0 +0 -0
  94. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/Lig_east/.zattrs +1 -1
  95. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/Lig_east/0.0.0 +0 -0
  96. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/Lig_north/.zattrs +1 -1
  97. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/Lig_south/.zattrs +1 -1
  98. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/Lig_south/0.0.0 +0 -0
  99. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/Lig_west/.zattrs +1 -1
  100. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/Lig_west/0.0.0 +0 -0
  101. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/NH4_east/.zattrs +1 -1
  102. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/NH4_east/0.0.0 +0 -0
  103. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/NH4_north/.zattrs +1 -1
  104. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/NH4_north/0.0.0 +0 -0
  105. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/NH4_south/.zattrs +1 -1
  106. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/NH4_south/0.0.0 +0 -0
  107. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/NH4_west/.zattrs +1 -1
  108. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/NH4_west/0.0.0 +0 -0
  109. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/NO3_east/.zattrs +1 -1
  110. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/NO3_east/0.0.0 +0 -0
  111. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/NO3_north/.zattrs +1 -1
  112. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/NO3_south/.zattrs +1 -1
  113. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/NO3_south/0.0.0 +0 -0
  114. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/NO3_west/.zattrs +1 -1
  115. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/NO3_west/0.0.0 +0 -0
  116. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/O2_east/.zattrs +1 -1
  117. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/O2_east/0.0.0 +0 -0
  118. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/O2_north/.zattrs +1 -1
  119. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/O2_south/.zattrs +1 -1
  120. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/O2_south/0.0.0 +0 -0
  121. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/O2_west/.zattrs +1 -1
  122. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/O2_west/0.0.0 +0 -0
  123. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/PO4_east/.zattrs +1 -1
  124. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/PO4_east/0.0.0 +0 -0
  125. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/PO4_north/.zattrs +1 -1
  126. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/PO4_south/.zattrs +1 -1
  127. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/PO4_south/0.0.0 +0 -0
  128. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/PO4_west/.zattrs +1 -1
  129. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/PO4_west/0.0.0 +0 -0
  130. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/SiO3_east/.zattrs +1 -1
  131. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/SiO3_east/0.0.0 +0 -0
  132. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/SiO3_north/.zattrs +1 -1
  133. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/SiO3_south/.zattrs +1 -1
  134. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/SiO3_south/0.0.0 +0 -0
  135. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/SiO3_west/.zattrs +1 -1
  136. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/SiO3_west/0.0.0 +0 -0
  137. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/abs_time/.zattrs +1 -0
  138. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/bry_time/.zattrs +1 -1
  139. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatC_east/.zattrs +1 -1
  140. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatC_east/0.0.0 +0 -0
  141. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatC_north/.zattrs +1 -1
  142. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatC_north/0.0.0 +0 -0
  143. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatC_south/.zattrs +1 -1
  144. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatC_south/0.0.0 +0 -0
  145. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatC_west/.zattrs +1 -1
  146. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatC_west/0.0.0 +0 -0
  147. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatChl_east/.zattrs +1 -1
  148. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatChl_east/0.0.0 +0 -0
  149. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatChl_north/.zattrs +1 -1
  150. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatChl_north/0.0.0 +0 -0
  151. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatChl_south/.zattrs +1 -1
  152. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatChl_south/0.0.0 +0 -0
  153. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatChl_west/.zattrs +1 -1
  154. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatChl_west/0.0.0 +0 -0
  155. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatFe_east/.zattrs +1 -1
  156. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatFe_east/0.0.0 +0 -0
  157. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatFe_north/.zattrs +1 -1
  158. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatFe_north/0.0.0 +0 -0
  159. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatFe_south/.zattrs +1 -1
  160. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatFe_south/0.0.0 +0 -0
  161. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatFe_west/.zattrs +1 -1
  162. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatFe_west/0.0.0 +0 -0
  163. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatP_east/.zattrs +1 -1
  164. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatP_east/0.0.0 +0 -0
  165. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatP_north/.zattrs +1 -1
  166. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatP_north/0.0.0 +0 -0
  167. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatP_south/.zattrs +1 -1
  168. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatP_south/0.0.0 +0 -0
  169. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatP_west/.zattrs +1 -1
  170. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatP_west/0.0.0 +0 -0
  171. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatSi_east/.zattrs +1 -1
  172. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatSi_east/0.0.0 +0 -0
  173. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatSi_north/.zattrs +1 -1
  174. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatSi_north/0.0.0 +0 -0
  175. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatSi_south/.zattrs +1 -1
  176. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatSi_south/0.0.0 +0 -0
  177. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatSi_west/.zattrs +1 -1
  178. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diatSi_west/0.0.0 +0 -0
  179. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diazC_east/.zattrs +1 -1
  180. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diazC_east/0.0.0 +0 -0
  181. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diazC_north/.zattrs +1 -1
  182. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diazC_north/0.0.0 +0 -0
  183. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diazC_south/.zattrs +1 -1
  184. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diazC_south/0.0.0 +0 -0
  185. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diazC_west/.zattrs +1 -1
  186. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diazC_west/0.0.0 +0 -0
  187. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diazChl_east/.zattrs +1 -1
  188. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diazChl_east/0.0.0 +0 -0
  189. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diazChl_north/.zattrs +1 -1
  190. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diazChl_north/0.0.0 +0 -0
  191. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diazChl_south/.zattrs +1 -1
  192. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diazChl_south/0.0.0 +0 -0
  193. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diazChl_west/.zattrs +1 -1
  194. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diazChl_west/0.0.0 +0 -0
  195. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diazFe_east/.zattrs +1 -1
  196. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diazFe_east/0.0.0 +0 -0
  197. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diazFe_north/.zattrs +1 -1
  198. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diazFe_north/0.0.0 +0 -0
  199. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diazFe_south/.zattrs +1 -1
  200. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diazFe_south/0.0.0 +0 -0
  201. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diazFe_west/.zattrs +1 -1
  202. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diazFe_west/0.0.0 +0 -0
  203. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diazP_east/.zattrs +1 -1
  204. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diazP_east/0.0.0 +0 -0
  205. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diazP_north/.zattrs +1 -1
  206. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diazP_north/0.0.0 +0 -0
  207. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diazP_south/.zattrs +1 -1
  208. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diazP_south/0.0.0 +0 -0
  209. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diazP_west/.zattrs +1 -1
  210. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/diazP_west/0.0.0 +0 -0
  211. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/month/.zarray +20 -0
  212. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/month/.zattrs +6 -0
  213. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/month/0 +0 -0
  214. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spC_east/.zattrs +1 -1
  215. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spC_east/0.0.0 +0 -0
  216. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spC_north/.zattrs +1 -1
  217. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spC_north/0.0.0 +0 -0
  218. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spC_south/.zattrs +1 -1
  219. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spC_south/0.0.0 +0 -0
  220. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spC_west/.zattrs +1 -1
  221. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spC_west/0.0.0 +0 -0
  222. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spCaCO3_east/.zattrs +1 -1
  223. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spCaCO3_east/0.0.0 +0 -0
  224. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spCaCO3_north/.zattrs +1 -1
  225. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spCaCO3_north/0.0.0 +0 -0
  226. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spCaCO3_south/.zattrs +1 -1
  227. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spCaCO3_south/0.0.0 +0 -0
  228. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spCaCO3_west/.zattrs +1 -1
  229. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spCaCO3_west/0.0.0 +0 -0
  230. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spChl_east/.zattrs +1 -1
  231. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spChl_east/0.0.0 +0 -0
  232. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spChl_north/.zattrs +1 -1
  233. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spChl_north/0.0.0 +0 -0
  234. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spChl_south/.zattrs +1 -1
  235. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spChl_south/0.0.0 +0 -0
  236. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spChl_west/.zattrs +1 -1
  237. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spChl_west/0.0.0 +0 -0
  238. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spFe_east/.zattrs +1 -1
  239. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spFe_east/0.0.0 +0 -0
  240. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spFe_north/.zattrs +1 -1
  241. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spFe_north/0.0.0 +0 -0
  242. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spFe_south/.zattrs +1 -1
  243. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spFe_south/0.0.0 +0 -0
  244. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spFe_west/.zattrs +1 -1
  245. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spFe_west/0.0.0 +0 -0
  246. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spP_east/.zattrs +1 -1
  247. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spP_east/0.0.0 +0 -0
  248. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spP_north/.zattrs +1 -1
  249. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spP_north/0.0.0 +0 -0
  250. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spP_south/.zattrs +1 -1
  251. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spP_south/0.0.0 +0 -0
  252. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spP_west/.zattrs +1 -1
  253. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/spP_west/0.0.0 +0 -0
  254. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/zooC_east/.zattrs +1 -1
  255. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/zooC_east/0.0.0 +0 -0
  256. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/zooC_north/.zattrs +1 -1
  257. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/zooC_north/0.0.0 +0 -0
  258. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/zooC_south/.zattrs +1 -1
  259. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/zooC_south/0.0.0 +0 -0
  260. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/zooC_west/.zattrs +1 -1
  261. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_climatology.zarr/zooC_west/0.0.0 +0 -0
  262. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_climatology.zarr/.zattrs +1 -1
  263. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_climatology.zarr/.zmetadata +39 -12
  264. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_climatology.zarr/abs_time/.zattrs +1 -0
  265. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_climatology.zarr/dust/.zattrs +1 -1
  266. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_climatology.zarr/dust_time/.zattrs +1 -1
  267. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_climatology.zarr/iron/.zattrs +1 -1
  268. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_climatology.zarr/iron_time/.zattrs +1 -1
  269. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_climatology.zarr/month/.zarray +20 -0
  270. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_climatology.zarr/month/.zattrs +6 -0
  271. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_climatology.zarr/month/0 +0 -0
  272. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_climatology.zarr/nhy/.zattrs +1 -1
  273. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_climatology.zarr/nhy_time/.zattrs +1 -1
  274. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_climatology.zarr/nox/.zattrs +1 -1
  275. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_climatology.zarr/nox_time/.zattrs +1 -1
  276. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_climatology.zarr/pco2_air/.zattrs +1 -1
  277. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_climatology.zarr/pco2_air_alt/.zattrs +1 -1
  278. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_climatology.zarr/pco2_time/.zattrs +1 -1
  279. roms_tools/tests/test_setup/test_data/boundary_forcing.zarr/.zmetadata +0 -7
  280. roms_tools/tests/test_setup/test_data/boundary_forcing.zarr/abs_time/.zattrs +0 -3
  281. roms_tools/tests/test_setup/test_data/boundary_forcing.zarr/salt_east/0.0.0 +0 -0
  282. roms_tools/tests/test_setup/test_data/boundary_forcing.zarr/salt_south/0.0.0 +0 -0
  283. roms_tools/tests/test_setup/test_data/boundary_forcing.zarr/temp_east/0.0.0 +0 -0
  284. roms_tools/tests/test_setup/test_data/boundary_forcing.zarr/temp_south/0.0.0 +0 -0
  285. roms_tools/tests/test_setup/test_data/boundary_forcing.zarr/u_east/0.0.0 +0 -0
  286. roms_tools/tests/test_setup/test_data/boundary_forcing.zarr/u_south/0.0.0 +0 -0
  287. roms_tools/tests/test_setup/test_data/boundary_forcing.zarr/u_west/0.0.0 +0 -0
  288. roms_tools/tests/test_setup/test_data/boundary_forcing.zarr/ubar_east/0.0 +0 -0
  289. roms_tools/tests/test_setup/test_data/boundary_forcing.zarr/ubar_south/0.0 +0 -0
  290. roms_tools/tests/test_setup/test_data/boundary_forcing.zarr/ubar_west/0.0 +0 -0
  291. roms_tools/tests/test_setup/test_data/boundary_forcing.zarr/v_east/0.0.0 +0 -0
  292. roms_tools/tests/test_setup/test_data/boundary_forcing.zarr/v_north/0.0.0 +0 -0
  293. roms_tools/tests/test_setup/test_data/boundary_forcing.zarr/v_south/0.0.0 +0 -0
  294. roms_tools/tests/test_setup/test_data/boundary_forcing.zarr/v_west/0.0.0 +0 -0
  295. roms_tools/tests/test_setup/test_data/boundary_forcing.zarr/vbar_east/0.0 +0 -0
  296. roms_tools/tests/test_setup/test_data/boundary_forcing.zarr/vbar_north/0.0 +0 -0
  297. roms_tools/tests/test_setup/test_data/boundary_forcing.zarr/vbar_south/0.0 +0 -0
  298. roms_tools/tests/test_setup/test_data/boundary_forcing.zarr/vbar_west/0.0 +0 -0
  299. roms_tools/tests/test_setup/test_data/boundary_forcing.zarr/zeta_east/.zattrs +0 -1
  300. roms_tools/tests/test_setup/test_data/boundary_forcing.zarr/zeta_east/0.0 +0 -0
  301. roms_tools/tests/test_setup/test_data/boundary_forcing.zarr/zeta_north/.zattrs +0 -1
  302. roms_tools/tests/test_setup/test_data/boundary_forcing.zarr/zeta_south/.zattrs +0 -1
  303. roms_tools/tests/test_setup/test_data/boundary_forcing.zarr/zeta_south/0.0 +0 -0
  304. roms_tools/tests/test_setup/test_data/boundary_forcing.zarr/zeta_west/.zattrs +0 -1
  305. roms_tools/tests/test_setup/test_data/river_forcing.zarr/.zattrs +3 -0
  306. roms_tools/tests/test_setup/test_data/river_forcing.zarr/.zgroup +3 -0
  307. roms_tools/tests/test_setup/test_data/river_forcing.zarr/.zmetadata +214 -0
  308. roms_tools/tests/test_setup/test_data/river_forcing.zarr/abs_time/.zarray +20 -0
  309. roms_tools/tests/test_setup/test_data/river_forcing.zarr/abs_time/.zattrs +8 -0
  310. roms_tools/tests/test_setup/test_data/river_forcing.zarr/abs_time/0 +0 -0
  311. roms_tools/tests/test_setup/test_data/river_forcing.zarr/month/.zarray +20 -0
  312. roms_tools/tests/test_setup/test_data/river_forcing.zarr/month/.zattrs +6 -0
  313. roms_tools/tests/test_setup/test_data/river_forcing.zarr/month/0 +0 -0
  314. roms_tools/tests/test_setup/test_data/river_forcing.zarr/river_name/.zarray +24 -0
  315. roms_tools/tests/test_setup/test_data/river_forcing.zarr/river_name/.zattrs +6 -0
  316. roms_tools/tests/test_setup/test_data/river_forcing.zarr/river_name/0 +0 -0
  317. roms_tools/tests/test_setup/test_data/river_forcing.zarr/river_time/.zarray +20 -0
  318. roms_tools/tests/test_setup/test_data/river_forcing.zarr/river_time/.zattrs +8 -0
  319. roms_tools/tests/test_setup/test_data/river_forcing.zarr/river_time/0 +0 -0
  320. roms_tools/tests/test_setup/test_data/river_forcing.zarr/river_tracer/.zarray +24 -0
  321. roms_tools/tests/test_setup/test_data/river_forcing.zarr/river_tracer/.zattrs +10 -0
  322. roms_tools/tests/test_setup/test_data/river_forcing.zarr/river_tracer/0.0.0 +0 -0
  323. roms_tools/tests/test_setup/test_data/river_forcing.zarr/river_volume/.zarray +22 -0
  324. roms_tools/tests/test_setup/test_data/river_forcing.zarr/river_volume/.zattrs +9 -0
  325. roms_tools/tests/test_setup/test_data/river_forcing.zarr/river_volume/0.0 +0 -0
  326. roms_tools/tests/test_setup/test_data/river_forcing.zarr/tracer_name/.zarray +20 -0
  327. roms_tools/tests/test_setup/test_data/river_forcing.zarr/tracer_name/.zattrs +6 -0
  328. roms_tools/tests/test_setup/test_data/river_forcing.zarr/tracer_name/0 +0 -0
  329. roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/.zattrs +1 -0
  330. roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/.zgroup +3 -0
  331. roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/.zmetadata +185 -0
  332. roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/abs_time/.zarray +20 -0
  333. roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/abs_time/.zattrs +8 -0
  334. roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/abs_time/0 +0 -0
  335. roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/river_name/.zarray +24 -0
  336. roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/river_name/.zattrs +6 -0
  337. roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/river_name/0 +0 -0
  338. roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/river_time/.zarray +20 -0
  339. roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/river_time/.zattrs +7 -0
  340. roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/river_time/0 +0 -0
  341. roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/river_tracer/.zarray +24 -0
  342. roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/river_tracer/.zattrs +10 -0
  343. roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/river_tracer/0.0.0 +0 -0
  344. roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/river_volume/.zarray +22 -0
  345. roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/river_volume/.zattrs +9 -0
  346. roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/river_volume/0.0 +0 -0
  347. roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/tracer_name/.zarray +20 -0
  348. roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/tracer_name/.zattrs +6 -0
  349. roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/tracer_name/0 +0 -0
  350. roms_tools/tests/test_setup/test_datasets.py +8 -3
  351. roms_tools/tests/test_setup/test_grid.py +6 -5
  352. roms_tools/tests/test_setup/test_initial_conditions.py +0 -2
  353. roms_tools/tests/test_setup/test_river_forcing.py +366 -0
  354. roms_tools/tests/test_setup/test_surface_forcing.py +0 -2
  355. roms_tools/tests/test_setup/test_tides.py +0 -2
  356. roms_tools/tests/test_setup/test_validation.py +4 -0
  357. roms_tools/utils.py +12 -10
  358. {roms_tools-1.6.1.dist-info → roms_tools-1.7.0.dist-info}/METADATA +5 -5
  359. {roms_tools-1.6.1.dist-info → roms_tools-1.7.0.dist-info}/RECORD +362 -309
  360. {roms_tools-1.6.1.dist-info → roms_tools-1.7.0.dist-info}/WHEEL +1 -1
  361. {roms_tools-1.6.1.dist-info → roms_tools-1.7.0.dist-info}/LICENSE +0 -0
  362. {roms_tools-1.6.1.dist-info → roms_tools-1.7.0.dist-info}/top_level.txt +0 -0
@@ -1,8 +1,6 @@
1
1
  import xarray as xr
2
- import pandas as pd
3
- import yaml
4
2
  import importlib.metadata
5
- from dataclasses import dataclass, field, asdict
3
+ from dataclasses import dataclass, field
6
4
  from roms_tools.setup.grid import Grid
7
5
  from datetime import datetime
8
6
  import numpy as np
@@ -22,6 +20,9 @@ from roms_tools.setup.utils import (
22
20
  save_datasets,
23
21
  get_target_coords,
24
22
  rotate_velocities,
23
+ convert_to_roms_time,
24
+ _to_yaml,
25
+ _from_yaml,
25
26
  )
26
27
  from roms_tools.setup.plot import _plot
27
28
  import matplotlib.pyplot as plt
@@ -133,14 +134,7 @@ class SurfaceForcing:
133
134
 
134
135
  ds = self._write_into_dataset(processed_fields, data, d_meta)
135
136
 
136
- if self.use_coarse_grid:
137
- mask = self.grid.ds["mask_coarse"].rename(
138
- {"eta_coarse": "eta_rho", "xi_coarse": "xi_rho"}
139
- )
140
- else:
141
- mask = self.grid.ds["mask_rho"]
142
-
143
- self._validate(ds, mask)
137
+ self._validate(ds, target_coords["mask"], variable_info)
144
138
 
145
139
  # substitute NaNs over land by a fill value to avoid blow-up of ROMS
146
140
  for var_name in ds.data_vars:
@@ -233,28 +227,34 @@ class SurfaceForcing:
233
227
  # Define a dictionary for variable names and their associated information
234
228
  if self.type == "physics":
235
229
  variable_info = {
236
- "swrad": default_info,
237
- "lwrad": default_info,
238
- "Tair": default_info,
239
- "qair": default_info,
240
- "rain": default_info,
230
+ "swrad": {**default_info, "validate": True},
231
+ "lwrad": {**default_info, "validate": False},
232
+ "Tair": {**default_info, "validate": False},
233
+ "qair": {**default_info, "validate": True},
234
+ "rain": {**default_info, "validate": False},
241
235
  "uwnd": {
242
236
  "location": "u",
243
237
  "is_vector": True,
244
238
  "vector_pair": "vwnd",
245
239
  "is_3d": False,
240
+ "validate": True,
246
241
  },
247
242
  "vwnd": {
248
243
  "location": "v",
249
244
  "is_vector": True,
250
245
  "vector_pair": "uwnd",
251
246
  "is_3d": False,
247
+ "validate": True,
252
248
  },
253
249
  }
254
250
  elif self.type == "bgc":
255
251
  variable_info = {}
256
- for var in data.var_names.keys():
257
- variable_info[var] = default_info
252
+ for var_name in data.var_names.keys():
253
+ variable_info[var_name] = default_info
254
+ if var_name == "pco2_air":
255
+ variable_info[var_name] = {**default_info, "validate": True}
256
+ else:
257
+ variable_info[var_name] = {**default_info, "validate": False}
258
258
 
259
259
  return variable_info
260
260
 
@@ -300,44 +300,12 @@ class SurfaceForcing:
300
300
  ds[var_name].attrs["long_name"] = d_meta[var_name]["long_name"]
301
301
  ds[var_name].attrs["units"] = d_meta[var_name]["units"]
302
302
 
303
- if self.use_coarse_grid:
304
- ds = ds.rename({"eta_coarse": "eta_rho", "xi_coarse": "xi_rho"})
305
-
306
303
  ds = self._add_global_metadata(ds)
307
304
 
308
305
  # Convert the time coordinate to the format expected by ROMS
309
- if data.climatology:
310
- ds.attrs["climatology"] = str(True)
311
- # Preserve absolute time coordinate for readability
312
- ds = ds.assign_coords(
313
- {"abs_time": np.datetime64(self.model_reference_date) + ds["time"]}
314
- )
315
- # Convert to pandas TimedeltaIndex
316
- timedelta_index = pd.to_timedelta(ds["time"].values)
317
-
318
- # Determine the start of the year for the base_datetime
319
- start_of_year = datetime(self.model_reference_date.year, 1, 1)
320
-
321
- # Calculate the offset from midnight of the new year
322
- offset = self.model_reference_date - start_of_year
323
-
324
- # Convert the timedelta to nanoseconds first, then to days
325
- sfc_time = xr.DataArray(
326
- (timedelta_index - offset).view("int64") / 3600 / 24 * 1e-9,
327
- dims="time",
328
- )
329
- else:
330
- # Preserve absolute time coordinate for readability
331
- ds = ds.assign_coords({"abs_time": ds["time"]})
332
-
333
- sfc_time = (
334
- (ds["time"] - np.datetime64(self.model_reference_date)).astype(
335
- "float64"
336
- )
337
- / 3600
338
- / 24
339
- * 1e-9
340
- )
306
+ ds, sfc_time = convert_to_roms_time(
307
+ ds, self.model_reference_date, data.climatology
308
+ )
341
309
 
342
310
  if self.type == "physics":
343
311
  time_coords = ["time"]
@@ -351,14 +319,6 @@ class SurfaceForcing:
351
319
  ]
352
320
  for time_coord in time_coords:
353
321
  ds = ds.assign_coords({time_coord: sfc_time})
354
- ds[time_coord].attrs[
355
- "long_name"
356
- ] = f"days since {str(self.model_reference_date)}"
357
- ds[time_coord].encoding["units"] = "days"
358
- ds[time_coord].attrs["units"] = "days"
359
- if data.climatology:
360
- ds[time_coord].attrs["cycle_length"] = 365.25
361
- ds.encoding["unlimited_dims"] = "time"
362
322
 
363
323
  if self.type == "bgc":
364
324
  ds = ds.drop_vars(["time"])
@@ -369,7 +329,7 @@ class SurfaceForcing:
369
329
 
370
330
  return ds
371
331
 
372
- def _validate(self, ds, mask):
332
+ def _validate(self, ds, mask, variable_info):
373
333
  """Validates the dataset by checking for NaN values at wet points, which would
374
334
  indicate missing raw data coverage over the target domain.
375
335
 
@@ -379,6 +339,10 @@ class SurfaceForcing:
379
339
  The dataset to validate.
380
340
  mask : xarray.DataArray
381
341
  Land mask (1=ocean, 0=land) to determine wet points in the domain.
342
+ variable_info : dict
343
+ A dictionary containing metadata about each variable (e.g., location,
344
+ whether it's a 3D variable, etc.). Used to retrieve information for
345
+ validating each variable.
382
346
 
383
347
  Raises
384
348
  ------
@@ -392,7 +356,9 @@ class SurfaceForcing:
392
356
  """
393
357
 
394
358
  for var_name in ds.data_vars:
395
- nan_check(ds[var_name].isel(time=0), mask)
359
+ # Only validate variables based on "validate" flag if use_dask is False
360
+ if not self.use_dask or variable_info[var_name]["validate"]:
361
+ nan_check(ds[var_name].isel(time=0), mask)
396
362
 
397
363
  def _add_global_metadata(self, ds=None):
398
364
 
@@ -471,12 +437,7 @@ class SurfaceForcing:
471
437
 
472
438
  title = field.long_name
473
439
 
474
- # assign lat / lon
475
- if self.use_coarse_grid:
476
- field = field.rename({"eta_rho": "eta_coarse", "xi_rho": "xi_coarse"})
477
- field = field.where(self.grid.ds.mask_coarse)
478
- else:
479
- field = field.where(self.grid.ds.mask_rho)
440
+ field = field.where(self.target_coords["mask"])
480
441
 
481
442
  field = field.assign_coords(
482
443
  {"lon": self.target_coords["lon"], "lat": self.target_coords["lat"]}
@@ -582,49 +543,8 @@ class SurfaceForcing:
582
543
  filepath : Union[str, Path]
583
544
  The path to the YAML file where the parameters will be saved.
584
545
  """
585
- filepath = Path(filepath)
586
-
587
- # Serialize Grid data
588
- grid_data = asdict(self.grid)
589
- grid_data.pop("ds", None) # Exclude non-serializable fields
590
- grid_data.pop("straddle", None)
591
546
 
592
- # Include the version of roms-tools
593
- try:
594
- roms_tools_version = importlib.metadata.version("roms-tools")
595
- except importlib.metadata.PackageNotFoundError:
596
- roms_tools_version = "unknown"
597
-
598
- # Create header
599
- header = f"---\nroms_tools_version: {roms_tools_version}\n---\n"
600
-
601
- # Create YAML data for Grid and optional attributes
602
- grid_yaml_data = {"Grid": grid_data}
603
-
604
- # Combine all sections
605
- surface_forcing_data = {
606
- "SurfaceForcing": {
607
- "start_time": self.start_time.isoformat(),
608
- "end_time": self.end_time.isoformat(),
609
- "source": self.source,
610
- "type": self.type,
611
- "correct_radiation": self.correct_radiation,
612
- "use_coarse_grid": self.use_coarse_grid,
613
- "model_reference_date": self.model_reference_date.isoformat(),
614
- }
615
- }
616
-
617
- # Merge YAML data while excluding empty sections
618
- yaml_data = {
619
- **grid_yaml_data,
620
- **surface_forcing_data,
621
- }
622
-
623
- with filepath.open("w") as file:
624
- # Write header
625
- file.write(header)
626
- # Write YAML data
627
- yaml.dump(yaml_data, file, default_flow_style=False, sort_keys=False)
547
+ _to_yaml(self, filepath)
628
548
 
629
549
  @classmethod
630
550
  def from_yaml(
@@ -645,33 +565,8 @@ class SurfaceForcing:
645
565
  An instance of the SurfaceForcing class.
646
566
  """
647
567
  filepath = Path(filepath)
648
- # Read the entire file content
649
- with filepath.open("r") as file:
650
- file_content = file.read()
651
-
652
- # Split the content into YAML documents
653
- documents = list(yaml.safe_load_all(file_content))
654
-
655
- surface_forcing_data = None
656
-
657
- # Process the YAML documents
658
- for doc in documents:
659
- if doc is None:
660
- continue
661
- if "SurfaceForcing" in doc:
662
- surface_forcing_data = doc["SurfaceForcing"]
663
-
664
- if surface_forcing_data is None:
665
- raise ValueError("No SurfaceForcing configuration found in the YAML file.")
666
-
667
- # Convert from string to datetime
668
- for date_string in ["model_reference_date", "start_time", "end_time"]:
669
- surface_forcing_data[date_string] = datetime.fromisoformat(
670
- surface_forcing_data[date_string]
671
- )
672
568
 
673
- # Create Grid instance from the YAML file
674
569
  grid = Grid.from_yaml(filepath)
570
+ params = _from_yaml(cls, filepath)
675
571
 
676
- # Create and return an instance of SurfaceForcing
677
- return cls(grid=grid, **surface_forcing_data, use_dask=use_dask)
572
+ return cls(grid=grid, **params, use_dask=use_dask)
roms_tools/setup/tides.py CHANGED
@@ -1,11 +1,9 @@
1
1
  from datetime import datetime
2
2
  import xarray as xr
3
3
  import numpy as np
4
- import yaml
5
- import importlib.metadata
6
4
  from typing import Dict, Union, List
7
-
8
- from dataclasses import dataclass, field, asdict
5
+ import importlib.metadata
6
+ from dataclasses import dataclass, field
9
7
  from roms_tools.setup.grid import Grid
10
8
  from roms_tools.setup.plot import _plot
11
9
  from roms_tools.setup.datasets import TPXODataset
@@ -19,6 +17,8 @@ from roms_tools.setup.utils import (
19
17
  get_target_coords,
20
18
  rotate_velocities,
21
19
  get_vector_pairs,
20
+ _to_yaml,
21
+ _from_yaml,
22
22
  )
23
23
  from roms_tools.setup.regrid import LateralRegrid
24
24
  import matplotlib.pyplot as plt
@@ -129,7 +129,7 @@ class TidalForcing:
129
129
 
130
130
  ds = self._add_global_metadata(ds)
131
131
 
132
- self._validate(ds)
132
+ self._validate(ds, variable_info)
133
133
 
134
134
  # substitute NaNs over land by a fill value to avoid blow-up of ROMS
135
135
  for var_name in ds.data_vars:
@@ -176,33 +176,37 @@ class TidalForcing:
176
176
 
177
177
  # Define a dictionary for variable names and their associated information
178
178
  variable_info = {
179
- "ssh_Re": default_info,
180
- "ssh_Im": default_info,
181
- "pot_Re": default_info,
182
- "pot_Im": default_info,
179
+ "ssh_Re": {**default_info, "validate": True},
180
+ "ssh_Im": {**default_info, "validate": False},
181
+ "pot_Re": {**default_info, "validate": False},
182
+ "pot_Im": {**default_info, "validate": False},
183
183
  "u_Re": {
184
184
  "location": "u",
185
185
  "is_vector": True,
186
186
  "vector_pair": "v_Re",
187
187
  "is_3d": False,
188
+ "validate": True,
188
189
  },
189
190
  "v_Re": {
190
191
  "location": "v",
191
192
  "is_vector": True,
192
193
  "vector_pair": "u_Re",
193
194
  "is_3d": False,
195
+ "validate": True,
194
196
  },
195
197
  "u_Im": {
196
198
  "location": "u",
197
199
  "is_vector": True,
198
200
  "vector_pair": "v_Im",
199
201
  "is_3d": False,
202
+ "validate": False,
200
203
  },
201
204
  "v_Im": {
202
205
  "location": "v",
203
206
  "is_vector": True,
204
207
  "vector_pair": "u_Im",
205
208
  "is_3d": False,
209
+ "validate": False,
206
210
  },
207
211
  }
208
212
 
@@ -239,14 +243,17 @@ class TidalForcing:
239
243
 
240
244
  return ds
241
245
 
242
- def _validate(self, ds):
243
- """Validates the dataset by checking for NaN values at wet points, which would
244
- indicate missing raw data coverage over the target domain.
246
+ def _validate(self, ds, variable_info):
247
+ """Validates the dataset by checking for NaN values at wet points for specified
248
+ variables, which would indicate missing raw data coverage over the target
249
+ domain.
245
250
 
246
251
  Parameters
247
252
  ----------
248
253
  ds : xarray.Dataset
249
254
  The dataset to validate, containing tidal variables and a mask for wet points.
255
+ variable_info : dict
256
+ A dictionary containing metadata about the variables, including whether to validate them.
250
257
 
251
258
  Raises
252
259
  ------
@@ -260,7 +267,9 @@ class TidalForcing:
260
267
  The method utilizes `self.grid.ds.mask_rho` to determine the wet points in the domain.
261
268
  """
262
269
  for var_name in ds.data_vars:
263
- nan_check(ds[var_name].isel(ntides=0), self.grid.ds.mask_rho)
270
+ # only validate variables based on "validate" flag if use_dask is false
271
+ if not self.use_dask or variable_info[var_name]["validate"]:
272
+ nan_check(ds[var_name].isel(ntides=0), self.grid.ds.mask_rho)
264
273
 
265
274
  def plot(self, var_name, ntides=0) -> None:
266
275
  """Plot the specified tidal forcing variable for a given tidal constituent.
@@ -409,42 +418,8 @@ class TidalForcing:
409
418
  filepath : Union[str, Path]
410
419
  The path to the YAML file where the parameters will be saved.
411
420
  """
412
- filepath = Path(filepath)
413
-
414
- grid_data = asdict(self.grid)
415
- grid_data.pop("ds", None) # Exclude non-serializable fields
416
- grid_data.pop("straddle", None)
417
-
418
- # Include the version of roms-tools
419
- try:
420
- roms_tools_version = importlib.metadata.version("roms-tools")
421
- except importlib.metadata.PackageNotFoundError:
422
- roms_tools_version = "unknown"
423
-
424
- # Create header
425
- header = f"---\nroms_tools_version: {roms_tools_version}\n---\n"
426
421
 
427
- # Extract grid data
428
- grid_yaml_data = {"Grid": grid_data}
429
-
430
- # Extract tidal forcing data
431
- tidal_forcing_data = {
432
- "TidalForcing": {
433
- "source": self.source,
434
- "ntides": self.ntides,
435
- "allan_factor": self.allan_factor,
436
- "model_reference_date": self.model_reference_date.isoformat(),
437
- }
438
- }
439
-
440
- # Combine both sections
441
- yaml_data = {**grid_yaml_data, **tidal_forcing_data}
442
-
443
- with filepath.open("w") as file:
444
- # Write header
445
- file.write(header)
446
- # Write YAML data
447
- yaml.dump(yaml_data, file, default_flow_style=False, sort_keys=False)
422
+ _to_yaml(self, filepath)
448
423
 
449
424
  @classmethod
450
425
  def from_yaml(
@@ -465,36 +440,9 @@ class TidalForcing:
465
440
  An instance of the TidalForcing class.
466
441
  """
467
442
  filepath = Path(filepath)
468
- # Read the entire file content
469
- with filepath.open("r") as file:
470
- file_content = file.read()
471
-
472
- # Split the content into YAML documents
473
- documents = list(yaml.safe_load_all(file_content))
474
-
475
- tidal_forcing_data = None
476
-
477
- # Process the YAML documents
478
- for doc in documents:
479
- if doc is None:
480
- continue
481
- if "TidalForcing" in doc:
482
- tidal_forcing_data = doc["TidalForcing"]
483
- break
484
-
485
- if tidal_forcing_data is None:
486
- raise ValueError("No TidalForcing configuration found in the YAML file.")
487
-
488
- # Convert the model_reference_date from string to datetime
489
- tidal_forcing_params = tidal_forcing_data
490
- tidal_forcing_params["model_reference_date"] = datetime.fromisoformat(
491
- tidal_forcing_params["model_reference_date"]
492
- )
493
443
 
494
- # Create Grid instance from the YAML file
495
444
  grid = Grid.from_yaml(filepath)
496
-
497
- # Create and return an instance of TidalForcing
445
+ tidal_forcing_params = _from_yaml(cls, filepath)
498
446
  return cls(grid=grid, **tidal_forcing_params, use_dask=use_dask)
499
447
 
500
448
  def _correct_tides(self, data):