roms-tools 2.7.0__py3-none-any.whl → 3.0.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 (1066) hide show
  1. ci/environment-with-xesmf.yml +2 -1
  2. ci/environment.yml +2 -1
  3. roms_tools/__init__.py +10 -9
  4. roms_tools/analysis/roms_output.py +23 -66
  5. roms_tools/constants.py +3 -0
  6. roms_tools/download.py +1 -1
  7. roms_tools/plot.py +14 -10
  8. roms_tools/regrid.py +3 -2
  9. roms_tools/setup/boundary_forcing.py +30 -27
  10. roms_tools/setup/cdr_forcing.py +997 -836
  11. roms_tools/setup/cdr_release.py +537 -0
  12. roms_tools/setup/datasets.py +51 -16
  13. roms_tools/setup/fill.py +1 -1
  14. roms_tools/setup/grid.py +202 -76
  15. roms_tools/setup/initial_conditions.py +28 -24
  16. roms_tools/setup/mask.py +5 -3
  17. roms_tools/setup/nesting.py +14 -11
  18. roms_tools/setup/river_forcing.py +55 -45
  19. roms_tools/setup/surface_forcing.py +154 -41
  20. roms_tools/setup/tides.py +19 -15
  21. roms_tools/setup/topography.py +10 -6
  22. roms_tools/setup/utils.py +371 -101
  23. roms_tools/tests/test_analysis/test_roms_output.py +119 -36
  24. roms_tools/tests/test_regrid.py +3 -1
  25. roms_tools/tests/test_setup/test_boundary_forcing.py +57 -7
  26. roms_tools/tests/test_setup/test_cdr_forcing.py +900 -714
  27. roms_tools/tests/test_setup/test_cdr_release.py +388 -0
  28. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_ALT_CO2_east/c/0/0/0 +0 -0
  29. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_ALT_CO2_east/zarr.json +54 -0
  30. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_ALT_CO2_north/c/0/0/0 +0 -0
  31. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_ALT_CO2_north/zarr.json +54 -0
  32. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_ALT_CO2_south/c/0/0/0 +0 -0
  33. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_ALT_CO2_south/zarr.json +54 -0
  34. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_ALT_CO2_west/c/0/0/0 +0 -0
  35. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_ALT_CO2_west/zarr.json +54 -0
  36. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_east/c/0/0/0 +0 -0
  37. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_east/zarr.json +54 -0
  38. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_north/c/0/0/0 +0 -0
  39. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_north/zarr.json +54 -0
  40. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_south/c/0/0/0 +0 -0
  41. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_south/zarr.json +54 -0
  42. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_west/c/0/0/0 +0 -0
  43. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_west/zarr.json +54 -0
  44. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_ALT_CO2_east/c/0/0/0 +0 -0
  45. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_ALT_CO2_east/zarr.json +54 -0
  46. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_ALT_CO2_north/c/0/0/0 +0 -0
  47. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_ALT_CO2_north/zarr.json +54 -0
  48. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_ALT_CO2_south/c/0/0/0 +0 -0
  49. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_ALT_CO2_south/zarr.json +54 -0
  50. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_ALT_CO2_west/c/0/0/0 +0 -0
  51. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_ALT_CO2_west/zarr.json +54 -0
  52. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_east/c/0/0/0 +0 -0
  53. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_east/zarr.json +54 -0
  54. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_north/c/0/0/0 +0 -0
  55. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_north/zarr.json +54 -0
  56. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_south/c/0/0/0 +0 -0
  57. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_south/zarr.json +54 -0
  58. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_west/c/0/0/0 +0 -0
  59. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_west/zarr.json +54 -0
  60. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOC_east/c/0/0/0 +0 -0
  61. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOC_east/zarr.json +54 -0
  62. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOC_north/c/0/0/0 +0 -0
  63. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOC_north/zarr.json +54 -0
  64. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOC_south/c/0/0/0 +0 -0
  65. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOC_south/zarr.json +54 -0
  66. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOC_west/c/0/0/0 +0 -0
  67. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOC_west/zarr.json +54 -0
  68. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOCr_east/c/0/0/0 +0 -0
  69. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOCr_east/zarr.json +54 -0
  70. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOCr_north/c/0/0/0 +0 -0
  71. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOCr_north/zarr.json +54 -0
  72. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOCr_south/c/0/0/0 +0 -0
  73. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOCr_south/zarr.json +54 -0
  74. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOCr_west/c/0/0/0 +0 -0
  75. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOCr_west/zarr.json +54 -0
  76. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DON_east/c/0/0/0 +0 -0
  77. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DON_east/zarr.json +54 -0
  78. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DON_north/c/0/0/0 +0 -0
  79. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DON_north/zarr.json +54 -0
  80. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DON_south/c/0/0/0 +0 -0
  81. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DON_south/zarr.json +54 -0
  82. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DON_west/c/0/0/0 +0 -0
  83. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DON_west/zarr.json +54 -0
  84. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DONr_east/c/0/0/0 +0 -0
  85. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DONr_east/zarr.json +54 -0
  86. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DONr_north/c/0/0/0 +0 -0
  87. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DONr_north/zarr.json +54 -0
  88. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DONr_south/c/0/0/0 +0 -0
  89. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DONr_south/zarr.json +54 -0
  90. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DONr_west/c/0/0/0 +0 -0
  91. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DONr_west/zarr.json +54 -0
  92. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOP_east/c/0/0/0 +0 -0
  93. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOP_east/zarr.json +54 -0
  94. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOP_north/c/0/0/0 +0 -0
  95. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOP_north/zarr.json +54 -0
  96. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOP_south/c/0/0/0 +0 -0
  97. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOP_south/zarr.json +54 -0
  98. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOP_west/c/0/0/0 +0 -0
  99. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOP_west/zarr.json +54 -0
  100. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOPr_east/c/0/0/0 +0 -0
  101. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOPr_east/zarr.json +54 -0
  102. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOPr_north/c/0/0/0 +0 -0
  103. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOPr_north/zarr.json +54 -0
  104. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOPr_south/c/0/0/0 +0 -0
  105. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOPr_south/zarr.json +54 -0
  106. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOPr_west/c/0/0/0 +0 -0
  107. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOPr_west/zarr.json +54 -0
  108. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Fe_east/c/0/0/0 +0 -0
  109. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Fe_east/zarr.json +54 -0
  110. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Fe_north/c/0/0/0 +0 -0
  111. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Fe_north/zarr.json +54 -0
  112. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Fe_south/c/0/0/0 +0 -0
  113. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Fe_south/zarr.json +54 -0
  114. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Fe_west/c/0/0/0 +0 -0
  115. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Fe_west/zarr.json +54 -0
  116. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Lig_east/c/0/0/0 +0 -0
  117. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Lig_east/zarr.json +54 -0
  118. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Lig_north/c/0/0/0 +0 -0
  119. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Lig_north/zarr.json +54 -0
  120. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Lig_south/c/0/0/0 +0 -0
  121. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Lig_south/zarr.json +54 -0
  122. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Lig_west/c/0/0/0 +0 -0
  123. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Lig_west/zarr.json +54 -0
  124. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NH4_east/c/0/0/0 +0 -0
  125. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NH4_east/zarr.json +54 -0
  126. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NH4_north/c/0/0/0 +0 -0
  127. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NH4_north/zarr.json +54 -0
  128. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NH4_south/c/0/0/0 +0 -0
  129. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NH4_south/zarr.json +54 -0
  130. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NH4_west/c/0/0/0 +0 -0
  131. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NH4_west/zarr.json +54 -0
  132. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NO3_east/c/0/0/0 +0 -0
  133. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NO3_east/zarr.json +54 -0
  134. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NO3_north/c/0/0/0 +0 -0
  135. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NO3_north/zarr.json +54 -0
  136. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NO3_south/c/0/0/0 +0 -0
  137. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NO3_south/zarr.json +54 -0
  138. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NO3_west/c/0/0/0 +0 -0
  139. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NO3_west/zarr.json +54 -0
  140. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/O2_east/c/0/0/0 +0 -0
  141. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/O2_east/zarr.json +54 -0
  142. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/O2_north/c/0/0/0 +0 -0
  143. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/O2_north/zarr.json +54 -0
  144. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/O2_south/c/0/0/0 +0 -0
  145. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/O2_south/zarr.json +54 -0
  146. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/O2_west/c/0/0/0 +0 -0
  147. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/O2_west/zarr.json +54 -0
  148. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/PO4_east/c/0/0/0 +0 -0
  149. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/PO4_east/zarr.json +54 -0
  150. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/PO4_north/c/0/0/0 +0 -0
  151. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/PO4_north/zarr.json +54 -0
  152. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/PO4_south/c/0/0/0 +0 -0
  153. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/PO4_south/zarr.json +54 -0
  154. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/PO4_west/c/0/0/0 +0 -0
  155. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/PO4_west/zarr.json +54 -0
  156. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/SiO3_east/c/0/0/0 +0 -0
  157. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/SiO3_east/zarr.json +54 -0
  158. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/SiO3_north/c/0/0/0 +0 -0
  159. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/SiO3_north/zarr.json +54 -0
  160. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/SiO3_south/c/0/0/0 +0 -0
  161. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/SiO3_south/zarr.json +54 -0
  162. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/SiO3_west/c/0/0/0 +0 -0
  163. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/SiO3_west/zarr.json +54 -0
  164. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/abs_time/c/0 +0 -0
  165. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/abs_time/zarr.json +47 -0
  166. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/bry_time/c/0 +0 -0
  167. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/bry_time/zarr.json +48 -0
  168. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatC_east/c/0/0/0 +0 -0
  169. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatC_east/zarr.json +54 -0
  170. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatC_north/c/0/0/0 +0 -0
  171. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatC_north/zarr.json +54 -0
  172. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatC_south/c/0/0/0 +0 -0
  173. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatC_south/zarr.json +54 -0
  174. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatC_west/c/0/0/0 +0 -0
  175. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatC_west/zarr.json +54 -0
  176. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatChl_east/c/0/0/0 +0 -0
  177. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatChl_east/zarr.json +54 -0
  178. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatChl_north/c/0/0/0 +0 -0
  179. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatChl_north/zarr.json +54 -0
  180. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatChl_south/c/0/0/0 +0 -0
  181. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatChl_south/zarr.json +54 -0
  182. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatChl_west/c/0/0/0 +0 -0
  183. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatChl_west/zarr.json +54 -0
  184. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatFe_east/c/0/0/0 +0 -0
  185. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatFe_east/zarr.json +54 -0
  186. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatFe_north/c/0/0/0 +0 -0
  187. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatFe_north/zarr.json +54 -0
  188. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatFe_south/c/0/0/0 +0 -0
  189. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatFe_south/zarr.json +54 -0
  190. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatFe_west/c/0/0/0 +0 -0
  191. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatFe_west/zarr.json +54 -0
  192. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatP_east/c/0/0/0 +0 -0
  193. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatP_east/zarr.json +54 -0
  194. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatP_north/c/0/0/0 +0 -0
  195. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatP_north/zarr.json +54 -0
  196. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatP_south/c/0/0/0 +0 -0
  197. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatP_south/zarr.json +54 -0
  198. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatP_west/c/0/0/0 +0 -0
  199. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatP_west/zarr.json +54 -0
  200. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatSi_east/c/0/0/0 +0 -0
  201. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatSi_east/zarr.json +54 -0
  202. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatSi_north/c/0/0/0 +0 -0
  203. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatSi_north/zarr.json +54 -0
  204. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatSi_south/c/0/0/0 +0 -0
  205. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatSi_south/zarr.json +54 -0
  206. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatSi_west/c/0/0/0 +0 -0
  207. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatSi_west/zarr.json +54 -0
  208. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazC_east/c/0/0/0 +0 -0
  209. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazC_east/zarr.json +54 -0
  210. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazC_north/c/0/0/0 +0 -0
  211. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazC_north/zarr.json +54 -0
  212. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazC_south/c/0/0/0 +0 -0
  213. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazC_south/zarr.json +54 -0
  214. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazC_west/c/0/0/0 +0 -0
  215. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazC_west/zarr.json +54 -0
  216. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazChl_east/c/0/0/0 +0 -0
  217. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazChl_east/zarr.json +54 -0
  218. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazChl_north/c/0/0/0 +0 -0
  219. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazChl_north/zarr.json +54 -0
  220. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazChl_south/c/0/0/0 +0 -0
  221. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazChl_south/zarr.json +54 -0
  222. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazChl_west/c/0/0/0 +0 -0
  223. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazChl_west/zarr.json +54 -0
  224. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazFe_east/c/0/0/0 +0 -0
  225. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazFe_east/zarr.json +54 -0
  226. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazFe_north/c/0/0/0 +0 -0
  227. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazFe_north/zarr.json +54 -0
  228. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazFe_south/c/0/0/0 +0 -0
  229. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazFe_south/zarr.json +54 -0
  230. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazFe_west/c/0/0/0 +0 -0
  231. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazFe_west/zarr.json +54 -0
  232. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazP_east/c/0/0/0 +0 -0
  233. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazP_east/zarr.json +54 -0
  234. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazP_north/c/0/0/0 +0 -0
  235. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazP_north/zarr.json +54 -0
  236. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazP_south/c/0/0/0 +0 -0
  237. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazP_south/zarr.json +54 -0
  238. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazP_west/c/0/0/0 +0 -0
  239. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazP_west/zarr.json +54 -0
  240. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/month/c/0 +0 -0
  241. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/month/zarr.json +45 -0
  242. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spC_east/c/0/0/0 +0 -0
  243. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spC_east/zarr.json +54 -0
  244. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spC_north/c/0/0/0 +0 -0
  245. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spC_north/zarr.json +54 -0
  246. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spC_south/c/0/0/0 +0 -0
  247. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spC_south/zarr.json +54 -0
  248. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spC_west/c/0/0/0 +0 -0
  249. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spC_west/zarr.json +54 -0
  250. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spCaCO3_east/c/0/0/0 +0 -0
  251. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spCaCO3_east/zarr.json +54 -0
  252. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spCaCO3_north/c/0/0/0 +0 -0
  253. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spCaCO3_north/zarr.json +54 -0
  254. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spCaCO3_south/c/0/0/0 +0 -0
  255. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spCaCO3_south/zarr.json +54 -0
  256. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spCaCO3_west/c/0/0/0 +0 -0
  257. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spCaCO3_west/zarr.json +54 -0
  258. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spChl_east/c/0/0/0 +0 -0
  259. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spChl_east/zarr.json +54 -0
  260. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spChl_north/c/0/0/0 +0 -0
  261. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spChl_north/zarr.json +54 -0
  262. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spChl_south/c/0/0/0 +0 -0
  263. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spChl_south/zarr.json +54 -0
  264. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spChl_west/c/0/0/0 +0 -0
  265. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spChl_west/zarr.json +54 -0
  266. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spFe_east/c/0/0/0 +0 -0
  267. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spFe_east/zarr.json +54 -0
  268. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spFe_north/c/0/0/0 +0 -0
  269. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spFe_north/zarr.json +54 -0
  270. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spFe_south/c/0/0/0 +0 -0
  271. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spFe_south/zarr.json +54 -0
  272. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spFe_west/c/0/0/0 +0 -0
  273. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spFe_west/zarr.json +54 -0
  274. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spP_east/c/0/0/0 +0 -0
  275. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spP_east/zarr.json +54 -0
  276. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spP_north/c/0/0/0 +0 -0
  277. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spP_north/zarr.json +54 -0
  278. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spP_south/c/0/0/0 +0 -0
  279. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spP_south/zarr.json +54 -0
  280. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spP_west/c/0/0/0 +0 -0
  281. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spP_west/zarr.json +54 -0
  282. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/zarr.json +7076 -0
  283. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/zooC_east/c/0/0/0 +0 -0
  284. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/zooC_east/zarr.json +54 -0
  285. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/zooC_north/c/0/0/0 +0 -0
  286. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/zooC_north/zarr.json +54 -0
  287. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/zooC_south/c/0/0/0 +0 -0
  288. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/zooC_south/zarr.json +54 -0
  289. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/zooC_west/c/0/0/0 +0 -0
  290. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/zooC_west/zarr.json +54 -0
  291. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/abs_time/c/0 +0 -0
  292. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/abs_time/zarr.json +47 -0
  293. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/dust/c/0/0/0 +0 -0
  294. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/dust/zarr.json +56 -0
  295. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/dust_time/c/0 +0 -0
  296. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/dust_time/zarr.json +48 -0
  297. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/iron/c/0/0/0 +0 -0
  298. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/iron/zarr.json +56 -0
  299. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/iron_time/c/0 +0 -0
  300. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/iron_time/zarr.json +48 -0
  301. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/month/c/0 +0 -0
  302. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/month/zarr.json +45 -0
  303. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/nhy/c/0/0/0 +0 -0
  304. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/nhy/zarr.json +54 -0
  305. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/nhy_time/c/0 +0 -0
  306. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/nhy_time/zarr.json +48 -0
  307. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/nox/c/0/0/0 +0 -0
  308. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/nox/zarr.json +56 -0
  309. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/nox_time/c/0 +0 -0
  310. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/nox_time/zarr.json +48 -0
  311. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/pco2_air/c/0/0/0 +0 -0
  312. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/pco2_air/zarr.json +56 -0
  313. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/pco2_air_alt/c/0/0/0 +0 -0
  314. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/pco2_air_alt/zarr.json +54 -0
  315. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/pco2_time/c/0 +0 -0
  316. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/pco2_time/zarr.json +48 -0
  317. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/zarr.json +686 -0
  318. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/ALK/c/0/0/0/0 +0 -0
  319. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/ALK/zarr.json +57 -0
  320. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/ALK_ALT_CO2/c/0/0/0/0 +0 -0
  321. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/ALK_ALT_CO2/zarr.json +57 -0
  322. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/Cs_r/c/0 +0 -0
  323. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/Cs_r/zarr.json +47 -0
  324. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/Cs_w/c/0 +0 -0
  325. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/Cs_w/zarr.json +47 -0
  326. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DIC/c/0/0/0/0 +0 -0
  327. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DIC/zarr.json +57 -0
  328. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DIC_ALT_CO2/c/0/0/0/0 +0 -0
  329. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DIC_ALT_CO2/zarr.json +57 -0
  330. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DOC/c/0/0/0/0 +0 -0
  331. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DOC/zarr.json +57 -0
  332. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DOCr/c/0/0/0/0 +0 -0
  333. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DOCr/zarr.json +57 -0
  334. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DON/c/0/0/0/0 +0 -0
  335. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DON/zarr.json +57 -0
  336. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DONr/c/0/0/0/0 +0 -0
  337. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DONr/zarr.json +57 -0
  338. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DOP/c/0/0/0/0 +0 -0
  339. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DOP/zarr.json +57 -0
  340. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DOPr/c/0/0/0/0 +0 -0
  341. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DOPr/zarr.json +57 -0
  342. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/Fe/c/0/0/0/0 +0 -0
  343. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/Fe/zarr.json +57 -0
  344. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/Lig/c/0/0/0/0 +0 -0
  345. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/Lig/zarr.json +57 -0
  346. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/NH4/c/0/0/0/0 +0 -0
  347. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/NH4/zarr.json +57 -0
  348. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/NO3/c/0/0/0/0 +0 -0
  349. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/NO3/zarr.json +57 -0
  350. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/O2/c/0/0/0/0 +0 -0
  351. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/O2/zarr.json +57 -0
  352. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/PO4/c/0/0/0/0 +0 -0
  353. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/PO4/zarr.json +57 -0
  354. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/SiO3/c/0/0/0/0 +0 -0
  355. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/SiO3/zarr.json +57 -0
  356. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/abs_time/zarr.json +47 -0
  357. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diatC/c/0/0/0/0 +0 -0
  358. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diatC/zarr.json +57 -0
  359. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diatChl/c/0/0/0/0 +0 -0
  360. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diatChl/zarr.json +57 -0
  361. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diatFe/c/0/0/0/0 +0 -0
  362. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diatFe/zarr.json +57 -0
  363. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diatP/c/0/0/0/0 +0 -0
  364. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diatP/zarr.json +57 -0
  365. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diatSi/c/0/0/0/0 +0 -0
  366. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diatSi/zarr.json +57 -0
  367. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diazC/c/0/0/0/0 +0 -0
  368. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diazC/zarr.json +57 -0
  369. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diazChl/c/0/0/0/0 +0 -0
  370. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diazChl/zarr.json +57 -0
  371. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diazFe/c/0/0/0/0 +0 -0
  372. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diazFe/zarr.json +57 -0
  373. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diazP/c/0/0/0/0 +0 -0
  374. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diazP/zarr.json +57 -0
  375. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/ocean_time/c/0 +0 -0
  376. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/ocean_time/zarr.json +47 -0
  377. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/salt/c/0/0/0/0 +0 -0
  378. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/salt/zarr.json +57 -0
  379. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/spC/c/0/0/0/0 +0 -0
  380. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/spC/zarr.json +57 -0
  381. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/spCaCO3/c/0/0/0/0 +0 -0
  382. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/spCaCO3/zarr.json +57 -0
  383. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/spChl/c/0/0/0/0 +0 -0
  384. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/spChl/zarr.json +57 -0
  385. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/spFe/c/0/0/0/0 +0 -0
  386. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/spFe/zarr.json +57 -0
  387. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/spP/c/0/0/0/0 +0 -0
  388. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/spP/zarr.json +57 -0
  389. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/temp/c/0/0/0/0 +0 -0
  390. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/temp/zarr.json +57 -0
  391. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/u/c/0/0/0/0 +0 -0
  392. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/u/zarr.json +57 -0
  393. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/ubar/c/0/0/0 +0 -0
  394. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/ubar/zarr.json +54 -0
  395. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/v/c/0/0/0/0 +0 -0
  396. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/v/zarr.json +57 -0
  397. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/vbar/c/0/0/0 +0 -0
  398. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/vbar/zarr.json +54 -0
  399. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/w/zarr.json +57 -0
  400. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/zarr.json +2481 -0
  401. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/zeta/c/0/0/0 +0 -0
  402. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/zeta/zarr.json +54 -0
  403. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/zooC/c/0/0/0/0 +0 -0
  404. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/zooC/zarr.json +57 -0
  405. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/abs_time/c/0 +0 -0
  406. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/abs_time/zarr.json +47 -0
  407. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/month/c/0 +0 -0
  408. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/month/zarr.json +45 -0
  409. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/nriver/c/0 +0 -0
  410. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/nriver/zarr.json +45 -0
  411. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_fraction/c/0/0 +0 -0
  412. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_fraction/zarr.json +50 -0
  413. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_index/c/0/0 +0 -0
  414. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_index/zarr.json +50 -0
  415. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_name/c/0 +0 -0
  416. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_name/zarr.json +43 -0
  417. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_time/c/0 +0 -0
  418. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_time/zarr.json +48 -0
  419. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_tracer/c/0/0/0 +0 -0
  420. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_tracer/zarr.json +53 -0
  421. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_volume/c/0/0 +0 -0
  422. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_volume/zarr.json +51 -0
  423. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/tracer_long_name/c/0 +0 -0
  424. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/tracer_long_name/zarr.json +43 -0
  425. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/tracer_name/c/0 +0 -0
  426. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/tracer_name/zarr.json +43 -0
  427. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/tracer_unit/c/0 +0 -0
  428. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/tracer_unit/zarr.json +43 -0
  429. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/zarr.json +574 -0
  430. roms_tools/tests/test_setup/test_datasets.py +8 -6
  431. roms_tools/tests/test_setup/test_fill.py +3 -2
  432. roms_tools/tests/test_setup/test_grid.py +419 -101
  433. roms_tools/tests/test_setup/test_initial_conditions.py +69 -7
  434. roms_tools/tests/test_setup/test_nesting.py +8 -6
  435. roms_tools/tests/test_setup/test_river_forcing.py +15 -15
  436. roms_tools/tests/test_setup/test_surface_forcing.py +210 -116
  437. roms_tools/tests/test_setup/test_tides.py +6 -4
  438. roms_tools/tests/test_setup/test_utils.py +10 -6
  439. roms_tools/tests/test_setup/test_validation.py +6 -2
  440. roms_tools/tests/test_tiling/test_partition.py +18 -4
  441. roms_tools/tests/test_utils.py +21 -0
  442. roms_tools/tests/test_vertical_coordinate.py +11 -6
  443. roms_tools/tiling/partition.py +30 -11
  444. roms_tools/utils.py +228 -44
  445. roms_tools/vertical_coordinate.py +7 -5
  446. roms_tools-3.0.0.dist-info/METADATA +143 -0
  447. roms_tools-3.0.0.dist-info/RECORD +1462 -0
  448. roms_tools-3.0.0.dist-info/WHEEL +5 -0
  449. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/.zattrs +0 -14
  450. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/.zgroup +0 -3
  451. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/.zmetadata +0 -4456
  452. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_ALT_CO2_east/.zarray +0 -24
  453. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_ALT_CO2_east/.zattrs +0 -10
  454. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_ALT_CO2_east/0.0.0 +0 -0
  455. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_ALT_CO2_north/.zarray +0 -24
  456. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_ALT_CO2_north/.zattrs +0 -10
  457. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_ALT_CO2_north/0.0.0 +0 -0
  458. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_ALT_CO2_south/.zarray +0 -24
  459. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_ALT_CO2_south/.zattrs +0 -10
  460. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_ALT_CO2_south/0.0.0 +0 -0
  461. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_ALT_CO2_west/.zarray +0 -24
  462. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_ALT_CO2_west/.zattrs +0 -10
  463. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_ALT_CO2_west/0.0.0 +0 -0
  464. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_east/.zarray +0 -24
  465. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_east/.zattrs +0 -10
  466. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_east/0.0.0 +0 -0
  467. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_north/.zarray +0 -24
  468. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_north/.zattrs +0 -10
  469. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_north/0.0.0 +0 -0
  470. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_south/.zarray +0 -24
  471. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_south/.zattrs +0 -10
  472. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_south/0.0.0 +0 -0
  473. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_west/.zarray +0 -24
  474. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_west/.zattrs +0 -10
  475. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/ALK_west/0.0.0 +0 -0
  476. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_ALT_CO2_east/.zarray +0 -24
  477. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_ALT_CO2_east/.zattrs +0 -10
  478. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_ALT_CO2_east/0.0.0 +0 -0
  479. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_ALT_CO2_north/.zarray +0 -24
  480. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_ALT_CO2_north/.zattrs +0 -10
  481. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_ALT_CO2_north/0.0.0 +0 -0
  482. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_ALT_CO2_south/.zarray +0 -24
  483. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_ALT_CO2_south/.zattrs +0 -10
  484. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_ALT_CO2_south/0.0.0 +0 -0
  485. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_ALT_CO2_west/.zarray +0 -24
  486. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_ALT_CO2_west/.zattrs +0 -10
  487. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_ALT_CO2_west/0.0.0 +0 -0
  488. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_east/.zarray +0 -24
  489. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_east/.zattrs +0 -10
  490. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_east/0.0.0 +0 -0
  491. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_north/.zarray +0 -24
  492. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_north/.zattrs +0 -10
  493. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_north/0.0.0 +0 -0
  494. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_south/.zarray +0 -24
  495. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_south/.zattrs +0 -10
  496. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_south/0.0.0 +0 -0
  497. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_west/.zarray +0 -24
  498. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_west/.zattrs +0 -10
  499. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DIC_west/0.0.0 +0 -0
  500. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOC_east/.zarray +0 -24
  501. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOC_east/.zattrs +0 -10
  502. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOC_east/0.0.0 +0 -0
  503. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOC_north/.zarray +0 -24
  504. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOC_north/.zattrs +0 -10
  505. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOC_north/0.0.0 +0 -0
  506. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOC_south/.zarray +0 -24
  507. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOC_south/.zattrs +0 -10
  508. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOC_south/0.0.0 +0 -0
  509. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOC_west/.zarray +0 -24
  510. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOC_west/.zattrs +0 -10
  511. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOC_west/0.0.0 +0 -0
  512. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOCr_east/.zarray +0 -24
  513. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOCr_east/.zattrs +0 -10
  514. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOCr_east/0.0.0 +0 -0
  515. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOCr_north/.zarray +0 -24
  516. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOCr_north/.zattrs +0 -10
  517. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOCr_north/0.0.0 +0 -0
  518. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOCr_south/.zarray +0 -24
  519. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOCr_south/.zattrs +0 -10
  520. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOCr_south/0.0.0 +0 -0
  521. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOCr_west/.zarray +0 -24
  522. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOCr_west/.zattrs +0 -10
  523. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOCr_west/0.0.0 +0 -0
  524. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DON_east/.zarray +0 -24
  525. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DON_east/.zattrs +0 -10
  526. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DON_east/0.0.0 +0 -0
  527. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DON_north/.zarray +0 -24
  528. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DON_north/.zattrs +0 -10
  529. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DON_north/0.0.0 +0 -0
  530. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DON_south/.zarray +0 -24
  531. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DON_south/.zattrs +0 -10
  532. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DON_south/0.0.0 +0 -0
  533. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DON_west/.zarray +0 -24
  534. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DON_west/.zattrs +0 -10
  535. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DON_west/0.0.0 +0 -0
  536. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DONr_east/.zarray +0 -24
  537. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DONr_east/.zattrs +0 -10
  538. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DONr_east/0.0.0 +0 -0
  539. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DONr_north/.zarray +0 -24
  540. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DONr_north/.zattrs +0 -10
  541. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DONr_north/0.0.0 +0 -0
  542. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DONr_south/.zarray +0 -24
  543. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DONr_south/.zattrs +0 -10
  544. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DONr_south/0.0.0 +0 -0
  545. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DONr_west/.zarray +0 -24
  546. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DONr_west/.zattrs +0 -10
  547. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DONr_west/0.0.0 +0 -0
  548. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOP_east/.zarray +0 -24
  549. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOP_east/.zattrs +0 -10
  550. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOP_east/0.0.0 +0 -0
  551. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOP_north/.zarray +0 -24
  552. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOP_north/.zattrs +0 -10
  553. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOP_north/0.0.0 +0 -0
  554. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOP_south/.zarray +0 -24
  555. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOP_south/.zattrs +0 -10
  556. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOP_south/0.0.0 +0 -0
  557. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOP_west/.zarray +0 -24
  558. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOP_west/.zattrs +0 -10
  559. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOP_west/0.0.0 +0 -0
  560. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOPr_east/.zarray +0 -24
  561. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOPr_east/.zattrs +0 -10
  562. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOPr_east/0.0.0 +0 -0
  563. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOPr_north/.zarray +0 -24
  564. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOPr_north/.zattrs +0 -10
  565. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOPr_north/0.0.0 +0 -0
  566. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOPr_south/.zarray +0 -24
  567. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOPr_south/.zattrs +0 -10
  568. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOPr_south/0.0.0 +0 -0
  569. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOPr_west/.zarray +0 -24
  570. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOPr_west/.zattrs +0 -10
  571. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/DOPr_west/0.0.0 +0 -0
  572. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Fe_east/.zarray +0 -24
  573. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Fe_east/.zattrs +0 -10
  574. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Fe_east/0.0.0 +0 -0
  575. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Fe_north/.zarray +0 -24
  576. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Fe_north/.zattrs +0 -10
  577. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Fe_north/0.0.0 +0 -0
  578. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Fe_south/.zarray +0 -24
  579. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Fe_south/.zattrs +0 -10
  580. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Fe_south/0.0.0 +0 -0
  581. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Fe_west/.zarray +0 -24
  582. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Fe_west/.zattrs +0 -10
  583. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Fe_west/0.0.0 +0 -0
  584. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Lig_east/.zarray +0 -24
  585. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Lig_east/.zattrs +0 -10
  586. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Lig_east/0.0.0 +0 -0
  587. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Lig_north/.zarray +0 -24
  588. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Lig_north/.zattrs +0 -10
  589. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Lig_north/0.0.0 +0 -0
  590. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Lig_south/.zarray +0 -24
  591. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Lig_south/.zattrs +0 -10
  592. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Lig_south/0.0.0 +0 -0
  593. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Lig_west/.zarray +0 -24
  594. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Lig_west/.zattrs +0 -10
  595. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/Lig_west/0.0.0 +0 -0
  596. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NH4_east/.zarray +0 -24
  597. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NH4_east/.zattrs +0 -10
  598. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NH4_east/0.0.0 +0 -0
  599. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NH4_north/.zarray +0 -24
  600. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NH4_north/.zattrs +0 -10
  601. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NH4_north/0.0.0 +0 -0
  602. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NH4_south/.zarray +0 -24
  603. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NH4_south/.zattrs +0 -10
  604. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NH4_south/0.0.0 +0 -0
  605. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NH4_west/.zarray +0 -24
  606. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NH4_west/.zattrs +0 -10
  607. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NH4_west/0.0.0 +0 -0
  608. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NO3_east/.zarray +0 -24
  609. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NO3_east/.zattrs +0 -10
  610. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NO3_east/0.0.0 +0 -0
  611. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NO3_north/.zarray +0 -24
  612. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NO3_north/.zattrs +0 -10
  613. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NO3_north/0.0.0 +0 -0
  614. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NO3_south/.zarray +0 -24
  615. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NO3_south/.zattrs +0 -10
  616. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NO3_south/0.0.0 +0 -0
  617. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NO3_west/.zarray +0 -24
  618. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NO3_west/.zattrs +0 -10
  619. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/NO3_west/0.0.0 +0 -0
  620. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/O2_east/.zarray +0 -24
  621. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/O2_east/.zattrs +0 -10
  622. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/O2_east/0.0.0 +0 -0
  623. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/O2_north/.zarray +0 -24
  624. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/O2_north/.zattrs +0 -10
  625. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/O2_north/0.0.0 +0 -0
  626. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/O2_south/.zarray +0 -24
  627. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/O2_south/.zattrs +0 -10
  628. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/O2_south/0.0.0 +0 -0
  629. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/O2_west/.zarray +0 -24
  630. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/O2_west/.zattrs +0 -10
  631. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/O2_west/0.0.0 +0 -0
  632. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/PO4_east/.zarray +0 -24
  633. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/PO4_east/.zattrs +0 -10
  634. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/PO4_east/0.0.0 +0 -0
  635. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/PO4_north/.zarray +0 -24
  636. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/PO4_north/.zattrs +0 -10
  637. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/PO4_north/0.0.0 +0 -0
  638. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/PO4_south/.zarray +0 -24
  639. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/PO4_south/.zattrs +0 -10
  640. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/PO4_south/0.0.0 +0 -0
  641. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/PO4_west/.zarray +0 -24
  642. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/PO4_west/.zattrs +0 -10
  643. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/PO4_west/0.0.0 +0 -0
  644. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/SiO3_east/.zarray +0 -24
  645. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/SiO3_east/.zattrs +0 -10
  646. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/SiO3_east/0.0.0 +0 -0
  647. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/SiO3_north/.zarray +0 -24
  648. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/SiO3_north/.zattrs +0 -10
  649. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/SiO3_north/0.0.0 +0 -0
  650. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/SiO3_south/.zarray +0 -24
  651. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/SiO3_south/.zattrs +0 -10
  652. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/SiO3_south/0.0.0 +0 -0
  653. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/SiO3_west/.zarray +0 -24
  654. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/SiO3_west/.zattrs +0 -10
  655. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/SiO3_west/0.0.0 +0 -0
  656. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/abs_time/.zarray +0 -20
  657. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/abs_time/.zattrs +0 -8
  658. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/abs_time/0 +0 -0
  659. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/bry_time/.zarray +0 -20
  660. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/bry_time/.zattrs +0 -8
  661. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/bry_time/0 +0 -0
  662. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatC_east/.zarray +0 -24
  663. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatC_east/.zattrs +0 -10
  664. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatC_east/0.0.0 +0 -0
  665. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatC_north/.zarray +0 -24
  666. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatC_north/.zattrs +0 -10
  667. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatC_north/0.0.0 +0 -0
  668. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatC_south/.zarray +0 -24
  669. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatC_south/.zattrs +0 -10
  670. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatC_south/0.0.0 +0 -0
  671. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatC_west/.zarray +0 -24
  672. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatC_west/.zattrs +0 -10
  673. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatC_west/0.0.0 +0 -0
  674. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatChl_east/.zarray +0 -24
  675. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatChl_east/.zattrs +0 -10
  676. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatChl_east/0.0.0 +0 -0
  677. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatChl_north/.zarray +0 -24
  678. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatChl_north/.zattrs +0 -10
  679. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatChl_north/0.0.0 +0 -0
  680. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatChl_south/.zarray +0 -24
  681. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatChl_south/.zattrs +0 -10
  682. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatChl_south/0.0.0 +0 -0
  683. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatChl_west/.zarray +0 -24
  684. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatChl_west/.zattrs +0 -10
  685. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatChl_west/0.0.0 +0 -0
  686. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatFe_east/.zarray +0 -24
  687. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatFe_east/.zattrs +0 -10
  688. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatFe_east/0.0.0 +0 -0
  689. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatFe_north/.zarray +0 -24
  690. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatFe_north/.zattrs +0 -10
  691. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatFe_north/0.0.0 +0 -0
  692. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatFe_south/.zarray +0 -24
  693. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatFe_south/.zattrs +0 -10
  694. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatFe_south/0.0.0 +0 -0
  695. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatFe_west/.zarray +0 -24
  696. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatFe_west/.zattrs +0 -10
  697. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatFe_west/0.0.0 +0 -0
  698. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatP_east/.zarray +0 -24
  699. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatP_east/.zattrs +0 -10
  700. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatP_east/0.0.0 +0 -0
  701. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatP_north/.zarray +0 -24
  702. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatP_north/.zattrs +0 -10
  703. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatP_north/0.0.0 +0 -0
  704. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatP_south/.zarray +0 -24
  705. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatP_south/.zattrs +0 -10
  706. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatP_south/0.0.0 +0 -0
  707. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatP_west/.zarray +0 -24
  708. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatP_west/.zattrs +0 -10
  709. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatP_west/0.0.0 +0 -0
  710. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatSi_east/.zarray +0 -24
  711. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatSi_east/.zattrs +0 -10
  712. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatSi_east/0.0.0 +0 -0
  713. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatSi_north/.zarray +0 -24
  714. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatSi_north/.zattrs +0 -10
  715. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatSi_north/0.0.0 +0 -0
  716. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatSi_south/.zarray +0 -24
  717. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatSi_south/.zattrs +0 -10
  718. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatSi_south/0.0.0 +0 -0
  719. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatSi_west/.zarray +0 -24
  720. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatSi_west/.zattrs +0 -10
  721. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diatSi_west/0.0.0 +0 -0
  722. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazC_east/.zarray +0 -24
  723. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazC_east/.zattrs +0 -10
  724. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazC_east/0.0.0 +0 -0
  725. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazC_north/.zarray +0 -24
  726. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazC_north/.zattrs +0 -10
  727. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazC_north/0.0.0 +0 -0
  728. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazC_south/.zarray +0 -24
  729. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazC_south/.zattrs +0 -10
  730. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazC_south/0.0.0 +0 -0
  731. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazC_west/.zarray +0 -24
  732. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazC_west/.zattrs +0 -10
  733. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazC_west/0.0.0 +0 -0
  734. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazChl_east/.zarray +0 -24
  735. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazChl_east/.zattrs +0 -10
  736. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazChl_east/0.0.0 +0 -0
  737. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazChl_north/.zarray +0 -24
  738. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazChl_north/.zattrs +0 -10
  739. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazChl_north/0.0.0 +0 -0
  740. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazChl_south/.zarray +0 -24
  741. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazChl_south/.zattrs +0 -10
  742. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazChl_south/0.0.0 +0 -0
  743. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazChl_west/.zarray +0 -24
  744. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazChl_west/.zattrs +0 -10
  745. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazChl_west/0.0.0 +0 -0
  746. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazFe_east/.zarray +0 -24
  747. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazFe_east/.zattrs +0 -10
  748. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazFe_east/0.0.0 +0 -0
  749. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazFe_north/.zarray +0 -24
  750. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazFe_north/.zattrs +0 -10
  751. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazFe_north/0.0.0 +0 -0
  752. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazFe_south/.zarray +0 -24
  753. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazFe_south/.zattrs +0 -10
  754. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazFe_south/0.0.0 +0 -0
  755. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazFe_west/.zarray +0 -24
  756. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazFe_west/.zattrs +0 -10
  757. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazFe_west/0.0.0 +0 -0
  758. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazP_east/.zarray +0 -24
  759. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazP_east/.zattrs +0 -10
  760. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazP_east/0.0.0 +0 -0
  761. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazP_north/.zarray +0 -24
  762. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazP_north/.zattrs +0 -10
  763. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazP_north/0.0.0 +0 -0
  764. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazP_south/.zarray +0 -24
  765. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazP_south/.zattrs +0 -10
  766. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazP_south/0.0.0 +0 -0
  767. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazP_west/.zarray +0 -24
  768. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazP_west/.zattrs +0 -10
  769. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/diazP_west/0.0.0 +0 -0
  770. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/month/.zarray +0 -20
  771. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/month/.zattrs +0 -6
  772. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/month/0 +0 -0
  773. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spC_east/.zarray +0 -24
  774. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spC_east/.zattrs +0 -10
  775. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spC_east/0.0.0 +0 -0
  776. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spC_north/.zarray +0 -24
  777. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spC_north/.zattrs +0 -10
  778. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spC_north/0.0.0 +0 -0
  779. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spC_south/.zarray +0 -24
  780. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spC_south/.zattrs +0 -10
  781. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spC_south/0.0.0 +0 -0
  782. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spC_west/.zarray +0 -24
  783. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spC_west/.zattrs +0 -10
  784. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spC_west/0.0.0 +0 -0
  785. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spCaCO3_east/.zarray +0 -24
  786. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spCaCO3_east/.zattrs +0 -10
  787. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spCaCO3_east/0.0.0 +0 -0
  788. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spCaCO3_north/.zarray +0 -24
  789. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spCaCO3_north/.zattrs +0 -10
  790. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spCaCO3_north/0.0.0 +0 -0
  791. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spCaCO3_south/.zarray +0 -24
  792. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spCaCO3_south/.zattrs +0 -10
  793. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spCaCO3_south/0.0.0 +0 -0
  794. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spCaCO3_west/.zarray +0 -24
  795. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spCaCO3_west/.zattrs +0 -10
  796. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spCaCO3_west/0.0.0 +0 -0
  797. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spChl_east/.zarray +0 -24
  798. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spChl_east/.zattrs +0 -10
  799. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spChl_east/0.0.0 +0 -0
  800. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spChl_north/.zarray +0 -24
  801. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spChl_north/.zattrs +0 -10
  802. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spChl_north/0.0.0 +0 -0
  803. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spChl_south/.zarray +0 -24
  804. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spChl_south/.zattrs +0 -10
  805. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spChl_south/0.0.0 +0 -0
  806. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spChl_west/.zarray +0 -24
  807. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spChl_west/.zattrs +0 -10
  808. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spChl_west/0.0.0 +0 -0
  809. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spFe_east/.zarray +0 -24
  810. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spFe_east/.zattrs +0 -10
  811. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spFe_east/0.0.0 +0 -0
  812. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spFe_north/.zarray +0 -24
  813. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spFe_north/.zattrs +0 -10
  814. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spFe_north/0.0.0 +0 -0
  815. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spFe_south/.zarray +0 -24
  816. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spFe_south/.zattrs +0 -10
  817. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spFe_south/0.0.0 +0 -0
  818. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spFe_west/.zarray +0 -24
  819. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spFe_west/.zattrs +0 -10
  820. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spFe_west/0.0.0 +0 -0
  821. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spP_east/.zarray +0 -24
  822. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spP_east/.zattrs +0 -10
  823. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spP_east/0.0.0 +0 -0
  824. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spP_north/.zarray +0 -24
  825. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spP_north/.zattrs +0 -10
  826. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spP_north/0.0.0 +0 -0
  827. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spP_south/.zarray +0 -24
  828. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spP_south/.zattrs +0 -10
  829. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spP_south/0.0.0 +0 -0
  830. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spP_west/.zarray +0 -24
  831. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spP_west/.zattrs +0 -10
  832. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/spP_west/0.0.0 +0 -0
  833. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/zooC_east/.zarray +0 -24
  834. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/zooC_east/.zattrs +0 -10
  835. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/zooC_east/0.0.0 +0 -0
  836. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/zooC_north/.zarray +0 -24
  837. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/zooC_north/.zattrs +0 -10
  838. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/zooC_north/0.0.0 +0 -0
  839. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/zooC_south/.zarray +0 -24
  840. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/zooC_south/.zattrs +0 -10
  841. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/zooC_south/0.0.0 +0 -0
  842. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/zooC_west/.zarray +0 -24
  843. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/zooC_west/.zattrs +0 -10
  844. roms_tools/tests/test_setup/test_data/bgc_boundary_forcing_from_unified_climatology.zarr/zooC_west/0.0.0 +0 -0
  845. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/.zattrs +0 -12
  846. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/.zgroup +0 -3
  847. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/.zmetadata +0 -424
  848. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/abs_time/.zarray +0 -20
  849. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/abs_time/.zattrs +0 -8
  850. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/abs_time/0 +0 -0
  851. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/dust/.zarray +0 -24
  852. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/dust/.zattrs +0 -12
  853. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/dust/0.0.0 +0 -0
  854. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/dust_time/.zarray +0 -20
  855. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/dust_time/.zattrs +0 -8
  856. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/dust_time/0 +0 -0
  857. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/iron/.zarray +0 -24
  858. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/iron/.zattrs +0 -12
  859. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/iron/0.0.0 +0 -0
  860. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/iron_time/.zarray +0 -20
  861. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/iron_time/.zattrs +0 -8
  862. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/iron_time/0 +0 -0
  863. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/month/.zarray +0 -20
  864. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/month/.zattrs +0 -6
  865. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/month/0 +0 -0
  866. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/nhy/.zarray +0 -24
  867. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/nhy/.zattrs +0 -10
  868. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/nhy/0.0.0 +0 -0
  869. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/nhy_time/.zarray +0 -20
  870. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/nhy_time/.zattrs +0 -8
  871. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/nhy_time/0 +0 -0
  872. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/nox/.zarray +0 -24
  873. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/nox/.zattrs +0 -10
  874. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/nox/0.0.0 +0 -0
  875. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/nox_time/.zarray +0 -20
  876. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/nox_time/.zattrs +0 -8
  877. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/nox_time/0 +0 -0
  878. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/pco2_air/.zarray +0 -24
  879. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/pco2_air/.zattrs +0 -12
  880. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/pco2_air/0.0.0 +0 -0
  881. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/pco2_air_alt/.zarray +0 -24
  882. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/pco2_air_alt/.zattrs +0 -10
  883. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/pco2_air_alt/0.0.0 +0 -0
  884. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/pco2_time/.zarray +0 -20
  885. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/pco2_time/.zattrs +0 -8
  886. roms_tools/tests/test_setup/test_data/bgc_surface_forcing_from_unified_climatology.zarr/pco2_time/0 +0 -0
  887. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/.zattrs +0 -12
  888. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/.zgroup +0 -3
  889. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/.zmetadata +0 -1600
  890. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/ALK/.zarray +0 -26
  891. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/ALK/.zattrs +0 -11
  892. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/ALK/0.0.0.0 +0 -0
  893. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/ALK_ALT_CO2/.zarray +0 -26
  894. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/ALK_ALT_CO2/.zattrs +0 -11
  895. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/ALK_ALT_CO2/0.0.0.0 +0 -0
  896. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/Cs_r/.zarray +0 -20
  897. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/Cs_r/.zattrs +0 -7
  898. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/Cs_r/0 +0 -0
  899. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/Cs_w/.zarray +0 -20
  900. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/Cs_w/.zattrs +0 -7
  901. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/Cs_w/0 +0 -0
  902. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DIC/.zarray +0 -26
  903. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DIC/.zattrs +0 -11
  904. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DIC/0.0.0.0 +0 -0
  905. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DIC_ALT_CO2/.zarray +0 -26
  906. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DIC_ALT_CO2/.zattrs +0 -11
  907. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DIC_ALT_CO2/0.0.0.0 +0 -0
  908. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DOC/.zarray +0 -26
  909. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DOC/.zattrs +0 -11
  910. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DOC/0.0.0.0 +0 -0
  911. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DOCr/.zarray +0 -26
  912. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DOCr/.zattrs +0 -11
  913. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DOCr/0.0.0.0 +0 -0
  914. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DON/.zarray +0 -26
  915. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DON/.zattrs +0 -11
  916. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DON/0.0.0.0 +0 -0
  917. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DONr/.zarray +0 -26
  918. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DONr/.zattrs +0 -11
  919. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DONr/0.0.0.0 +0 -0
  920. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DOP/.zarray +0 -26
  921. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DOP/.zattrs +0 -11
  922. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DOP/0.0.0.0 +0 -0
  923. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DOPr/.zarray +0 -26
  924. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DOPr/.zattrs +0 -11
  925. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/DOPr/0.0.0.0 +0 -0
  926. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/Fe/.zarray +0 -26
  927. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/Fe/.zattrs +0 -11
  928. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/Fe/0.0.0.0 +0 -0
  929. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/Lig/.zarray +0 -26
  930. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/Lig/.zattrs +0 -11
  931. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/Lig/0.0.0.0 +0 -0
  932. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/NH4/.zarray +0 -26
  933. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/NH4/.zattrs +0 -11
  934. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/NH4/0.0.0.0 +0 -0
  935. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/NO3/.zarray +0 -26
  936. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/NO3/.zattrs +0 -11
  937. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/NO3/0.0.0.0 +0 -0
  938. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/O2/.zarray +0 -26
  939. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/O2/.zattrs +0 -11
  940. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/O2/0.0.0.0 +0 -0
  941. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/PO4/.zarray +0 -26
  942. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/PO4/.zattrs +0 -11
  943. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/PO4/0.0.0.0 +0 -0
  944. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/SiO3/.zarray +0 -26
  945. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/SiO3/.zattrs +0 -11
  946. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/SiO3/0.0.0.0 +0 -0
  947. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/abs_time/.zarray +0 -20
  948. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/abs_time/.zattrs +0 -8
  949. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/abs_time/0 +0 -0
  950. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diatC/.zarray +0 -26
  951. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diatC/.zattrs +0 -11
  952. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diatC/0.0.0.0 +0 -0
  953. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diatChl/.zarray +0 -26
  954. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diatChl/.zattrs +0 -11
  955. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diatChl/0.0.0.0 +0 -0
  956. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diatFe/.zarray +0 -26
  957. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diatFe/.zattrs +0 -11
  958. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diatFe/0.0.0.0 +0 -0
  959. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diatP/.zarray +0 -26
  960. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diatP/.zattrs +0 -11
  961. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diatP/0.0.0.0 +0 -0
  962. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diatSi/.zarray +0 -26
  963. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diatSi/.zattrs +0 -11
  964. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diatSi/0.0.0.0 +0 -0
  965. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diazC/.zarray +0 -26
  966. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diazC/.zattrs +0 -11
  967. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diazC/0.0.0.0 +0 -0
  968. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diazChl/.zarray +0 -26
  969. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diazChl/.zattrs +0 -11
  970. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diazChl/0.0.0.0 +0 -0
  971. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diazFe/.zarray +0 -26
  972. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diazFe/.zattrs +0 -11
  973. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diazFe/0.0.0.0 +0 -0
  974. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diazP/.zarray +0 -26
  975. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diazP/.zattrs +0 -11
  976. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/diazP/0.0.0.0 +0 -0
  977. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/ocean_time/.zarray +0 -20
  978. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/ocean_time/.zattrs +0 -7
  979. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/ocean_time/0 +0 -0
  980. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/salt/.zarray +0 -26
  981. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/salt/.zattrs +0 -11
  982. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/salt/0.0.0.0 +0 -0
  983. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/spC/.zarray +0 -26
  984. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/spC/.zattrs +0 -11
  985. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/spC/0.0.0.0 +0 -0
  986. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/spCaCO3/.zarray +0 -26
  987. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/spCaCO3/.zattrs +0 -11
  988. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/spCaCO3/0.0.0.0 +0 -0
  989. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/spChl/.zarray +0 -26
  990. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/spChl/.zattrs +0 -11
  991. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/spChl/0.0.0.0 +0 -0
  992. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/spFe/.zarray +0 -26
  993. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/spFe/.zattrs +0 -11
  994. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/spFe/0.0.0.0 +0 -0
  995. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/spP/.zarray +0 -26
  996. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/spP/.zattrs +0 -11
  997. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/spP/0.0.0.0 +0 -0
  998. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/temp/.zarray +0 -26
  999. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/temp/.zattrs +0 -11
  1000. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/temp/0.0.0.0 +0 -0
  1001. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/u/.zarray +0 -26
  1002. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/u/.zattrs +0 -11
  1003. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/u/0.0.0.0 +0 -0
  1004. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/ubar/.zarray +0 -24
  1005. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/ubar/.zattrs +0 -10
  1006. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/ubar/0.0.0 +0 -0
  1007. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/v/.zarray +0 -26
  1008. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/v/.zattrs +0 -11
  1009. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/v/0.0.0.0 +0 -0
  1010. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/vbar/.zarray +0 -24
  1011. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/vbar/.zattrs +0 -10
  1012. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/vbar/0.0.0 +0 -0
  1013. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/w/.zarray +0 -26
  1014. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/w/.zattrs +0 -11
  1015. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/w/0.0.0.0 +0 -0
  1016. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/zeta/.zarray +0 -24
  1017. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/zeta/.zattrs +0 -10
  1018. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/zeta/0.0.0 +0 -0
  1019. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/zooC/.zarray +0 -26
  1020. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/zooC/.zattrs +0 -11
  1021. roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/zooC/0.0.0.0 +0 -0
  1022. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/.zattrs +0 -3
  1023. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/.zgroup +0 -3
  1024. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/.zmetadata +0 -351
  1025. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/abs_time/.zarray +0 -20
  1026. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/abs_time/.zattrs +0 -8
  1027. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/abs_time/0 +0 -0
  1028. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/month/.zarray +0 -20
  1029. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/month/.zattrs +0 -6
  1030. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/month/0 +0 -0
  1031. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/nriver/.zarray +0 -20
  1032. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/nriver/.zattrs +0 -6
  1033. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/nriver/0 +0 -0
  1034. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_fraction/.zarray +0 -22
  1035. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_fraction/.zattrs +0 -8
  1036. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_fraction/0.0 +0 -0
  1037. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_index/.zarray +0 -22
  1038. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_index/.zattrs +0 -8
  1039. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_index/0.0 +0 -0
  1040. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_name/.zarray +0 -24
  1041. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_name/.zattrs +0 -6
  1042. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_name/0 +0 -0
  1043. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_time/.zarray +0 -20
  1044. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_time/.zattrs +0 -8
  1045. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_time/0 +0 -0
  1046. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_tracer/.zarray +0 -24
  1047. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_tracer/.zattrs +0 -9
  1048. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_tracer/0.0.0 +0 -0
  1049. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_volume/.zarray +0 -22
  1050. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_volume/.zattrs +0 -9
  1051. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_volume/0.0 +0 -0
  1052. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/tracer_long_name/.zarray +0 -20
  1053. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/tracer_long_name/.zattrs +0 -6
  1054. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/tracer_long_name/0 +0 -0
  1055. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/tracer_name/.zarray +0 -20
  1056. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/tracer_name/.zattrs +0 -6
  1057. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/tracer_name/0 +0 -0
  1058. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/tracer_unit/.zarray +0 -20
  1059. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/tracer_unit/.zattrs +0 -6
  1060. roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/tracer_unit/0 +0 -0
  1061. roms_tools/tests/test_setup/test_topography.py +0 -201
  1062. roms_tools-2.7.0.dist-info/METADATA +0 -147
  1063. roms_tools-2.7.0.dist-info/RECORD +0 -1670
  1064. roms_tools-2.7.0.dist-info/WHEEL +0 -5
  1065. {roms_tools-2.7.0.dist-info → roms_tools-3.0.0.dist-info}/licenses/LICENSE +0 -0
  1066. {roms_tools-2.7.0.dist-info → roms_tools-3.0.0.dist-info}/top_level.txt +0 -0
