- Timestamp:
- 2018-01-19T18:56:15+01:00 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_merge_2017/NEMOGCM/NEMO/LIM_SRC_3/icedyn_adv_pra.F90
r9123 r9271 38 38 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sxsn , sysn , sxxsn , syysn , sxysn ! snow thickness 39 39 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sxa , sya , sxxa , syya , sxya ! lead fraction 40 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sxc0 , syc0 , sxxc0 , syyc0 , sxyc0 ! snow thermal content41 40 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sxsal, sysal, sxxsal, syysal, sxysal ! ice salinity 42 41 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sxage, syage, sxxage, syyage, sxyage ! ice age 43 42 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: sxopw, syopw, sxxopw, syyopw, sxyopw ! open water in sea ice 43 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: sxc0 , syc0 , sxxc0 , syyc0 , sxyc0 ! snow layers heat content 44 44 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: sxe , sye , sxxe , syye , sxye ! ice layers heat content 45 45 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sxap , syap , sxxap , syyap , sxyap ! melt pond fraction … … 87 87 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zarea 88 88 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: z0opw 89 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: z0ice, z0snw, z0ai, z0 es , z0smi, z0oi89 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: z0ice, z0snw, z0ai, z0smi, z0oi 90 90 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: z0ap , z0vp 91 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) :: z0es 91 92 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) :: z0ei 92 93 !!---------------------------------------------------------------------- … … 94 95 IF( kt == nit000 .AND. lwp ) WRITE(numout,*) '-- ice_dyn_adv_pra: Prather advection scheme' 95 96 ! 96 ALLOCATE( zarea(jpi,jpj) , z0opw(jpi,jpj, 1 ) , & 97 & z0ice(jpi,jpj,jpl) , z0snw(jpi,jpj,jpl) , z0ai(jpi,jpj,jpl) , z0es(jpi,jpj,jpl) , & 98 & z0smi(jpi,jpj,jpl) , z0oi (jpi,jpj,jpl) , z0ap(jpi,jpj,jpl) , z0vp(jpi,jpj,jpl) , & 99 & z0ei (jpi,jpj,nlay_i,jpl) ) 97 ALLOCATE( zarea(jpi,jpj) , z0opw(jpi,jpj, 1 ) , z0ice(jpi,jpj,jpl) , z0snw(jpi,jpj,jpl) , & 98 & z0ai(jpi,jpj,jpl) , z0smi(jpi,jpj,jpl) , z0oi (jpi,jpj,jpl) , z0ap (jpi,jpj,jpl) , z0vp(jpi,jpj,jpl) , & 99 & z0es (jpi,jpj,nlay_s,jpl), z0ei(jpi,jpj,nlay_i,jpl) ) 100 100 ! 101 101 ! --- If ice drift field is too fast, use an appropriate time step for advection (CFL test for stability) --- ! … … 119 119 z0smi(:,:,jl) = psv_i(:,:, jl) * e1e2t(:,:) ! Salt content 120 120 z0oi (:,:,jl) = poa_i(:,:, jl) * e1e2t(:,:) ! Age content 121 z0es (:,:,jl) = pe_s (:,:,1,jl) * e1e2t(:,:) ! Snow heat content 121 DO jk = 1, nlay_s 122 z0es(:,:,jk,jl) = pe_s(:,:,jk,jl) * e1e2t(:,:) ! Snow heat content 123 END DO 122 124 DO jk = 1, nlay_i 123 125 z0ei(:,:,jk,jl) = pe_i(:,:,jk,jl) * e1e2t(:,:) ! Ice heat content … … 158 160 CALL adv_y( zusnit, pv_ice, 0._wp, zarea, z0ai (:,:,jl), sxa (:,:,jl), & 159 161 & sxxa (:,:,jl), sya (:,:,jl), syya (:,:,jl), sxya (:,:,jl) ) 160 CALL adv_x( zusnit, pu_ice, 1._wp, zarea, z0es (:,:,jl), sxc0 (:,:,jl), & !--- snow heat contents --- 161 & sxxc0 (:,:,jl), syc0 (:,:,jl), syyc0 (:,:,jl), sxyc0 (:,:,jl) ) 162 CALL adv_y( zusnit, pv_ice, 0._wp, zarea, z0es (:,:,jl), sxc0 (:,:,jl), & 163 & sxxc0 (:,:,jl), syc0 (:,:,jl), syyc0 (:,:,jl), sxyc0 (:,:,jl) ) 162 DO jk = 1, nlay_s !--- snow heat contents --- 163 CALL adv_x( zusnit, pu_ice, 1._wp, zarea, z0es (:,:,jk,jl), sxc0(:,:,jk,jl), & 164 & sxxc0(:,:,jk,jl), syc0(:,:,jk,jl), syyc0(:,:,jk,jl), sxyc0(:,:,jk,jl) ) 165 CALL adv_y( zusnit, pv_ice, 0._wp, zarea, z0es (:,:,jk,jl), sxc0(:,:,jk,jl), & 166 & sxxc0(:,:,jk,jl), syc0(:,:,jk,jl), syyc0(:,:,jk,jl), sxyc0(:,:,jk,jl) ) 167 END DO 164 168 DO jk = 1, nlay_i !--- ice heat contents --- 165 CALL adv_x( zusnit, pu_ice, 1._wp, zarea, z0ei(:,:,jk,jl), sxe (:,:,jk,jl), & 166 & sxxe(:,:,jk,jl), sye (:,:,jk,jl), & 167 & syye(:,:,jk,jl), sxye(:,:,jk,jl) ) 168 CALL adv_y( zusnit, pv_ice, 0._wp, zarea, z0ei(:,:,jk,jl), sxe (:,:,jk,jl), & 169 & sxxe(:,:,jk,jl), sye (:,:,jk,jl), & 170 & syye(:,:,jk,jl), sxye(:,:,jk,jl) ) 169 CALL adv_x( zusnit, pu_ice, 1._wp, zarea, z0ei(:,:,jk,jl), sxe(:,:,jk,jl), & 170 & sxxe(:,:,jk,jl), sye(:,:,jk,jl), syye(:,:,jk,jl), sxye(:,:,jk,jl) ) 171 CALL adv_y( zusnit, pv_ice, 0._wp, zarea, z0ei(:,:,jk,jl), sxe(:,:,jk,jl), & 172 & sxxe(:,:,jk,jl), sye(:,:,jk,jl), syye(:,:,jk,jl), sxye(:,:,jk,jl) ) 171 173 END DO 172 174 IF ( ln_pnd_H12 ) THEN … … 211 213 CALL adv_x( zusnit, pu_ice, 0._wp, zarea, z0ai (:,:,jl), sxa (:,:,jl), & 212 214 & sxxa (:,:,jl), sya (:,:,jl), syya (:,:,jl), sxya (:,:,jl) ) 213 CALL adv_y( zusnit, pv_ice, 1._wp, zarea, z0es (:,:,jl), sxc0 (:,:,jl), & !--- snow heat contents --- 214 & sxxc0 (:,:,jl), syc0 (:,:,jl), syyc0 (:,:,jl), sxyc0 (:,:,jl) ) 215 CALL adv_x( zusnit, pu_ice, 0._wp, zarea, z0es (:,:,jl), sxc0 (:,:,jl), & 216 & sxxc0 (:,:,jl), syc0 (:,:,jl), syyc0 (:,:,jl), sxyc0 (:,:,jl) ) 215 DO jk = 1, nlay_s !--- snow heat contents --- 216 CALL adv_y( zusnit, pv_ice, 1._wp, zarea, z0es (:,:,jk,jl), sxc0(:,:,jk,jl), & 217 & sxxc0(:,:,jk,jl), syc0(:,:,jk,jl), syyc0(:,:,jk,jl), sxyc0(:,:,jk,jl) ) 218 CALL adv_x( zusnit, pu_ice, 0._wp, zarea, z0es (:,:,jk,jl), sxc0(:,:,jk,jl), & 219 & sxxc0(:,:,jk,jl), syc0(:,:,jk,jl), syyc0(:,:,jk,jl), sxyc0(:,:,jk,jl) ) 220 END DO 217 221 DO jk = 1, nlay_i !--- ice heat contents --- 218 CALL adv_y( zusnit, pv_ice, 1._wp, zarea, z0ei(:,:,jk,jl), sxe (:,:,jk,jl), & 219 & sxxe(:,:,jk,jl), sye (:,:,jk,jl), & 220 & syye(:,:,jk,jl), sxye(:,:,jk,jl) ) 221 CALL adv_x( zusnit, pu_ice, 0._wp, zarea, z0ei(:,:,jk,jl), sxe (:,:,jk,jl), & 222 & sxxe(:,:,jk,jl), sye (:,:,jk,jl), & 223 & syye(:,:,jk,jl), sxye(:,:,jk,jl) ) 222 CALL adv_y( zusnit, pv_ice, 1._wp, zarea, z0ei(:,:,jk,jl), sxe(:,:,jk,jl), & 223 & sxxe(:,:,jk,jl), sye(:,:,jk,jl), syye(:,:,jk,jl), sxye(:,:,jk,jl) ) 224 CALL adv_x( zusnit, pu_ice, 0._wp, zarea, z0ei(:,:,jk,jl), sxe(:,:,jk,jl), & 225 & sxxe(:,:,jk,jl), sye(:,:,jk,jl), syye(:,:,jk,jl), sxye(:,:,jk,jl) ) 224 226 END DO 225 227 IF ( ln_pnd_H12 ) THEN … … 247 249 poa_i(:,:, jl) = z0oi (:,:,jl) * r1_e1e2t(:,:) 248 250 pa_i (:,:, jl) = z0ai (:,:,jl) * r1_e1e2t(:,:) 249 pe_s (:,:,1,jl) = z0es (:,:,jl) * r1_e1e2t(:,:) 251 DO jk = 1, nlay_s 252 pe_s(:,:,jk,jl) = z0es(:,:,jk,jl) * r1_e1e2t(:,:) 253 END DO 250 254 DO jk = 1, nlay_i 251 255 pe_i(:,:,jk,jl) = z0ei(:,:,jk,jl) * r1_e1e2t(:,:) … … 257 261 END DO 258 262 ! 259 DEALLOCATE( zarea , z0opw , z0ice, z0snw , z0ai , z0 es , z0smi , z0oi , z0ap , z0vp, z0ei )263 DEALLOCATE( zarea , z0opw , z0ice, z0snw , z0ai , z0smi , z0oi , z0ap , z0vp , z0es, z0ei ) 260 264 ! 261 265 IF( lrst_ice ) CALL adv_pra_rst( 'WRITE', kt ) !* write Prather fields in the restart file … … 625 629 & sxsn (jpi,jpj,jpl) , sysn (jpi,jpj,jpl) , sxxsn (jpi,jpj,jpl) , syysn (jpi,jpj,jpl) , sxysn (jpi,jpj,jpl) , & 626 630 & sxa (jpi,jpj,jpl) , sya (jpi,jpj,jpl) , sxxa (jpi,jpj,jpl) , syya (jpi,jpj,jpl) , sxya (jpi,jpj,jpl) , & 627 & sxc0 (jpi,jpj,jpl) , syc0 (jpi,jpj,jpl) , sxxc0 (jpi,jpj,jpl) , syyc0 (jpi,jpj,jpl) , sxyc0 (jpi,jpj,jpl) , &628 631 & sxsal(jpi,jpj,jpl) , sysal(jpi,jpj,jpl) , sxxsal(jpi,jpj,jpl) , syysal(jpi,jpj,jpl) , sxysal(jpi,jpj,jpl) , & 629 632 & sxage(jpi,jpj,jpl) , syage(jpi,jpj,jpl) , sxxage(jpi,jpj,jpl) , syyage(jpi,jpj,jpl) , sxyage(jpi,jpj,jpl) , & 630 633 & sxap(jpi,jpj,jpl) , syap (jpi,jpj,jpl) , sxxap (jpi,jpj,jpl) , syyap (jpi,jpj,jpl) , sxyap (jpi,jpj,jpl) , & 631 634 & sxvp(jpi,jpj,jpl) , syvp (jpi,jpj,jpl) , sxxvp (jpi,jpj,jpl) , syyvp (jpi,jpj,jpl) , sxyvp (jpi,jpj,jpl) , & 632 & sxe (jpi,jpj,nlay_i,jpl) , sye (jpi,jpj,nlay_i,jpl) , sxxe(jpi,jpj,nlay_i,jpl) , & 633 & syye(jpi,jpj,nlay_i,jpl) , sxye(jpi,jpj,nlay_i,jpl) , & 635 ! 636 & sxc0 (jpi,jpj,nlay_s,jpl) , syc0 (jpi,jpj,nlay_s,jpl) , sxxc0(jpi,jpj,nlay_s,jpl) , & 637 & syyc0(jpi,jpj,nlay_s,jpl) , sxyc0(jpi,jpj,nlay_s,jpl) , & 638 ! 639 & sxe (jpi,jpj,nlay_i,jpl) , sye (jpi,jpj,nlay_i,jpl) , sxxe (jpi,jpj,nlay_i,jpl) , & 640 & syye (jpi,jpj,nlay_i,jpl) , sxye (jpi,jpj,nlay_i,jpl) , & 634 641 & STAT = ierr ) 635 642 ! … … 689 696 CALL iom_get( numrir, jpdom_autoglo, 'syya' , syya ) 690 697 CALL iom_get( numrir, jpdom_autoglo, 'sxya' , sxya ) 691 ! ! snow thermal content692 CALL iom_get( numrir, jpdom_autoglo, 'sxc0' , sxc0 )693 CALL iom_get( numrir, jpdom_autoglo, 'syc0' , syc0 )694 CALL iom_get( numrir, jpdom_autoglo, 'sxxc0' , sxxc0 )695 CALL iom_get( numrir, jpdom_autoglo, 'syyc0' , syyc0 )696 CALL iom_get( numrir, jpdom_autoglo, 'sxyc0' , sxyc0 )697 698 ! ! ice salinity 698 699 CALL iom_get( numrir, jpdom_autoglo, 'sxsal' , sxsal ) … … 713 714 CALL iom_get( numrir, jpdom_autoglo, 'syyopw', syyopw ) 714 715 CALL iom_get( numrir, jpdom_autoglo, 'sxyopw', sxyopw ) 716 ! ! snow layers heat content 717 DO jk = 1, nlay_s 718 WRITE(zchar1,'(I2.2)') jk 719 znam = 'sxc0'//'_l'//zchar1 ; CALL iom_get( numrir, jpdom_autoglo, znam , z3d ) ; sxc0 (:,:,jk,:) = z3d(:,:,:) 720 znam = 'syc0'//'_l'//zchar1 ; CALL iom_get( numrir, jpdom_autoglo, znam , z3d ) ; syc0 (:,:,jk,:) = z3d(:,:,:) 721 znam = 'sxxc0'//'_l'//zchar1 ; CALL iom_get( numrir, jpdom_autoglo, znam , z3d ) ; sxxc0(:,:,jk,:) = z3d(:,:,:) 722 znam = 'syyc0'//'_l'//zchar1 ; CALL iom_get( numrir, jpdom_autoglo, znam , z3d ) ; syyc0(:,:,jk,:) = z3d(:,:,:) 723 znam = 'sxyc0'//'_l'//zchar1 ; CALL iom_get( numrir, jpdom_autoglo, znam , z3d ) ; sxyc0(:,:,jk,:) = z3d(:,:,:) 724 END DO 715 725 ! ! ice layers heat content 716 DO jk = 1, nlay_i 726 DO jk = 1, nlay_i 717 727 WRITE(zchar1,'(I2.2)') jk 718 728 znam = 'sxe'//'_l'//zchar1 ; CALL iom_get( numrir, jpdom_autoglo, znam , z3d ) ; sxe (:,:,jk,:) = z3d(:,:,:) … … 744 754 sxsn = 0._wp ; sysn = 0._wp ; sxxsn = 0._wp ; syysn = 0._wp ; sxysn = 0._wp ! snow thickness 745 755 sxa = 0._wp ; sya = 0._wp ; sxxa = 0._wp ; syya = 0._wp ; sxya = 0._wp ! lead fraction 746 sxc0 = 0._wp ; syc0 = 0._wp ; sxxc0 = 0._wp ; syyc0 = 0._wp ; sxyc0 = 0._wp ! snow thermal content747 756 sxsal = 0._wp ; sysal = 0._wp ; sxxsal = 0._wp ; syysal = 0._wp ; sxysal = 0._wp ! ice salinity 748 757 sxage = 0._wp ; syage = 0._wp ; sxxage = 0._wp ; syyage = 0._wp ; sxyage = 0._wp ! ice age 749 758 sxopw = 0._wp ; syopw = 0._wp ; sxxopw = 0._wp ; syyopw = 0._wp ; sxyopw = 0._wp ! open water in sea ice 759 sxc0 = 0._wp ; syc0 = 0._wp ; sxxc0 = 0._wp ; syyc0 = 0._wp ; sxyc0 = 0._wp ! snow layers heat content 750 760 sxe = 0._wp ; sye = 0._wp ; sxxe = 0._wp ; syye = 0._wp ; sxye = 0._wp ! ice layers heat content 751 761 IF( ln_pnd_H12 ) THEN … … 783 793 CALL iom_rstput( iter, nitrst, numriw, 'syya' , syya ) 784 794 CALL iom_rstput( iter, nitrst, numriw, 'sxya' , sxya ) 785 ! ! snow thermal content786 CALL iom_rstput( iter, nitrst, numriw, 'sxc0' , sxc0 )787 CALL iom_rstput( iter, nitrst, numriw, 'syc0' , syc0 )788 CALL iom_rstput( iter, nitrst, numriw, 'sxxc0' , sxxc0 )789 CALL iom_rstput( iter, nitrst, numriw, 'syyc0' , syyc0 )790 CALL iom_rstput( iter, nitrst, numriw, 'sxyc0' , sxyc0 )791 795 ! ! ice salinity 792 796 CALL iom_rstput( iter, nitrst, numriw, 'sxsal' , sxsal ) … … 807 811 CALL iom_rstput( iter, nitrst, numriw, 'syyopw', syyopw ) 808 812 CALL iom_rstput( iter, nitrst, numriw, 'sxyopw', sxyopw ) 813 ! ! snow layers heat content 814 DO jk = 1, nlay_s 815 WRITE(zchar1,'(I2.2)') jk 816 znam = 'sxc0'//'_l'//zchar1 ; z3d(:,:,:) = sxc0 (:,:,jk,:) ; CALL iom_rstput( iter, nitrst, numriw, znam , z3d ) 817 znam = 'syc0'//'_l'//zchar1 ; z3d(:,:,:) = syc0 (:,:,jk,:) ; CALL iom_rstput( iter, nitrst, numriw, znam , z3d ) 818 znam = 'sxxc0'//'_l'//zchar1 ; z3d(:,:,:) = sxxc0(:,:,jk,:) ; CALL iom_rstput( iter, nitrst, numriw, znam , z3d ) 819 znam = 'syyc0'//'_l'//zchar1 ; z3d(:,:,:) = syyc0(:,:,jk,:) ; CALL iom_rstput( iter, nitrst, numriw, znam , z3d ) 820 znam = 'sxyc0'//'_l'//zchar1 ; z3d(:,:,:) = sxyc0(:,:,jk,:) ; CALL iom_rstput( iter, nitrst, numriw, znam , z3d ) 821 END DO 809 822 ! ! ice layers heat content 810 DO jk = 1, nlay_i 823 DO jk = 1, nlay_i 811 824 WRITE(zchar1,'(I2.2)') jk 812 825 znam = 'sxe'//'_l'//zchar1 ; z3d(:,:,:) = sxe (:,:,jk,:) ; CALL iom_rstput( iter, nitrst, numriw, znam , z3d )
Note: See TracChangeset
for help on using the changeset viewer.