C $Header: /home/ubuntu/mnt/e9_copy/MITgcm_contrib/dgoldberg/streamice_oad_files/Attic/streamice_vel_solve_openad.F~,v 1.2 2014/10/14 15:43:22 dgoldberg dead $ C $Name: $ #include "STREAMICE_OPTIONS.h" #ifdef ALLOW_AUTODIFF # include "AUTODIFF_OPTIONS.h" #endif C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| CBOP SUBROUTINE STREAMICE_VEL_SOLVE_OPENAD ( myThid, maxNLIter, & maxCGiter, myiter ) C /============================================================\ C | SUBROUTINE | C | o | C |============================================================| C | | C \============================================================/ IMPLICIT NONE C === Global variables === #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "STREAMICE.h" #include "STREAMICE_CG.h" #ifdef ALLOW_AUTODIFF_TAMC # include "tamc.h" #endif C !INPUT/OUTPUT ARGUMENTS INTEGER myThid INTEGER maxNLIter INTEGER maxCGIter INTEGER myIter #ifdef ALLOW_STREAMICE C LOCAL VARIABLES INTEGER i, j, k, l, bi, bj, loopiter CHARACTER*(MAX_LEN_MBUF) msgBuf INTEGER NL_iter _RL err_last_change, cgtol LOGICAL CONVERGED #ifdef ALLOW_OPENAD isinloop0 =0 isinloop1 =1 isinloop2 =2 #endif IF (STREAMICE_ppm_driving_stress) THEN CALL STREAMICE_DRIVING_STRESS_PPM (myThid) ELSE CALL STREAMICE_DRIVING_STRESS (myThid) ENDIF #ifdef STREAMICE_STRESS_BOUNDARY_CONTROL _EXCH_XY_RL( taudx_SI , myThid ) _EXCH_XY_RL( taudy_SI , myThid ) CALL STREAMICE_FORCED_BUTTRESS (myThid) #endif CALL TIMER_START ('STREAMICE_VEL_SOLVE',myThid) cgtol = streamice_cg_tol nl_iter = 0 CONVERGED = .false. err_last_change = 1 _d 1 _EXCH_XY_RL( taudx_SI , myThid ) _EXCH_XY_RL( taudy_SI , myThid ) DO loopiter=1,maxNLIter C To avoid using "exit", loop goes through all iterations C but after convergence loop does nothing ! IF (.not.CONVERGED) THEN CALL STREAMICE_VEL_PHISTAGE ( I myThid, I maxNLIter, I maxCGiter, O cgtol, O nL_iter, O CONVERGED, O err_last_change, I 1) ENDDO C END NL ITER. LOOP C------------------------------------------------------------------- if (nl_iter .lt. streamice_max_nl_iter) then WRITE(msgBuf,'(A,I5,A)') 'VELOCITY SOLVE CONVERGED, ', & nl_iter, ' iterations' CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT , 1) else WRITE(msgBuf,'(A,I5,A)') 'VELOCITY SOLVE NOT CONVERGED IN ', & nl_iter, ' iterations' CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT , 1) endif _EXCH_XY_RL(U_streamice, myThid) _EXCH_XY_RL(V_streamice, myThid) CALL TIMER_STOP ('STREAMICE_VEL_SOLVE',myThid) #endif RETURN END