@@ -1,772 +1,958 @@
1
- import pytest
2
- from copy import deepcopy
3
- from datetime import datetime
1
+ import logging
2
+ from datetime import datetime, timedelta
4
3
  from pathlib import Path
5
- from roms_tools import CDRVolumePointSource, Grid
6
- from roms_tools.constants import NUM_TRACERS
7
- import xarray as xr
4
+
8
5
  import numpy as np
9
- import logging
10
- from roms_tools.setup.utils import get_tracer_defaults
6
+ import pytest
7
+ import xarray as xr
8
+ from pydantic import ValidationError
9
+
11
10
  from conftest import calculate_file_hash
11
+ from roms_tools import CDRForcing, Grid, TracerPerturbation, VolumeRelease
12
+ from roms_tools.constants import NUM_TRACERS
13
+ from roms_tools.setup.cdr_forcing import (
14
+ CDRForcingDatasetBuilder,
15
+ ReleaseCollector,
16
+ ReleaseSimulationManager,
17
+ )
18
+ from roms_tools.setup.cdr_release import ReleaseType
12
19
 
13
20
  try:
14
21
  import xesmf # type: ignore
15
22
  except ImportError:
16
23
  xesmf = None
17
24
 
18
- # Fixtures
19
- @pytest.fixture
20
- def iceland_test_grid():
21
- """Returns a grid surrouding Iceland."""
22
- return Grid(
23
- nx=18, ny=18, size_x=800, size_y=800, center_lon=-18, center_lat=65, rot=0, N=3
24
- )
25
-
26
-
27
- @pytest.fixture
28
- def test_grid_that_straddles():
29
- """Returns a grid that straddles the prime meridian."""
30
- return Grid(
31
- nx=18, ny=18, size_x=800, size_y=800, center_lon=0, center_lat=65, rot=0, N=3
32
- )
33
-
34
-
35
- @pytest.fixture
36
- def start_end_times():
37
- """Returns test start and end times."""
38
- start_time = datetime(2022, 1, 1)
39
- end_time = datetime(2022, 12, 31)
40
- return start_time, end_time
41
-
42
-
43
- @pytest.fixture
44
- def empty_cdr_point_source_without_grid(start_end_times):
45
- """Returns an empty CDR point source without a grid."""
46
- start_time, end_time = start_end_times
47
- return CDRVolumePointSource(
48
- start_time=start_time,
49
- end_time=end_time,
50
- )
51
-
52
-
53
- @pytest.fixture
54
- def empty_cdr_point_source_with_grid(iceland_test_grid, start_end_times):
55
- """Returns an empty CDR point source with the Iceland test grid."""
56
- start_time, end_time = start_end_times
57
- return CDRVolumePointSource(
58
- grid=iceland_test_grid,
59
- start_time=start_time,
60
- end_time=end_time,
61
- )
62
-
63
-
64
- @pytest.fixture
65
- def empty_cdr_point_source_with_grid_that_straddles(
66
- test_grid_that_straddles, start_end_times
67
- ):
68
- """Returns an empty CDR point source with a grid straddling the prime meridian."""
69
- start_time, end_time = start_end_times
70
- return CDRVolumePointSource(
71
- grid=test_grid_that_straddles,
72
- start_time=start_time,
73
- end_time=end_time,
74
- )
75
-
76
-
77
- @pytest.fixture
78
- def valid_release_params():
79
- """Returns a dictionary with valid parameters for a CDR point source release within
80
- the Iceland test domain."""
81
- return {
82
- "lat": 66.0,
83
- "lon": -25.0,
84
- "depth": 50.0,
85
- "volume_fluxes": 100.0,
86
- }
87
-
88
-
89
- @pytest.fixture
90
- def cdr_point_source_with_two_releases(
91
- iceland_test_grid, start_end_times, valid_release_params
92
- ):
93
- """Returns a CDR point source with one release."""
94
- start_time, end_time = start_end_times
95
- cdr = CDRVolumePointSource(
96
- grid=iceland_test_grid, start_time=start_time, end_time=end_time
97
- )
98
- cdr.add_release(name="release1", **valid_release_params)
99
-
100
- release_params = deepcopy(valid_release_params)
101
- release_params["times"] = [
102
- datetime(2022, 1, 1),
103
- datetime(2022, 1, 3),
104
- datetime(2022, 1, 5),
105
- ]
106
- release_params["volume_fluxes"] = [1.0, 2.0, 3.0]
107
- release_params["tracer_concentrations"] = {"DIC": [10.0, 20.0, 30.0]}
108
- cdr.add_release(name="release2", **release_params)
109
-
110
- return cdr
111
-
112
-
113
- # Tests
114
- @pytest.mark.parametrize(
115
- "cdr_forcing_fixture",
116
- [
117
- "empty_cdr_point_source_without_grid",
118
- "empty_cdr_point_source_with_grid",
119
- ],
120
- )
121
- def test_cdr_point_source_init(cdr_forcing_fixture, start_end_times, request):
122
- """Tests the initialization of CDR point source fixtures."""
123
- cdr = request.getfixturevalue(cdr_forcing_fixture)
124
- start_time, end_time = start_end_times
125
- assert cdr.start_time == start_time
126
- assert cdr.end_time == end_time
127
-
128
- # Check that dataset is empty but has right dimensions and variables
129
- assert isinstance(cdr.ds, xr.Dataset)
130
-
131
- # Check dimension lengths
132
- assert cdr.ds.time.size == 0
133
- assert cdr.ds.ncdr.size == 0
134
- assert cdr.ds.ntracers.size == NUM_TRACERS
135
-
136
- # Check coordinate and variable lengths
137
- assert cdr.ds.release_name.size == 0
138
- assert cdr.ds.tracer_name.size == NUM_TRACERS
139
- assert cdr.ds.tracer_unit.size == NUM_TRACERS
140
- assert cdr.ds.tracer_long_name.size == NUM_TRACERS
141
- assert cdr.ds.cdr_time.size == 0
142
- assert cdr.ds.cdr_lon.size == 0
143
- assert cdr.ds.cdr_lat.size == 0
144
- assert cdr.ds.cdr_dep.size == 0
145
- assert cdr.ds.cdr_hsc.size == 0
146
- assert cdr.ds.cdr_vsc.size == 0
147
- assert cdr.ds.cdr_volume.size == 0
148
- assert cdr.ds.cdr_tracer.size == 0
149
-
150
- # Check that release dictionary is empty except for tracer metadata
151
- assert set(cdr.releases.keys()) == {"_tracer_metadata"}
152
-
153
-
154
- @pytest.mark.parametrize(
155
- "cdr_forcing_fixture",
156
- [
157
- "empty_cdr_point_source_without_grid",
158
- "empty_cdr_point_source_with_grid",
159
- ],
160
- )
161
- def test_add_release(cdr_forcing_fixture, valid_release_params, request):
162
- """Test some basic features of the `add_release` method for updating forcing dataset
163
- and dictionary."""
164
-
165
- cdr = request.getfixturevalue(cdr_forcing_fixture)
166
- release_params = deepcopy(valid_release_params)
167
- times = [
168
- cdr.start_time,
169
- datetime(2022, 1, 5),
170
- cdr.end_time,
171
- ]
172
- release_params["times"] = times
173
-
174
- volume_fluxes = [100.0, 200.0, 150.0]
175
- release_params["volume_fluxes"] = volume_fluxes
176
-
177
- tracer_concentrations = {
178
- "ALK": [2300.0, 2350.0, 2400.0],
179
- "DIC": [2100.0, 2150.0, 2200.0],
180
- "temp": 10.0,
181
- "salt": 35.0,
182
- }
183
- release_params["tracer_concentrations"] = tracer_concentrations
184
-
185
- # Add release
186
- cdr.add_release(name="release", **release_params)
187
-
188
- # Check dimension lengths
189
- assert cdr.ds.time.size == len(times)
190
- assert cdr.ds.ncdr.size == 1
191
- assert cdr.ds.ntracers.size == NUM_TRACERS
192
-
193
- # Check coordinate and variable lengths
194
- assert cdr.ds.release_name.size == 1
195
- assert "release" in cdr.ds["release_name"].values
196
- assert cdr.ds.tracer_name.size == NUM_TRACERS
197
- assert cdr.ds.tracer_unit.size == NUM_TRACERS
198
- assert cdr.ds.tracer_long_name.size == NUM_TRACERS
199
- assert cdr.ds.cdr_time.size == len(times)
200
- assert cdr.ds.cdr_lon.size == 1
201
- assert cdr.ds.cdr_lat.size == 1
202
- assert cdr.ds.cdr_dep.size == 1
203
- assert cdr.ds.cdr_hsc.size == 1
204
- assert cdr.ds.cdr_vsc.size == 1
205
-
206
- # Check cdr_volume shape and values
207
- assert cdr.ds.cdr_volume.shape == (len(times), 1)
208
- np.testing.assert_allclose(cdr.ds.cdr_volume[:, 0], volume_fluxes, rtol=1e-3)
209
-
210
- # Check tracer concentration shape
211
- assert cdr.ds.cdr_tracer.shape == (len(times), NUM_TRACERS, 1)
212
-
213
- # Check tracer concentration values for known tracers
214
- tracer_index = {name: i for i, name in enumerate(cdr.ds.tracer_name.values)}
215
- for tracer, expected in tracer_concentrations.items():
216
- i = tracer_index[tracer]
217
- if isinstance(expected, list):
218
- np.testing.assert_allclose(cdr.ds.cdr_tracer[:, i, 0], expected)
219
- else:
220
- np.testing.assert_allclose(cdr.ds.cdr_tracer[:, i, 0], expected)
221
-
222
- assert "release" in cdr.releases.keys()
223
-
224
-
225
- def test_merge_multiple_releases(start_end_times, valid_release_params):
226
- """Test merging multiple releases in the dataset, including endpoint filling,
227
- timestamp adjustment, and interpolation."""
228
-
229
- start_time, end_time = start_end_times
230
- cdr = CDRVolumePointSource(start_time=start_time, end_time=end_time)
231
- dic_index = 9
232
-
233
- # add first release
234
- release_params1 = deepcopy(valid_release_params)
235
- release_params1["times"] = [
236
- datetime(2022, 1, 1), # overall start time
237
- datetime(2022, 1, 3),
238
- datetime(2022, 1, 5),
239
- ]
240
- release_params1["volume_fluxes"] = [1.0, 2.0, 3.0]
241
- release_params1["tracer_concentrations"] = {"DIC": [10.0, 20.0, 30.0]}
242
- cdr.add_release(name="release1", **release_params1)
243
-
244
- # check time
245
- expected_times = [
246
- datetime(2022, 1, 1), # overall start time
247
- datetime(2022, 1, 3),
248
- datetime(2022, 1, 5),
249
- datetime(2022, 12, 31), # overall end time
250
- ]
251
- assert np.array_equal(
252
- cdr.ds["time"].values, np.array(expected_times, dtype="datetime64[ns]")
253
- )
254
-
255
- # check first release
256
- ncdr_index = 0
257
-
258
- assert cdr.ds["cdr_lon"].isel(ncdr=ncdr_index).values == release_params1["lon"]
259
- assert cdr.ds["cdr_lat"].isel(ncdr=ncdr_index).values == release_params1["lat"]
260
- assert cdr.ds["cdr_dep"].isel(ncdr=ncdr_index).values == release_params1["depth"]
261
- assert cdr.ds["cdr_hsc"].isel(ncdr=ncdr_index).values == 0.0
262
- assert cdr.ds["cdr_vsc"].isel(ncdr=ncdr_index).values == 0.0
263
-
264
- expected_volume_fluxes = [
265
- 1.0,
266
- 2.0,
267
- 3.0,
268
- 0.0, # volume flux set to zero at endpoint
269
- ]
270
-
271
- assert np.allclose(
272
- cdr.ds["cdr_volume"].isel(ncdr=ncdr_index).values,
273
- np.array(expected_volume_fluxes),
274
- )
275
-
276
- expected_dics = [
277
- 10.0,
278
- 20.0,
279
- 30.0,
280
- 30.0, # tracer concenctration extrapolated to endpoint
281
- ]
282
- assert np.allclose(
283
- cdr.ds["cdr_tracer"].isel(ncdr=ncdr_index, ntracers=dic_index).values,
284
- np.array(expected_dics),
285
- )
286
-
287
- # add second release
288
- release_params2 = deepcopy(valid_release_params)
289
- release_params2["lon"] = release_params2["lon"] - 1
290
- release_params2["lat"] = release_params2["lat"] - 1
291
- release_params2["depth"] = release_params2["depth"] - 1
292
-
293
- release_params2["times"] = [
294
- datetime(2022, 1, 2),
295
- datetime(2022, 1, 4),
296
- datetime(2022, 1, 5),
297
- ]
298
- release_params2["volume_fluxes"] = [2.0, 4.0, 10.0]
299
- release_params2["tracer_concentrations"] = {"DIC": [20.0, 40.0, 100.0]}
300
- cdr.add_release(name="release2", **release_params2)
301
-
302
- # check time again
303
- expected_times = [
304
- datetime(2022, 1, 1), # overall start time
305
- datetime(2022, 1, 2),
306
- datetime(2022, 1, 3),
307
- datetime(2022, 1, 4),
308
- datetime(2022, 1, 5),
309
- datetime(2022, 12, 31), # overall end time
310
- ]
311
- assert np.array_equal(
312
- cdr.ds["time"].values, np.array(expected_times, dtype="datetime64[ns]")
313
- )
314
-
315
- # check first release again
316
- ncdr_index = 0
317
-
318
- assert cdr.ds["cdr_lon"].isel(ncdr=ncdr_index).values == release_params1["lon"]
319
- assert cdr.ds["cdr_lat"].isel(ncdr=ncdr_index).values == release_params1["lat"]
320
- assert cdr.ds["cdr_dep"].isel(ncdr=ncdr_index).values == release_params1["depth"]
321
- assert cdr.ds["cdr_hsc"].isel(ncdr=ncdr_index).values == 0.0
322
- assert cdr.ds["cdr_vsc"].isel(ncdr=ncdr_index).values == 0.0
323
-
324
- expected_volume_fluxes = [
325
- 1.0,
326
- 1.5,
327
- 2.0,
328
- 2.5,
329
- 3.0,
330
- 0.0, # volume flux set to zero at endpoint
331
- ]
332
-
333
- assert np.allclose(
334
- cdr.ds["cdr_volume"].isel(ncdr=ncdr_index).values,
335
- np.array(expected_volume_fluxes),
336
- )
337
-
338
- expected_dics = [
339
- 10.0,
340
- 15.0,
341
- 20.0,
342
- 25.0,
343
- 30.0,
344
- 30.0, # tracer concenctration extrapolated to endpoint
345
- ]
346
- assert np.allclose(
347
- cdr.ds["cdr_tracer"].isel(ncdr=ncdr_index, ntracers=dic_index).values,
348
- np.array(expected_dics),
349
- )
350
- # check second release
351
- ncdr_index = 1
352
-
353
- assert cdr.ds["cdr_lon"].isel(ncdr=ncdr_index).values == release_params2["lon"]
354
- assert cdr.ds["cdr_lat"].isel(ncdr=ncdr_index).values == release_params2["lat"]
355
- assert cdr.ds["cdr_dep"].isel(ncdr=ncdr_index).values == release_params2["depth"]
356
- assert cdr.ds["cdr_hsc"].isel(ncdr=ncdr_index).values == 0.0
357
- assert cdr.ds["cdr_vsc"].isel(ncdr=ncdr_index).values == 0.0
358
-
359
- expected_volume_fluxes = [
360
- 0.0, # volume flux set to zero at startpoint
361
- 2.0,
362
- 3.0,
363
- 4.0,
364
- 10.0,
365
- 0.0, # volume flux set to zero at endpoint
366
- ]
367
- assert np.allclose(
368
- cdr.ds["cdr_volume"].isel(ncdr=ncdr_index).values,
369
- np.array(expected_volume_fluxes),
370
- )
371
-
372
- expected_dics = [
373
- 20.0, # tracer concenctration extrapolated to startpoint
374
- 20.0,
375
- 30.0,
376
- 40.0,
377
- 100.0,
378
- 100.0, # tracer concenctration extrapolated to endpoint
379
- ]
380
- assert np.allclose(
381
- cdr.ds["cdr_tracer"].isel(ncdr=ncdr_index, ntracers=dic_index).values,
382
- np.array(expected_dics),
383
- )
384
-
385
-
386
- def test_cdr_point_source_init_invalid_times():
387
- """Test that initializing a CDR point source with the same start and end time raises
388
- a ValueError."""
389
- start_time = datetime(2022, 5, 1)
390
- end_time = datetime(2022, 5, 1)
391
- with pytest.raises(
392
- ValueError, match="`start_time` must be earlier than `end_time`"
393
- ):
394
- CDRVolumePointSource(start_time=start_time, end_time=end_time)
395
25
 
