1. 18 Apr, 2018 2 commits
  2. 05 Apr, 2018 1 commit
    • David Deepwell's avatar
      Update map_iwave case to use new diagnostics · e6b803fd
      David Deepwell authored
      This case has uncovered that the BPE calculation returns
      incorrect values when a Chebyshev grid is used on a field scale.
      The BPE calculation uses the quadrature weights as the volumes
      of each cell. This is true when the grid is regular, but incorrect
      for Chebyshev grids.
      
      To first approximation the Cheb quadrature weights are close to
      the volumes of the cells. This leads to the BPE calculation
      being accurate to 8 significant figures. 8 sig figs is not enough
      on fields scales since the magnitude of the PE can be very, very
      large. The difference of the BPE from the PE can thus be smaller
      than these 8 sig figs.
      e6b803fd
  3. 23 Mar, 2018 1 commit
  4. 22 Mar, 2018 1 commit
  5. 16 Mar, 2018 2 commits
  6. 13 Mar, 2018 1 commit
    • David Deepwell's avatar
      Update gravity_current to only use full zgrid · e938e1be
      David Deepwell authored
      The full xgrid and ygrid are unnecessary since x and y only
      depend on a single variable (or index - ii for x, and jj for y).
      The variables xx and yy can be used instead of xgrid and ygrid,
      respectively. Creating the full grids for these fields is a
      waste of memory.
      e938e1be
  7. 15 Feb, 2018 1 commit
  8. 07 Feb, 2018 1 commit
    • Christopher Subich's avatar
      Simplify GMRES dot products; fix convergence errors · 8ae27fe5
      Christopher Subich authored
      This commit amends Cheb_2dmg::resid_dot (dot-product of
      residual vectors in the context of the 2D GMRES/multigrid
      iteration) to perform the dot-product in the simplest way,
      as a sum over grid elements.
      
      Before this, the code (which is left in the file but
      disabled by #if 1 / #else) tried to be clever and
      evenly-weight contributions from the interior, the boundary
      conditions, and the mean-pressure error (if the problem was
      indeterminate).  This evidently caused the long-standing
      problem of the GMRES inner iteration being far more
      optimistic about error (as reported by LAPACK) than would be
      computed by directly measuring the residual error.
      
      This problem was ultimately discovered when the
      doc_map_iwave case broke.  Even though this broken residual
      code has been in SPINS since before it was
      version-controlled via GIT, the map_iwave case would still
      converge (and relatively quickly) when the multigrid
      iteration had a relatively large coarse-solve size.
      
      Git ...
      8ae27fe5
  9. 30 Jan, 2018 1 commit
  10. 28 Jan, 2018 3 commits
  11. 10 Jan, 2018 2 commits
  12. 27 Dec, 2017 1 commit
  13. 06 Nov, 2017 2 commits
  14. 02 Nov, 2017 3 commits
    • David Deepwell's avatar
      Make BPE_from_internal an optional argument · ba41b112
      David Deepwell authored
      Also reorganize how some diagnostics are added to the file.
      This is now a little clearer to read since similar diagnostics
      are placed near each other.
      ba41b112
    • David Deepwell's avatar
      Change order of compute_Background_PE optional arguments · edf41beb
      David Deepwell authored
      The dimensional rho option should not be after the mapping options
      since the mapping options will need to be specified for an
      unmapped dimensional density case. This now makes the optional
      argument ordering more logical.
      edf41beb
    • Christopher Subich's avatar
      Small fixes for broken build · f69389d7
      Christopher Subich authored
      In the previous merge, compilation of Sorter.o went missing from the
      Makefile, and a typo was introduced in the gravity_current case file;
      each would prevent a build from finishing.  These are fixed.
      f69389d7
  15. 01 Nov, 2017 5 commits
    • Christopher Subich's avatar
      Keep checks consistent between compute/write diagnostic · c2b83a9b
      Christopher Subich authored
      In certain cases, diagnostic computation required Nx/y/z > 1, but this
      check was not repeated for adding the diagnostic output to the
      respective file; this could result in unexpectedly writing 0 or
      meaningless data to the file.
      c2b83a9b
    • Christopher Subich's avatar
      Make timing code compile-time optional (TIMINGS=true) · d68f6d2b
      Christopher Subich authored
      This changeset adds a compile-time option on whether to include the
      timing code.  If SPINS is compiled without TIMINGS=true, the timing code
      is #defined to a no-op and should not otherwise affect the performance
      of the software; timing_stack_report will instead print a short error
      message.
      
      Because this affects #defines in header files, changing from
      TIMINGS=true to false (or vice versa) should only be done with a 'make
      clean'.  Not doing so could leave the timing code in an inconsistent
      state and result in either link-time errors (if older code calls timing
      code that is #defined away) or a corrupted/growing timing stack (if for
      example a timing_push() is compiled in but the corresponding
      timing_pop() is removed.)
      d68f6d2b
    • Christopher Subich's avatar
      Gravity_current: compute v^2 KE if f != 0 · ae19aedf
      Christopher Subich authored
      This change allows the gravity_current case to compute the v^2 component
      of the kinetic energy term even if NY=1 when rot_f != 0; in that case
      the solution can still develop a 2D geostrophic balance where v-velocity
      balances a pressure gradient.
      
      Additionally, the respective component sums are explicitly initialized to
      0.
      ae19aedf
    • Christopher Subich's avatar
      Fix typo that led to compiler warning · 6948b663
      Christopher Subich authored
      6948b663
    • Christopher Subich's avatar
      Sanitize template instantiation for add_diagnostic · 9d36be1d
      Christopher Subich authored
      The template form of add_diagnostic<x> is attractive, but to
      be properly used the template implementation must be visible
      at the same time as the header file itself.  The
      instantiations formerly in BaseCase.cpp were not likely to
      be visible to a program, increasing compile time (if they
      were re-instantiated) or causing an error (if the
      implementation was not visible).  This change:
      
      *) Moves the implementation of add_diagnostic to a new
      BaseCase_impl.cc
      *) Includes this impementation file from BaseCase.hpp, with
      a double-inclusion guard
      *) Preserves instantiations of <double> and <int>, with new
      'extern' declarations in BaseCase.hpp to prevent
      double-definition.
      9d36be1d
  16. 31 Oct, 2017 1 commit
    • David Deepwell's avatar
      Make derivatives.x not overwrite spinscase.cpp · 90c67e3c
      David Deepwell authored
      The spinscase.cpp file is the case file showing what was run in
      a given simulation. If derivatives are calculated afterwards
      (using derivatives.x) then this file gets over-written and case
      specific parameters/instructions will be lost. Rather than be
      over-written, a different file (derivatives.cpp) will be created
      when derivatives.x is run.
      90c67e3c
  17. 26 Oct, 2017 1 commit
    • Christopher Subich's avatar
      Simplified tridiangonal solve algorithm; timing extensions · 3581d1c1
      Christopher Subich authored
      First and most trivially, this change adds a few more timing push/pop
      invocations relating to multigrid and especially to some of the MPI
      synchronization steps that might cause processors to wait on each other.
      
      More substantively, this change also adds a new tridiangonal solver
      based on the bog-standard forwards/backwards elimination Thompson
      algorithm (see Wikipedia).  This should be acceptable because the 1D
      problems being solved themselves come from a 2D problem, so we don't
      expect ill-conditioning; calling out to the GMRES banded solver was
      surprisingly a computational bottleneck perhaps because of pivoting.
      
      This change seems to decrease the line-solve time by about 80%, which in
      turn decreases the overall runtime (tank_rho test case) by 40%.
      3581d1c1
  18. 24 Oct, 2017 1 commit
  19. 18 Oct, 2017 2 commits
  20. 17 Oct, 2017 1 commit
  21. 16 Oct, 2017 2 commits
  22. 04 Oct, 2017 2 commits
  23. 25 Aug, 2017 2 commits
    • David Deepwell's avatar
      Allow BPE calculation to handle dimensional density fields · 9c3c6367
      David Deepwell authored
      The BPE calculation had assumed that the density field was
      non-dimensionalized as the density anomaly. An optional argument
      allows the user to set the density field as dimensional.
      9c3c6367
    • David Deepwell's avatar
      Clean up BPE code · 2621238f
      David Deepwell authored
      The main while loop in the triple loop has been better optimized to
      remember the location from the previous loop step. This results in
      only one Nx loop over the entire triple loop. Reducing the loop
      from O(Nx^2*Ny*Nz) to O(Nx*Ny*Nz).
      
      Now tracking the partial sums of dx, and the volume of the hill.
      This makes comparisons for finding depths easier later on.
      
      And other minor coding changes.
      2621238f
  24. 23 Aug, 2017 1 commit