Opened 4 years ago

Closed 4 years ago

#850 closed bug (Fixed)

checking LBC_ATT for salinity when salinity is undefined

Reported by: dcherian Owned by:
Priority: minor Milestone: Release ROMS/TOMS 3.9
Component: Nonlinear Version: 3.9
Keywords: Cc:

Description (last modified by arango)

I'm having trouble restarting a simulation run with #undef SALINITY because the code is unnecessarily checking LBC_ATT for salt. The input file is actually consistent so I don't know why it's raising an error. But it shouldn't be checking this anyway...

LBC_GETATT - inconsistent western  lateral boundary condition for variable:   salt
              restart file LBC keyword =  RadNud
              but assigned structure switch:  S(1, 7,1)%radiation = F
              check input script LBC keyword for consitency ...
              restart file:  ocean_rst.nc

 LBC_GETATT - inconsistent southern lateral boundary condition for variable:   salt
              restart file LBC keyword =  Per
              but assigned structure switch:  S(2, 7,1)%periodic = F
              check input script LBC keyword for consitency ...
              restart file:  ocean_rst.nc

 LBC_GETATT - inconsistent eastern  lateral boundary condition for variable:   salt
              restart file LBC keyword =  Clo
              but assigned structure switch:  S(3, 7,1)%closed = F
              check input script LBC keyword for consitency ...
              restart file:  ocean_rst.nc

 LBC_GETATT - inconsistent northern lateral boundary condition for variable:   salt
              restart file LBC keyword =  Per
              but assigned structure switch:  S(4, 7,1)%periodic = F
              check input script LBC keyword for consitency ...
              restart file:  ocean_rst.nc

Everything works perfectly with #define NO_LBC_ATT

Change History (1)

comment:1 by arango, 4 years ago

Description: modified (diff)
Resolution: Fixed
Status: newclosed

Yes, the SALINITY C-preprocessing option and the metadata for variables associated with salinity is not too restricted nowadys. We rarely use applications without salinity. In the past, it was ommited in highly idealizes toy problem that only have temperature. To avoid errors like the one described in this ticket, we need to add the SALINITY conditional to various routines. We need to put such directives in various section of codes using the isalt index outside of the tracer loop. For example in mod_ncparam.F, we have:

  CASE ('idsurT(itemp)')
  idsurT(itemp)=varid
#ifdef SALINITY
  CASE ('idsurT(isalt)')
  idsurT(isalt)=varid
#endif
  CASE ('idTvar(itemp)')
  idTvar(itemp)=varid
#ifdef SALINITY
  CASE ('idTvar(isalt)')
  idTvar(isalt)=varid
#endif

To make this to work, we need strictly to set the tracer parameter MT in mod_param.F to:

!
! Set the maximum number of tracer between all nested grids.
!
  MT=MAX(NAT,MAXVAL(NT))

instead of MAX(2,MAXVAL(NT)). Recall, that NT(:) = NAT + NBT + NPT + NST


WARNING:

In the end, I have to change around 34 files. Users need to be very strict in the usage of the SALINITY CPP option in the future to avoid compilstion errors.

Many thanks for reporting this problem.

Note: See TracTickets for help on using tickets.