26
+ class TestReleaseSimulationManager:
27
+ def setup_method(self):
28
+ self.grid = Grid(
29
+ nx=18,
30
+ ny=18,
31
+ size_x=800,
32
+ size_y=800,
33
+ center_lon=-18,
34
+ center_lat=65,
35
+ rot=0,
36
+ N=3,
37
+ ) # grid surrounding Iceland
38
+ self.grid_that_straddles = Grid(
39
+ nx=18,
40
+ ny=18,
41
+ size_x=800,
42
+ size_y=800,
43
+ center_lon=0,
44
+ center_lat=65,
45
+ rot=0,
46
+ N=3,
47
+ ) # grid that straddles dateline
48
+ self.valid_iceland_release_location = {
49
+ "lat": 66.0,
50
+ "lon": -25.0,
51
+ "depth": 50.0,
52
+ } # release location consistent with Iceland grid
53
+ self.volume_release_without_times = VolumeRelease(
54
+ name="vol_iceland_without_times",
55
+ **self.valid_iceland_release_location,
56
+ volume_fluxes=100.0,
57
+ )
58
+ self.volume_release_with_times = VolumeRelease(
59
+ name="vol_iceland_with_times",
60
+ **self.valid_iceland_release_location,
61
+ times=[datetime(2022, 1, 1), datetime(2022, 1, 3), datetime(2022, 1, 5)],
62
+ volume_fluxes=[1.0, 2.0, 3.0],
63
+ tracer_concentrations={
64
+ "DIC": [10.0, 20.0, 30.0],
65
+ "temp": 10.0,
66
+ "salt": 35.0,
67
+ },
68
+ )
69
+ self.tracer_perturbation_without_times = TracerPerturbation(
70
+ name="pert_iceland_without_times",
71
+ **self.valid_iceland_release_location,
72
+ tracer_fluxes={"ALK": 100.0},
73
+ )
74
+ self.tracer_perturbation_with_times = TracerPerturbation(
75
+ name="pert_iceland_with_times",
76
+ **self.valid_iceland_release_location,
77
+ times=[datetime(2022, 1, 1), datetime(2022, 1, 3), datetime(2022, 1, 5)],
78
+ tracer_fluxes={
79
+ "DIC": [10.0, 20.0, 30.0],
80
+ },
81
+ )
82
+ self.start_time = datetime(2022, 1, 1)
83
+ self.end_time = datetime(2022, 12, 31)
84
+
85
+ def test_volume_release_correctly_extended(self):
86
+
87
+ # Save copies of mutable fields before they are modified by ReleaseSimulationManager
88
+ times = self.volume_release_with_times.times.copy() # list
89
+ volume_fluxes = (
90
+ self.volume_release_with_times.volume_fluxes.values.copy()
91
+ ) # list
92
+ tracer_concentrations_dic = (
93
+ self.volume_release_with_times.tracer_concentrations["DIC"].values.copy()
94
+ ) # list
95
+ tracer_concentrations_temp = (
96
+ self.volume_release_with_times.tracer_concentrations["temp"].values
97
+ ) # float, no copy needed
98
+
99
+ ReleaseSimulationManager(
100
+ release=self.volume_release_with_times,
101
+ grid=None,
102
+ start_time=self.start_time,
103
+ end_time=self.end_time,
104
+ )
396
105
 
