Opened 15 years ago

Closed 15 years ago

#368 closed upgrade (Done)

bulk fluxes and adjoint-based algorithms

Reported by: arango Owned by: arango
Priority: major Milestone: Adjoint Based Algorithms
Component: Adjoint Version: 3.3
Keywords: Cc:

Description

The bulk flux (BULK_FLUXES) formulation in ROMS is complicated and highly nonlinear. Although we have the tangent linear, representer, and adjoint versions of bulk_flux.F, we have found out stability issues with the linearization in the adjoint-based algorithms.

In the past, we have run the nonlinear model first and saved the fluxes in the history file to be used as a forcing file in the adjoint-based applications. The problem that we had with this strategy is that we output the surface salinity flux as (E-P)*Ssur (variable ssflux) and the model at input just needs E-P (variable swflux). In order to avoid conflicts, a new variable is introduced EminusP that allows some flexibility. So varinfo.dat has now the following entry:

'EminusP'                                          ! Input/Output
  'bulk_flux surface net freswater flux, (E-P)'
  'meter second-1'                                 ! computed by NLM ROMS
  'EminusP, scalar, series'                        ! bulk_flux.F and
  'ocean_time'                                     ! needed in adjoint-based
  'idEmPf'                                         ! applications
  'r2dvar'
  1.0d0

Also, all the input script were modified to add a new I/O variable switch:

Hout(idEmPf) == F                          ! E-P flux

A new C-preprocessing option NL_BULK_FLUXES was introduced to handle the reading of surface fluxes computed by the nonlinear model (bulk_flux.F) in the representer model. See rp_get_data.F and rp_set_data.F.

This option can be also used in the nonlinear model when BULK_FLUXES is not defined to read such surface salinity flux if needed:

#  if defined NL_BULK_FLUXES && !defined BULK_FLUXES
!
!-----------------------------------------------------------------------
!  Surface net freshwater flux (E-P) from NLM bulk flux computation.
!-----------------------------------------------------------------------
!
      CALL get_2dfld (ng, iRPM, idEmPf, ncFRCid(idEmPf,ng),             &
     &                nFfiles(ng), FRCname(1,ng), update(1),            &
     &                LBi, UBi, LBj, UBj, 2, 1,                         &
#   ifdef MASKING
     &                GRID(ng) % rmask(LBi,LBj),                        &
#   endif
     &                FORCES(ng) % stflxG(LBi,LBj,1,isalt))

#  elif !(defined ANA_SSFLUX || defined EMINUSP || defined SRELAXATION)
!
!-----------------------------------------------------------------------
!  Surface net freshwater flux: E-P.
!-----------------------------------------------------------------------
!
      CALL get_2dfld (ng, iNLM, idsfwf, ncFRCid(idsfwf,ng),             &
     &                nFfiles(ng), FRCname(1,ng), update(1),            &
     &                LBi, UBi, LBj, UBj, 2, 1,                         &
#   ifdef MASKING
     &                GRID(ng) % rmask(LBi,LBj),                        &
#   endif
     &                FORCES(ng) % stflxG(LBi,LBj,1,isalt))
#  endif

Many thanks to Andy Moore for suggesting this capability.

Change History (1)

comment:1 by arango, 15 years ago

Resolution: Done
Status: newclosed
Note: See TracTickets for help on using tickets.