Changeset 869
- Timestamp:
- 2008-03-26T10:21:54+01:00 (16 years ago)
- Location:
- trunk/NEMO
- Files:
-
- 20 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/LIM_SRC_3/limdia.F90
r834 r869 163 163 DO jj = njeq, jpjm1 164 164 DO ji = fs_2, fs_jpim1 ! vector opt. 165 vinfor(11) = vinfor(11) + v_i(ji,jj,jl)*aire(ji,jj) / 1.0e12 !undef def ice volume 165 IF( tms(ji,jj) == 1 ) THEN 166 vinfor(11) = vinfor(11) + v_i(ji,jj,jl)*aire(ji,jj) / 1.0e12 !undef def ice volume 167 ENDIF 166 168 END DO 167 169 END DO … … 170 172 vinfor(13) = 0.0 171 173 172 vinfor(15) = vinfor(15) / vinfor(7) ! these have to be divided by total ice volume to have the173 vinfor(29) = vinfor(29) / vinfor(7) ! right value174 vinfor(15) = vinfor(15) / MAX(vinfor(7),epsi06) ! these have to be divided by total ice volume to have the 175 vinfor(29) = vinfor(29) / MAX(vinfor(7),epsi06) ! right value 174 176 vinfor(31) = SQRT( vinfor(31) / MAX( vinfor(7) , epsi06 ) ) 175 vinfor(67) = vinfor(67) / vinfor(7)176 177 vinfor(53) = vinfor(53) / vinfor(5) ! these have to be divided by total ice extent to have the178 vinfor(55) = vinfor(55) / vinfor(5) ! right value179 vinfor(57) = vinfor(57) / vinfor(5) !180 vinfor(79) = vinfor(79) / vinfor(5) !177 vinfor(67) = vinfor(67) / MAX(vinfor(7),epsi06) 178 179 vinfor(53) = vinfor(53) / MAX(vinfor(5),epsi06) ! these have to be divided by total ice extent to have the 180 vinfor(55) = vinfor(55) / MAX(vinfor(5),epsi06) ! right value 181 vinfor(57) = vinfor(57) / MAX(vinfor(5),epsi06) ! 182 vinfor(79) = vinfor(79) / MAX(vinfor(5),epsi06) ! 181 183 182 184 zindb = 1.0 - MAX(0.0,SIGN(1.0,-vinfor(3))) ! … … 191 193 DO jj = njeq, jpjm1 192 194 DO ji = fs_2, fs_jpim1 ! vector opt. 193 vinfor(33) = vinfor(33) + d_v_i_trp(ji,jj,jl)*aire(ji,jj) / 1.0e12 !ice volume 194 vinfor(35) = vinfor(35) + d_v_i_thd(ji,jj,jl)*aire(ji,jj) / 1.0e12 !ice volume 195 IF( tms(ji,jj) == 1 ) THEN 196 vinfor(33) = vinfor(33) + d_v_i_trp(ji,jj,jl)*aire(ji,jj) / 1.0e12 !ice volume 197 vinfor(35) = vinfor(35) + d_v_i_thd(ji,jj,jl)*aire(ji,jj) / 1.0e12 !ice volume 198 ENDIF 195 199 END DO 196 200 END DO … … 199 203 DO jj = njeq, jpjm1 200 204 DO ji = fs_2, fs_jpim1 ! vector opt. 201 vinfor(37) = vinfor(37) + diag_sni_gr(ji,jj)*aire(ji,jj) / 1.0e12 !th growth rates 202 vinfor(39) = vinfor(39) + diag_lat_gr(ji,jj)*aire(ji,jj) / 1.0e12 203 vinfor(41) = vinfor(41) + diag_bot_gr(ji,jj)*aire(ji,jj) / 1.0e12 204 vinfor(43) = vinfor(43) + diag_dyn_gr(ji,jj)*aire(ji,jj) / 1.0e12 205 vinfor(45) = vinfor(45) + dv_dt_thd(ji,jj,5)*aire(ji,jj) / 1.0e12 206 vinfor(47) = vinfor(47) + v_newice(ji,jj) *aire(ji,jj) / 1.0e12 / rdt_ice ! volume acc in OW 205 IF( tms(ji,jj) == 1 ) THEN 206 vinfor(37) = vinfor(37) + diag_sni_gr(ji,jj)*aire(ji,jj) / 1.0e12 !th growth rates 207 vinfor(39) = vinfor(39) + diag_lat_gr(ji,jj)*aire(ji,jj) / 1.0e12 208 vinfor(41) = vinfor(41) + diag_bot_gr(ji,jj)*aire(ji,jj) / 1.0e12 209 vinfor(43) = vinfor(43) + diag_dyn_gr(ji,jj)*aire(ji,jj) / 1.0e12 210 vinfor(45) = vinfor(45) + dv_dt_thd(ji,jj,5)*aire(ji,jj) / 1.0e12 211 vinfor(47) = vinfor(47) + v_newice(ji,jj) *aire(ji,jj) / 1.0e12 / rdt_ice ! volume acc in OW 212 ENDIF 207 213 END DO 208 214 END DO … … 217 223 END DO 218 224 END DO 219 vinfor(63) = vinfor(63) / vinfor(3) ! these have to be divided by total ice area225 vinfor(63) = vinfor(63) / MAX(vinfor(3),epsi06) ! these have to be divided by total ice area 220 226 221 227 !! 1.2) Diagnostics dependent on age … … 348 354 DO jj = 2, njeqm1 349 355 DO ji = fs_2, fs_jpim1 ! vector opt. 350 vinfor(38) = vinfor(38) + diag_sni_gr(ji,jj)*aire(ji,jj) / 1.0e12 !th growth rates 351 vinfor(40) = vinfor(40) + diag_lat_gr(ji,jj)*aire(ji,jj) / 1.0e12 352 vinfor(42) = vinfor(42) + diag_bot_gr(ji,jj)*aire(ji,jj) / 1.0e12 353 vinfor(44) = vinfor(44) + diag_dyn_gr(ji,jj)*aire(ji,jj) / 1.0e12 354 vinfor(46) = vinfor(46) + dv_dt_thd(ji,jj,5)*aire(ji,jj) / 1.0e12 355 vinfor(48) = vinfor(48) + v_newice(ji,jj) *aire(ji,jj) / 1.0e12 / rdt_ice ! volume acc in OW 356 IF( tms(ji,jj) == 1 ) THEN 357 vinfor(38) = vinfor(38) + diag_sni_gr(ji,jj)*aire(ji,jj) / 1.0e12 !th growth rates 358 vinfor(40) = vinfor(40) + diag_lat_gr(ji,jj)*aire(ji,jj) / 1.0e12 359 vinfor(42) = vinfor(42) + diag_bot_gr(ji,jj)*aire(ji,jj) / 1.0e12 360 vinfor(44) = vinfor(44) + diag_dyn_gr(ji,jj)*aire(ji,jj) / 1.0e12 361 vinfor(46) = vinfor(46) + dv_dt_thd(ji,jj,5)*aire(ji,jj) / 1.0e12 362 vinfor(48) = vinfor(48) + v_newice(ji,jj) *aire(ji,jj) / 1.0e12 / rdt_ice ! volume acc in OW 363 ENDIF 356 364 END DO 357 365 END DO -
trunk/NEMO/LIM_SRC_3/limdyn.F90
r868 r869 103 103 ! --------------------------------------------------- 104 104 105 IF( lk_mpp ) THEN ! mpp: compute over the whole domain105 IF( lk_mpp .OR. nbit_cmp == 1 ) THEN ! mpp: compute over the whole domain 106 106 i_j1 = 1 107 107 i_jpj = jpj … … 160 160 ENDIF 161 161 162 ENDIF163 164 u_ice(:,1) = 0.0 !ibug est-ce vraiment necessaire?165 v_ice(:,1) = 0.0166 167 IF(ln_ctl) THEN168 CALL prt_ctl(tab2d_1=u_oce , clinfo1=' lim_dyn : u_oce :', tab2d_2=v_oce , clinfo2=' v_oce :')169 CALL prt_ctl(tab2d_1=u_ice , clinfo1=' lim_dyn : u_ice :', tab2d_2=v_ice , clinfo2=' v_ice :')170 162 ENDIF 171 163 -
trunk/NEMO/LIM_SRC_3/limistate.F90
r834 r869 523 523 DO jk = 1, nlay_s 524 524 CALL lbc_lnk(t_s(:,:,jk,jl), 'T', 1. ) 525 CALL lbc_lnk(e_s(:,:,jk,jl), 'T', 1. ) 525 526 END DO 526 527 DO jk = 1, nlay_i -
trunk/NEMO/LIM_SRC_3/limitd_me.F90
r868 r869 30 30 USE limcons 31 31 USE prtctl ! Print control 32 USE lib_mpp 32 33 33 34 IMPLICIT NONE … … 187 188 188 189 LOGICAL :: & 189 iterate_ridging, & ! if true, repeat the ridging190 190 asum_error ! flag for asum .ne. 1 191 192 INTEGER :: iterate_ridging ! if true, repeat the ridging 191 193 192 194 REAL(wp) :: & … … 282 284 !-----------------------------------------------------------------------------! 283 285 niter = 1 ! iteration counter 284 iterate_ridging = .true.285 286 287 DO WHILE ( iterate_ridging .AND. niter < nitermax )286 iterate_ridging = 1 287 288 289 DO WHILE ( iterate_ridging > 0 .AND. niter < nitermax ) 288 290 289 291 DO jj = 1, jpj … … 349 351 ! rates were reduced above), ridge again with new rates. 350 352 351 iterate_ridging = .false.353 iterate_ridging = 0 352 354 353 355 DO jj = 1, jpj … … 357 359 opning(ji,jj) = 0.0 358 360 ELSE 359 iterate_ridging = .true.361 iterate_ridging = 1 360 362 divu_adv(ji,jj) = (1.0 - asum(ji,jj)) / rdt_ice 361 363 closing_net(ji,jj) = MAX(0.0, -divu_adv(ji,jj)) … … 365 367 END DO 366 368 369 IF( lk_mpp ) CALL mpp_max(iterate_ridging) 370 367 371 ! Repeat if necessary. 368 372 ! NOTE: If strength smoothing is turned on, the ridging must be … … 372 376 niter = niter + 1 373 377 374 IF (iterate_ridging ) THEN378 IF (iterate_ridging == 1) THEN 375 379 IF (niter .GT. nitermax) THEN 376 380 WRITE(numout,*) ' ALERTE : non-converging ridging scheme ' … … 708 712 CALL lbc_lnk( strength, 'T', 1. ) 709 713 710 DO jj = 1, jpj - 1711 DO ji = 1, jpi - 1714 DO jj = 2, jpj - 1 715 DO ji = 2, jpi - 1 712 716 IF ( ( asum(ji,jj) - ato_i(ji,jj) ) .GT. epsi11) THEN ! ice is 713 717 ! present … … 727 731 END DO 728 732 729 DO jj = 1, jpj - 1730 DO ji = 1, jpi - 1733 DO jj = 2, jpj - 1 734 DO ji = 2, jpi - 1 731 735 strength(ji,jj) = zworka(ji,jj) 732 736 END DO 733 737 END DO 738 CALL lbc_lnk( strength, 'T', 1. ) 734 739 735 740 ENDIF ! ksmooth … … 1760 1765 ! Abort model in case of negative area. 1761 1766 !----------------------------------------------------------------- 1762 IF( M AXVAL(a_i(:,:,jl)) .LT. -epsi11 ) THEN1767 IF( MINVAL(a_i(:,:,jl)) .LT. -epsi11 ) THEN 1763 1768 DO jj = 1, jpj 1764 1769 DO ji = 1, jpi -
trunk/NEMO/LIM_SRC_3/limitd_th.F90
r868 r869 27 27 USE limcons 28 28 USE prtctl ! Print control 29 USE lib_mpp 29 30 30 31 IMPLICIT NONE … … 1062 1063 jl ! category index 1063 1064 1064 LOGICAL:: & !:1065 INTEGER :: & !: 1065 1066 zshiftflag ! = .true. if ice must be shifted 1066 1067 … … 1149 1150 ! identify thicknesses that are too big 1150 1151 !--------------------------------------- 1151 zshiftflag = .false.1152 zshiftflag = 0 1152 1153 1153 1154 DO jj = 1, jpj 1154 1155 DO ji = 1, jpi 1155 1156 IF (a_i(ji,jj,jl) .GT. zeps .AND. ht_i(ji,jj,jl) .GT. hi_max(jl) ) THEN 1156 zshiftflag = .true.1157 zshiftflag = 1 1157 1158 zdonor(ji,jj,jl) = jl 1158 1159 zdaice(ji,jj,jl) = a_i(ji,jj,jl) … … 1161 1162 END DO ! ji 1162 1163 END DO ! jj 1163 1164 IF (zshiftflag) THEN 1164 IF( lk_mpp ) CALL mpp_max(zshiftflag) 1165 1166 IF ( zshiftflag == 1 ) THEN 1165 1167 1166 1168 !------------------------------ … … 1193 1195 ! Identify thicknesses that are too small 1194 1196 !----------------------------------------- 1195 zshiftflag = .false.1197 zshiftflag = 0 1196 1198 1197 1199 DO jj = 1, jpj … … 1200 1202 ht_i(ji,jj,jl+1) .LE. hi_max(jl)) THEN 1201 1203 1202 zshiftflag = .true.1204 zshiftflag = 1 1203 1205 zdonor(ji,jj,jl) = jl + 1 1204 1206 zdaice(ji,jj,jl) = a_i(ji,jj,jl+1) … … 1208 1210 END DO ! jj 1209 1211 1210 IF (zshiftflag) THEN 1212 IF(lk_mpp) CALL mpp_max(zshiftflag) 1213 IF (zshiftflag==1) THEN 1211 1214 1212 1215 !------------------------------ -
trunk/NEMO/LIM_SRC_3/limmsh.F90
r834 r869 216 216 tms(:,:) = tmask(:,:,1) ! ice T-point : use surface tmask 217 217 218 tmu(:,1) = 0.e0219 tmu(1,:) = 0.e0220 tmv(:,1) = 0.e0221 tmv(1,:) = 0.e0218 ! tmu(:,1) = 0.e0 219 ! tmu(1,:) = 0.e0 220 ! tmv(:,1) = 0.e0 221 ! tmv(1,:) = 0.e0 222 222 223 223 DO jj = 1, jpj - 1 224 DO ji = 2, jpi - 1224 DO ji = 1 , jpi - 1 225 225 tmu(ji,jj) = tms(ji,jj) * tms(ji+1,jj) 226 226 tmv(ji,jj) = tms(ji,jj) * tms(ji,jj+1) … … 233 233 CALL lbc_lnk( tmu(:,:), 'U', 1. ) 234 234 CALL lbc_lnk( tmv(:,:), 'V', 1. ) 235 CALL lbc_lnk( tmf(:,:), 'F', 1. ) 235 236 236 237 ! unmasked and masked area of T-grid cell -
trunk/NEMO/LIM_SRC_3/limrhg.F90
r868 r869 314 314 315 315 !-Initialise stress tensor 316 zs1(:,:) = stress1_i(:,:) 316 zs1(:,:) = stress1_i(:,:) 317 317 zs2(:,:) = stress2_i(:,:) 318 318 zs12(:,:) = stress12_i(:,:) … … 387 387 END DO 388 388 END DO 389 CALL lbc_lnk( v_ice1(:,:), 'U', -1. ) 390 CALL lbc_lnk( u_ice2(:,:), 'V', -1. ) 389 391 390 392 !CDIR NOVERRCHK … … 454 456 & - dtotel*( (1.0-alphaevp)*ecc2*zs12(ji,jj) - zds(ji,jj) / & 455 457 & ( 2.0*deltac(ji,jj) ) * zpreshc(ji,jj))) & 456 & / ( 1.0 + alphaevp*ecc2*dtotel ) 458 & / ( 1.0 + alphaevp*ecc2*dtotel ) 457 459 458 460 END DO ! ji … … 625 627 END DO 626 628 629 CALL lbc_lnk( u_ice(:,:), 'U', -1. ) 630 CALL lbc_lnk( v_ice(:,:), 'V', -1. ) 631 627 632 DO jj = k_j1+1, k_jpj-1 628 633 DO ji = fs_2, fs_jpim1 … … 641 646 END DO 642 647 643 CALL lbc_lnk( u_ice2(:,:), ' U', -1. )644 CALL lbc_lnk( v_ice1(:,:), ' V', -1. )648 CALL lbc_lnk( u_ice2(:,:), 'V', -1. ) 649 CALL lbc_lnk( v_ice1(:,:), 'U', -1. ) 645 650 646 651 ! Recompute delta, shear and div, inputs for mechanical redistribution -
trunk/NEMO/LIM_SRC_3/limrst_dimg.h90
r825 r869 223 223 ! READ(inum,REC=irec) sist(:,:) 224 224 ! irec = irec +1 225 !RB bug 225 226 READ(inum,REC=irec) t_su(:,:) 226 227 irec = irec +1 -
trunk/NEMO/LIM_SRC_3/limthd.F90
r867 r869 30 30 USE limvar 31 31 USE prtctl ! Print control 32 USE lib_mpp 32 33 33 34 IMPLICIT NONE … … 116 117 WRITE(numout,*) '~~~~~~' 117 118 119 IF( numit == nstart ) CALL lim_thd_sal_init ! Initialization (first time-step only) 118 120 !------------------------------------------------------------------------------! 119 121 ! 1) Initialization of diagnostic variables ! … … 180 182 ! 1.4) Compute global heat content 181 183 !----------------------------------- 182 qt_i_in(:,:) = 0. 0183 qt_s_in(:,:) = 0. 0184 qt_i_fin(:,:) = 0. 0185 qt_s_fin(:,:) = 0. 0186 sum_fluxq(:,:) = 0. 0187 fatm(:,:) = 0. 0184 qt_i_in(:,:) = 0.e0 185 qt_s_in(:,:) = 0.e0 186 qt_i_fin(:,:) = 0.e0 187 qt_s_fin(:,:) = 0.e0 188 sum_fluxq(:,:) = 0.e0 189 fatm(:,:) = 0.e0 188 190 189 191 ! 2) Partial computation of forcing for the thermodynamic sea ice model. ! … … 279 281 !------------------------------------------------------------------------------! 280 282 283 IF( lk_mpp ) CALL mpp_ini_ice(nbpb) 284 281 285 IF (nbpb > 0) THEN ! If there is no ice, do nothing. 282 286 … … 414 418 !+++++ 415 419 420 IF( lk_mpp ) CALL mpp_comm_free(ncomm_ice) !RB necessary ?? 416 421 ENDIF ! nbpb 417 422 -
trunk/NEMO/LIM_SRC_3/limthd_dh.F90
r842 r869 22 22 USE ice 23 23 USE par_ice 24 USE lib_mpp 24 25 25 26 IMPLICIT NONE … … 280 281 ! Update total snow heat content 281 282 zqt_s(ji) = MAX ( zqt_s(ji) - zqfont_su(ji) , 0.0 ) 283 IF( lk_mpp ) CALL mpp_max(zqt_s(ji), kcom = ncomm_ice ) 282 284 283 285 ! Snow melt due to surface heat imbalance -
trunk/NEMO/LIM_SRC_3/limthd_dif.F90
r864 r869 21 21 USE ice 22 22 USE par_ice 23 USE lib_mpp 23 24 24 25 IMPLICIT NONE … … 341 342 zerrit(ji) = 1000.0 ! initial value of error 342 343 END DO 344 !RB Min global ?? 343 345 344 346 ! Old snow temperature … … 790 792 zerritmax = MAX(zerritmax,zerrit(ji)) 791 793 END DO 794 IF( lk_mpp ) CALL mpp_max(zerritmax, kcom=ncomm_ice) 792 795 793 796 END DO ! End of the do while iterative procedure … … 795 798 WRITE(numout,*) ' zerritmax : ', zerritmax 796 799 WRITE(numout,*) ' nconv : ', nconv 800 797 801 798 802 ! -
trunk/NEMO/LIM_SRC_3/limthd_ent.F90
r834 r869 25 25 USE limvar 26 26 USE par_ice 27 USE lib_mpp 27 28 28 29 IMPLICIT NONE … … 308 309 maxnbot0 = MAX ( maxnbot0 , nbot0(ji) ) 309 310 ENDDO 311 IF( lk_mpp ) CALL mpp_max( maxnbot0, kcom=ncomm_ice ) 310 312 311 313 DO jk = 1, maxnbot0 -
trunk/NEMO/LIM_SRC_3/limthd_sal.F90
r842 r869 29 29 !! * Routine accessibility 30 30 PUBLIC lim_thd_sal ! called by lim_thd 31 PUBLIC lim_thd_sal_init ! called by lim_thd 31 32 32 33 !! * Module variables … … 102 103 !!--------------------------------------------------------------------- 103 104 104 IF ( ( numit == nstart ) .AND. ( jl == 1 ) ) &105 CALL lim_thd_sal_init ! Initialization106 107 105 !------------------------------------------------------------------------------| 108 106 ! 1) Constant salinity, constant in time | -
trunk/NEMO/LIM_SRC_3/limupdate.F90
r867 r869 942 942 ! Ice drift 943 943 !------------ 944 DO jj = 2, jpj - 1 945 DO ji = 2, jpim1 944 945 !RB had to split the loop for mpp reproducibility, why ??? 946 DO jj = 1, jpj 947 DO ji = 1, jpim1 946 948 IF ( at_i(ji,jj) .EQ. 0.0 ) THEN ! what to do if there is no ice 947 949 ! mask u 948 950 IF ( at_i(ji+1,jj) .EQ. 0.0 ) u_ice(ji,jj) = 0.0 ! right side 951 ENDIF 952 END DO 953 END DO 954 DO jj = 1, jpj 955 DO ji = 2, jpi 956 IF ( at_i(ji,jj) .EQ. 0.0 ) THEN ! what to do if there is no ice 957 ! mask u 949 958 IF ( at_i(ji-1,jj) .EQ. 0.0 ) u_ice(ji-1,jj) = 0.0 ! left side 959 ENDIF 960 END DO 961 END DO 962 DO jj = 1, jpj - 1 963 DO ji = 1, jpi 964 IF ( at_i(ji,jj) .EQ. 0.0 ) THEN ! what to do if there is no ice 965 ! mask u 950 966 IF ( at_i(ji,jj+1) .EQ. 0.0 ) v_ice(ji,jj) = 0.0 ! upper side 967 ENDIF 968 END DO 969 END DO 970 DO jj = 2, jpj 971 DO ji = 1, jpi 972 IF ( at_i(ji,jj) .EQ. 0.0 ) THEN ! what to do if there is no ice 973 ! mask u 951 974 IF ( at_i(ji,jj-1) .EQ. 0.0 ) v_ice(ji-1,jj) = 0.0 ! bottom side 952 975 ENDIF -
trunk/NEMO/LIM_SRC_3/limwri.F90
r834 r869 141 141 niter = 0 142 142 zdept(1) = 0. 143 143 144 144 CALL ymds2ju ( nyear, nmonth, nday, zsec, zjulian ) 145 145 CALL dia_nam ( clhstnam, nwrite, 'icemod' ) 146 CALL histbeg ( clhstnam, jpi, glamt, jpj, gphit, 1, jpi, 1, jpj, 0, zjulian, rdt_ice, nhorid, nice )146 CALL histbeg ( clhstnam, jpi, glamt, jpj, gphit, 1, jpi, 1, jpj, 0, zjulian, rdt_ice, nhorid, nice, domain_id=nidom ) 147 147 CALL histvert( nice, "deptht", "Vertical T levels", "m", 1, zdept, ndepid) 148 148 CALL wheneq ( jpij , tmask(:,:,1), 1, 1., ndex51, ndim) … … 175 175 0, zjulian, rdt_ice, & ! time 176 176 nhorida, & ! ? linked with horizontal ... 177 nicea ) ! file177 nicea , domain_id=nidom) ! file 178 178 CALL histvert( nicea, "icethi", "L levels", & 179 179 "m", ipl , hi_mean , nz ) -
trunk/NEMO/OPA_SRC/SBC/flx_bulk_daily.h90
r841 r869 192 192 tatm_ice(:,:) = tatm(:,:) 193 193 #endif 194 CALL lbc_lnk(tatm_ice, 'T', 1. ) !RB necessary ?? 194 195 195 196 CALL FLUSH(numout) -
trunk/NEMO/OPA_SRC/SBC/flx_bulk_monthly.h90
r841 r869 231 231 tatm_ice(:,:) = tatm(:,:) 232 232 #endif 233 CALL lbc_lnk(tatm_ice, 'T', 1. ) !RB necessary ?? 233 234 234 235 ! ------------------- ! -
trunk/NEMO/OPA_SRC/SBC/taumod.F90
r841 r869 33 33 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: & 34 34 taux, tauy, & !: surface stress components in (i,j) referential 35 ! TAU BUG36 35 #if defined key_lim3 37 36 tauxw, tauyw, & !: surface wind stress components in (i,j) referential -
trunk/NEMO/OPA_SRC/lbclnk.F90
r719 r869 410 410 CASE ( 3 , 4 ) ! * North fold T-point pivot 411 411 412 pt3d( 1 ,jpj,jk) = 0.e0413 pt3d(jpi,jpj,jk) = 0.e0412 ! pt3d( 1 ,jpj,jk) = 0.e0 413 ! pt3d(jpi,jpj,jk) = 0.e0 414 414 415 415 SELECT CASE ( cd_type ) … … 584 584 CASE ( 3 , 4 ) ! * North fold T-point pivot 585 585 586 pt2d( 1 , 1 ) = 0.e0 !!!!! bug gm ??? !Edmee587 pt2d( 1 ,jpj) = 0.e0588 pt2d(jpi,jpj) = 0.e0586 ! pt2d( 1 , 1 ) = 0.e0 !!!!! bug gm ??? !Edmee 587 ! pt2d( 1 ,jpj) = 0.e0 588 ! pt2d(jpi,jpj) = 0.e0 589 589 590 590 SELECT CASE ( cd_type ) -
trunk/NEMO/OPA_SRC/lib_mpp.F90
r719 r869 60 60 PUBLIC mynode, mpparent, mpp_isl, mpp_min, mpp_max, mpp_sum, mpp_lbc_north 61 61 PUBLIC mpp_lbc_north_e, mpp_minloc, mpp_maxloc, mpp_lnk_3d, mpp_lnk_2d, mpp_lnk_3d_gather, mpp_lnk_2d_e, mpplnks 62 PUBLIC mpprecv, mppsend, mppscatter, mppgather, mppobc, mpp_ini_north, mppstop, mppsync 62 PUBLIC mpprecv, mppsend, mppscatter, mppgather, mppobc, mpp_ini_north, mppstop, mppsync, mpp_ini_ice, mpp_comm_free 63 63 #if defined key_oasis3 || defined key_oasis4 64 64 PUBLIC mppsize, mpprank … … 113 113 mpi_comm_opa ! opa local communicator 114 114 115 ! variables used in case of sea-ice 116 INTEGER, PUBLIC :: & ! 117 ngrp_ice, & ! group ID for the ice processors (to compute rheology) 118 ncomm_ice, & ! communicator made by the processors with sea-ice 119 ndim_rank_ice, & ! number of 'ice' processors 120 n_ice_root ! number (in the comm_ice) of proc 0 in the ice comm 121 INTEGER, DIMENSION(:), ALLOCATABLE :: & 122 nrank_ice ! dimension ndim_rank_north, number of the procs belonging to ncomm_north 115 123 ! variables used in case of north fold condition in mpp_mpi with jpni > 1 116 124 INTEGER :: & ! … … 853 861 854 862 CASE ( 1 ) ! only one proc along I, no mpp exchange 855 863 856 864 SELECT CASE ( npolj ) 857 865 … … 872 880 END DO 873 881 END DO 874 882 875 883 CASE ( 'U' ) 876 884 DO jk = 1, jpk … … 3069 3077 3070 3078 3071 SUBROUTINE mppmax_a_int( ktab, kdim )3079 SUBROUTINE mppmax_a_int( ktab, kdim, kcom ) 3072 3080 !!---------------------------------------------------------------------- 3073 3081 !! *** routine mppmax_a_int *** … … 3079 3087 INTEGER , INTENT( in ) :: kdim ! size of array 3080 3088 INTEGER , INTENT(inout), DIMENSION(kdim) :: ktab ! input array 3089 INTEGER , INTENT(in), OPTIONAL :: kcom 3081 3090 3082 3091 #if defined key_mpp_shmem … … 3110 3119 !! * Local variables (MPI version) 3111 3120 INTEGER :: ierror 3121 INTEGER :: localcomm 3112 3122 INTEGER, DIMENSION(kdim) :: iwork 3123 3124 localcomm = mpi_comm_opa 3125 IF( PRESENT(kcom) ) localcomm = kcom 3113 3126 3114 3127 CALL mpi_allreduce( ktab, iwork, kdim, mpi_integer, & 3115 & mpi_max, mpi_comm_opa, ierror )3128 & mpi_max, localcomm, ierror ) 3116 3129 3117 3130 ktab(:) = iwork(:) … … 3121 3134 3122 3135 3123 SUBROUTINE mppmax_int( ktab )3136 SUBROUTINE mppmax_int( ktab, kcom ) 3124 3137 !!---------------------------------------------------------------------- 3125 3138 !! *** routine mppmax_int *** … … 3132 3145 !! * Arguments 3133 3146 INTEGER, INTENT(inout) :: ktab ! ??? 3147 INTEGER, INTENT(in), OPTIONAL :: kcom ! ??? 3134 3148 3135 3149 !! * Local declarations … … 3159 3173 !! * Local variables (MPI version) 3160 3174 INTEGER :: ierror, iwork 3161 3175 INTEGER :: localcomm 3176 3177 localcomm = mpi_comm_opa 3178 IF( PRESENT(kcom) ) localcomm = kcom 3179 3162 3180 CALL mpi_allreduce(ktab,iwork, 1,mpi_integer & 3163 & ,mpi_max, mpi_comm_opa,ierror)3181 & ,mpi_max,localcomm,ierror) 3164 3182 3165 3183 ktab = iwork … … 3169 3187 3170 3188 3171 SUBROUTINE mppmin_a_int( ktab, kdim )3189 SUBROUTINE mppmin_a_int( ktab, kdim, kcom ) 3172 3190 !!---------------------------------------------------------------------- 3173 3191 !! *** routine mppmin_a_int *** … … 3179 3197 INTEGER , INTENT( in ) :: kdim ! size of array 3180 3198 INTEGER , INTENT(inout), DIMENSION(kdim) :: ktab ! input array 3199 INTEGER , INTENT(in), OPTIONAL :: kcom ! input array 3181 3200 3182 3201 #if defined key_mpp_shmem … … 3210 3229 !! * Local variables (MPI version) 3211 3230 INTEGER :: ierror 3231 INTEGER :: localcomm 3212 3232 INTEGER, DIMENSION(kdim) :: iwork 3213 3233 3234 localcomm = mpi_comm_opa 3235 IF( PRESENT(kcom) ) localcomm = kcom 3236 3214 3237 CALL mpi_allreduce( ktab, iwork, kdim, mpi_integer, & 3215 & mpi_min, mpi_comm_opa, ierror )3238 & mpi_min, localcomm, ierror ) 3216 3239 3217 3240 ktab(:) = iwork(:) … … 3505 3528 3506 3529 3507 SUBROUTINE mppmax_a_real( ptab, kdim )3530 SUBROUTINE mppmax_a_real( ptab, kdim, kcom ) 3508 3531 !!---------------------------------------------------------------------- 3509 3532 !! *** routine mppmax_a_real *** … … 3515 3538 INTEGER , INTENT( in ) :: kdim 3516 3539 REAL(wp), INTENT(inout), DIMENSION(kdim) :: ptab 3540 INTEGER , INTENT( in ), OPTIONAL :: kcom 3517 3541 3518 3542 #if defined key_mpp_shmem … … 3547 3571 !! * Local variables (MPI version) 3548 3572 INTEGER :: ierror 3573 INTEGER :: localcomm 3549 3574 REAL(wp), DIMENSION(kdim) :: zwork 3550 3575 3576 localcomm = mpi_comm_opa 3577 IF( PRESENT(kcom) ) localcomm = kcom 3578 3551 3579 CALL mpi_allreduce(ptab, zwork,kdim,mpi_double_precision & 3552 ,mpi_max, mpi_comm_opa,ierror)3580 ,mpi_max,localcomm,ierror) 3553 3581 ptab(:) = zwork(:) 3554 3582 … … 3558 3586 3559 3587 3560 SUBROUTINE mppmax_real( ptab )3588 SUBROUTINE mppmax_real( ptab, kcom ) 3561 3589 !!---------------------------------------------------------------------- 3562 3590 !! *** routine mppmax_real *** … … 3567 3595 !! * Arguments 3568 3596 REAL(wp), INTENT(inout) :: ptab ! ??? 3597 INTEGER, INTENT(in), OPTIONAL :: kcom ! ??? 3569 3598 3570 3599 #if defined key_mpp_shmem … … 3591 3620 !! * Local variables (MPI version) 3592 3621 INTEGER :: ierror 3622 INTEGER :: localcomm 3593 3623 REAL(wp) :: zwork 3594 3624 3625 localcomm = mpi_comm_opa 3626 IF( PRESENT(kcom) ) localcomm = kcom 3627 3595 3628 CALL mpi_allreduce( ptab, zwork , 1 , mpi_double_precision, & 3596 & mpi_max, mpi_comm_opa, ierror )3629 & mpi_max, localcomm, ierror ) 3597 3630 ptab = zwork 3598 3631 … … 3602 3635 3603 3636 3604 SUBROUTINE mppmin_a_real( ptab, kdim )3637 SUBROUTINE mppmin_a_real( ptab, kdim, kcom ) 3605 3638 !!---------------------------------------------------------------------- 3606 3639 !! *** routine mppmin_a_real *** … … 3612 3645 INTEGER , INTENT( in ) :: kdim 3613 3646 REAL(wp), INTENT(inout), DIMENSION(kdim) :: ptab 3647 INTEGER , INTENT( in ), OPTIONAL :: kcom 3614 3648 3615 3649 #if defined key_mpp_shmem … … 3644 3678 !! * Local variables (MPI version) 3645 3679 INTEGER :: ierror 3680 INTEGER :: localcomm 3646 3681 REAL(wp), DIMENSION(kdim) :: zwork 3647 3682 3683 localcomm = mpi_comm_opa 3684 IF( PRESENT(kcom) ) localcomm = kcom 3685 3648 3686 CALL mpi_allreduce(ptab, zwork,kdim,mpi_double_precision & 3649 ,mpi_min, mpi_comm_opa,ierror)3687 ,mpi_min,localcomm,ierror) 3650 3688 ptab(:) = zwork(:) 3651 3689 … … 3655 3693 3656 3694 3657 SUBROUTINE mppmin_real( ptab )3695 SUBROUTINE mppmin_real( ptab, kcom ) 3658 3696 !!---------------------------------------------------------------------- 3659 3697 !! *** routine mppmin_real *** … … 3665 3703 !! * Arguments 3666 3704 REAL(wp), INTENT( inout ) :: ptab ! 3705 INTEGER,INTENT(in), OPTIONAL :: kcom 3667 3706 3668 3707 #if defined key_mpp_shmem … … 3690 3729 INTEGER :: ierror 3691 3730 REAL(wp) :: zwork 3731 INTEGER :: localcomm 3732 3733 localcomm = mpi_comm_opa 3734 IF( PRESENT(kcom) ) localcomm = kcom 3692 3735 3693 3736 CALL mpi_allreduce( ptab, zwork, 1,mpi_double_precision & 3694 & ,mpi_min, mpi_comm_opa,ierror)3737 & ,mpi_min,localcomm,ierror) 3695 3738 ptab = zwork 3696 3739 … … 3700 3743 3701 3744 3702 SUBROUTINE mppsum_a_real( ptab, kdim )3745 SUBROUTINE mppsum_a_real( ptab, kdim, kcom ) 3703 3746 !!---------------------------------------------------------------------- 3704 3747 !! *** routine mppsum_a_real *** … … 3710 3753 INTEGER , INTENT( in ) :: kdim ! size of ptab 3711 3754 REAL(wp), DIMENSION(kdim), INTENT( inout ) :: ptab ! input array 3755 INTEGER, INTENT(in), OPTIONAL :: kcom 3712 3756 3713 3757 #if defined key_mpp_shmem … … 3742 3786 !! * Local variables (MPI version) 3743 3787 INTEGER :: ierror ! temporary integer 3788 INTEGER :: localcomm 3744 3789 REAL(wp), DIMENSION(kdim) :: zwork ! temporary workspace 3790 3791 3792 localcomm = mpi_comm_opa 3793 IF( PRESENT(kcom) ) localcomm = kcom 3745 3794 3746 3795 CALL mpi_allreduce(ptab, zwork,kdim,mpi_double_precision & 3747 & ,mpi_sum, mpi_comm_opa,ierror)3796 & ,mpi_sum,localcomm,ierror) 3748 3797 ptab(:) = zwork(:) 3749 3798 … … 3753 3802 3754 3803 3755 SUBROUTINE mppsum_real( ptab )3804 SUBROUTINE mppsum_real( ptab, kcom ) 3756 3805 !!---------------------------------------------------------------------- 3757 3806 !! *** routine mppsum_real *** … … 3762 3811 !!----------------------------------------------------------------------- 3763 3812 REAL(wp), INTENT(inout) :: ptab ! input scalar 3813 INTEGER, INTENT(in), OPTIONAL :: kcom 3764 3814 3765 3815 #if defined key_mpp_shmem … … 3786 3836 !! * Local variables (MPI version) 3787 3837 INTEGER :: ierror 3838 INTEGER :: localcomm 3788 3839 REAL(wp) :: zwork 3789 3840 3790 CALL mpi_allreduce(ptab, zwork, 1,mpi_double_precision & 3791 & ,mpi_sum,mpi_comm_opa,ierror) 3841 localcomm = mpi_comm_opa 3842 IF( PRESENT(kcom) ) localcomm = kcom 3843 3844 CALL mpi_allreduce(ptab, zwork, 1,mpi_double_precision & 3845 & ,mpi_sum,localcomm,ierror) 3792 3846 ptab = zwork 3793 3847 … … 4289 4343 END SUBROUTINE mppobc 4290 4344 4345 SUBROUTINE mpp_comm_free( kcom) 4346 4347 INTEGER, INTENT(in) :: kcom 4348 INTEGER :: ierr 4349 4350 CALL MPI_COMM_FREE(kcom, ierr) 4351 4352 END SUBROUTINE mpp_comm_free 4353 4354 4355 SUBROUTINE mpp_ini_ice(pindic) 4356 !!---------------------------------------------------------------------- 4357 !! *** routine mpp_ini_ice *** 4358 !! 4359 !! ** Purpose : Initialize special communicator for ice areas 4360 !! condition together with global variables needed in the ddmpp folding 4361 !! 4362 !! ** Method : - Look for ice processors in ice routines 4363 !! - Put their number in nrank_ice 4364 !! - Create groups for the world processors and the ice processors 4365 !! - Create a communicator for ice processors 4366 !! 4367 !! ** output 4368 !! njmppmax = njmpp for northern procs 4369 !! ndim_rank_ice = number of processors in the northern line 4370 !! nrank_north (ndim_rank_north) = number of the northern procs. 4371 !! ngrp_world = group ID for the world processors 4372 !! ngrp_ice = group ID for the ice processors 4373 !! ncomm_ice = communicator for the ice procs. 4374 !! n_ice_root = number (in the world) of proc 0 in the ice comm. 4375 !! 4376 !! History : 4377 !! ! 03-09 (J.M. Molines, MPI only ) 4378 !!---------------------------------------------------------------------- 4379 #ifdef key_mpp_shmem 4380 CALL ctl_stop( ' mpp_ini_ice not available in SHMEM' ) 4381 # elif key_mpp_mpi 4382 INTEGER, INTENT(in) :: pindic 4383 INTEGER :: ierr 4384 INTEGER :: jproc 4385 INTEGER :: ii,ji 4386 INTEGER, DIMENSION(jpnij) :: kice 4387 INTEGER, DIMENSION(jpnij) :: zwork 4388 INTEGER :: zrank 4389 !!---------------------------------------------------------------------- 4390 4391 ! Look for how many procs with sea-ice 4392 ! 4393 kice = 0 4394 DO jproc=1,jpnij 4395 IF(jproc == narea .AND. pindic .GT. 0) THEN 4396 kice(jproc) = 1 4397 ENDIF 4398 END DO 4399 4400 zwork = 0 4401 CALL MPI_ALLREDUCE( kice, zwork,jpnij, mpi_integer, & 4402 mpi_sum, mpi_comm_opa, ierr ) 4403 ndim_rank_ice = sum(zwork) 4404 4405 ! Allocate the right size to nrank_north 4406 IF(ALLOCATED(nrank_ice)) DEALLOCATE(nrank_ice) 4407 ALLOCATE(nrank_ice(ndim_rank_ice)) 4408 4409 ii = 0 4410 nrank_ice = 0 4411 DO jproc=1,jpnij 4412 IF(zwork(jproc) == 1) THEN 4413 ii = ii + 1 4414 nrank_ice(ii) = jproc -1 4415 ENDIF 4416 END DO 4417 4418 ! Create the world group 4419 CALL MPI_COMM_GROUP(mpi_comm_opa,ngrp_world,ierr) 4420 4421 ! Create the ice group from the world group 4422 CALL MPI_GROUP_INCL(ngrp_world,ndim_rank_ice,nrank_ice,ngrp_ice,ierr) 4423 4424 ! Create the ice communicator , ie the pool of procs with sea-ice 4425 CALL MPI_COMM_CREATE(mpi_comm_opa,ngrp_ice,ncomm_ice,ierr) 4426 4427 ! Find proc number in the world of proc 0 in the north 4428 CALL MPI_GROUP_TRANSLATE_RANKS(ngrp_ice,1,0,ngrp_world,n_ice_root,ierr) 4429 #endif 4430 4431 END SUBROUTINE mpp_ini_ice 4432 4291 4433 4292 4434 SUBROUTINE mpp_ini_north … … 5237 5379 5238 5380 LOGICAL, PUBLIC, PARAMETER :: lk_mpp = .FALSE. !: mpp flag 5381 INTEGER :: ncomm_ice 5239 5382 5240 5383 CONTAINS … … 5248 5391 END SUBROUTINE mppsync 5249 5392 5250 SUBROUTINE mpp_sum_as( parr, kdim ) ! Dummy routine5393 SUBROUTINE mpp_sum_as( parr, kdim, kcom ) ! Dummy routine 5251 5394 REAL , DIMENSION(:) :: parr 5252 5395 INTEGER :: kdim 5253 WRITE(*,*) 'mpp_sum_as: You should not have seen this print! error?', kdim, parr(1) 5396 INTEGER, OPTIONAL :: kcom 5397 WRITE(*,*) 'mpp_sum_as: You should not have seen this print! error?', kdim, parr(1), kcom 5254 5398 END SUBROUTINE mpp_sum_as 5255 5399 5256 SUBROUTINE mpp_sum_a2s( parr, kdim ) ! Dummy routine5400 SUBROUTINE mpp_sum_a2s( parr, kdim, kcom ) ! Dummy routine 5257 5401 REAL , DIMENSION(:,:) :: parr 5258 5402 INTEGER :: kdim 5259 WRITE(*,*) 'mpp_sum_a2s: You should not have seen this print! error?', kdim, parr(1,1) 5403 INTEGER, OPTIONAL :: kcom 5404 WRITE(*,*) 'mpp_sum_a2s: You should not have seen this print! error?', kdim, parr(1,1), kcom 5260 5405 END SUBROUTINE mpp_sum_a2s 5261 5406 5262 SUBROUTINE mpp_sum_ai( karr, kdim ) ! Dummy routine5407 SUBROUTINE mpp_sum_ai( karr, kdim, kcom ) ! Dummy routine 5263 5408 INTEGER, DIMENSION(:) :: karr 5264 5409 INTEGER :: kdim 5265 WRITE(*,*) 'mpp_sum_ai: You should not have seen this print! error?', kdim, karr(1) 5410 INTEGER, OPTIONAL :: kcom 5411 WRITE(*,*) 'mpp_sum_ai: You should not have seen this print! error?', kdim, karr(1), kcom 5266 5412 END SUBROUTINE mpp_sum_ai 5267 5413 5268 SUBROUTINE mpp_sum_s( psca ) ! Dummy routine5414 SUBROUTINE mpp_sum_s( psca, kcom ) ! Dummy routine 5269 5415 REAL :: psca 5270 WRITE(*,*) 'mpp_sum_s: You should not have seen this print! error?', psca 5416 INTEGER, OPTIONAL :: kcom 5417 WRITE(*,*) 'mpp_sum_s: You should not have seen this print! error?', psca, kcom 5271 5418 END SUBROUTINE mpp_sum_s 5272 5419 5273 SUBROUTINE mpp_sum_i( kint ) ! Dummy routine5420 SUBROUTINE mpp_sum_i( kint, kcom ) ! Dummy routine 5274 5421 integer :: kint 5275 WRITE(*,*) 'mpp_sum_i: You should not have seen this print! error?', kint 5422 INTEGER, OPTIONAL :: kcom 5423 WRITE(*,*) 'mpp_sum_i: You should not have seen this print! error?', kint, kcom 5276 5424 END SUBROUTINE mpp_sum_i 5277 5425 5278 SUBROUTINE mppmax_a_real( parr, kdim )5426 SUBROUTINE mppmax_a_real( parr, kdim, kcom ) 5279 5427 REAL , DIMENSION(:) :: parr 5280 5428 INTEGER :: kdim 5281 WRITE(*,*) 'mppmax_a_real: You should not have seen this print! error?', kdim, parr(1) 5429 INTEGER, OPTIONAL :: kcom 5430 WRITE(*,*) 'mppmax_a_real: You should not have seen this print! error?', kdim, parr(1), kcom 5282 5431 END SUBROUTINE mppmax_a_real 5283 5432 5284 SUBROUTINE mppmax_real( psca )5433 SUBROUTINE mppmax_real( psca, kcom ) 5285 5434 REAL :: psca 5286 WRITE(*,*) 'mppmax_real: You should not have seen this print! error?', psca 5435 INTEGER, OPTIONAL :: kcom 5436 WRITE(*,*) 'mppmax_real: You should not have seen this print! error?', psca, kcom 5287 5437 END SUBROUTINE mppmax_real 5288 5438 5289 SUBROUTINE mppmin_a_real( parr, kdim )5439 SUBROUTINE mppmin_a_real( parr, kdim, kcom ) 5290 5440 REAL , DIMENSION(:) :: parr 5291 5441 INTEGER :: kdim 5292 WRITE(*,*) 'mppmin_a_real: You should not have seen this print! error?', kdim, parr(1) 5442 INTEGER, OPTIONAL :: kcom 5443 WRITE(*,*) 'mppmin_a_real: You should not have seen this print! error?', kdim, parr(1), kcom 5293 5444 END SUBROUTINE mppmin_a_real 5294 5445 5295 SUBROUTINE mppmin_real( psca )5446 SUBROUTINE mppmin_real( psca, kcom ) 5296 5447 REAL :: psca 5297 WRITE(*,*) 'mppmin_real: You should not have seen this print! error?', psca 5448 INTEGER, OPTIONAL :: kcom 5449 WRITE(*,*) 'mppmin_real: You should not have seen this print! error?', psca, kcom 5298 5450 END SUBROUTINE mppmin_real 5299 5451 5300 SUBROUTINE mppmax_a_int( karr, kdim )5452 SUBROUTINE mppmax_a_int( karr, kdim ,kcom) 5301 5453 INTEGER, DIMENSION(:) :: karr 5302 5454 INTEGER :: kdim 5455 INTEGER, OPTIONAL :: kcom 5303 5456 WRITE(*,*) 'mppmax_a_int: You should not have seen this print! error?', kdim, karr(1) 5304 5457 END SUBROUTINE mppmax_a_int 5305 5458 5306 SUBROUTINE mppmax_int( kint 5459 SUBROUTINE mppmax_int( kint, kcom) 5307 5460 INTEGER :: kint 5308 WRITE(*,*) 'mppmax_int: You should not have seen this print! error?', kint 5461 INTEGER, OPTIONAL :: kcom 5462 WRITE(*,*) 'mppmax_int: You should not have seen this print! error?', kint, kcom 5309 5463 END SUBROUTINE mppmax_int 5310 5464 5311 SUBROUTINE mppmin_a_int( karr, kdim )5465 SUBROUTINE mppmin_a_int( karr, kdim, kcom ) 5312 5466 INTEGER, DIMENSION(:) :: karr 5313 5467 INTEGER :: kdim 5314 WRITE(*,*) 'mppmin_a_int: You should not have seen this print! error?', kdim, karr(1) 5468 INTEGER, OPTIONAL :: kcom 5469 WRITE(*,*) 'mppmin_a_int: You should not have seen this print! error?', kdim, karr(1), kcom 5315 5470 END SUBROUTINE mppmin_a_int 5316 5471 5317 SUBROUTINE mppmin_int( kint )5472 SUBROUTINE mppmin_int( kint, kcom ) 5318 5473 INTEGER :: kint 5319 WRITE(*,*) 'mppmin_int: You should not have seen this print! error?', kint 5474 INTEGER, OPTIONAL :: kcom 5475 WRITE(*,*) 'mppmin_int: You should not have seen this print! error?', kint, kcom 5320 5476 END SUBROUTINE mppmin_int 5321 5477 … … 5412 5568 END SUBROUTINE mppstop 5413 5569 5570 SUBROUTINE mpp_ini_lim 5571 WRITE(*,*) 'mpp_ini_north: You should not have seen this print! error?' 5572 END SUBROUTINE mpp_ini_lim 5573 5574 SUBROUTINE mpp_comm_free(kcom) 5575 INTEGER :: kcom 5576 WRITE(*,*) 'mpp_comm_free: You should not have seen this print! error?' 5577 END SUBROUTINE mpp_comm_free 5578 5414 5579 #endif 5415 5580 !!----------------------------------------------------------------------
Note: See TracChangeset
for help on using the changeset viewer.