397
- @pytest.mark.parametrize(
398
- "cdr_forcing_fixture",
399
- [
400
- "empty_cdr_point_source_without_grid",
401
- "empty_cdr_point_source_with_grid",
402
- ],
403
- )
404
- def test_add_duplicate_release(cdr_forcing_fixture, valid_release_params, request):
405
- """Test that adding a duplicate release raises a ValueError."""
406
- cdr = request.getfixturevalue(cdr_forcing_fixture)
407
- release_params = deepcopy(valid_release_params)
408
- cdr.add_release(name="release_1", **release_params)
409
- with pytest.raises(
410
- ValueError, match="A release with the name 'release_1' already exists."
411
- ):
412
- cdr.add_release(name="release_1", **release_params)
106
+ # check that release was properly extended to end points
107
+ assert self.volume_release_with_times.times == [*times, self.end_time]
108
+ assert self.volume_release_with_times.volume_fluxes.values == [
109
+ *volume_fluxes,
110
+ 0.0,
111
+ ]
112
+ assert self.volume_release_with_times.tracer_concentrations["DIC"].values == [
113
+ *tracer_concentrations_dic,
114
+ tracer_concentrations_dic[-1],
115
+ ]
116
+ assert self.volume_release_with_times.tracer_concentrations[
117
+ "temp"
118
+ ].values == 4 * [tracer_concentrations_temp]
119
+
120
+ def test_tracer_perturbation_correctly_extended(self):
121
+
122
+ # Save copies of mutable fields before they are modified by ReleaseSimulationManager
123
+ times = self.tracer_perturbation_with_times.times.copy() # list
124
+ tracer_fluxes_dic = self.tracer_perturbation_with_times.tracer_fluxes[
125
+ "DIC"
126
+ ].values.copy() # list
127
+ tracer_fluxes_alk = self.tracer_perturbation_with_times.tracer_fluxes[
128
+ "ALK"
129
+ ].values # float, no copy needed
130
+
131
+ ReleaseSimulationManager(
132
+ release=self.tracer_perturbation_with_times,
133
+ grid=None,
134
+ start_time=self.start_time,
135
+ end_time=self.end_time,
136
+ )
413
137
 
