Changeset 5123 for trunk/NEMOGCM/NEMO/LIM_SRC_3/limhdf.F90
- Timestamp:
- 2015-03-04T17:06:03+01:00 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/LIM_SRC_3/limhdf.F90
r4990 r5123 26 26 PRIVATE 27 27 28 PUBLIC lim_hdf ! called by lim_tr a28 PUBLIC lim_hdf ! called by lim_trp 29 29 30 LOGICAL :: linit = .TRUE. ! initialization flag (set to flase after the 1st call) 31 REAL(wp) :: epsi04 = 1.e-04 ! constant 30 LOGICAL :: linit = .TRUE. ! initialization flag (set to flase after the 1st call) 32 31 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: efact ! metric coefficient 33 32 … … 54 53 REAL(wp), DIMENSION(jpi,jpj), INTENT( inout ) :: ptab ! Field on which the diffusion is applied 55 54 ! 56 INTEGER :: ji, jj ! dummy loop indices 57 INTEGER :: its, iter, ierr ! local integers 58 REAL(wp) :: zalfa, zrlxint, zconv ! local scalars 59 REAL(wp), POINTER, DIMENSION(:,:) :: zrlx, zflu, zflv, zdiv0, zdiv, ztab0 60 CHARACTER(lc) :: charout ! local character 55 INTEGER :: ji, jj ! dummy loop indices 56 INTEGER :: iter, ierr ! local integers 57 REAL(wp) :: zrlxint, zconv ! local scalars 58 REAL(wp), POINTER, DIMENSION(:,:) :: zrlx, zflu, zflv, zdiv0, zdiv, ztab0 59 CHARACTER(lc) :: charout ! local character 60 REAL(wp), PARAMETER :: zrelax = 0.5_wp ! relaxation constant for iterative procedure 61 REAL(wp), PARAMETER :: zalfa = 0.5_wp ! =1.0/0.5/0.0 = implicit/Cranck-Nicholson/explicit 62 INTEGER , PARAMETER :: its = 100 ! Maximum number of iteration 61 63 !!------------------------------------------------------------------- 62 64 … … 71 73 DO jj = 2, jpjm1 72 74 DO ji = fs_2 , fs_jpim1 ! vector opt. 73 efact(ji,jj) = ( e2u(ji,jj) + e2u(ji-1,jj) + e1v(ji,jj) + e1v(ji,jj-1) ) / ( e1t(ji,jj) * e2t(ji,jj))75 efact(ji,jj) = ( e2u(ji,jj) + e2u(ji-1,jj) + e1v(ji,jj) + e1v(ji,jj-1) ) * r1_e12t(ji,jj) 74 76 END DO 75 77 END DO … … 77 79 ENDIF 78 80 ! ! Time integration parameters 79 zalfa = 0.5_wp ! =1.0/0.5/0.0 = implicit/Cranck-Nicholson/explicit80 its = 100 ! Maximum number of iteration81 81 ! 82 82 ztab0(:, : ) = ptab(:,:) ! Arrays initialization … … 91 91 iter = 0 92 92 ! 93 DO WHILE( zconv > ( 2._wp * epsi04 ) .AND. iter <= its ) ! Sub-time step loop93 DO WHILE( zconv > ( 2._wp * 1.e-04 ) .AND. iter <= its ) ! Sub-time step loop 94 94 ! 95 95 iter = iter + 1 ! incrementation of the sub-time step number … … 97 97 DO jj = 1, jpjm1 ! diffusive fluxes in U- and V- direction 98 98 DO ji = 1 , fs_jpim1 ! vector opt. 99 zflu(ji,jj) = pahu(ji,jj) * e2u(ji,jj) /e1u(ji,jj) * ( ptab(ji+1,jj) - ptab(ji,jj) )100 zflv(ji,jj) = pahv(ji,jj) * e1v(ji,jj) /e2v(ji,jj) * ( ptab(ji,jj+1) - ptab(ji,jj) )99 zflu(ji,jj) = pahu(ji,jj) * e2u(ji,jj) * r1_e1u(ji,jj) * ( ptab(ji+1,jj) - ptab(ji,jj) ) 100 zflv(ji,jj) = pahv(ji,jj) * e1v(ji,jj) * r1_e2v(ji,jj) * ( ptab(ji,jj+1) - ptab(ji,jj) ) 101 101 END DO 102 102 END DO … … 104 104 DO jj= 2, jpjm1 ! diffusive trend : divergence of the fluxes 105 105 DO ji = fs_2 , fs_jpim1 ! vector opt. 106 zdiv (ji,jj) = ( zflu(ji,jj) - zflu(ji-1,jj ) & 107 & + zflv(ji,jj) - zflv(ji ,jj-1) ) / ( e1t (ji,jj) * e2t (ji,jj) ) 106 zdiv(ji,jj) = ( zflu(ji,jj) - zflu(ji-1,jj) + zflv(ji,jj) - zflv(ji,jj-1) ) * r1_e12t(ji,jj) 108 107 END DO 109 108 END DO … … 115 114 zrlxint = ( ztab0(ji,jj) & 116 115 & + rdt_ice * ( zalfa * ( zdiv(ji,jj) + efact(ji,jj) * ptab(ji,jj) ) & 117 & + ( 1.0 - zalfa ) * zdiv0(ji,jj) ) )&118 & / ( 1.0 + zalfa * rdt_ice * efact(ji,jj) )119 zrlx(ji,jj) = ptab(ji,jj) + om* ( zrlxint - ptab(ji,jj) )116 & + ( 1.0 - zalfa ) * zdiv0(ji,jj) ) & 117 & ) / ( 1.0 + zalfa * rdt_ice * efact(ji,jj) ) 118 zrlx(ji,jj) = ptab(ji,jj) + zrelax * ( zrlxint - ptab(ji,jj) ) 120 119 END DO 121 120 END DO … … 138 137 DO jj = 1, jpjm1 ! diffusive fluxes in U- and V- direction 139 138 DO ji = 1 , fs_jpim1 ! vector opt. 140 zflu(ji,jj) = pahu(ji,jj) * e2u(ji,jj) /e1u(ji,jj) * ( ptab(ji+1,jj) - ptab(ji,jj) )141 zflv(ji,jj) = pahv(ji,jj) * e1v(ji,jj) /e2v(ji,jj) * ( ptab(ji,jj+1) - ptab(ji,jj) )139 zflu(ji,jj) = pahu(ji,jj) * e2u(ji,jj) * r1_e1u(ji,jj) * ( ptab(ji+1,jj) - ptab(ji,jj) ) 140 zflv(ji,jj) = pahv(ji,jj) * e1v(ji,jj) * r1_e2v(ji,jj) * ( ptab(ji,jj+1) - ptab(ji,jj) ) 142 141 END DO 143 142 END DO … … 145 144 DO jj= 2, jpjm1 ! diffusive trend : divergence of the fluxes 146 145 DO ji = fs_2 , fs_jpim1 ! vector opt. 147 zdiv (ji,jj) = ( zflu(ji,jj) - zflu(ji-1,jj ) & 148 & + zflv(ji,jj) - zflv(ji ,jj-1) ) / ( e1t (ji,jj) * e2t (ji,jj) ) 146 zdiv(ji,jj) = ( zflu(ji,jj) - zflu(ji-1,jj) + zflv(ji,jj) - zflv(ji,jj-1) ) * r1_e12t(ji,jj) 149 147 ptab(ji,jj) = ztab0(ji,jj) + 0.5 * ( zdiv(ji,jj) + zdiv0(ji,jj) ) 150 148 END DO
Note: See TracChangeset
for help on using the changeset viewer.