Changeset 13965
- Timestamp:
- 2020-12-02T10:17:02+01:00 (4 years ago)
- Location:
- NEMO/branches/2020/SI3_vp_rheology
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/SI3_vp_rheology/cfgs/SHARED/namelist_ice_ref
r13920 r13965 98 98 rn_relast = 0.333 ! ratio of elastic timescale to ice time step: Telast = dt_ice * rn_relast 99 99 ! advised value: 1/3 (nn_nevp=100) or 1/9 (nn_nevp=300) 100 ln_rhg_VP = .false. ! VP rheology 101 nn_nout_vp = 10 ! number of outer iterations 102 nn_ninn_vp = 1500 ! number of inner iterations 103 ln_zebra_vp = .true. ! activate zebra solver 104 rn_relaxu_vp = 0.95 ! relaxation factor for u-velocity 105 rn_relaxv_vp = 0.95 ! relaxation factor for v-velocity 106 rn_uerr_max_vp = 0.80 ! maximum error on velocity 107 rn_uerr_min_vp = 1.0e-04 ! velocity to decide convergence 108 nn_cvgchk_vp = 5 ! iteration step for convergence check 109 nn_rhg_chkcvg = 0 ! check convergence of rheology 100 nn_rhg_chkcvg = 0 ! check convergence of rheology 110 101 ! = 0 no check 111 102 ! = 1 check at the main time step (output xml: uice_cvg) 112 103 ! = 2 check at both main and rheology time steps (additional output: ice_cvg.nc) 113 104 ! this option 2 asks a lot of communications between cpu 105 ln_rhg_VP = .false. ! VP rheology 106 nn_vp_nout = 10 ! number of outer iterations 107 nn_vp_ninn = 1500 ! number of inner iterations 108 nn_vp_cvgchk = 5 ! iteration step for convergence check 114 109 / 115 110 !------------------------------------------------------------------------------ -
NEMO/branches/2020/SI3_vp_rheology/src/ICE/ice.F90
r13920 r13965 158 158 INTEGER , PUBLIC :: nn_rhg_chkcvg !: check ice rheology convergence 159 159 ! -- vp 160 INTEGER , PUBLIC :: nn_nout_vp !: Number of outer iterations 161 INTEGER , PUBLIC :: nn_ninn_vp !: Number of inner iterations (linear system solver) 162 LOGICAL , PUBLIC :: ln_zebra_vp !: activate zebra (solve the linear system problem every odd j-band, then one every even one) 163 REAL(wp), PUBLIC :: rn_relaxu_vp !: U-relaxation factor (MV: can probably be merged with V-factor once ok) 164 REAL(wp), PUBLIC :: rn_relaxv_vp !: V-relaxation factor 165 REAL(wp), PUBLIC :: rn_uerr_max_vp !: maximum velocity error, above which a forcing error is considered and solver is stopped 166 REAL(wp), PUBLIC :: rn_uerr_min_vp !: minimum velocity error, beyond which convergence is assumed 167 INTEGER , PUBLIC :: nn_cvgchk_vp !: Number of iterations every each convergence is checked 160 INTEGER , PUBLIC :: nn_vp_nout !: Number of outer iterations 161 INTEGER , PUBLIC :: nn_vp_ninn !: Number of inner iterations (linear system solver) 162 INTEGER , PUBLIC :: nn_vp_cvgchk !: Number of iterations every each convergence is checked 168 163 ! 169 164 ! !!** ice-advection namelist (namdyn_adv) ** -
NEMO/branches/2020/SI3_vp_rheology/src/ICE/icedyn_rhg.F90
r13920 r13965 81 81 CALL ice_dyn_rhg_evp( kt, Kmm, stress1_i, stress2_i, stress12_i, shear_i, divu_i, delta_i ) 82 82 ! 83 ! !------------------------ ---------------------!84 CASE( np_rhgVP ) ! Viscous-Plastic rheology!85 ! !------------------------ ---------------------!83 ! !------------------------! 84 CASE( np_rhgVP ) ! Viscous-Plastic ! 85 ! !------------------------! 86 86 CALL ice_dyn_rhg_vp ( kt, shear_i, divu_i, delta_i ) 87 ! 87 88 END SELECT 88 89 ! … … 117 118 !! 118 119 NAMELIST/namdyn_rhg/ ln_rhg_EVP, ln_aEVP, rn_creepl, rn_ecc , nn_nevp, rn_relast, nn_rhg_chkcvg, & !-- evp 119 & ln_rhg_VP, nn_ nout_vp, nn_ninn_vp, ln_zebra_vp, rn_relaxu_vp, rn_relaxv_vp, rn_uerr_max_vp, rn_uerr_min_vp, nn_cvgchk_vp!-- vp120 & ln_rhg_VP, nn_vp_nout, nn_vp_ninn, nn_vp_cvgchk !-- vp 120 121 !!------------------------------------------------------------------- 121 122 ! … … 137 138 WRITE(numout,*) ' number of iterations for subcycling nn_nevp = ', nn_nevp 138 139 WRITE(numout,*) ' ratio of elastic timescale over ice time step rn_relast = ', rn_relast 139 WRITE(numout,*) ' check convergence of rheology nn_rhg_chkcvg = ', nn_rhg_chkcvg ! maybe duplicates nn_cvgchk_vp ? 140 WRITE(numout,*) ' rheology VP (icedyn_rhg_VP) ln_rhg_VP = ', ln_rhg_VP 141 WRITE(numout,*) ' number of outer iterations nn_nout_vp = ', nn_nout_vp 142 WRITE(numout,*) ' number of inner iterations nn_ninn_vp = ', nn_ninn_vp 143 WRITE(numout,*) ' activate zebra solver ln_zebra_vp = ', ln_zebra_vp 144 WRITE(numout,*) ' relaxation factor for u rn_relaxu_vp = ', rn_relaxu_vp 145 WRITE(numout,*) ' relaxation factor for v rn_relaxv_vp = ', rn_relaxv_vp 146 WRITE(numout,*) ' maximum error on velocity rn_uerr_max_vp = ', rn_uerr_max_vp 147 WRITE(numout,*) ' velocity to decide convergence rn_uerr_min_vp = ', rn_uerr_min_vp 148 WRITE(numout,*) ' iteration step for convergence check nn_cvgchk_vp = ', nn_cvgchk_vp 149 IF ( nn_rhg_chkcvg == 0 ) THEN ; WRITE(numout,*) ' no check' 150 ELSEIF( nn_rhg_chkcvg == 1 ) THEN ; WRITE(numout,*) ' check cvg at the main time step' 151 ELSEIF( nn_rhg_chkcvg == 2 ) THEN ; WRITE(numout,*) ' check cvg at both main and rheology time steps' 140 WRITE(numout,*) ' check convergence of rheology nn_rhg_chkcvg = ', nn_rhg_chkcvg 141 WRITE(numout,*) ' rheology VP (icedyn_rhg_VP) ln_rhg_VP = ', ln_rhg_VP 142 WRITE(numout,*) ' number of outer iterations nn_vp_nout = ', nn_vp_nout 143 WRITE(numout,*) ' number of inner iterations nn_vp_ninn = ', nn_vp_ninn 144 WRITE(numout,*) ' iteration step for convergence check nn_vp_cvgchk = ', nn_vp_cvgchk 145 IF( ln_rhg_EVP ) THEN 146 IF ( nn_rhg_chkcvg == 0 ) THEN ; WRITE(numout,*) ' no check cvg' 147 ELSEIF( nn_rhg_chkcvg == 1 ) THEN ; WRITE(numout,*) ' check cvg at the main time step' 148 ELSEIF( nn_rhg_chkcvg == 2 ) THEN ; WRITE(numout,*) ' check cvg at both main and rheology time steps' 149 ENDIF 152 150 ENDIF 153 151 ENDIF -
NEMO/branches/2020/SI3_vp_rheology/src/ICE/icedyn_rhg_vp.F90
r13921 r13965 41 41 PUBLIC ice_dyn_rhg_vp ! called by icedyn_rhg.F90 42 42 43 44 LOGICAL :: lp_zebra_vp =.TRUE. ! activate zebra (solve the linear system problem every odd j-band, then one every even one) 45 REAL(wp) :: zrelaxu_vp=0.95 ! U-relaxation factor (MV: can probably be merged with V-factor once ok) 46 REAL(wp) :: zrelaxv_vp=0.95 ! V-relaxation factor 47 REAL(wp) :: zuerr_max_vp=0.80 ! maximum velocity error, above which a forcing error is considered and solver is stopped 48 REAL(wp) :: zuerr_min_vp=1.e-04 ! minimum velocity error, beyond which convergence is assumed 49 43 50 !! for convergence tests 44 51 INTEGER :: ncvgid ! netcdf file id … … 204 211 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zdiag_xmtrp_snw, zdiag_ymtrp_snw ! X/Y-component of snow mass transport (kg/s, SIMIP) 205 212 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zdiag_xatrp, zdiag_yatrp ! X/Y-component of area transport (m2/s, SIMIP) 206 213 214 215 CALL ctl_stop( 'STOP', 'icedyn_rhg_vp: stop because vp rheology is an ongoing work and should not be used' ) 216 207 217 !!---------------------------------------------------------------------------------------------------------------------- 208 218 ! DEBUG put all forcing terms to zero … … 236 246 END DO 237 247 238 IF ( l n_zebra_vp ) THEN; nn_zebra_vp = 2248 IF ( lp_zebra_vp ) THEN; nn_zebra_vp = 2 239 249 ELSE; nn_zebra_vp = 1; ENDIF 240 250 241 nn_nvp = nn_ nout_vp * nn_ninn_vp! maximum number of iterations242 243 IF( lwp ) WRITE(numout,*) ' l n_zebra_vp : ', ln_zebra_vp251 nn_nvp = nn_vp_nout * nn_vp_ninn ! maximum number of iterations 252 253 IF( lwp ) WRITE(numout,*) ' lp_zebra_vp : ', lp_zebra_vp 244 254 IF( lwp ) WRITE(numout,*) ' nn_zebra_vp : ', nn_zebra_vp 245 255 IF( lwp ) WRITE(numout,*) ' nn_nvp : ', nn_nvp … … 414 424 jter = 0 415 425 416 DO i_out = 1, nn_ nout_vp426 DO i_out = 1, nn_vp_nout 417 427 418 428 IF( lwp ) WRITE(numout,*) ' outer loop i_out : ', i_out … … 796 806 ll_v_iterate = .TRUE. 797 807 798 DO i_inn = 1, nn_ ninn_vp! inner loop iterations808 DO i_inn = 1, nn_vp_ninn ! inner loop iterations 799 809 800 810 IF( lwp ) WRITE(numout,*) ' inner loop 1 i_inn : ', i_inn … … 898 908 DO ji = 2, jpi - 1 899 909 900 u_ice(ji,jj) = zu_b(ji,jj) + rn_relaxu_vp * ( u_ice(ji,jj) - zu_b(ji,jj) ) ! relaxation910 u_ice(ji,jj) = zu_b(ji,jj) + zrelaxu_vp * ( u_ice(ji,jj) - zu_b(ji,jj) ) ! relaxation 901 911 902 912 u_ice(ji,jj) = zmsk00x(ji,jj) & ! masking … … 996 1006 DO jj = 2, jpj - 1 997 1007 998 v_ice(ji,jj) = zv_b(ji,jj) + rn_relaxv_vp * ( v_ice(ji,jj) - zv_b(ji,jj) ) ! relaxation1008 v_ice(ji,jj) = zv_b(ji,jj) + zrelaxv_vp * ( v_ice(ji,jj) - zv_b(ji,jj) ) ! relaxation 999 1009 1000 1010 v_ice(ji,jj) = zmsk00y(ji,jj) & ! masking … … 1036 1046 1037 1047 ! - Stop if error is too large ("safeguard against bad forcing" of original Zhang routine) 1038 IF ( i_inn > 1 .AND. zuerr_max > rn_uerr_max_vp ) THEN1048 IF ( i_inn > 1 .AND. zuerr_max > zuerr_max_vp ) THEN 1039 1049 IF ( lwp ) WRITE(numout,*) " VP rheology error was too large : ", zuerr_max, " in outer U-iteration ", i_out, " after ", i_inn, " iterations, we stopped " 1040 1050 ll_u_iterate = .FALSE. … … 1042 1052 1043 1053 ! - Stop if error small enough 1044 IF ( zuerr_max < rn_uerr_min_vp ) THEN1054 IF ( zuerr_max < zuerr_min_vp ) THEN 1045 1055 IF ( lwp ) WRITE(numout,*) " VP rheology nicely done in outer U-iteration ", i_out, " after ", i_inn, " iterations, finished! " 1046 1056 ll_u_iterate = .FALSE. … … 1068 1078 1069 1079 ! - Stop if error is too large ("safeguard against bad forcing" of original Zhang routine) 1070 IF ( i_inn > 1 .AND. zverr_max > rn_uerr_max_vp ) THEN1080 IF ( i_inn > 1 .AND. zverr_max > zuerr_max_vp ) THEN 1071 1081 IF ( lwp ) WRITE(numout,*) " VP rheology error was too large : ", zverr_max, " in outer V-iteration ", i_out, " after ", i_inn, " iterations, we stopped " 1072 1082 ll_v_iterate = .FALSE. … … 1074 1084 1075 1085 ! - Stop if error small enough 1076 IF ( zverr_max < rn_uerr_min_vp ) THEN1086 IF ( zverr_max < zuerr_min_vp ) THEN 1077 1087 IF ( lwp ) WRITE(numout,*) " VP rheology nicely done in outer V-iteration ", i_out, " after ", i_inn, " iterations, finished! " 1078 1088 ll_v_iterate = .FALSE. -
NEMO/branches/2020/SI3_vp_rheology/src/ICE/iceistate.F90
r13920 r13965 174 174 u_ice (:,:) = 0._wp 175 175 v_ice (:,:) = 0._wp 176 177 CALL lbc_lnk_multi( 'ice_istate' , u_ice, 'U', -1., v_ice, 'V', -1. ) ! required for VP rheology178 176 ! 179 177 !------------------------------------------------------------------------
Note: See TracChangeset
for help on using the changeset viewer.