138
+ # check that release was properly extended to end points
139
+ assert self.tracer_perturbation_with_times.times == [*times, self.end_time]
140
+ assert self.tracer_perturbation_with_times.tracer_fluxes["DIC"].values == [
141
+ *tracer_fluxes_dic,
142
+ 0.0,
143
+ ]
144
+ assert self.tracer_perturbation_with_times.tracer_fluxes["ALK"].values == 4 * [
145
+ tracer_fluxes_alk
146
+ ]
147
+
148
+ def test_release_starts_too_early(self):
149
+
150
+ for release in [
151
+ self.volume_release_with_times,
152
+ self.tracer_perturbation_with_times,
153
+ ]:
154
+ times = release.times
155
+ start_time = times[0] + timedelta(days=1)
156
+ end_time = times[-1] + timedelta(days=1)
157
+
158
+ with pytest.raises(ValueError, match="before start_time"):
159
+ ReleaseSimulationManager(
160
+ release=release,
161
+ grid=None,
162
+ start_time=start_time,
163
+ end_time=end_time,
164
+ )
165
+
166
+ def test_release_ends_too_late(self):
167
+
168
+ for release in [
169
+ self.volume_release_with_times,
170
+ self.tracer_perturbation_with_times,
171
+ ]:
172
+ times = release.times
173
+ start_time = times[0] - timedelta(days=1)
174
+ end_time = times[-1] - timedelta(days=1)
175
+
176
+ with pytest.raises(ValueError, match="after end_time"):
177
+ ReleaseSimulationManager(
178
+ release=release,
179
+ grid=None,
180
+ start_time=start_time,
181
+ end_time=end_time,
182
+ )
183
+
184
+ def test_warning_no_grid(self, caplog):
185
+
186
+ for release in [
187
+ self.volume_release_with_times,
188
+ self.tracer_perturbation_with_times,
189
+ ]:
190
+
191
+ caplog.clear()
192
+ with caplog.at_level(logging.WARNING):
193
+ ReleaseSimulationManager(
194
+ release=release,
195
+ grid=None,
196
+ start_time=self.start_time,
197
+ end_time=self.end_time,
198
+ )
199
+
200
+ assert "Grid not provided" in caplog.text
201
+
202
+ def test_invalid_release_longitude(self):
203
+ """Test that error is raised if release location is outside grid."""
204
+
205
+ # Define release location both outside of Iceland grid and grid that straddles dateline
206
+ lon0 = -30
207
+ lat0 = 60
208
+ depth0 = 0
209
+
210
+ for lon in [lon0, lon0 - 360, lon0 + 360]:
211
+
212
+ params = {"lon": lon, "lat": lat0, "depth": depth0}
213
+
214
+ for grid in [self.grid, self.grid_that_straddles]:
215
+ for release in [
216
+ VolumeRelease(name="vol", **params),
217
+ TracerPerturbation(name="vol", **params),
218
+ ]:
219
+ with pytest.raises(ValueError, match="outside of the grid domain"):
220
+ ReleaseSimulationManager(
221
+ release=release,
222
+ grid=grid,
223
+ start_time=self.start_time,
224
+ end_time=self.end_time,
225
+ )
226
+
227
+ def test_invalid_release_location(self):
228
+ """Test that error is raised if release location is outside grid or on land."""
229
+
230
+ # Release location too close to boundary of Iceland domain; lat_rho[0, 0] = 60.97, lon_rho[0, 0] = 334.17
231
+ params = {"lon": 334.17, "lat": 60.97, "depth": 0.0}
232
+ for release in [
233
+ VolumeRelease(name="vol", **params),
234
+ TracerPerturbation(name="pert", **params),
235
+ ]:
236
+ with pytest.raises(ValueError, match="too close to the grid boundary"):
237
+ ReleaseSimulationManager(
238
+ release=release,
239
+ grid=self.grid,
240
+ start_time=self.start_time,
241
+ end_time=self.end_time,
242
+ )
243
+
244
+ # Release location lies on land
245
+ params = {"lon": -20, "lat": 64.5, "depth": 0.0}
246
+ for release in [
247
+ VolumeRelease(name="vol", **params),
248
+ TracerPerturbation(name="vol", **params),
249
+ ]:
250
+ with pytest.raises(ValueError, match="on land"):
251
+ ReleaseSimulationManager(
252
+ release=release,
253
+ grid=self.grid,
254
+ start_time=self.start_time,
255
+ end_time=self.end_time,
256
+ )
257
+
258
+ # Release location lies below seafloor
259
+ invalid_depth = 4000
260
+
261
+ for valid_release in [
262
+ self.volume_release_without_times,
263
+ self.tracer_perturbation_without_times,
264
+ ]:
265
+ params = {
266
+ "lon": valid_release.lon,
267
+ "lat": valid_release.lat,
268
+ "depth": invalid_depth,
269
+ }
270
+
271
+ if isinstance(valid_release, VolumeRelease):
272
+ release = VolumeRelease(name="vol", **params)
273
+ elif isinstance(valid_release, TracerPerturbation):
274
+ release = VolumeRelease(name="pert", **params)
275
+ with pytest.raises(ValueError, match="below the seafloor"):
276
+ ReleaseSimulationManager(
277
+ release=release,
278
+ grid=self.grid,
279
+ start_time=self.start_time,
280
+ end_time=self.end_time,
281
+ )
282
+
283
+
284
+ class TestReleaseCollector:
285
+ def setup_method(self):
286
+ self.volume_release = VolumeRelease(
287
+ name="vol", lat=66, lon=-25, depth=50, volume_fluxes=100
288
+ )
289
+ self.another_volume_release = VolumeRelease(
290
+ name="vol2", lat=66, lon=-25, depth=50, volume_fluxes=100
291
+ )
292
+ self.tracer_perturbation = TracerPerturbation(
293
+ name="pert", lat=66, lon=-25, depth=50, tracer_fluxes={"ALK": 100}
294
+ )
295
+ self.another_tracer_perturbation = TracerPerturbation(
296
+ name="pert2", lat=66, lon=-25, depth=50, tracer_fluxes={"ALK": 100}
297
+ )
414
298
 
