C $Header: /u/gcmpack/MITgcm/pkg/streamice/adstreamice_invert_surf_forthick.F,v 1.6 2016/11/29 14:19:37 dgoldberg Exp $
C $Name: $
#include "CPP_OPTIONS.h"
#include "STREAMICE_OPTIONS.h"
SUBROUTINE ADSTRMICE_H_INV (
#ifdef ALLOW_OPENAD
& H,
& Hd,
& S,
& R,
& Rd,
& delta,
#endif
& mythid)
! This S/R finds a thickness (H) that gives surf elev S with bed R
#include "SIZE.h"
#include "GRID.h"
#include "SET_GRID.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "STREAMICE.h"
!#include "CTRL_GENARR.h"
INTEGER myThid
#ifdef ALLOW_STREAMICE
#ifdef ALLOW_AUTODIFF
_RL resid, f, fp, hf, htmp
_RL rhoi, rhow, i_r, delta
INTEGER ITER, i, j, bi, bj
_RL ETA_GL_STREAMICE
EXTERNAL
_RL ETA_GL_PRIME_STREAMICE
! EXTERNAL PHI_GL_STREAMICE_PRIME
_RL H(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
! _RL Rtmp(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)a
#ifdef ALLOW_AUTODIFF_TAMC
_RL r_low_si_ad(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
common /streamice_rlow_ad/ r_low_si_ad
_RL h_streamice_ad(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
common /streamice_fields_rl_ad/ h_streamice_ad
#else
_RL R(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
_RL S(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
_RL Rd(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
_RL Hd(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
#endif
! il=ILNBLNK( xx_genarr2d_file(iarr) )
! write(fnamegeneric(1:80),'(2a,i10.10)')
! & xx_genarr2d_file(iarr)(1:il),'.',optimcycle
! CALL ACTIVE_READ_XY ( fnamegeneric, tmpfld2d, 1,
! & doglobalread, ladinit, optimcycle,
! & myThid, xx_genarr2d_dummy(iarr) )
! CALL ACTIVE_READ_XY ( 'H_adjust.data', H, 1,
! & doglobalread, ladinit, optimcycle,
! & myThid,
! CALL READ_FLD_XY_RL( 'R_low_adjust.data', ' ', Rtmp,
! & 0, myThid )
! call write_fld_xy_rl ("R_invert_pre","",R,0,mythid)
CALL STREAMICE_INVERT_SURF_FORTHICK (
O H,
#ifdef ALLOW_AUTODIFF_TAMC
I surf_el_streamice,
I R_low_si,
#else
I S,
I R,
#endif
I delta,
I myThid)
rhoi = streamice_density
rhow = streamice_density_ocean_avg
i_r = rhow/rhoi
delta=1-rhoi/rhow
DO bj=myByLo(myThid), myByHi(myThid)
DO bi=myBxLo(myThid), myBxHi(myThid)
do j = 1,sNy
do i = 1,sNx
#ifdef ALLOW_AUTODIFF_TAMC
hf = -1.0 * i_r * R_low_si (i,j,bi,bj)
#else
hf = -1.0 * i_r * R (i,j,bi,bj)
#endif
fp = ETA_GL_PRIME_STREAMICE (
& H (i,j,bi,bj)-hf,
& delta,
& 1. _d 0,
& delta*hf,
& streamice_smooth_gl_width)
#ifdef ALLOW_AUTODIFF_TAMC
r_low_si_ad (i,j,bi,bj) =
& r_low_si_ad (i,j,bi,bj) -
& i_r * (fp-delta)/fp *
& h_streamice_ad(i,j,bi,bj)
#else
rd (i,j,bi,bj) =
& rd (i,j,bi,bj) -
& i_r * (fp-delta)/fp *
& hd(i,j,bi,bj)
#endif
enddo
enddo
enddo
enddo
#endif
#endif
RETURN
END