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