415
- @pytest.mark.parametrize(
416
- "cdr_forcing_fixture",
417
- [
418
- "empty_cdr_point_source_without_grid",
419
- "empty_cdr_point_source_with_grid",
420
- ],
421
- )
422
- def test_invalid_release_params(cdr_forcing_fixture, valid_release_params, request):
423
- """Test that invalid release parameters raise the appropriate ValueErrors."""
424
- cdr = request.getfixturevalue(cdr_forcing_fixture)
425
-
426
- # Test invalid latitude
427
- invalid_params = deepcopy(valid_release_params)
428
- invalid_params["lat"] = 100.0
429
- with pytest.raises(ValueError, match="Latitude must be between -90 and 90."):
430
- cdr.add_release(name="release_1", **invalid_params)
431
-
432
- # Test invalid depth (negative value)
433
- invalid_params = deepcopy(valid_release_params)
434
- invalid_params["depth"] = -10.0
435
- with pytest.raises(ValueError, match="Depth must be a non-negative number."):
436
- cdr.add_release(name="release_1", **invalid_params)
437
-
438
- # Test times not being datetime objects
439
- invalid_params = deepcopy(valid_release_params)
440
- invalid_params["times"] = [
441
- "2023-01-01",
442
- "2023-02-01",
443
- ] # Invalid times format (strings)
444
- with pytest.raises(
445
- ValueError,
446
- match="If 'times' is provided, all entries must be datetime objects.",
447
- ):
448
- cdr.add_release(name="release_1", **invalid_params)
449
-
450
- # Test times being not monotonically increasing
451
- invalid_params = deepcopy(valid_release_params)
452
- invalid_params["times"] = [
453
- datetime(2022, 1, 1),
454
- datetime(2022, 2, 1),
455
- datetime(2022, 1, 15), # Out of order date
456
- datetime(2022, 3, 1),
457
- ]
458
- with pytest.raises(
459
- ValueError, match="The 'times' list must be strictly monotonically increasing."
460
- ):
461
- cdr.add_release(name="release_1", **invalid_params)
462
-
463
- # Test times being not strictly monotonically increasing
464
- invalid_params = deepcopy(valid_release_params)
465
- invalid_params["times"] = [
466
- datetime(2022, 1, 1),
467
- datetime(2022, 2, 1),
468
- datetime(2022, 2, 1), # Duplicated time
469
- datetime(2022, 3, 1),
470
- ]
471
- with pytest.raises(
472
- ValueError, match="The 'times' list must be strictly monotonically increasing."
473
- ):
474
- cdr.add_release(name="release_1", **invalid_params)
475
-
476
- # Test first time earlier than self.start_time
477
- invalid_params = deepcopy(valid_release_params)
478
- invalid_params["times"] = [
479
- datetime(2000, 1, 1),
480
- datetime(2022, 2, 1),
481
- ] # Earlier than self.start_time
482
- with pytest.raises(ValueError, match="First entry"):
483
- cdr.add_release(name="release_1", **invalid_params)
484
-
485
- # Test last time later than self.end_time
486
- invalid_params = deepcopy(valid_release_params)
487
- invalid_params["times"] = [
488
- datetime(2022, 1, 1),
489
- datetime(2025, 1, 1),
490
- ] # Later than self.end_time
491
- with pytest.raises(ValueError, match="Last entry"):
492
- cdr.add_release(name="release_1", **invalid_params)
493
-
494
- # Test invalid volume_fluxes: not a float/int or list of float/int
495
- invalid_params = deepcopy(valid_release_params)
496
- invalid_params["volume_fluxes"] = ["not", "valid"]
497
- with pytest.raises(ValueError, match="Invalid 'volume_fluxes' input"):
498
- cdr.add_release(name="release_invalid_volume", **invalid_params)
499
-
500
- # Test invalid tracer_concentrations: not a float/int or list of float/int
501
- invalid_params = deepcopy(valid_release_params)
502
- invalid_params["tracer_concentrations"] = {"ALK": ["not", "valid"]}
503
- with pytest.raises(ValueError, match="Invalid tracer concentration for 'ALK'"):
504
- cdr.add_release(name="release_invalid_tracer", **invalid_params)
505
-
506
- # Test mismatch between times and volume fluxes length
507
- invalid_params = deepcopy(valid_release_params)
508
- invalid_params["times"] = [datetime(2022, 1, 1), datetime(2022, 1, 2)] # Two times
509
- invalid_params["volume_fluxes"] = [100] # Only one volume flux entry
510
- with pytest.raises(ValueError, match="The length of `volume_fluxes` "):
511
- cdr.add_release(name="release_1", **invalid_params)
512
-
513
- # Test mismatch between times and tracer_concentrations length
514
- invalid_params = deepcopy(valid_release_params)
515
- invalid_params["times"] = [datetime(2022, 1, 1), datetime(2022, 1, 2)] # Two times
516
- invalid_params["tracer_concentrations"] = {
517
- "ALK": [1]
518
- } # Only one tracer concentration
519
- with pytest.raises(ValueError, match="The length of tracer 'ALK'"):
520
- cdr.add_release(name="release_1", **invalid_params)
521
-
522
- # Test invalid volume flux (negative)
523
- invalid_params = deepcopy(valid_release_params)
524
- invalid_params["volume_fluxes"] = -100 # Invalid volume flux
525
- with pytest.raises(ValueError, match="Volume flux must be non-negative"):
526
- cdr.add_release(name="release_1", **invalid_params)
527
-
528
- # Test volume flux as list with negative values
529
- invalid_params = deepcopy(valid_release_params)
530
- invalid_params["times"] = [cdr.start_time, cdr.end_time]
531
- invalid_params["volume_fluxes"] = [10, -5] # Invalid volume fluxes in list
532
- with pytest.raises(
533
- ValueError, match="All entries in `volume_fluxes` must be non-negative"
534
- ):
535
- cdr.add_release(name="release_1", **invalid_params)
536
-
537
- # Test invalid tracer concentration (negative)
538
- invalid_params = deepcopy(valid_release_params)
539
- invalid_params["tracer_concentrations"] = {"ALK": -1}
540
- with pytest.raises(ValueError, match="The concentration of tracer"):
541
- cdr.add_release(name="release_1", **invalid_params)
542
-
543
- # Test tracer_concentration as list with negative values
544
- invalid_params = deepcopy(valid_release_params)
545
- invalid_params["times"] = [cdr.start_time, cdr.end_time]
546
- invalid_params["tracer_concentrations"] = {
547
- "ALK": [10, -5]
548
- } # Invalid concentration in list
549
- with pytest.raises(ValueError, match="All entries in "):
550
- cdr.add_release(name="release_1", **invalid_params)
551
-
552
-
553
- def test_warning_no_grid(
554
- empty_cdr_point_source_without_grid, valid_release_params, caplog
555
- ):
556
- """Test warning if no grid is provided."""
557
- with caplog.at_level(logging.WARNING):
558
- empty_cdr_point_source_without_grid.add_release(
559
- name="release_1", **valid_release_params
560
- )
561
-
562
- assert "Grid not provided"
563
-
564
-
565
- @pytest.mark.parametrize(
566
- "cdr_forcing_fixture",
567
- [
568
- "empty_cdr_point_source_with_grid",
569
- "empty_cdr_point_source_with_grid_that_straddles",
570
- ],
571
- )
572
- def test_invalid_release_longitude(cdr_forcing_fixture, valid_release_params, request):
573
- """Test that error is raised if release location is outside grid."""
574
-
575
- cdr = request.getfixturevalue(cdr_forcing_fixture)
576
-
577
- # Release location outside of domain
578
- invalid_params = deepcopy(valid_release_params)
579
- invalid_params["lon"] = -30
580
- invalid_params["lat"] = 60
581
- with pytest.raises(ValueError, match="outside of the grid domain"):
582
- cdr.add_release(name="release_1", **invalid_params)
583
-
584
- # Release location outside of domain
585
- invalid_params = deepcopy(valid_release_params)
586
- invalid_params["lon"] = 360 - 30
587
- invalid_params["lat"] = 60
588
- with pytest.raises(ValueError, match="outside of the grid domain"):
589
- cdr.add_release(name="release_1", **invalid_params)
590
-
591
-
592
- def test_invalid_release_location(
593
- empty_cdr_point_source_with_grid, valid_release_params
594
- ):
595
- """Test that error is raised if release location is outside grid or on land."""
596
- # Release location too close to boundary of Iceland domain; lat_rho[0, 0] = 60.97, lon_rho[0, 0] = 334.17
597
- invalid_params = deepcopy(valid_release_params)
598
- invalid_params["lon"] = 334.17
599
- invalid_params["lat"] = 60.97
600
- with pytest.raises(ValueError, match="too close to the grid boundary"):
601
- empty_cdr_point_source_with_grid.add_release(name="release_1", **invalid_params)
602
-
603
- # Release location lies on land
604
- invalid_params = deepcopy(valid_release_params)
605
- invalid_params["lon"] = -20.0
606
- invalid_params["lat"] = 64.5
607
- with pytest.raises(ValueError, match="on land"):
608
- empty_cdr_point_source_with_grid.add_release(name="release_1", **invalid_params)
609
-
610
- # Release location lies below seafloor
611
- invalid_params = deepcopy(valid_release_params)
612
- invalid_params["depth"] = 4000
613
- with pytest.raises(ValueError, match="below the seafloor"):
614
- empty_cdr_point_source_with_grid.add_release(name="release_1", **invalid_params)
299
+ def test_check_unique_name(self):
300
+ with pytest.raises(ValidationError):
301
+ ReleaseCollector(releases=[self.volume_release, self.volume_release])
302
+ with pytest.raises(ValidationError):
303
+ ReleaseCollector(
304
+ releases=[self.tracer_perturbation, self.tracer_perturbation]
305
+ )
306
+
307
+ def test_raises_inconsistent_release_type(self):
308
+
309
+ with pytest.raises(
310
+ ValidationError, match="Not all releases have the same type"
311
+ ):
312
+ ReleaseCollector(releases=[self.volume_release, self.tracer_perturbation])
313
+
314
+ def test_determine_release_type(self):
315
+ """Test that release type is correctly inferred."""
316
+
317
+ collector = ReleaseCollector(releases=[self.volume_release])
318
+ assert collector.release_type == ReleaseType.volume
319
+
320
+ collector = ReleaseCollector(
321
+ releases=[self.volume_release, self.another_volume_release]
322
+ )
323
+ assert collector.release_type == ReleaseType.volume
324
+
325
+ collector = ReleaseCollector(releases=[self.tracer_perturbation])
326
+ assert collector.release_type == ReleaseType.tracer_perturbation
327
+
328
+ collector = ReleaseCollector(
329
+ releases=[self.tracer_perturbation, self.another_tracer_perturbation]
330
+ )
331
+ assert collector.release_type == ReleaseType.tracer_perturbation
332
+
333
+
334
+ class TestCDRForcingDatasetBuilder:
335
+ def setup_method(self):
336
+ self.start_time = datetime(2022, 1, 1)
337
+ self.end_time = datetime(2022, 12, 31)
338
+
339
+ first_volume_release = VolumeRelease(
340
+ name="first_release",
341
+ lat=66.0,
342
+ lon=-25.0,
343
+ depth=50.0,
344
+ times=[datetime(2022, 1, 1), datetime(2022, 1, 3), datetime(2022, 1, 5)],
345
+ volume_fluxes=[1.0, 2.0, 3.0],
346
+ tracer_concentrations={
347
+ "DIC": [10.0, 20.0, 30.0],
348
+ "temp": 10.0,
349
+ "salt": 35.0,
350
+ },
351
+ )
615
352
 
353
+ second_volume_release = VolumeRelease(
354
+ name="second_release",
355
+ lon=first_volume_release.lon - 1,
356
+ lat=first_volume_release.lat - 1,
357
+ depth=first_volume_release.depth - 1,
358
+ times=[
359
+ datetime(2022, 1, 2),
360
+ datetime(2022, 1, 4),
361
+ datetime(2022, 1, 5),
362
+ ],
363
+ volume_fluxes=[2.0, 4.0, 10.0],
364
+ tracer_concentrations={"DIC": [20.0, 40.0, 100.0]},
365
+ )
616
366
 
617
- def test_add_release_tracer_zero_fill(start_end_times, valid_release_params):
618
- """Test that zero fill of tracer concentrations works as expected."""
619
- start_time, end_time = start_end_times
620
- cdr = CDRVolumePointSource(start_time=start_time, end_time=end_time)
621
- release_params = deepcopy(valid_release_params)
622
- release_params["fill_values"] = "zero"
623
- cdr.add_release(name="filled_release", **release_params)
624
- defaults = get_tracer_defaults()
625
- # temp
626
- assert (cdr.ds["cdr_tracer"].isel(ntracers=0) == defaults["temp"]).all()
627
- # salt
628
- assert (cdr.ds["cdr_tracer"].isel(ntracers=1) == defaults["salt"]).all()
629
- # all other tracers should be zero
630
- assert (cdr.ds["cdr_tracer"].isel(ntracers=slice(2, None)) == 0.0).all()
367
+ first_tracer_perturbation = TracerPerturbation(
368
+ name="first_release",
369
+ lat=66.0,
370
+ lon=-25.0,
371
+ depth=50.0,
372
+ times=[datetime(2022, 1, 1), datetime(2022, 1, 3), datetime(2022, 1, 5)],
373
+ tracer_fluxes={
374
+ "DIC": [10.0, 20.0, 30.0],
375
+ },
376
+ )
631
377
 
378
+ second_tracer_perturbation = TracerPerturbation(
379
+ name="second_release",
380
+ lon=first_tracer_perturbation.lon - 1,
381
+ lat=first_tracer_perturbation.lat - 1,
382
+ depth=first_tracer_perturbation.depth - 1,
383
+ times=[
384
+ datetime(2022, 1, 2),
385
+ datetime(2022, 1, 4),
386
+ datetime(2022, 1, 5),
387
+ ],
388
+ tracer_fluxes={"DIC": [20.0, 40.0, 100.0]},
389
+ )
632
390
 
633
- def test_add_release_tracer_auto_fill(start_end_times, valid_release_params):
634
- """Test that auto fill of tracer concentrations works as expected."""
635
- start_time, end_time = start_end_times
636
- # Check that the tracer concentrations are auto-filled where missing
637
- cdr = CDRVolumePointSource(start_time=start_time, end_time=end_time)
638
- release_params = deepcopy(valid_release_params)
639
- release_params["fill_values"] = "auto"
640
- cdr.add_release(name="filled_release", **release_params)
391
+ # Modify all releases including extending it to the endpoints
392
+ for release in [
393
+ first_volume_release,
394
+ second_volume_release,
395
+ first_tracer_perturbation,
396
+ second_tracer_perturbation,
397
+ ]:
398
+ ReleaseSimulationManager(
399
+ release=release,
400
+ start_time=self.start_time,
401
+ end_time=self.end_time,
402
+ )
403
+
404
+ self.first_volume_release = first_volume_release
405
+ self.second_volume_release = second_volume_release
406
+ self.first_tracer_perturbation = first_tracer_perturbation
407
+ self.second_tracer_perturbation = second_tracer_perturbation
408
+
409
+ def check_ds_dims_and_coords(
410
+ self, ds, num_times, num_releases, release_type=VolumeRelease
411
+ ):
412
+ """Assert expected dimensions and coordinates for a CDR dataset."""
413
+
414
+ # Dimensions
415
+ assert ds.time.size == num_times
416
+ assert ds.ncdr.size == num_releases
417
+ assert ds.ntracers.size == NUM_TRACERS
418
+
419
+ # Coordinates and metadata
420
+ assert ds.release_name.size == num_releases
421
+ assert ds.tracer_name.size == NUM_TRACERS
422
+ assert ds.tracer_unit.size == NUM_TRACERS
423
+ assert ds.tracer_long_name.size == NUM_TRACERS
424
+ assert ds.cdr_time.size == num_times
425
+ assert ds.cdr_lon.size == num_releases
426
+ assert ds.cdr_lat.size == num_releases
427
+ assert ds.cdr_dep.size == num_releases
428
+ assert ds.cdr_hsc.size == num_releases
429
+ assert ds.cdr_vsc.size == num_releases
430
+
431
+ if release_type == VolumeRelease:
432
+ assert ds.cdr_volume.shape == (num_times, num_releases)
433
+ assert ds.cdr_tracer.shape == (num_times, NUM_TRACERS, num_releases)
434
+ elif release_type == TracerPerturbation:
435
+ assert ds.cdr_trcflx.shape == (num_times, NUM_TRACERS, num_releases)
436
+
437
+ def check_ds_name_and_location(self, ds, release, ncdr_index):
438
+ """Assert expected release name and location for a CDR dataset."""
439
+
440
+ # Name
441
+ assert release.name in ds["release_name"].values
442
+
443
+ # Location
444
+ assert ds["cdr_lon"].isel(ncdr=ncdr_index).values == release.lon
445
+ assert ds["cdr_lat"].isel(ncdr=ncdr_index).values == release.lat
446
+ assert ds["cdr_dep"].isel(ncdr=ncdr_index).values == release.depth
447
+ assert ds["cdr_hsc"].isel(ncdr=ncdr_index).values == release.hsc
448
+ assert ds["cdr_vsc"].isel(ncdr=ncdr_index).values == release.vsc
449
+
450
+ # TODO: Check for tracer metadata
451
+
452
+ def test_build_with_single_volume_release(self):
453
+
454
+ builder = CDRForcingDatasetBuilder(
455
+ releases=[self.first_volume_release],
456
+ model_reference_date=datetime(2000, 1, 1),
457
+ release_type=ReleaseType.volume,
458
+ )
459
+ ds = builder.build()
641
460
 
642
- defaults = get_tracer_defaults()
643
- # temp
644
- assert (cdr.ds["cdr_tracer"].isel(ntracers=0) == defaults["temp"]).all()
645
- # salt
646
- assert (cdr.ds["cdr_tracer"].isel(ntracers=1) == defaults["salt"]).all()
647
- # ALK
648
- assert (cdr.ds["cdr_tracer"].isel(ntracers=11) == defaults["ALK"]).all()
649
- # all other tracers should also be equal to the tracer default values, so not equal to zero
650
- assert (cdr.ds["cdr_tracer"].isel(ntracers=slice(2, None)) > 0.0).all()
461
+ num_times = len(self.first_volume_release.times)
462
+ num_releases = 1
463
+ self.check_ds_dims_and_coords(
464
+ ds, num_times, num_releases, release_type=builder.release_type
465
+ )
651
466
 
467
+ ncdr_index = 0
468
+ self.check_ds_name_and_location(ds, self.first_volume_release, ncdr_index)
652
469
 
653
- def test_add_release_invalid_fill(start_end_times, valid_release_params):
654
- """Test that invalid fill method of tracer concentrations raises error."""
655
- start_time, end_time = start_end_times
656
- cdr = CDRVolumePointSource(start_time=start_time, end_time=end_time)
657
- release_params = deepcopy(valid_release_params)
658
- release_params["fill_values"] = "zero_fill"
470
+ # Time values
471
+ assert np.array_equal(
472
+ ds["time"].values,
473
+ np.array(self.first_volume_release.times, dtype="datetime64[ns]"),
474
+ )
659
475
 
660
- with pytest.raises(ValueError, match="Invalid fill_values option"):
476
+ # Volume flux values
477
+ np.testing.assert_allclose(
478
+ ds.cdr_volume.isel(ncdr=ncdr_index).values,
479
+ self.first_volume_release.volume_fluxes.values,
480
+ )
661
481
 
662
- cdr.add_release(name="filled_release", **release_params)
482
+ # Tracer concentration values
483
+ tracer_index = {name: i for i, name in enumerate(ds.tracer_name.values)}
484
+ for tracer, expected in self.first_volume_release.tracer_concentrations.items():
485
+ i = tracer_index[tracer]
486
+ np.testing.assert_allclose(
487
+ ds.cdr_tracer.isel(ncdr=ncdr_index, ntracers=i), expected.values
488
+ )
663
489
 
490
+ def test_build_with_single_tracer_perturbation(self):
664
491
 
665
- def test_plot_error_when_no_grid(start_end_times, valid_release_params):
666
- """Test that error is raised if plotting without a grid."""
667
- start_time, end_time = start_end_times
668
- cdr = CDRVolumePointSource(start_time=start_time, end_time=end_time)
669
- release_params = deepcopy(valid_release_params)
670
- cdr.add_release(name="release1", **release_params)
492
+ builder = CDRForcingDatasetBuilder(
493
+ releases=[self.first_tracer_perturbation],
494
+ model_reference_date=datetime(2000, 1, 1),
495
+ release_type=ReleaseType.tracer_perturbation,
496
+ )
497
+ ds = builder.build()
671
498
 
672
- with pytest.raises(ValueError, match="A grid must be provided for plotting"):
673
- cdr.plot_location_top_view("all")
499
+ num_times = len(self.first_tracer_perturbation.times)
500
+ num_releases = 1
501
+ self.check_ds_dims_and_coords(
502
+ ds, num_times, num_releases, release_type=builder.release_type
503
+ )
674
504
 
675
- with pytest.raises(ValueError, match="A grid must be provided for plotting"):
676
- cdr.plot_location_side_view("release1")
505
+ ncdr_index = 0
506
+ self.check_ds_name_and_location(ds, self.first_tracer_perturbation, ncdr_index)
677
507
 
508
+ # Time values
509
+ assert np.array_equal(
510
+ ds["time"].values,
511
+ np.array(self.first_tracer_perturbation.times, dtype="datetime64[ns]"),
512
+ )
678
513
 
679
- def test_plot(cdr_point_source_with_two_releases):
680
- """Test that plotting method run without error."""
514
+ # Tracer flux values
515
+ tracer_index = {name: i for i, name in enumerate(ds.tracer_name.values)}
516
+ for tracer, expected in self.first_tracer_perturbation.tracer_fluxes.items():
517
+ i = tracer_index[tracer]
518
+ np.testing.assert_allclose(
519
+ ds.cdr_trcflx.isel(ncdr=ncdr_index, ntracers=i), expected.values
520
+ )
681
521
 
682
- cdr_point_source_with_two_releases.plot_volume_flux()
683
- cdr_point_source_with_two_releases.plot_tracer_concentration("ALK")
684
- cdr_point_source_with_two_releases.plot_tracer_concentration("DIC")
522
+ def test_build_with_multiple_volume_releases(self):
685
523
 
686
- cdr_point_source_with_two_releases.plot_location_top_view()
524
+ builder = CDRForcingDatasetBuilder(
525
+ releases=[self.first_volume_release, self.second_volume_release],
526
+ model_reference_date=datetime(2000, 1, 1),
527
+ release_type=ReleaseType.volume,
528
+ )
529
+ ds = builder.build()
530
+
531
+ # expected times is the union of the times of the first and second release without duplication
532
+ expected_times = [
533
+ datetime(2022, 1, 1),
534
+ datetime(2022, 1, 2),
535
+ datetime(2022, 1, 3),
536
+ datetime(2022, 1, 4),
537
+ datetime(2022, 1, 5),
538
+ datetime(2022, 12, 31),
539
+ ]
540
+ num_times = len(expected_times)
541
+ num_releases = 2
542
+ self.check_ds_dims_and_coords(
543
+ ds, num_times, num_releases, release_type=builder.release_type
544
+ )
687
545
 
546
+ self.check_ds_name_and_location(ds, self.first_volume_release, 0)
547
+ self.check_ds_name_and_location(ds, self.second_volume_release, 1)
688
548
 
689
- @pytest.mark.skipif(xesmf is None, reason="xesmf required")
690
- def test_plot_side_view(cdr_point_source_with_two_releases):
691
- """Test that plotting method run without error."""
549
+ # Time values
550
+ assert np.array_equal(
551
+ ds["time"].values, np.array(expected_times, dtype="datetime64[ns]")
552
+ )
692
553
 
693
- cdr_point_source_with_two_releases.plot_location_side_view("release1")
554
+ # Volume flux values first release
555
+ ncdr_index = 0
556
+ expected_volume_fluxes = [1.0, 1.5, 2.0, 2.5, 3.0, 0.0]
557
+ assert np.allclose(
558
+ ds["cdr_volume"].isel(ncdr=ncdr_index).values,
559
+ np.array(expected_volume_fluxes),
560
+ )
694
561
 
562
+ # Volume flux values second release
563
+ ncdr_index = 1
564
+ expected_volume_fluxes = [0.0, 2.0, 3.0, 4.0, 10.0, 0.0]
565
+ assert np.allclose(
566
+ ds["cdr_volume"].isel(ncdr=ncdr_index).values,
567
+ np.array(expected_volume_fluxes),
568
+ )
695
569
 
696
- def test_plot_more_errors(cdr_point_source_with_two_releases):
697
- """Test that error is raised on bad plot args or ambiguous release."""
570
+ # Tracer concentration values first release
571
+ ncdr_index = 0
572
+ dic_index = 9
698
573
 
699
- with pytest.raises(ValueError, match="Multiple releases found"):
700
- cdr_point_source_with_two_releases.plot_location_side_view()
574
+ expected_dics = [10.0, 15.0, 20.0, 25.0, 30.0, 30.0]
575
+ assert np.allclose(
576
+ ds["cdr_tracer"].isel(ncdr=ncdr_index, ntracers=dic_index).values,
577
+ np.array(expected_dics),
578
+ )
701
579
 
702
- with pytest.raises(ValueError, match="Invalid release"):
703
- cdr_point_source_with_two_releases.plot_location_side_view(release="fake")
580
+ # Tracer concentration values second release
581
+ ncdr_index = 1
704
582
 
705
- with pytest.raises(ValueError, match="Invalid releases"):
706
- cdr_point_source_with_two_releases.plot_location_top_view(releases=["fake"])
583
+ expected_dics = [20.0, 20.0, 30.0, 40.0, 100.0, 100.0]
584
+ assert np.allclose(
585
+ ds["cdr_tracer"].isel(ncdr=ncdr_index, ntracers=dic_index).values,
586
+ np.array(expected_dics),
587
+ )
707
588
 
708
- with pytest.raises(ValueError, match="should be a string"):
709
- cdr_point_source_with_two_releases.plot_location_top_view(releases=4)
589
+ def test_build_with_multiple_tracer_perturbations(self):
710
590
 
711
- with pytest.raises(ValueError, match="list must be strings"):
712
- cdr_point_source_with_two_releases.plot_location_top_view(releases=[4])
591
+ builder = CDRForcingDatasetBuilder(
592
+ releases=[self.first_tracer_perturbation, self.second_tracer_perturbation],
593
+ model_reference_date=datetime(2000, 1, 1),
594
+ release_type=ReleaseType.tracer_perturbation,
595
+ )
596
+ ds = builder.build()
597
+
598
+ # expected times is the union of the times of the first and second release without duplication
599
+ expected_times = [
600
+ datetime(2022, 1, 1),
601
+ datetime(2022, 1, 2),
602
+ datetime(2022, 1, 3),
603
+ datetime(2022, 1, 4),
604
+ datetime(2022, 1, 5),
605
+ datetime(2022, 12, 31),
606
+ ]
607
+ num_times = len(expected_times)
608
+ num_releases = 2
609
+ self.check_ds_dims_and_coords(
610
+ ds, num_times, num_releases, release_type=builder.release_type
611
+ )
713
612
 
613
+ self.check_ds_name_and_location(ds, self.first_tracer_perturbation, 0)
614
+ self.check_ds_name_and_location(ds, self.second_tracer_perturbation, 1)
714
615
 
715
- def test_cdr_forcing_save(cdr_point_source_with_two_releases, tmp_path):
716
- """Test save method."""
616
+ # Time values
617
+ assert np.array_equal(
618
+ ds["time"].values, np.array(expected_times, dtype="datetime64[ns]")
619
+ )
717
620
 
718
- for file_str in ["test_cdr_forcing", "test_cdr_forcing.nc"]:
719
- # Create a temporary filepath using the tmp_path fixture
720
- for filepath in [tmp_path / file_str, str(tmp_path / file_str)]:
621
+ # Tracer flux values first release
622
+ ncdr_index = 0
623
+ dic_index = 9
721
624
 
722
- saved_filenames = cdr_point_source_with_two_releases.save(filepath)
723
- # Check if the .nc file was created
724
- filepath = Path(filepath).with_suffix(".nc")
725
- assert saved_filenames == [filepath]
726
- assert filepath.exists()
727
- # Clean up the .nc file
728
- filepath.unlink()
625
+ expected_dics = [10.0, 15.0, 20.0, 25.0, 30.0, 0.0]
626
+ assert np.allclose(
627
+ ds["cdr_trcflx"].isel(ncdr=ncdr_index, ntracers=dic_index).values,
628
+ np.array(expected_dics),
629
+ )
729
630
 
631
+ # Tracer flux values second release
632
+ ncdr_index = 1
730
633
 
731
- def test_roundtrip_yaml(cdr_point_source_with_two_releases, tmp_path):
732
- """Test that creating a CDRVolumePointSource object, saving its parameters to yaml
733
- file, and re-opening yaml file creates the same object."""
634
+ expected_dics = [0.0, 20.0, 30.0, 40.0, 100.0, 0.0]
635
+ assert np.allclose(
636
+ ds["cdr_trcflx"].isel(ncdr=ncdr_index, ntracers=dic_index).values,
637
+ np.array(expected_dics),
638
+ )
734
639
 
735
- # Create a temporary filepath using the tmp_path fixture
736
- file_str = "test_yaml"
737
- for filepath in [
738
- tmp_path / file_str,
739
- str(tmp_path / file_str),
740
- ]: # test for Path object and str
741
640
 
742
- cdr_point_source_with_two_releases.to_yaml(filepath)
641
+ class TestCDRForcing:
642
+ def setup_method(self):
643
+ self.start_time = datetime(2022, 1, 1)
644
+ self.end_time = datetime(2022, 12, 31)
645
+
646
+ first_volume_release = VolumeRelease(
647
+ name="first_release",
648
+ lat=66.0,
649
+ lon=-25.0,
650
+ depth=50.0,
651
+ hsc=0.0,
652
+ vsc=0.0,
653
+ times=[datetime(2022, 1, 1), datetime(2022, 1, 3), datetime(2022, 1, 5)],
654
+ volume_fluxes=[1.0, 2.0, 3.0],
655
+ tracer_concentrations={
656
+ "DIC": [10.0, 20.0, 30.0],
657
+ "temp": 10.0,
658
+ "salt": 35.0,
659
+ },
660
+ )
743
661
 
744
- cdr_forcing_from_file = CDRVolumePointSource.from_yaml(filepath)
662
+ second_volume_release = VolumeRelease(
663
+ name="second_release",
664
+ lon=first_volume_release.lon + 360,
665
+ lat=first_volume_release.lat,
666
+ depth=first_volume_release.depth,
667
+ hsc=40000.0,
668
+ vsc=0.0,
669
+ times=[
670
+ datetime(2022, 1, 2),
671
+ datetime(2022, 1, 4),
672
+ datetime(2022, 1, 5),
673
+ ],
674
+ volume_fluxes=[2.0, 4.0, 10.0],
675
+ tracer_concentrations={"DIC": [20.0, 40.0, 100.0]},
676
+ )
745
677
 
746
- assert cdr_point_source_with_two_releases == cdr_forcing_from_file
678
+ first_tracer_perturbation = TracerPerturbation(
679
+ name="first_release",
680
+ lat=66.0,
681
+ lon=-25.0,
682
+ depth=50.0,
683
+ hsc=40000.0,
684
+ vsc=100.0,
685
+ times=[datetime(2022, 1, 1), datetime(2022, 1, 3), datetime(2022, 1, 5)],
686
+ tracer_fluxes={
687
+ "DIC": [10.0, 20.0, 30.0],
688
+ },
689
+ )
747
690
 
748
- filepath = Path(filepath)
749
- filepath.unlink()
691
+ second_tracer_perturbation = TracerPerturbation(
692
+ name="second_release",
693
+ lon=first_tracer_perturbation.lon + 360,
694
+ lat=first_tracer_perturbation.lat,
695
+ depth=first_tracer_perturbation.depth,
696
+ hsc=0.0,
697
+ vsc=10.0,
698
+ times=[
699
+ datetime(2022, 1, 2),
700
+ datetime(2022, 1, 4),
701
+ datetime(2022, 1, 5),
702
+ ],
703
+ tracer_fluxes={"DIC": [20.0, 40.0, 100.0]},
704
+ )
750
705
 
706
+ # Modify all releases including extending it to the endpoints
707
+ for release in [
708
+ first_volume_release,
709
+ second_volume_release,
710
+ first_tracer_perturbation,
711
+ second_tracer_perturbation,
712
+ ]:
713
+ ReleaseSimulationManager(
714
+ release=release,
715
+ start_time=self.start_time,
716
+ end_time=self.end_time,
717
+ )
718
+
719
+ self.first_volume_release = first_volume_release
720
+ self.second_volume_release = second_volume_release
721
+ self.first_tracer_perturbation = first_tracer_perturbation
722
+ self.second_tracer_perturbation = second_tracer_perturbation
723
+
724
+ self.volume_release_cdr_forcing_without_grid = CDRForcing(
725
+ start_time=self.start_time,
726
+ end_time=self.end_time,
727
+ releases=[self.first_volume_release, self.second_volume_release],
728
+ )
729
+ self.tracer_perturbation_cdr_forcing_without_grid = CDRForcing(
730
+ start_time=self.start_time,
731
+ end_time=self.end_time,
732
+ releases=[self.first_tracer_perturbation, self.second_tracer_perturbation],
733
+ )
751
734
 
752
- def test_files_have_same_hash(cdr_point_source_with_two_releases, tmp_path):
753
- """Test that saving the same CDR forcing configuration to NetCDF twice results in
754
- reproducible file hashes."""
735
+ grid = Grid(
736
+ nx=18,
737
+ ny=18,
738
+ size_x=800,
739
+ size_y=800,
740
+ center_lon=-18,
741
+ center_lat=65,
742
+ rot=0,
743
+ N=3,
744
+ )
745
+ grid_that_straddles = Grid(
746
+ nx=18,
747
+ ny=18,
748
+ size_x=2500,
749
+ size_y=2500,
750
+ center_lon=0,
751
+ center_lat=65,
752
+ rot=0,
753
+ N=3,
754
+ ) # grid that straddles dateline
755
+
756
+ self.volume_release_cdr_forcing = CDRForcing(
757
+ grid=grid,
758
+ start_time=self.start_time,
759
+ end_time=self.end_time,
760
+ releases=[self.first_volume_release, self.second_volume_release],
761
+ )
762
+ self.volume_release_cdr_forcing_with_straddling_grid = CDRForcing(
763
+ grid=grid_that_straddles,
764
+ start_time=self.start_time,
765
+ end_time=self.end_time,
766
+ releases=[self.first_volume_release, self.second_volume_release],
767
+ )
768
+ self.tracer_perturbation_cdr_forcing = CDRForcing(
769
+ grid=grid,
770
+ start_time=self.start_time,
771
+ end_time=self.end_time,
772
+ releases=[self.first_tracer_perturbation, self.second_tracer_perturbation],
773
+ )
774
+ self.tracer_perturbation_cdr_forcing_with_straddling_grid = CDRForcing(
775
+ grid=grid_that_straddles,
776
+ start_time=self.start_time,
777
+ end_time=self.end_time,
778
+ releases=[self.first_tracer_perturbation, self.second_tracer_perturbation],
779
+ )
755
780
 
756
- yaml_filepath = tmp_path / "test_yaml.yaml"
757
- filepath1 = tmp_path / "test1.nc"
758
- filepath2 = tmp_path / "test2.nc"
781
+ def test_inconsistent_start_end_time(self):
782
+
783
+ start_time = datetime(2022, 5, 1)
784
+ end_time = datetime(2022, 5, 1)
785
+ with pytest.raises(ValueError, match="must be earlier"):
786
+ CDRForcing(
787
+ start_time=start_time,
788
+ end_time=end_time,
789
+ releases=[self.first_volume_release],
790
+ )
791
+ with pytest.raises(ValueError, match="must be earlier"):
792
+ CDRForcing(
793
+ start_time=start_time,
794
+ end_time=end_time,
795
+ releases=[self.first_tracer_perturbation],
796
+ )
797
+
798
+ def test_empty_release_list(self):
799
+
800
+ with pytest.raises(ValidationError):
801
+ CDRForcing(start_time=self.start_time, end_time=self.end_time)
802
+
803
+ def test_ds_attribute(self):
804
+
805
+ assert isinstance(self.volume_release_cdr_forcing_without_grid.ds, xr.Dataset)
806
+ assert isinstance(
807
+ self.tracer_perturbation_cdr_forcing_without_grid.ds, xr.Dataset
808
+ )
809
+ assert isinstance(self.volume_release_cdr_forcing.ds, xr.Dataset)
810
+ assert isinstance(self.tracer_perturbation_cdr_forcing.ds, xr.Dataset)
811
+ assert isinstance(
812
+ self.volume_release_cdr_forcing_with_straddling_grid.ds, xr.Dataset
813
+ )
814
+ assert isinstance(
815
+ self.tracer_perturbation_cdr_forcing_with_straddling_grid.ds, xr.Dataset
816
+ )
759
817
 
760
- cdr_point_source_with_two_releases.to_yaml(yaml_filepath)
761
- cdr_point_source_with_two_releases.save(filepath1)
762
- cdr_from_file = CDRVolumePointSource.from_yaml(yaml_filepath)
763
- cdr_from_file.save(filepath2)
818
+ def test_plot_error_when_no_grid(self):
819
+
820
+ for cdr in [
821
+ self.volume_release_cdr_forcing_without_grid,
822
+ self.tracer_perturbation_cdr_forcing_without_grid,
823
+ ]:
824
+
825
+ with pytest.raises(
826
+ ValueError, match="A grid must be provided for plotting"
827
+ ):
828
+ cdr.plot_locations("all")
829
+
830
+ with pytest.raises(
831
+ ValueError, match="A grid must be provided for plotting"
832
+ ):
833
+ cdr.plot_distribution("first_release")
834
+
835
+ def test_plot_volume_release(self):
836
+
837
+ for cdr in [
838
+ self.volume_release_cdr_forcing_without_grid,
839
+ self.volume_release_cdr_forcing,
840
+ self.volume_release_cdr_forcing_with_straddling_grid,
841
+ ]:
842
+ cdr.plot_volume_flux()
843
+ cdr.plot_tracer_concentration("ALK")
844
+ cdr.plot_tracer_concentration("DIC")
845
+
846
+ self.volume_release_cdr_forcing.plot_locations()
847
+ self.volume_release_cdr_forcing.plot_locations(release_names=["first_release"])
848
+
849
+ def test_plot_tracer_perturbation(self):
850
+
851
+ for cdr in [
852
+ self.tracer_perturbation_cdr_forcing_without_grid,
853
+ self.tracer_perturbation_cdr_forcing,
854
+ self.tracer_perturbation_cdr_forcing_with_straddling_grid,
855
+ ]:
856
+ cdr.plot_tracer_flux("ALK")
857
+ cdr.plot_tracer_flux("DIC")
858
+
859
+ self.tracer_perturbation_cdr_forcing.plot_locations()
860
+ self.tracer_perturbation_cdr_forcing.plot_locations(
861
+ release_names=["first_release"]
862
+ )
764
863
 
765
- hash1 = calculate_file_hash(filepath1)
766
- hash2 = calculate_file_hash(filepath2)
864
+ @pytest.mark.skipif(xesmf is None, reason="xesmf required")
865
+ def test_plot_distribution(self):
767
866
 
768
- assert hash1 == hash2, f"Hashes do not match: {hash1} != {hash2}"
867
+ self.volume_release_cdr_forcing.plot_distribution("first_release")
868
+ self.volume_release_cdr_forcing_with_straddling_grid.plot_distribution(
869
+ "first_release"
870
+ )
871
+ self.tracer_perturbation_cdr_forcing.plot_distribution("first_release")
872
+ self.tracer_perturbation_cdr_forcing_with_straddling_grid.plot_distribution(
873
+ "first_release"
874
+ )
769
875
 
770
- yaml_filepath.unlink()
771
- filepath1.unlink()
772
- filepath2.unlink()
876
+ def test_plot_more_errors(self):
877
+ """Test that error is raised on bad plot args or ambiguous release."""
878
+
879
+ with pytest.raises(ValueError, match="Invalid release"):
880
+ self.volume_release_cdr_forcing.plot_distribution(release_name="fake")
881
+
882
+ with pytest.raises(ValueError, match="Invalid releases"):
883
+ self.volume_release_cdr_forcing.plot_locations(release_names=["fake"])
884
+
885
+ with pytest.raises(ValueError, match="should be a string"):
886
+ self.volume_release_cdr_forcing.plot_locations(release_names=4)
887
+
888
+ with pytest.raises(ValueError, match="list must be strings"):
889
+ self.volume_release_cdr_forcing.plot_locations(release_names=[4])
890
+
891
+ def test_cdr_forcing_save(self, tmp_path):
892
+ """Test save method."""
893
+
894
+ for cdr_forcing in [
895
+ self.volume_release_cdr_forcing,
896
+ self.tracer_perturbation_cdr_forcing,
897
+ ]:
898
+ for file_str in ["test_cdr_forcing", "test_cdr_forcing.nc"]:
899
+ # Create a temporary filepath using the tmp_path fixture
900
+ for filepath in [tmp_path / file_str, str(tmp_path / file_str)]:
901
+
902
+ saved_filenames = cdr_forcing.save(filepath)
903
+ # Check if the .nc file was created
904
+ filepath = Path(filepath).with_suffix(".nc")
905
+ assert saved_filenames == [filepath]
906
+ assert filepath.exists()
907
+ # Clean up the .nc file
908
+ filepath.unlink()
909
+
910
+ def test_roundtrip_yaml(self, tmp_path):
911
+ """Test that creating a CDRVolumePointSource object, saving its parameters to
912
+ yaml file, and re-opening yaml file creates the same object."""
913
+
914
+ for cdr_forcing in [
915
+ self.volume_release_cdr_forcing,
916
+ self.tracer_perturbation_cdr_forcing,
917
+ ]:
918
+ # Create a temporary filepath using the tmp_path fixture
919
+ file_str = "test_yaml"
920
+ for filepath in [
921
+ tmp_path / file_str,
922
+ str(tmp_path / file_str),
923
+ ]: # test for Path object and str
924
+
925
+ cdr_forcing.to_yaml(filepath)
926
+
927
+ cdr_forcing_from_file = CDRForcing.from_yaml(filepath)
928
+
929
+ assert cdr_forcing == cdr_forcing_from_file
930
+
931
+ filepath = Path(filepath)
932
+ filepath.unlink()
933
+
934
+ def test_files_have_same_hash(self, tmp_path):
935
+ """Test that saving the same CDR forcing configuration to NetCDF twice results
936
+ in reproducible file hashes."""
937
+
938
+ for cdr_forcing in [
939
+ self.volume_release_cdr_forcing,
940
+ self.tracer_perturbation_cdr_forcing,
941
+ ]:
942
+ yaml_filepath = tmp_path / "test_yaml.yaml"
943
+ filepath1 = tmp_path / "test1.nc"
944
+ filepath2 = tmp_path / "test2.nc"
945
+
946
+ cdr_forcing.to_yaml(yaml_filepath)
947
+ cdr_forcing.save(filepath1)
948
+ cdr_from_file = CDRForcing.from_yaml(yaml_filepath)
949
+ cdr_from_file.save(filepath2)
950
+
951
+ hash1 = calculate_file_hash(filepath1)
952
+ hash2 = calculate_file_hash(filepath2)
953
+
954
+ assert hash1 == hash2, f"Hashes do not match: {hash1} != {hash2}"
955
+
956
+ yaml_filepath.unlink()
957
+ filepath1.unlink()
958
+ filepath2.unlink()