Changeset 1165
- Timestamp:
- 2008-07-30T16:45:19+02:00 (16 years ago)
- Location:
- branches/dev_003_CPL
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/dev_003_CPL/CONFIG/ORCA2_LIM/EXP00/namelist
r991 r1165 46 46 no = 0 47 47 cexper = "ORCA2" 48 ln_rstart = .false.49 nrstdt = 050 nit000 = 151 nitend = 547552 ndate0 = 01010153 nleapy = 48 ln_rstart = .false. 49 nrstdt = 1 50 nit000 = 76 51 nitend = 150 52 ndate0 =18600106 53 nleapy = 30 54 54 ninist = 0 55 nstock = 547556 nwrite = 547555 nstock = 75 56 nwrite = 450 57 57 ln_dimgnnn = .false. 58 58 / … … 94 94 ! single and multiple processor runs. 95 95 &namctl 96 ln_ctl = 96 ln_ctl = .false. 97 97 nprint = 0 98 98 nictls = 0 … … 212 212 ln_ana = .false. 213 213 ln_flx = .false. 214 ln_blk_clio = . true.214 ln_blk_clio = .false. 215 215 ln_blk_core = .false. 216 ln_cpl = . false.216 ln_cpl = .true. 217 217 nn_ice = 2 218 218 nn_ico_cpl = 0 … … 301 301 &namsbc_cpl 302 302 ! SEND 303 cn_snd_temperature = 'oce only'! 'oce only' 'weighted oce and ice' 'mixed oce-ice'304 cn_snd_albedo = 'none'! 'none' 'weighted ice' 'mixed oce-ice'305 cn_snd_thickness = 'weighted ice and snow'! 'none' 'weighted ice and snow'306 cn_snd_current (1)= 'none' ! 'none' 'oce only' 'weighted oce and ice' 'mixed oce-ice'307 cn_snd_current (2)= 'spherical' ! 'spherical' 'cartesian'308 cn_snd_current (3)= 'eastward-northward' ! 'eastward-northward' or 'local grid'309 cn_snd_current (4)= 'T' ! 'T''U,V'303 cn_snd_temperature= 'weighted oce and ice' ! 'oce only' 'weighted oce and ice' 'mixed oce-ice' 304 cn_snd_albedo = 'weighted ice' ! 'none' 'weighted ice' 'mixed oce-ice' 305 cn_snd_thickness = 'none' ! 'none' 'weighted ice and snow' 306 cn_snd_current_1 = 'none' ! 'none' 'oce only' 'weighted oce and ice' 'mixed oce-ice' 307 cn_snd_current_2 = 'spherical' ! 'spherical' 'cartesian' 308 cn_snd_current_3 = 'eastward-northward' ! 'eastward-northward' or 'local grid' 309 cn_snd_current_4 = 'T' ! 'T''U,V' 310 310 ! RECEIVE 311 311 cn_rcv_w10m = 'coupled' ! 'none' 'coupled' 312 cn_rcv_stress (1) = 'oce and ice'! 'oce only' 'oce and ice' 'mixed oce-ice'313 cn_rcv_stress (2) = 'spherical' ! 'spherical' 'cartesian'314 cn_rcv_stress (3)= 'eastward-northward' ! 'eastward-northward' or 'local grid'315 cn_rcv_stress (4) = 'U,V,F'! 'T' 'U,V' 'U,V,F' 'U,V,I' 'T,F' 'T,I' 'T,U,V'312 cn_rcv_stress_1 = 'oce only' ! 'oce only' 'oce and ice' 'mixed oce-ice' 313 cn_rcv_stress_2 = 'cartesian' ! 'spherical' 'cartesian' 314 cn_rcv_stress_3 = 'eastward-northward' ! 'eastward-northward' or 'local grid' 315 cn_rcv_stress_4 = 'U,V' ! 'T' 'U,V' 'U,V,F' 'U,V,I' 'T,F' 'T,I' 'T,U,V' 316 316 cn_rcv_dqnsdt = 'coupled' ! 'none' 'coupled' 317 cn_rcv_qsr = ' conservative'! 'conservative' 'oce and ice' 'mixed oce-ice'318 cn_rcv_qns = ' conservative'! 'conservative' 'oce and ice' 'mixed oce-ice'317 cn_rcv_qsr = 'oce and ice' ! 'conservative' 'oce and ice' 'mixed oce-ice' 318 cn_rcv_qns = 'oce and ice' ! 'conservative' 'oce and ice' 'mixed oce-ice' 319 319 cn_rcv_emp = 'conservative' ! 'conservative' 'oce and ice' 'mixed oce-ice' 320 cn_rcv_r unoff = 'climato' ! 'coupled' 'climato' 'mixed'321 cn_rcv_cal ving = 'none'! 'none' 'coupled'320 cn_rcv_rnf = 'coupled' ! 'coupled' 'climato' 'mixed' 321 cn_rcv_cal = 'coupled' ! 'none' 'coupled' 322 322 / 323 323 !----------------------------------------------------------------------- -
branches/dev_003_CPL/NEMO/LIM_SRC_2/limsbc_2.F90
r991 r1165 30 30 USE albedo ! albedo parameters 31 31 USE prtctl ! Print control 32 33 !!! >> Arnaud 34 USE cpl_oasis3, ONLY : lk_cpl 35 !!! << Arnaud 32 36 33 37 IMPLICIT NONE … … 83 87 REAL(wp) :: zutau , zvtau ! lead fraction at U- & V-points 84 88 REAL(wp) :: zu_io , zv_io ! 2 components of the ice-ocean velocity 85 REAL(wp), DIMENSION(jpi,jpj) :: zalb ! albedo of ice under overcast sky 86 REAL(wp), DIMENSION(jpi,jpj) :: zalbp ! albedo of ice under clear sky 89 !!! >> Arnaud interface 2D --> 3D 90 REAL(wp), DIMENSION(jpi,jpj,1) :: zalb ! albedo of ice under overcast sky 91 REAL(wp), DIMENSION(jpi,jpj,1) :: zalbp ! albedo of ice under clear sky 92 REAL(wp), DIMENSION(jpi,jpj,1) :: zsist ! surface ice temperature (K) 93 REAL(wp), DIMENSION(jpi,jpj,1) :: zhicif ! ice thickness 94 REAL(wp), DIMENSION(jpi,jpj,1) :: zhsnif ! snow thickness 95 !!! << Arnaud 87 96 REAL(wp) :: zsang, zmod, zfm 88 97 REAL(wp), DIMENSION(jpi,jpj) :: ztio_u, ztio_v ! ocean stress below sea-ice … … 218 227 tn_ice(:,:) = sist(:,:) 219 228 ! Computation of snow/ice and ocean albedo 220 +++ INTERFACE 3D versus 2D 221 CALL albedo_ice( sist, hicif, hsnif, zalbp, zalb ) 222 alb_ice(:,:) = 0.5 * ( zalbp(:,:) + zalb (:,:) ) ! Ice albedo (mean clear and overcast skys) 229 !!! >> Arnaud +++ INTERFACE 3D versus 2D 230 zsist (:,:,1) = sist (:,:) 231 zhicif(:,:,1) = hicif(:,:) ; zhsnif(:,:,1) = hsnif(:,:) 232 CALL albedo_ice( zsist, zhicif, zhsnif, zalbp, zalb ) 233 alb_ice(:,:) = 0.5 * ( zalbp(:,:,1) + zalb (:,:,1) ) ! Ice albedo (mean clear and overcast skys) 234 !!! << Arnaud 223 235 ENDIF 224 236 -
branches/dev_003_CPL/NEMO/LIM_SRC_2/limthd_2.F90
r991 r1165 31 31 USE limtab_2 32 32 USE prtctl ! Print control 33 34 !!! >> Arnaud 35 USE cpl_oasis3, ONLY : lk_cpl 36 !!! << Arnaud 33 37 34 38 IMPLICIT NONE -
branches/dev_003_CPL/NEMO/LIM_SRC_2/limthd_zdf_2.F90
r991 r1165 22 22 USE limistate_2 23 23 USE in_out_manager 24 25 !!! >> Arnaud 26 USE cpl_oasis3, ONLY : lk_cpl 27 !!! << Arnaud 24 28 25 29 IMPLICIT NONE … … 322 326 DO ji = kideb, kiut 323 327 sist_1d(ji) = MIN( ztsmlt(ji) , sist_1d(ji) ) 328 ! +++ dupliquer pour eviter le if dans la boucle 324 329 IF ( .NOT. lk_cpl ) THEN 325 330 qns_ice_1d(ji) = qns_ice_1d(ji) + dqns_ice_1d(ji) * ( sist_1d(ji) - zts_old(ji) ) … … 527 532 zdhssub = parsub * ( qla_ice_1d(ji) / ( rhosn * xsn ) ) * rdt_ice 528 533 ELSE IF (parsub == 1) THEN 534 ! +++ a mettre dans la lecture de la namelist 529 535 CALL ctl_stop( 'In coupled mode, use parsub = 0 or send dqla' ) 530 536 ELSE -
branches/dev_003_CPL/NEMO/OPA_SRC/SBC/cpl_oasis3.F90
r991 r1165 31 31 USE mod_prism_get_proto ! OASIS3 prism module for receiving 32 32 USE mod_prism_grids_writing ! OASIS3 prism module for writing grids 33 USE par_oce ! 33 USE par_oce ! ocean parameters 34 34 USE dom_oce ! ocean space and time domain 35 USE sbccpl36 35 USE in_out_manager ! I/O manager 37 36 USE lib_mpp … … 40 39 PRIVATE 41 40 ! 42 LOGICAL, PUBLIC, PARAMETER :: lk_cpl = .TRUE. ! :coupled flag41 LOGICAL, PUBLIC, PARAMETER :: lk_cpl = .TRUE. ! coupled flag 43 42 INTEGER, PUBLIC :: nlocalComm ! local MPI size 44 43 INTEGER :: ncomp_id ! id returned by prism_init_comp 45 44 INTEGER :: nerror ! return error code 45 46 INTEGER, PUBLIC :: nrcv, nsnd ! Number of received and sent coupling fields 47 48 INTEGER, PARAMETER :: nmaxfld=30 ! Maximum number of coupling fields 49 50 TYPE, PUBLIC :: FLD_CPL ! Type for coupling field information 51 LOGICAL :: laction ! To be coupled or not 52 CHARACTER(len = 8) :: clname ! Name of the coupling field 53 CHARACTER(len = 1) :: clgrid ! Grid type 54 REAL(wp) :: nsgn ! Control of the sign change 55 INTEGER :: nid ! Id of the field 56 END TYPE FLD_CPL 57 58 TYPE(FLD_CPL), DIMENSION(nmaxfld), PUBLIC :: srcv, ssnd ! Coupling fields 46 59 47 60 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: exfld ! Temporary buffer for receiving … … 73 86 !!-------------------------------------------------------------------- 74 87 !! 88 PRINT *,'debut cpl_prism_init' 89 75 90 IF(lwp) WRITE(numout,*) 91 PRINT *,'apres debut cpl_prism_init' 76 92 IF(lwp) WRITE(numout,*) 'cpl_prism_init : initialization in coupled ocean/atmosphere case' 77 93 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~~~~' 78 94 IF(lwp) WRITE(numout,*) 79 95 PRINT *,'apres debut ' 80 96 !------------------------------------------------------------------ 81 97 ! 1st Initialize the PRISM system for the application 82 98 !------------------------------------------------------------------ 83 99 PRINT *,'avant prism_init_comp ' 84 100 CALL prism_init_comp_proto ( ncomp_id, 'oceanx', nerror ) 101 PRINT *,'apres prism_init_comp ' 85 102 IF ( nerror /= PRISM_Ok ) & 86 103 CALL prism_abort_proto (ncomp_id, 'cpl_prism_init', 'Failure in prism_init_comp_proto') … … 91 108 92 109 CALL prism_get_localcomm_proto ( nlocalComm, nerror ) 110 PRINT *,'apres prism_get_local_comm' 93 111 IF ( nerror /= PRISM_Ok ) & 94 112 CALL prism_abort_proto (ncomp_id, 'cpl_prism_init','Failure in prism_get_localcomm_proto' ) … … 160 178 ! ... Announce send variables. 161 179 ! 162 DO ji = 1, jpsnd163 IF ( s cpl_snd(ji)%laction ) THEN164 CALL prism_def_var_proto (s cpl_snd(ji)%nid, scpl_snd(ji)%cname, id_part, (/ 2, 0/), g&180 DO ji = 1, nsnd 181 IF ( ssnd(ji)%laction ) THEN 182 CALL prism_def_var_proto (ssnd(ji)%nid, ssnd(ji)%clname, id_part, (/ 2, 0/), & 165 183 & PRISM_Out , ishape , PRISM_REAL, nerror) 166 184 IF ( nerror /= PRISM_Ok ) THEN 167 WRITE(numout,*) 'Failed to define transient ', ji, TRIM(s cpl_snd(ji)%cname)168 CALL prism_abort_proto ( s cp_rcv(ji)%nid, 'cpl_prism_define', 'Failure in prism_def_var')185 WRITE(numout,*) 'Failed to define transient ', ji, TRIM(ssnd(ji)%clname) 186 CALL prism_abort_proto ( ssnd(ji)%nid, 'cpl_prism_define', 'Failure in prism_def_var') 169 187 ENDIF 170 188 ENDIF … … 173 191 ! ... Announce received variables. 174 192 ! 175 DO ji = 1, jprcv193 DO ji = 1, nrcv 176 194 IF ( srcv(ji)%laction ) THEN 177 CALL prism_def_var_proto ( srcv(ji)%nid, srcv(ji)% name, id_part, (/ 2, 0/), &195 CALL prism_def_var_proto ( srcv(ji)%nid, srcv(ji)%clname, id_part, (/ 2, 0/), & 178 196 & PRISM_In , ishape , PRISM_REAL, nerror) 179 197 IF ( nerror /= PRISM_Ok ) THEN 180 WRITE(numout,*) 'Failed to define transient ', ji, TRIM(srcv(ji)% name)198 WRITE(numout,*) 'Failed to define transient ', ji, TRIM(srcv(ji)%clname) 181 199 CALL prism_abort_proto ( srcv(ji)%nid, 'cpl_prism_define', 'Failure in prism_def_var') 182 200 ENDIF … … 199 217 !! *** ROUTINE cpl_prism_snd *** 200 218 !! 201 !! ** Purpose : - At each coupling time-step,this routine s nds fields219 !! ** Purpose : - At each coupling time-step,this routine sends fields 202 220 !! like sst or ice cover to the coupler or remote application. 203 221 !!---------------------------------------------------------------------- … … 209 227 REAL(wp), DIMENSION(jpi,jpj), INTENT( IN ) :: pdata 210 228 !! 211 !! * Local declarations212 !!213 INTEGER :: ji214 229 !! 215 230 !!-------------------------------------------------------------------- … … 217 232 ! snd data to OASIS3 218 233 ! 219 IF( lk_mpp ) THEN ; CALL prism_put_proto ( rcv(kid)%nid, kstep, pdata(nldi:nlei, nldj:nlej), kinfo )220 ELSE ; CALL prism_put_proto ( rcv(kid)%nid, kstep, pdata , kinfo )234 IF( lk_mpp ) THEN ; CALL prism_put_proto ( ssnd(kid)%nid, kstep, pdata(nldi:nlei, nldj:nlej), kinfo ) 235 ELSE ; CALL prism_put_proto ( ssnd(kid)%nid, kstep, pdata , kinfo ) 221 236 ENDIF 222 237 … … 225 240 & kinfo == PRISM_SentOut .OR. kinfo == PRISM_ToRestOut ) THEN 226 241 WRITE(numout,*) '****************' 227 WRITE(numout,*) 'prism_put_proto: Outgoing ', ssnd(kid)%c name242 WRITE(numout,*) 'prism_put_proto: Outgoing ', ssnd(kid)%clname 228 243 WRITE(numout,*) 'prism_put_proto: ivarid ', ssnd(kid)%nid 229 244 WRITE(numout,*) 'prism_put_proto: kstep ', kstep … … 233 248 WRITE(numout,*) ' - Sum value is ', SUM(pdata) 234 249 WRITE(numout,*) '****************' 235 ENDIF 236 ENDIF 237 238 END SUBROUTINE cpl_prism_snd 250 ENDIF 251 ENDIF 252 END SUBROUTINE cpl_prism_snd 239 253 240 254 … … 260 274 261 275 llaction = .false. 262 IF( kinfo == PRISM_R cvd .OR. kinfo == PRISM_FromRest .OR. &263 kinfo == PRISM_R cvOut .OR. kinfo == PRISM_FromRestOut ) llaction = .TRUE.276 IF( kinfo == PRISM_Recvd .OR. kinfo == PRISM_FromRest .OR. & 277 kinfo == PRISM_RecvOut .OR. kinfo == PRISM_FromRestOut ) llaction = .TRUE. 264 278 265 279 IF ( ln_ctl ) WRITE(numout,*) "llaction, kinfo, kstep, ivarid: " , llaction, kinfo, kstep, srcv(kid)%nid … … 273 287 !--- Fill the overlap areas and extra hallows (mpp) 274 288 !--- check periodicity conditions (all cases) 275 CALL lbc_lnk( pdata, srcv(kid)%c grid, srcv(kid)%nsgn )289 CALL lbc_lnk( pdata, srcv(kid)%clgrid, srcv(kid)%nsgn ) 276 290 277 291 IF ( ln_ctl ) THEN 278 292 WRITE(numout,*) '****************' 279 WRITE(numout,*) 'prism_get_proto: Incoming ', srcv(kid)%c name293 WRITE(numout,*) 'prism_get_proto: Incoming ', srcv(kid)%clname 280 294 WRITE(numout,*) 'prism_get_proto: ivarid ' , srcv(kid)%nid 281 295 WRITE(numout,*) 'prism_get_proto: kstep', kstep … … 285 299 WRITE(numout,*) ' - Sum value is ', SUM(pdata) 286 300 WRITE(numout,*) '****************' 301 call flush(numout) 287 302 ENDIF 288 303 -
branches/dev_003_CPL/NEMO/OPA_SRC/SBC/sbccpl.F90
r991 r1165 32 32 33 33 IMPLICIT NONE 34 35 # include "vectopt_loop_substitute.h90" 34 36 PRIVATE 35 37 36 38 PUBLIC sbc_cpl_snd ! routine called by step.F90 39 PUBLIC sbc_cpl_rcv ! routine called by step.F90 37 40 38 TYPE :: FLD_CPL ! Coupling Namelist field informations 39 LOGICAL :: laction ! 40 CHARACTER(len = 8) :: clname ! 41 CHARACTER(len = 1) :: clgrid ! 42 INTEGER :: nsgn ! 43 END TYPE FLD_CPL 41 INTEGER :: jprcv_qsroce, jprcv_qsrice, jprcv_qsrmix ! Index used for qsr 42 INTEGER :: jprcv_qnsoce, jprcv_qnsice, jprcv_qnsmix ! Index used for qns 43 INTEGER :: jprcv_rain, jprcv_snow, jprcv_tevp, jprcv_ievp, jprcv_tpre, jprcv_spre, jprcv_oemp ! Index used for water flux 44 INTEGER :: jprcv_otx1, jprcv_oty1, jprcv_otz1, jprcv_otx2, jprcv_oty2, jprcv_otz2 ! Index used for wind stress on oce 45 INTEGER :: jprcv_itx1, jprcv_ity1, jprcv_itz1, jprcv_itx2, jprcv_ity2, jprcv_itz2 ! Index used for wind stress on ice 46 INTEGER :: jprcv_w10m ! Index used for 10m wind 47 INTEGER :: jprcv_dqnsdt ! Index used for dqnsdt 48 INTEGER :: jprcv_rnf ! Index used for runoff 49 INTEGER :: jprcv_cal ! Index used for calving 44 50 45 46 TYPE(FLD_CPL):: sn_snd_fice 47 48 49 50 51 52 53 REAL(wp), DIMENSION(jpi,jpj) :: qsr_mix 54 55 56 51 INTEGER :: jpsnd_fice ! Index used for ice fraction 52 INTEGER :: jpsnd_toce, jpsnd_tice, jpsnd_tmix ! Index used for temperature 53 INTEGER :: jpsnd_albice, jpsnd_albmix ! Index used for albedo 54 INTEGER :: jpsnd_tckice, jpsnd_tcksnw ! Index used for thickness 55 INTEGER :: jpsnd_uoce, jpsnd_voce, jpsnd_uice, jpsnd_vice, jpsnd_umix, jpsnd_vmix ! Index used for current velocity 56 57 CHARACTER(len=100) :: cn_snd_temperature, cn_snd_albedo, cn_snd_thickness, & ! Description of coupled mode 58 cn_snd_current_1, cn_snd_current_2, cn_snd_current_3, cn_snd_current_4, & 59 cn_rcv_w10m, cn_rcv_stress_1, cn_rcv_stress_2, cn_rcv_stress_3, & 60 cn_rcv_stress_4,cn_rcv_dqnsdt, cn_rcv_qsr, cn_rcv_qns, cn_rcv_emp, & 61 cn_rcv_rnf, cn_rcv_cal 62 63 CHARACTER(len=100), DIMENSION(4) :: cn_snd_current, cn_rcv_stress 57 64 58 65 !!---------------------------------------------------------------------- … … 62 69 !!---------------------------------------------------------------------- 63 70 64 CONTAINS65 71 CONTAINS 72 66 73 SUBROUTINE sbc_cpl_init 67 68 NAMELIST/namsbc_cpl_rcv/ ... 69 70 71 !!--------------------------------------------------------------------- 72 73 74 75 76 REWIND( numnam ) ! ... read in namlist namsbc_cpl_rcv 77 READ ( numnam, namsbc_cpl_rcv ) 78 79 !------------------------------------- 80 !------------------------------------- 81 ! Define the receive interface 82 !------------------------------------- 83 !------------------------------------- 84 ! 85 ! Read restart of variables for coupling (needed to compute some values from the received data) 74 75 !!! >> Arnaud pour lire freeze, alb_ice et tn_ice dans le restart oasis 76 USE netcdf 77 78 INTEGER :: ncid, varid,ierr 79 !!! << Arnaud 80 81 CHARACTER(len=1), DIMENSION(100) :: cltmp 82 INTEGER :: i 83 84 NAMELIST/namsbc_cpl/ cn_snd_temperature, cn_snd_albedo, cn_snd_thickness, & 85 cn_snd_current_1, cn_snd_current_2, cn_snd_current_3, cn_snd_current_4, & 86 cn_rcv_w10m, cn_rcv_stress_1, cn_rcv_stress_2, cn_rcv_stress_3, & 87 cn_rcv_stress_4, cn_rcv_dqnsdt, cn_rcv_qsr, cn_rcv_qns, cn_rcv_emp, & 88 cn_rcv_rnf, cn_rcv_cal 89 90 91 !!--------------------------------------------------------------------- 92 93 94 REWIND( numnam ) ! ... read in namlist namsbc_cpl_rcv 95 READ ( numnam, namsbc_cpl ) 96 97 cn_snd_current(1)=cn_snd_current_1 ; cn_snd_current(2)=cn_snd_current_2 98 cn_snd_current(3)=cn_snd_current_3 ; cn_snd_current(4)=cn_snd_current_4 99 cn_rcv_stress(1)=cn_rcv_stress_1 ; cn_rcv_stress(2)=cn_rcv_stress_2 100 cn_rcv_stress(3)=cn_rcv_stress_3 ; cn_rcv_stress(4)=cn_rcv_stress_4 101 102 !------------------------------------- 103 !------------------------------------- 104 ! Define the receive interface 105 !------------------------------------- 106 !------------------------------------- 107 ! 108 ! Read restart of variables for coupling (needed to compute some values from the received data) 86 109 87 110 … … 89 112 !!$ quand on n'a pas de restart (a nit000) 90 113 91 92 CALL iom_get( numror, 'freeze' , freeze ) 93 IF ( TRIM(cn_rcv_qsr) == 'mixed oce-ice' ) CALL iom_get( numror, 'alb_ice', alb_ice ) 114 !!! >> Arnaud pour lire freeze, alb_ice et tn_ice dans le restart oasis 115 116 ! CALL iom_get( numror, jpdom_local_full, 'freeze' , freeze ) 117 118 ierr = nf90_OPEN('sstoc.nc',NF90_NOWRITE,ncid) 119 120 ierr = NF90_INQ_VARID(ncid,'OIceFrac',varid) 121 ierr = NF90_GET_VAR(ncid,varid,freeze) 122 123 ierr = NF90_INQ_VARID(ncid,'O_AlbIce',varid) 124 ierr = NF90_GET_VAR(ncid,varid,alb_ice) 125 126 ierr = NF90_INQ_VARID(ncid,'O_TepIce',varid) 127 ierr = NF90_GET_VAR(ncid,varid,tn_ice) 128 129 ierr = NF90_close(ncid) 130 131 !!! << Arnaud 132 133 IF ( TRIM(cn_rcv_qsr) == 'mixed oce-ice' ) CALL iom_get( numror, jpdom_local_full, 'alb_ice', alb_ice ) 94 134 !!!!! 95 135 !!!!! +++ ERIC tu utilises tn_ice dans le calcule de Qns, c'est bien ca??? 96 136 !!!!! 97 IF ( TRIM(cn_rcv_qns) == 'mixed oce-ice' ) CALL iom_get( numror, 'tn_ice' , tn_ice ) 98 99 100 101 102 103 ! default definitions of srcv 104 nrcv = 0 105 srcv(:)%cgrid = 'T' 106 srcv(:)%nsgn = 1 107 108 !------------------------------------- 109 ! Qsr 110 nrcv = nrcv + 1 ; jprcv_qsroce = nrcv ; srcv(nrcv)%cname = 'O_QsrOce' 111 nrcv = nrcv + 1 ; jprcv_qsrice = nrcv ; srcv(nrcv)%cname = 'O_QsrIce' 112 nrcv = nrcv + 1 ; jprcv_qsrmix = nrcv ; srcv(nrcv)%cname = 'O_QsrMix' 113 SELECT CASE (TRIM(cn_rcv_qsr)) 114 CASE( 'conservative' ) ; srcv( (/jprcv_qsrice, jprcv_qsrmix/) )%laction = .TRUE. 115 CASE( 'oce and ice' ) ; srcv( (/jprcv_qsrice, jprcv_qsroce/) )%laction = .TRUE. 116 CASE( 'mixed oce-ice' ) ; srcv( jprcv_qsrmix )%laction = .TRUE. 117 CASE default ; CALL ctl_stop( 'sbc_cpl_init: wrong definition of cn_rcv_qsr' ) 118 END SELECT 119 120 !------------------------------------- 121 ! Qns 122 nrcv = nrcv + 1 ; jprcv_qnsoce = nrcv ; srcv(nrcv)%cname = 'O_QnsOce' 123 nrcv = nrcv + 1 ; jprcv_qnsice = nrcv ; srcv(nrcv)%cname = 'O_QnsIce' 124 nrcv = nrcv + 1 ; jprcv_qnsmix = nrcv ; srcv(nrcv)%cname = 'O_QnsMix' 125 SELECT CASE (TRIM(cn_rcv_qns)) 126 CASE( 'conservative' ) ; srcv( (/jprcv_qnsice, jprcv_qnsmix/) )%laction = .TRUE. 127 CASE( 'oce and ice' ) ; srcv( (/jprcv_qnsice, jprcv_qnsoce/) )%laction = .TRUE. 128 CASE( 'mixed oce-ice' ) ; srcv( jprcv_qnsmix )%laction = .TRUE. 129 CASE default ; CALL ctl_stop( 'sbc_cpl_init: wrong definition of cn_rcv_qns' ) 130 END SELECT 131 132 !------------------------------------- 133 ! emp, tprecip and sprecip 134 nrcv = nrcv + 1 ; jprcv_rain = nrcv ; srcv(nrcv)%cname = 'OIceRain' ! Rain = liquid precipitation 135 nrcv = nrcv + 1 ; jprcv_snow = nrcv ; srcv(nrcv)%cname = 'OIceSnow' 136 nrcv = nrcv + 1 ; jprcv_tevp = nrcv ; srcv(nrcv)%cname = 'OTotEvap' ! total evaporation ( over oce + ice ) 137 nrcv = nrcv + 1 ; jprcv_ievp = nrcv ; srcv(nrcv)%cname = 'OIceEvap' ! evaporation iver ice (sublimation) 138 nrcv = nrcv + 1 ; jprcv_tpre = nrcv ; srcv(nrcv)%cname = 'OIPr-Sub' ! Pr = liquid + solid precipitation 139 nrcv = nrcv + 1 ; jprcv_spre = nrcv ; srcv(nrcv)%cname = 'OISn-Sub' ! Sub = Sublimation = Evap over ice 140 nrcv = nrcv + 1 ; jprcv_oemp = nrcv ; srcv(nrcv)%cname = 'OOEv-OPr' ! 141 SELECT CASE (TRIM(cn_rcv_emp)) 142 CASE( 'conservative' ) ; srcv( (/jprcv_rain, jprcv_snow, jprcv_ievp, jprcv_tevp/) )%laction = .TRUE. 143 CASE( 'oce and ice' ) ; srcv( (/ jprcv_tpre, jprcv_spre, jprcv_oemp/) )%laction = .TRUE. 144 CASE( 'mixed oce-ice' ) ; srcv( (/jprcv_rain, jprcv_spre, jprcv_tevp/) )%laction = .TRUE. 145 CASE default ; CALL ctl_stop( 'sbc_cpl_init: wrong definition of cn_rcv_emp' ) 146 END SELECT 147 148 !------------------------------------- 149 ! wind stress : utau, vtau, utaui_ice, vtaui_ice 150 ! oce stress 151 nrcv = nrcv + 1 ; jprcv_otx1 = nrcv ; srcv(nrcv)%cname = 'O_OTaux1' ! oce tau 1st component on 1st grid 152 nrcv = nrcv + 1 ; jprcv_oty1 = nrcv ; srcv(nrcv)%cname = 'O_OTauy1' ! oce tau 2nd component on 1st grid 153 nrcv = nrcv + 1 ; jprcv_otz1 = nrcv ; srcv(nrcv)%cname = 'O_OTauz1' ! oce tau 3rd component on 1st grid 154 nrcv = nrcv + 1 ; jprcv_otx2 = nrcv ; srcv(nrcv)%cname = 'O_OTaux2' ! oce tau 1st component on 2nd grid 155 nrcv = nrcv + 1 ; jprcv_oty2 = nrcv ; srcv(nrcv)%cname = 'O_OTauy2' ! oce tau 2nd component on 2nd grid 156 nrcv = nrcv + 1 ; jprcv_otz2 = nrcv ; srcv(nrcv)%cname = 'O_OTauz2' ! oce tau 3rd component on 2nd grid 157 ! ice stress 158 nrcv = nrcv + 1 ; jprcv_itx1 = nrcv ; srcv(nrcv)%cname = 'O_ITaux1' ! ice tau 1st component on 1st grid 159 nrcv = nrcv + 1 ; jprcv_ity1 = nrcv ; srcv(nrcv)%cname = 'O_ITauy1' ! ice tau 2nd component on 1st grid 160 nrcv = nrcv + 1 ; jprcv_itz1 = nrcv ; srcv(nrcv)%cname = 'O_ITauz1' ! ice tau 3rd component on 1st grid 161 nrcv = nrcv + 1 ; jprcv_itx2 = nrcv ; srcv(nrcv)%cname = 'O_ITaux2' ! ice tau 1st component on 2nd grid 162 nrcv = nrcv + 1 ; jprcv_ity2 = nrcv ; srcv(nrcv)%cname = 'O_ITauy2' ! ice tau 2nd component on 2nd grid 163 nrcv = nrcv + 1 ; jprcv_itz2 = nrcv ; srcv(nrcv)%cname = 'O_ITauz2' ! ice tau 3rd component on 2nd grid 164 ! change default definition of srcv(:)%nsgn 165 srcv(jprcv_otx1:jprcv_itz2)%nsgn = -1 166 ! change default definition of srcv(:)%cgrid and srcv(:)%laction 167 SELECT CASE (LEN_TRIM(cn_rcv_stress(4))) ! 'T' 'U,V' 'U,V,F' 'U,V,I' 'T,F' 'T,I' 'T,U,V' 168 CASE( 1 ) ! 'T' 169 srcv(jprcv_otx1:jprcv_itz2)%cgrid = cltmp(1) ! all oce and ice components on the same unique grid 170 srcv(jprcv_otx1:jprcv_otz1)%laction = .TRUE. ! oce components on 1 grid 171 srcv(jprcv_itx1:jprcv_itz1)%laction = .TRUE. ! ice components on 1 grid 172 CASE( 3 ) ! 'U,V' 'T,F' 'T,I' 173 cltmp = cn_rcv_stress(4) 174 SELECT CASE (cltmp(1)) 175 CASE( 'T' ) ! 'T,F' 'T,I' 176 srcv(jprcv_otx1:jprcv_otz2)%cgrid = cltmp(1) ! oce and ice tau on 2 grids 177 srcv(jprcv_itx1:jprcv_itz2)%cgrid = cltmp(3) ! but oce(ice) components on the same grid 178 srcv(jprcv_otx1:jprcv_otz1)%laction = .TRUE. ! oce components on 1 grid 179 srcv(jprcv_itx1:jprcv_itz1)%laction = .TRUE. ! ice components on 1 grid 180 CASE( 'U' ) ! 'U,V' 181 IF ( cltmp(3) := 'V' ) THEN CALL ctl_stop( 'sbc_cpl_init: wrong definition of cn_rcv_stress(4)' ) 182 srcv(jprcv_otx1:jprcv_otz1)%cgrid = cltmp(1) ! oce(ice) components on 2 grids 183 srcv(jprcv_otx2:jprcv_otz2)%cgrid = cltmp(3) 184 srcv(jprcv_itx1:jprcv_itz1)%cgrid = cltmp(1) 185 srcv(jprcv_itx2:jprcv_itz2)%cgrid = cltmp(3) 186 srcv(jprcv_otx1:jprcv_itz2)%laction = .TRUE. ! oce(ice) components on 2 grids 187 CASE default ; CALL ctl_stop( 'sbc_cpl_init: wrong definition of cn_rcv_stress(4)' ) 188 END SELECT 189 CASE( 5 ) ! 'U,V,F' 'U,V,I' 'T,U,V' 190 cltmp = cn_rcv_stress(4) 191 SELECT CASE (cltmp(1)) 192 CASE( 'T' ) ! 'T,U,V' 193 srcv(jprcv_otx1:jprcv_otz2)%cgrid = cltmp(1) ! oce components on 1 grid 194 srcv(jprcv_itx1:jprcv_itz1)%cgrid = cltmp(3) ! ice components on 2 grids 195 srcv(jprcv_itx2:jprcv_itz2)%cgrid = cltmp(5) 196 srcv(jprcv_otx1:jprcv_otz1)%laction = .TRUE. ! oce components on 1 grid 197 srcv(jprcv_itx1:jprcv_itz2)%laction = .TRUE. ! ice components on 2 grids 198 CASE( 'U' ) ! 'U,V,F' 'U,V,I' 199 IF ( cltmp(3) := 'V' ) THEN CALL ctl_stop( 'sbc_cpl_init: wrong definition of cn_rcv_stress(4)' ) 200 srcv(jprcv_otx1:jprcv_otz1)%cgrid = cltmp(1) ! oce components on 2 grids 201 srcv(jprcv_otx2:jprcv_otz2)%cgrid = cltmp(3) 202 srcv(jprcv_itx1:jprcv_itz2)%cgrid = cltmp(5) ! ice components on 1 grid 203 srcv(jprcv_otx1:jprcv_otz2)%laction = .TRUE. ! oce components on 2 grids 204 srcv(jprcv_itx1:jprcv_itz1)%laction = .TRUE. ! ice components on 1 grid 205 CASE default ; CALL ctl_stop( 'sbc_cpl_init: wrong definition of cn_rcv_stress(4)' ) 206 END SELECT 137 IF ( TRIM(cn_rcv_qns) == 'mixed oce-ice' ) CALL iom_get( numror, jpdom_local_full, 'tn_ice' , tn_ice ) 138 139 ! default definitions of srcv 140 nrcv = 0 141 srcv(:)%laction = .FALSE. 142 srcv(:)%clgrid = 'T' 143 srcv(:)%nsgn = 1 144 145 !------------------------------------- 146 ! Qsr 147 nrcv = nrcv + 1 ; jprcv_qsroce = nrcv ; srcv(nrcv)%clname = 'O_QsrOce' 148 nrcv = nrcv + 1 ; jprcv_qsrice = nrcv ; srcv(nrcv)%clname = 'O_QsrIce' 149 nrcv = nrcv + 1 ; jprcv_qsrmix = nrcv ; srcv(nrcv)%clname = 'O_QsrMix' 150 SELECT CASE (TRIM(cn_rcv_qsr)) 151 CASE( 'conservative' ) ; srcv( (/jprcv_qsrice, jprcv_qsrmix/) )%laction = .TRUE. 152 CASE( 'oce and ice' ) ; srcv( (/jprcv_qsrice, jprcv_qsroce/) )%laction = .TRUE. 153 CASE( 'mixed oce-ice' ) ; srcv( jprcv_qsrmix )%laction = .TRUE. 154 CASE default ; CALL ctl_stop( 'sbc_cpl_init: wrong definition of cn_rcv_qsr' ) 155 END SELECT 156 157 !------------------------------------- 158 ! Qns 159 nrcv = nrcv + 1 ; jprcv_qnsoce = nrcv ; srcv(nrcv)%clname = 'O_QnsOce' 160 nrcv = nrcv + 1 ; jprcv_qnsice = nrcv ; srcv(nrcv)%clname = 'O_QnsIce' 161 nrcv = nrcv + 1 ; jprcv_qnsmix = nrcv ; srcv(nrcv)%clname = 'O_QnsMix' 162 SELECT CASE (TRIM(cn_rcv_qns)) 163 CASE( 'conservative' ) ; srcv( (/jprcv_qnsice, jprcv_qnsmix/) )%laction = .TRUE. 164 CASE( 'oce and ice' ) ; srcv( (/jprcv_qnsice, jprcv_qnsoce/) )%laction = .TRUE. 165 CASE( 'mixed oce-ice' ) ; srcv( jprcv_qnsmix )%laction = .TRUE. 166 CASE default ; CALL ctl_stop( 'sbc_cpl_init: wrong definition of cn_rcv_qns' ) 167 END SELECT 168 169 !------------------------------------- 170 ! emp, tprecip and sprecip 171 nrcv = nrcv + 1 ; jprcv_rain = nrcv ; srcv(nrcv)%clname = 'OIceRain' ! Rain = liquid precipitation 172 nrcv = nrcv + 1 ; jprcv_snow = nrcv ; srcv(nrcv)%clname = 'OIceSnow' 173 nrcv = nrcv + 1 ; jprcv_tevp = nrcv ; srcv(nrcv)%clname = 'OTotEvap' ! total evaporation ( over oce + ice ) 174 nrcv = nrcv + 1 ; jprcv_ievp = nrcv ; srcv(nrcv)%clname = 'OIceEvap' ! evaporation iver ice (sublimation) 175 nrcv = nrcv + 1 ; jprcv_tpre = nrcv ; srcv(nrcv)%clname = 'OIPr-Sub' ! Pr = liquid + solid precipitation 176 nrcv = nrcv + 1 ; jprcv_spre = nrcv ; srcv(nrcv)%clname = 'OISn-Sub' ! Sub = Sublimation = Evap over ice 177 nrcv = nrcv + 1 ; jprcv_oemp = nrcv ; srcv(nrcv)%clname = 'OOEv-OPr' ! 178 SELECT CASE (TRIM(cn_rcv_emp)) 179 CASE( 'conservative' ) ; srcv( (/jprcv_rain, jprcv_snow, jprcv_ievp, jprcv_tevp/) )%laction = .TRUE. 180 CASE( 'oce and ice' ) ; srcv( (/ jprcv_tpre, jprcv_spre, jprcv_oemp/) )%laction = .TRUE. 181 CASE( 'mixed oce-ice' ) ; srcv( (/jprcv_rain, jprcv_spre, jprcv_tevp/) )%laction = .TRUE. 182 CASE default ; CALL ctl_stop( 'sbc_cpl_init: wrong definition of cn_rcv_emp' ) 183 END SELECT 184 185 186 !------------------------------------- 187 ! wind stress : utau, vtau, utaui_ice, vtaui_ice 188 ! oce stress 189 nrcv = nrcv + 1 ; jprcv_otx1 = nrcv ; srcv(nrcv)%clname = 'O_OTaux1' ! oce tau 1st component on 1st grid 190 nrcv = nrcv + 1 ; jprcv_oty1 = nrcv ; srcv(nrcv)%clname = 'O_OTauy1' ! oce tau 2nd component on 1st grid 191 nrcv = nrcv + 1 ; jprcv_otz1 = nrcv ; srcv(nrcv)%clname = 'O_OTauz1' ! oce tau 3rd component on 1st grid 192 nrcv = nrcv + 1 ; jprcv_otx2 = nrcv ; srcv(nrcv)%clname = 'O_OTaux2' ! oce tau 1st component on 2nd grid 193 nrcv = nrcv + 1 ; jprcv_oty2 = nrcv ; srcv(nrcv)%clname = 'O_OTauy2' ! oce tau 2nd component on 2nd grid 194 nrcv = nrcv + 1 ; jprcv_otz2 = nrcv ; srcv(nrcv)%clname = 'O_OTauz2' ! oce tau 3rd component on 2nd grid 195 ! ice stress 196 nrcv = nrcv + 1 ; jprcv_itx1 = nrcv ; srcv(nrcv)%clname = 'O_ITaux1' ! ice tau 1st component on 1st grid 197 nrcv = nrcv + 1 ; jprcv_ity1 = nrcv ; srcv(nrcv)%clname = 'O_ITauy1' ! ice tau 2nd component on 1st grid 198 nrcv = nrcv + 1 ; jprcv_itz1 = nrcv ; srcv(nrcv)%clname = 'O_ITauz1' ! ice tau 3rd component on 1st grid 199 nrcv = nrcv + 1 ; jprcv_itx2 = nrcv ; srcv(nrcv)%clname = 'O_ITaux2' ! ice tau 1st component on 2nd grid 200 nrcv = nrcv + 1 ; jprcv_ity2 = nrcv ; srcv(nrcv)%clname = 'O_ITauy2' ! ice tau 2nd component on 2nd grid 201 nrcv = nrcv + 1 ; jprcv_itz2 = nrcv ; srcv(nrcv)%clname = 'O_ITauz2' ! ice tau 3rd component on 2nd grid 202 ! change default definition of srcv(:)%nsgn 203 srcv(jprcv_otx1:jprcv_itz2)%nsgn = -1 204 ! change default definition of srcv(:)%clgrid and srcv(:)%laction 205 206 DO i=1,5 207 cltmp(i)= cn_rcv_stress_4(i:i) 208 ENDDO 209 210 SELECT CASE (LEN_TRIM(cn_rcv_stress(4))) ! 'T' 'U,V' 'U,V,F' 'U,V,I' 'T,F' 'T,I' 'T,U,V' 211 CASE( 1 ) ! 'T' 212 srcv(jprcv_otx1:jprcv_itz2)%clgrid = cltmp(1) ! all oce and ice components on the same unique grid 213 srcv(jprcv_otx1:jprcv_otz1)%laction = .TRUE. ! oce components on 1 grid 214 srcv(jprcv_itx1:jprcv_itz1)%laction = .TRUE. ! ice components on 1 grid 215 CASE( 3 ) ! 'U,V' 'T,F' 'T,I' 216 SELECT CASE (cltmp(1)) 217 CASE( 'T' ) ! 'T,F' 'T,I' 218 srcv(jprcv_otx1:jprcv_otz2)%clgrid = cltmp(1) ! oce and ice tau on 2 grids 219 srcv(jprcv_itx1:jprcv_itz2)%clgrid = cltmp(3) ! but oce(ice) components on the same grid 220 srcv(jprcv_otx1:jprcv_otz1)%laction = .TRUE. ! oce components on 1 grid 221 srcv(jprcv_itx1:jprcv_itz1)%laction = .TRUE. ! ice components on 1 grid 222 CASE( 'U' ) ! 'U,V' 223 IF ( cltmp(3) /= 'V' ) CALL ctl_stop( 'sbc_cpl_init: wrong definition of cn_rcv_stress(4)' ) 224 srcv(jprcv_otx1:jprcv_otz1)%clgrid = cltmp(1) ! oce(ice) components on 2 grids 225 srcv(jprcv_otx2:jprcv_otz2)%clgrid = cltmp(3) 226 srcv(jprcv_itx1:jprcv_itz1)%clgrid = cltmp(1) 227 srcv(jprcv_itx2:jprcv_itz2)%clgrid = cltmp(3) 228 srcv(jprcv_otx1:jprcv_itz2)%laction = .TRUE. ! oce(ice) components on 2 grids 207 229 CASE default ; CALL ctl_stop( 'sbc_cpl_init: wrong definition of cn_rcv_stress(4)' ) 208 230 END SELECT 209 ! force .FALSE. to 3rd component for spherical coodinates 210 IF ( TRIM(cn_rcv_stress(2)) == 'spherical' ) srcv((/jprcv_otz1, jprcv_otz2, jprcv_itz1, jprcv_itz2/))%laction = .FALSE. 211 ! force .FALSE. to ice components if not 'oce and ice' 212 IF ( TRIM(cn_rcv_stress(1)) /= 'oce and ice' ) srcv(jprcv_itx1:jprcv_itz2)%laction = .FALSE. 213 214 !------------------------------------- 215 ! 10 m wind speed 216 nrcv = nrcv + 1 ; jprcv_w10m = nrcv ; srcv(nrcv)%cname = 'O_Wind10' 217 IF ( TRIM(cn_rcv_w10m) == 'coupled' ) srcv(jprcv_w10m)%laction = .TRUE. 218 ! +++ ---> A brancher et a blinder dans tke si TRIM(cn_rcv_w10m) == 'none' 219 220 !------------------------------------- 221 ! d(Qns)/d(T) 222 nrcv = nrcv + 1 ; jprcv_dqnsdt = nrcv ; srcv(nrcv)%cname = 'O_dQnsdT' 223 IF ( TRIM(cn_rcv_dqnsdt) == 'coupled' ) srcv(jprcv_dqnsdt)%laction = .TRUE. 224 225 !------------------------------------- 226 ! Runoff 227 nrcv = nrcv + 1 ; jprcv_rnf = nrcv ; srcv(nrcv)%cname = 'O_Runoff' 228 IF ( TRIM(cn_rcv_rnf) /= 'climato' ) srcv(jprcv_rnf)%laction = .TRUE. 229 ! +++ ---> A brancher 230 231 !------------------------------------- 232 ! Calving 233 nrcv = nrcv + 1 ; jprcv_cal = nrcv ; srcv(nrcv)%cname = 'OCalving' 234 IF ( TRIM(cn_rcv_cal) == 'coupled' ) srcv(jprcv_cal)%laction = .TRUE. 235 ! +++ ---> A brancher 236 237 !------------------------------------- 238 ! fraction of net shortwave radiation which is not absorbed in the 239 ! thin surface layer and penetrates inside the ice cover 240 ! ( Maykut and Untersteiner, 1971 ; Elbert anbd Curry, 1993 ) 241 ! Since cloud cover catm not transmitted from atmosphere 242 ! ===> defined as constant value -> definition done in sbc_cpl_init 231 CASE( 5 ) ! 'U,V,F' 'U,V,I' 'T,U,V' 232 SELECT CASE (cltmp(1)) 233 CASE( 'T' ) ! 'T,U,V' 234 srcv(jprcv_otx1:jprcv_otz2)%clgrid = cltmp(1) ! oce components on 1 grid 235 srcv(jprcv_itx1:jprcv_itz1)%clgrid = cltmp(3) ! ice components on 2 grids 236 srcv(jprcv_itx2:jprcv_itz2)%clgrid = cltmp(5) 237 srcv(jprcv_otx1:jprcv_otz1)%laction = .TRUE. ! oce components on 1 grid 238 srcv(jprcv_itx1:jprcv_itz2)%laction = .TRUE. ! ice components on 2 grids 239 CASE( 'U' ) ! 'U,V,F' 'U,V,I' 240 IF ( cltmp(3) /= 'V' ) CALL ctl_stop( 'sbc_cpl_init: wrong definition of cn_rcv_stress(4)' ) 241 srcv(jprcv_otx1:jprcv_otz1)%clgrid = cltmp(1) ! oce components on 2 grids 242 srcv(jprcv_otx2:jprcv_otz2)%clgrid = cltmp(3) 243 srcv(jprcv_itx1:jprcv_itz2)%clgrid = cltmp(5) ! ice components on 1 grid 244 srcv(jprcv_otx1:jprcv_otz2)%laction = .TRUE. ! oce components on 2 grids 245 srcv(jprcv_itx1:jprcv_itz1)%laction = .TRUE. ! ice components on 1 grid 246 CASE default ; CALL ctl_stop( 'sbc_cpl_init: wrong definition of cn_rcv_stress(4)' ) 247 END SELECT 248 CASE default ; CALL ctl_stop( 'sbc_cpl_init: wrong definition of cn_rcv_stress(4)' ) 249 END SELECT 250 ! force .FALSE. to 3rd component for spherical coodinates 251 IF ( TRIM(cn_rcv_stress(2)) == 'spherical' ) srcv((/jprcv_otz1, jprcv_otz2, jprcv_itz1, jprcv_itz2/))%laction = .FALSE. 252 ! force .FALSE. to ice components if not 'oce and ice' 253 IF ( TRIM(cn_rcv_stress(1)) /= 'oce and ice' ) srcv(jprcv_itx1:jprcv_itz2)%laction = .FALSE. 254 255 !------------------------------------- 256 ! 10 m wind speed 257 nrcv = nrcv + 1 ; jprcv_w10m = nrcv ; srcv(nrcv)%clname = 'O_Wind10' 258 IF ( TRIM(cn_rcv_w10m) == 'coupled' ) srcv(jprcv_w10m)%laction = .TRUE. 259 ! +++ ---> A brancher et a blinder dans tke si TRIM(cn_rcv_w10m) == 'none' 260 261 !------------------------------------- 262 ! d(Qns)/d(T) 263 nrcv = nrcv + 1 ; jprcv_dqnsdt = nrcv ; srcv(nrcv)%clname = 'O_dQnsdT' 264 IF ( TRIM(cn_rcv_dqnsdt) == 'coupled' ) srcv(jprcv_dqnsdt)%laction = .TRUE. 265 266 !------------------------------------- 267 ! Runoff 268 nrcv = nrcv + 1 ; jprcv_rnf = nrcv ; srcv(nrcv)%clname = 'O_Runoff' 269 IF ( TRIM(cn_rcv_rnf) /= 'climato' ) srcv(jprcv_rnf)%laction = .TRUE. 270 ! +++ ---> A brancher 271 272 !------------------------------------- 273 ! Calving 274 nrcv = nrcv + 1 ; jprcv_cal = nrcv ; srcv(nrcv)%clname = 'OCalving' 275 IF ( TRIM(cn_rcv_cal) == 'coupled' ) srcv(jprcv_cal)%laction = .TRUE. 276 ! +++ ---> A brancher 277 278 !------------------------------------- 279 ! fraction of net shortwave radiation which is not absorbed in the 280 ! thin surface layer and penetrates inside the ice cover 281 ! ( Maykut and Untersteiner, 1971 ; Elbert anbd Curry, 1993 ) 282 ! Since cloud cover catm not transmitted from atmosphere 283 ! ===> defined as constant value -> definition done in sbc_cpl_init 243 284 !!$ catm(:,:) = 0. 244 285 !!$ zcatm1(:,:) = 1.0 - catm(:,:) ! fractional cloud cover 245 286 !!$ fr1_i0(:,:) = 0.18 * zcatm1(:,:) + 0.35 * catm(:,:) 246 287 !!$ fr2_i0(:,:) = 0.82 * zcatm1(:,:) + 0.65 * catm(:,:) 247 fr1_i0(:,:) = 0.18 248 fr2_i0(:,:) = 0.82 249 250 ! 251 !------------------------------------- 252 !------------------------------------- 253 ! Define the send interface 254 !------------------------------------- 255 !------------------------------------- 256 ! 257 ! default definitions of nsnd 258 nsnd = 0 259 ssnd(:)%cgrid = 'T' 260 ssnd(:)%nsgn = 1 288 fr1_i0(:,:) = 0.18 289 fr2_i0(:,:) = 0.82 290 291 ! 292 !------------------------------------- 293 !------------------------------------- 294 ! Define the send interface 295 !------------------------------------- 296 !------------------------------------- 297 ! 298 ! default definitions of nsnd 299 nsnd = 0 300 ssnd(:)%laction = .FALSE. 301 ssnd(:)%clgrid = 'T' 302 ssnd(:)%nsgn = 1 261 303 262 !------------------------------------- 263 ! Ice fraction 264 nsnd = nsnd + 1 ; jpsnd_fice = nsnd ; ssnd(nsnd)%cname = 'OIceFrac' 265 ssnd(jpsnd_fice)%laction = .TRUE. 304 !------------------------------------- 305 ! Ice fraction 306 nsnd = nsnd + 1 ; jpsnd_fice = nsnd ; ssnd(nsnd)%clname = 'OIceFrac' 307 ssnd(jpsnd_fice)%laction = .TRUE. 308 309 !------------------------------------- 310 ! T surf 311 nsnd = nsnd + 1 ; jpsnd_toce = nsnd ; ssnd(nsnd)%clname = 'O_SSTSST' 312 nsnd = nsnd + 1 ; jpsnd_tice = nsnd ; ssnd(nsnd)%clname = 'O_TepIce' 313 nsnd = nsnd + 1 ; jpsnd_tmix = nsnd ; ssnd(nsnd)%clname = 'O_TepMix' 314 SELECT CASE (TRIM(cn_snd_temperature)) 315 CASE( 'oce only' ) ; ssnd( jpsnd_toce )%laction = .TRUE. 316 CASE( 'weighted oce and ice' ) ; ssnd( (/jpsnd_toce, jpsnd_tice/) )%laction = .TRUE. 317 CASE( 'mixed oce-ice' ) ; ssnd( jpsnd_tmix )%laction = .TRUE. 318 END SELECT 319 320 !------------------------------------- 321 ! Albedo 322 nsnd = nsnd + 1 ; jpsnd_albice = nsnd ; ssnd(nsnd)%clname = 'O_AlbIce' 323 nsnd = nsnd + 1 ; jpsnd_albmix = nsnd ; ssnd(nsnd)%clname = 'O_AlbMix' 324 SELECT CASE (TRIM(cn_snd_albedo)) 325 CASE( 'none' ) ! nothing to do 326 CASE( 'weighted ice' ) ; ssnd(jpsnd_albice)%laction = .TRUE. 327 CASE( 'mixed oce-ice' ) ; ssnd(jpsnd_albmix)%laction = .TRUE. 328 END SELECT 266 329 267 !------------------------------------- 268 ! T surf 269 nsnd = nsnd + 1 ; jpsnd_toce = nsnd ; ssnd(nsnd)%cname = 'O_SSTSST' 270 nsnd = nsnd + 1 ; jpsnd_tice = nsnd ; ssnd(nsnd)%cname = 'O_TepIce' 271 nsnd = nsnd + 1 ; jpsnd_tmix = nsnd ; ssnd(nsnd)%cname = 'O_TepMix' 272 SELECT CASE (TRIM(cn_snd_temperature)) 273 CASE( 'oce only' ) ; ssnd( jpsnd_toce )%laction = .TRUE. 274 CASE( 'weighted oce and ice' ) ; ssnd( (/jpsnd_toce, jpsnd_tice/) )%laction = .TRUE. 275 CASE( 'mixed oce-ice' ) ; ssnd( jpsnd_tmix )%laction = .TRUE. 276 END SELECT 277 278 !------------------------------------- 279 ! Albedo 280 nsnd = nsnd + 1 ; jpsnd_albice = nsnd ; ssnd(nsnd)%cname = 'O_AlbIce' 281 nsnd = nsnd + 1 ; jpsnd_albmix = nsnd ; ssnd(nsnd)%cname = 'O_AlbMix' 282 SELECT CASE (TRIM(cn_snd_albedo)) 283 CASE( 'none' ) ! nothing to do 284 CASE( 'weighted ice' ) ; ssnd(jpsnd_albice)%laction = .TRUE. 285 CASE( 'mixed oce-ice' ) ; ssnd(jpsnd_albmix)%laction = .TRUE. 286 END SELECT 330 !------------------------------------- 331 ! Thickness 332 nsnd = nsnd + 1 ; jpsnd_tckice = nsnd ; ssnd(nsnd)%clname = 'O_IceTck' 333 nsnd = nsnd + 1 ; jpsnd_tcksnw = nsnd ; ssnd(nsnd)%clname = 'O_SnwTck' 334 IF ( TRIM(cn_snd_thickness) == 'weighted ice and snow' ) ssnd( (/jpsnd_tckice, jpsnd_tcksnw/) )%laction = .TRUE. 287 335 288 !------------------------------------- 289 ! Thickness 290 nsnd = nsnd + 1 ; jpsnd_tckice = nsnd ; ssnd(nsnd)%cname = 'O_IceTck' 291 nsnd = nsnd + 1 ; jpsnd_tcksnw = nsnd ; ssnd(nsnd)%cname = 'O_SnwTck' 292 IF ( TRIM(cn_snd_thickness) == 'weighted ice and snow' ) ssnd( (/jpsnd_tckice, jpsnd_tcksnw/) )%laction = .TRUE. 293 294 !------------------------------------- 295 ! Surface current 296 nsnd = nsnd + 1 ; jpsnd_uoce = nsnd ; ssnd(nsnd)%cname = 'O_UN_Oce' 297 nsnd = nsnd + 1 ; jpsnd_voce = nsnd ; ssnd(nsnd)%cname = 'O_VN_OcE' 298 nsnd = nsnd + 1 ; jpsnd_uice = nsnd ; ssnd(nsnd)%cname = 'O_UN_Ice' 299 nsnd = nsnd + 1 ; jpsnd_vice = nsnd ; ssnd(nsnd)%cname = 'O_VN_IcE' 300 nsnd = nsnd + 1 ; jpsnd_umix = nsnd ; ssnd(nsnd)%cname = 'O_UN_Mix' 301 nsnd = nsnd + 1 ; jpsnd_vmix = nsnd ; ssnd(nsnd)%cname = 'O_VN_Mix' 302 ssnd(jpsnd_uoce:jpsnd_vmix)%nsgn = -1 303 SELECT CASE (TRIM(cn_snd_current(1))) 304 CASE( 'none' ) ! nothing to do 305 CASE( 'oce only' ) ; ssnd( (/jpsnd_uoce, jpsnd_voce /) )%laction = .TRUE. 306 CASE( 'weighted oce and ice' ) ; ssnd( (/jpsnd_uoce, jpsnd_voce, jpsnd_uice, jpsnd_vice/) )%laction = .TRUE. 307 CASE( 'mixed oce-ice' ) ; ssnd( (/jpsnd_umix, jpsnd_vmix /) )%laction = .TRUE. 308 END SELECT 309 310 ! 311 !------------------------------------- 312 !------------------------------------- 313 CALL cpl_prism_define 314 !------------------------------------- 315 !------------------------------------- 316 ! 336 !------------------------------------- 337 ! Surface current 338 nsnd = nsnd + 1 ; jpsnd_uoce = nsnd ; ssnd(nsnd)%clname = 'O_UN_Oce' 339 nsnd = nsnd + 1 ; jpsnd_voce = nsnd ; ssnd(nsnd)%clname = 'O_VN_OcE' 340 nsnd = nsnd + 1 ; jpsnd_uice = nsnd ; ssnd(nsnd)%clname = 'O_UN_Ice' 341 nsnd = nsnd + 1 ; jpsnd_vice = nsnd ; ssnd(nsnd)%clname = 'O_VN_IcE' 342 nsnd = nsnd + 1 ; jpsnd_umix = nsnd ; ssnd(nsnd)%clname = 'O_UN_Mix' 343 nsnd = nsnd + 1 ; jpsnd_vmix = nsnd ; ssnd(nsnd)%clname = 'O_VN_Mix' 344 ssnd(jpsnd_uoce:jpsnd_vmix)%nsgn = -1 345 SELECT CASE (TRIM(cn_snd_current(1))) 346 CASE( 'none' ) ! nothing to do 347 CASE( 'oce only' ) ; ssnd( (/jpsnd_uoce, jpsnd_voce /) )%laction = .TRUE. 348 CASE( 'weighted oce and ice' ) ; ssnd( (/jpsnd_uoce, jpsnd_voce, jpsnd_uice, jpsnd_vice/) )%laction = .TRUE. 349 CASE( 'mixed oce-ice' ) ; ssnd( (/jpsnd_umix, jpsnd_vmix /) )%laction = .TRUE. 350 END SELECT 351 ! 352 !------------------------------------- 353 !------------------------------------- 354 CALL cpl_prism_define 355 !------------------------------------- 356 !------------------------------------- 357 ! 317 358 318 359 END SUBROUTINE sbc_cpl_init 319 360 320 321 322 361 SUBROUTINE sbc_cpl_rcv( kt ) 323 324 IF( kt == nit000 ) CALL sbc_cpl_init 325 326 isec = ( kt - nit000 ) * NINT(rdttra(1)) ! date of exchanges 327 328 !------------------------------------- 329 ! Qsr : we must get qsr and qsr_ice 330 IF ( srcv(jprcv_qsroce)%laction ) CALL cpl_prism_rcv( jprcv_qsroce, isec, qsr , info ) 331 IF ( srcv(jprcv_qsrice)%laction ) CALL cpl_prism_rcv( jprcv_qsrice, isec, qsr_ice, info ) 332 IF ( srcv(jprcv_qsrmix)%laction ) CALL cpl_prism_rcv( jprcv_qsrmix, isec, qsr_mix, info ) 333 SELECT CASE (TRIM(cn_rcv_qsr)) 334 CASE( 'conservative' ) 335 qsr(:,:) = ( qsr_mix(:,:) - freeze(:,:) * qsr_ice(:,:) ) / (1. - freeze(:,:)) 336 CASE( 'oce and ice' ) 337 ! nothing to do 338 CASE( 'mixed oce-ice' ) 339 ztmp(:,:) = qsr_mix(:,:) / (1. - ( 0.065*(1. - freeze(:,:)) + freeze(:,:)*alb_ice(:,:)) ) 362 363 INTEGER :: kt, isec, info, ji, jj 364 365 !------------------------------------- 366 ! Temporary buffers for receiving 367 368 REAL(wp), DIMENSION(jpi,jpj) :: ztmp 369 REAL(wp), DIMENSION(jpi,jpj), SAVE :: qns_mix, qns_tmp, qns_ice_tmp 370 REAL(wp), DIMENSION(jpi,jpj), SAVE :: qsr_mix, qsr_tmp, qsr_ice_tmp 371 REAL(wp), DIMENSION(jpi,jpj), SAVE :: zsnow, zrain, ztevp, zievp, tprecip_tmp, sprecip_tmp, emp_tmp 372 REAL(wp), DIMENSION(jpi,jpj), SAVE :: zotx1, zoty1, zotz1, zotx2, zoty2, zotz2 373 REAL(wp), DIMENSION(jpi,jpj), SAVE :: zitx1, zity1, zitz1, zitx2, zity2, zitz2 374 REAL(wp), DIMENSION(jpi,jpj) :: ztmpx1, ztmpx2, ztmpy1, ztmpy2 375 REAL(wp), DIMENSION(jpi,jpj), SAVE :: wind10_tmp, dqns_ice_tmp, rnfcpl_tmp, ocalving_tmp 376 377 IF( kt == nit000 ) CALL sbc_cpl_init 378 379 isec = ( kt - nit000 ) * NINT(rdttra(1)) ! date of exchanges 380 381 !------------------------------------- 382 ! Qsr : we must get qsr and qsr_ice 383 IF ( srcv(jprcv_qsroce)%laction ) CALL cpl_prism_rcv( jprcv_qsroce, isec, qsr_tmp , info ) 384 IF ( srcv(jprcv_qsrice)%laction ) CALL cpl_prism_rcv( jprcv_qsrice, isec, qsr_ice_tmp, info ) 385 IF ( srcv(jprcv_qsrmix)%laction ) CALL cpl_prism_rcv( jprcv_qsrmix, isec, qsr_mix, info ) 386 387 388 !!! Peut etre utiliser 389 !!! IF ( srcv(jprcv_qsrmix)%laction ) qsr(:,:) = ( qsr_mix(:,:) - freeze(:,:) * qsr_ice(:,:) ) / (1. - freeze(:,:)) 390 !!! IF (( srcv(jprcv_qsroce)%laction ) .and. ( srcv(jprcv_qsrice)%laction )) then 391 !!! ztmp(:,:) = qsr_mix(:,:) / (1. - ( 0.065*(1. - freeze(:,:)) + freeze(:,:)*alb_ice(:,:))) 392 !!! qsr_ice(:,:) = ztmp(:,:) * (1. - alb_ice(:,:)) 393 !!! qsr (:,:) = ztmp(:,:) * (1. - 0.065) 394 !!! endif 395 396 SELECT CASE (TRIM(cn_rcv_qsr)) 397 CASE( 'conservative' ) 398 qsr(:,:) = ( qsr_mix(:,:) - freeze(:,:) * qsr_ice_tmp(:,:) ) / (1. - freeze(:,:)) 399 qsr_ice(:,:) = qsr_ice_tmp(:,:) 400 CASE( 'oce and ice' ) 401 qsr(:,:) = qsr_tmp(:,:) 402 qsr_ice(:,:) = qsr_ice_tmp(:,:) 403 CASE( 'mixed oce-ice' ) 404 ztmp(:,:) = qsr_mix(:,:) / (1. - ( 0.065*(1. - freeze(:,:)) + freeze(:,:)*alb_ice(:,:))) 340 405 qsr_ice(:,:) = ztmp(:,:) * (1. - alb_ice(:,:)) 341 406 qsr (:,:) = ztmp(:,:) * (1. - 0.065) 342 END SELECT 343 344 !------------------------------------- 345 ! Qns : we must get qns and qns_ice 346 IF ( srcv(jprcv_qnsoce)%laction ) CALL cpl_prism_rcv( jprcv_qnsoce, isec, qns , info ) 347 IF ( srcv(jprcv_qnsice)%laction ) CALL cpl_prism_rcv( jprcv_qnsice, isec, qns_ice, info ) 348 IF ( srcv(jprcv_qnsmix)%laction ) CALL cpl_prism_rcv( jprcv_qnsmix, isec, qns_mix, info ) 349 SELECT CASE (TRIM(cn_rcv_qns)) 350 CASE( 'conservative' ) 351 qns(:,:) = ( qns_mix(:,:) - freeze(:,:) * qns_ice(:,:) ) / (1. - freeze(:,:)) 352 CASE( 'oce and ice' ) 353 ! nothing to do 354 CASE( 'mixed oce-ice' ) 407 END SELECT 408 409 !------------------------------------- 410 ! Qns : we must get qns and qns_ice 411 IF ( srcv(jprcv_qnsoce)%laction ) CALL cpl_prism_rcv( jprcv_qnsoce, isec, qns_tmp , info ) 412 IF ( srcv(jprcv_qnsice)%laction ) CALL cpl_prism_rcv( jprcv_qnsice, isec, qns_ice_tmp, info ) 413 IF ( srcv(jprcv_qnsmix)%laction ) CALL cpl_prism_rcv( jprcv_qnsmix, isec, qns_mix, info ) 414 SELECT CASE (TRIM(cn_rcv_qns)) 415 CASE( 'conservative' ) 416 qns(:,:) = ( qns_mix(:,:) - freeze(:,:) * qns_ice_tmp(:,:) ) / (1. - freeze(:,:)) 417 qns_ice(:,:) = qns_ice_tmp(:,:) 418 CASE( 'oce and ice' ) 419 qns(:,:) = qns_tmp(:,:) 420 qns_ice(:,:) = qns_ice_tmp(:,:) 421 CASE( 'mixed oce-ice' ) 355 422 !!!!! 356 423 !!!!! +++ ERIC il faut que tu mettes les bonnes formules... … … 358 425 !!$ qns_ice(:,:) = ... 359 426 !!$ qns (:,:) = ... 360 361 362 363 364 365 366 367 368 369 370 371 IF ( srcv(jprcv_tpre)%laction ) CALL cpl_prism_rcv( jprcv_tpre, isec, tprecip, info ) ! see above372 IF ( srcv(jprcv_spre)%laction ) CALL cpl_prism_rcv( jprcv_spre, isec, sprecip, info ) ! see above373 IF ( srcv(jprcv_oemp)%laction ) CALL cpl_prism_rcv( jprcv_oemp, isec, emp , info ) ! see above374 375 427 END SELECT 428 429 !------------------------------------- 430 ! Precipitations and Evaporation: we must get emp tprecip and sprecip 431 ! sprecip = snow_ice - evap_ice 432 ! tprecip = ( rain_ice + snow_ice ) - evap_ice 433 ! emp = emp_oce = evap_oce - ( rain_oce + snow_oce ) ... runoff??? ... calving??? 434 IF ( srcv(jprcv_snow)%laction ) CALL cpl_prism_rcv( jprcv_snow, isec, zsnow , info ) ! snow 435 IF ( srcv(jprcv_rain)%laction ) CALL cpl_prism_rcv( jprcv_rain, isec, zrain , info ) ! Rain = liquid precipitation 436 IF ( srcv(jprcv_tevp)%laction ) CALL cpl_prism_rcv( jprcv_tevp, isec, ztevp , info ) ! total evaporation (over oce + ice) 437 IF ( srcv(jprcv_ievp)%laction ) CALL cpl_prism_rcv( jprcv_ievp, isec, zievp , info ) ! evaporation over ice (sublimation) 438 IF ( srcv(jprcv_tpre)%laction ) CALL cpl_prism_rcv( jprcv_tpre, isec, tprecip_tmp, info ) ! see above 439 IF ( srcv(jprcv_spre)%laction ) CALL cpl_prism_rcv( jprcv_spre, isec, sprecip_tmp, info ) ! see above 440 IF ( srcv(jprcv_oemp)%laction ) CALL cpl_prism_rcv( jprcv_oemp, isec, emp_tmp , info ) ! see above 441 SELECT CASE (TRIM(cn_rcv_emp)) 442 CASE( 'conservative' ) 376 443 sprecip(:,:) = zsnow(:,:) - zievp(:,:) 377 tprecip(:,:) = zrain(:,:) + sprecip(,:)378 emp(:,:) = ( ztevp(:,:) - zievp(:,:)*(1. - freeze(:,:)) )/freeze(:,:) - tprecip(:,:)379 CASE( 'oce and ice' )380 ! nothing to do381 CASE( 'mixed oce-ice' )382 444 tprecip(:,:) = zrain(:,:) + sprecip(:,:) 383 emp(:,:) = ztevp(:,:) - ( tprecip(:,:) + sprecip(:,:) ) 384 END SELECT 385 386 !------------------------------------- 387 ! wind stress : we must get utau, vtau, utaui_ice, vtaui_ice 388 ! oce stress 389 IF ( srcv(jprcv_otx1)%laction ) CALL cpl_prism_rcv( jprcv_otx1, isec, zotx1, info ) ! oce tau 1st component on 1st grid 390 IF ( srcv(jprcv_oty1)%laction ) CALL cpl_prism_rcv( jprcv_oty1, isec, zoty1, info ) ! oce tau 2nd component on 1st grid 391 IF ( srcv(jprcv_otz1)%laction ) CALL cpl_prism_rcv( jprcv_otz1, isec, zotz1, info ) ! oce tau 3rd component on 1st grid 392 IF ( srcv(jprcv_otx2)%laction ) CALL cpl_prism_rcv( jprcv_otx2, isec, zotx2, info ) ! oce tau 1st component on 2nd grid 393 IF ( srcv(jprcv_oty2)%laction ) CALL cpl_prism_rcv( jprcv_oty2, isec, zoty2, info ) ! oce tau 2nd component on 2nd grid 394 IF ( srcv(jprcv_otz2)%laction ) CALL cpl_prism_rcv( jprcv_otz2, isec, zotz2, info ) ! oce tau 3rd component on 2nd grid 395 ! ice stress 396 IF ( srcv(jprcv_itx1)%laction ) CALL cpl_prism_rcv( jprcv_itx1, isec, zitx1, info ) ! ice tau 1st component on 1st grid 397 IF ( srcv(jprcv_ity1)%laction ) CALL cpl_prism_rcv( jprcv_ity1, isec, zity1, info ) ! ice tau 2nd component on 1st grid 398 IF ( srcv(jprcv_itz1)%laction ) CALL cpl_prism_rcv( jprcv_itz1, isec, zitz1, info ) ! ice tau 3rd component on 1st grid 399 IF ( srcv(jprcv_itx2)%laction ) CALL cpl_prism_rcv( jprcv_itx2, isec, zitx2, info ) ! ice tau 1st component on 2nd grid 400 IF ( srcv(jprcv_ity2)%laction ) CALL cpl_prism_rcv( jprcv_ity2, isec, zity2, info ) ! ice tau 2nd component on 2nd grid 401 IF ( srcv(jprcv_itz2)%laction ) CALL cpl_prism_rcv( jprcv_itz2, isec, zitz2, info ) ! ice tau 3rd component on 2nd grid 402 ! cartesian to spherical coordinates -> 3 components to 2 components 403 IF ( TRIM(cn_rcv_stress(2)) == 'cartesian' ) THEN 445 !!! >> Arnaud pour seb et eric : il me semble qu il y a une erreur emp(:,:) = ( ztevp(:,:) - zievp(:,:)*(1. - freeze(:,:)) )/freeze(:,:) - tprecip(:,:) 446 emp(:,:) = ( ztevp(:,:) - zievp(:,:)*freeze(:,:))/(1. - freeze(:,:)) - tprecip(:,:) 447 !!! << Arnaud 448 CASE( 'oce and ice' ) 449 tprecip(:,:) = tprecip_tmp(:,:) 450 sprecip(:,:) = sprecip_tmp(:,:) 451 emp(:,:) = emp_tmp(:,:) 452 CASE( 'mixed oce-ice' ) 453 tprecip(:,:) = zrain(:,:) + sprecip_tmp(:,:) 454 emp(:,:) = ztevp(:,:) - ( tprecip(:,:) + sprecip_tmp(:,:) ) 455 END SELECT 456 457 !------------------------------------- 458 ! wind stress : we must get utau, vtau, utaui_ice, vtaui_ice 459 ! oce stress 460 IF ( srcv(jprcv_otx1)%laction ) CALL cpl_prism_rcv( jprcv_otx1, isec, zotx1, info ) ! oce tau 1st component on 1st grid 461 IF ( srcv(jprcv_oty1)%laction ) CALL cpl_prism_rcv( jprcv_oty1, isec, zoty1, info ) ! oce tau 2nd component on 1st grid 462 IF ( srcv(jprcv_otz1)%laction ) CALL cpl_prism_rcv( jprcv_otz1, isec, zotz1, info ) ! oce tau 3rd component on 1st grid 463 IF ( srcv(jprcv_otx2)%laction ) CALL cpl_prism_rcv( jprcv_otx2, isec, zotx2, info ) ! oce tau 1st component on 2nd grid 464 IF ( srcv(jprcv_oty2)%laction ) CALL cpl_prism_rcv( jprcv_oty2, isec, zoty2, info ) ! oce tau 2nd component on 2nd grid 465 IF ( srcv(jprcv_otz2)%laction ) CALL cpl_prism_rcv( jprcv_otz2, isec, zotz2, info ) ! oce tau 3rd component on 2nd grid 466 ! ice stress 467 IF ( srcv(jprcv_itx1)%laction ) CALL cpl_prism_rcv( jprcv_itx1, isec, zitx1, info ) ! ice tau 1st component on 1st grid 468 IF ( srcv(jprcv_ity1)%laction ) CALL cpl_prism_rcv( jprcv_ity1, isec, zity1, info ) ! ice tau 2nd component on 1st grid 469 IF ( srcv(jprcv_itz1)%laction ) CALL cpl_prism_rcv( jprcv_itz1, isec, zitz1, info ) ! ice tau 3rd component on 1st grid 470 IF ( srcv(jprcv_itx2)%laction ) CALL cpl_prism_rcv( jprcv_itx2, isec, zitx2, info ) ! ice tau 1st component on 2nd grid 471 IF ( srcv(jprcv_ity2)%laction ) CALL cpl_prism_rcv( jprcv_ity2, isec, zity2, info ) ! ice tau 2nd component on 2nd grid 472 IF ( srcv(jprcv_itz2)%laction ) CALL cpl_prism_rcv( jprcv_itz2, isec, zitz2, info ) ! ice tau 3rd component on 2nd grid 473 ! cartesian to spherical coordinates -> 3 components to 2 components 474 IF ( TRIM(cn_rcv_stress(2)) == 'cartesian' ) THEN 404 475 ! wind stress over ocean 405 SELECT CASE (srcv(jprcv_otx1)%c grid)476 SELECT CASE (srcv(jprcv_otx1)%clgrid) 406 477 CASE( 'T' ) 407 CALL geo2oce ( zotx1, zoty1, zotz1, 'T', glamt, gphit, ztmpx1, ztmpy1 ) ! 1st and 2nd components on the same grid478 CALL geo2oce ( zotx1, zoty1, zotz1, 't', glamt, gphit, ztmpx1, ztmpy1 ) ! 1st and 2nd components on the same grid 408 479 CASE( 'F' ) 409 CALL geo2oce ( zotx1, zoty1, zotz1, 'F', glamf, gphif, ztmpx1, ztmpy1 ) ! 1st and 2nd components on the same grid480 CALL geo2oce ( zotx1, zoty1, zotz1, 'f', glamf, gphif, ztmpx1, ztmpy1 ) ! 1st and 2nd components on the same grid 410 481 CASE( 'U' ) 411 CALL geo2oce ( zotx1, zoty1, zotz1, 'U', glamu, gphiu, ztmpx1, ztmpy1 ) ! 1st and 2nd components on the 1st grid412 CALL geo2oce ( zotx2, zoty2, zotz2, 'V', glamv, gphiv, ztmpx2, ztmpy2 ) ! 1st and 2nd components on the 2nd grid413 zotx2(:,:) = ztmpx2(:,:) ! overwrite 1st component on the 2nd grid414 zoty2(:,:) = ztmpy2(:,:) ! overwrite 2nd component on the 2nd grid482 CALL geo2oce ( zotx1, zoty1, zotz1, 'u', glamu, gphiu, ztmpx1, ztmpy1 ) ! 1st and 2nd components on the 1st grid 483 CALL geo2oce ( zotx2, zoty2, zotz2, 'v', glamv, gphiv, ztmpx2, ztmpy2 ) ! 1st and 2nd components on the 2nd grid 484 zotx2(:,:) = ztmpx2(:,:) ! overwrite 1st component on the 2nd grid 485 zoty2(:,:) = ztmpy2(:,:) ! overwrite 2nd component on the 2nd grid 415 486 END SELECT 416 487 zotx1(:,:) = ztmpx1(:,:) ! overwrite 1st component on the 1st grid … … 418 489 ! wind stress over ice 419 490 IF ( srcv(jprcv_itx1)%laction ) THEN 420 SELECT CASE (srcv(jprcv_itx1)%cgrid)421 CASE( 'T' )422 CALL geo2oce ( zitx1, zity1, zitz1, 'T', glamt, gphit, ztmpx1, ztmpy1 ) ! 1st and 2nd comp. on the same grid423 CASE( 'F' )424 CALL geo2oce ( zitx1, zity1, zitz1, 'F', glamf, gphif, ztmpx1, ztmpy1 ) ! 1st and 2nd comp. on the same grid425 CASE( 'U' )426 CALL geo2oce ( zitx1, zity1, zitz1, 'U', glamu, gphiu, ztmpx1, ztmpy1 ) ! 1st and 2nd comp. on the 1st grid427 CALL geo2oce ( zitx2, zity2, zitz2, 'V', glamv, gphiv, ztmpx2, ztmpy2 ) ! 1st and 2nd comp. on the 2nd grid428 zitx2(:,:) = ztmpx2(:,:) ! overwrite 1st comp. on the 2nd grid429 zity2(:,:) = ztmpy2(:,:) ! overwrite 2nd comp. on the 2nd grid430 END SELECT431 zitx1(:,:) = ztmpx1(:,:) ! overwrite 1st comp. on the 1st grid432 zity1(:,:) = ztmpy1(:,:) ! overwrite 2nd comp. on the 2nd grid491 SELECT CASE (srcv(jprcv_itx1)%clgrid) 492 CASE( 'T' ) 493 CALL geo2oce ( zitx1, zity1, zitz1, 't', glamt, gphit, ztmpx1, ztmpy1 ) ! 1st and 2nd comp. on the same grid 494 CASE( 'F' ) 495 CALL geo2oce ( zitx1, zity1, zitz1, 'f', glamf, gphif, ztmpx1, ztmpy1 ) ! 1st and 2nd comp. on the same grid 496 CASE( 'U' ) 497 CALL geo2oce ( zitx1, zity1, zitz1, 'u', glamu, gphiu, ztmpx1, ztmpy1 ) ! 1st and 2nd comp. on the 1st grid 498 CALL geo2oce ( zitx2, zity2, zitz2, 'v', glamv, gphiv, ztmpx2, ztmpy2 ) ! 1st and 2nd comp. on the 2nd grid 499 zitx2(:,:) = ztmpx2(:,:) ! overwrite 1st comp. on the 2nd grid 500 zity2(:,:) = ztmpy2(:,:) ! overwrite 2nd comp. on the 2nd grid 501 END SELECT 502 zitx1(:,:) = ztmpx1(:,:) ! overwrite 1st comp. on the 1st grid 503 zity1(:,:) = ztmpy1(:,:) ! overwrite 2nd comp. on the 2nd grid 433 504 ENDIF 434 435 436 437 438 call rot_rep( zotx1, zoty1, srcv(jprcv_otx1)%cgrid, 'en->i', ztmpx1 ) ! 1st component on the 1st grid505 ENDIF 506 507 ! 'eastward-northward' to 'local grid' axes -> totate the components 508 IF ( TRIM(cn_rcv_stress(3)) == 'eastward-northward' ) THEN ! Oce component 509 CALL rot_rep( zotx1, zoty1, srcv(jprcv_otx1)%clgrid, 'en->i', ztmpx1 ) ! 1st component on the 1st grid 439 510 zotx1(:,:) = ztmpx1(:,:) ! overwrite 1st component on the 1st grid 440 IF ( srcv(jprcv_otx2)%laction ) then441 call rot_rep( zotx2, zoty2, srcv(jprcv_otx2)%cgrid, 'en->j', ztmpy2 ) ! 2nd component on the 2nd grid442 zoty2(:,:) = ztmpy2(:,:) ! overwrite 2nd component on the 2nd grid511 IF ( srcv(jprcv_otx2)%laction ) THEN 512 CALL rot_rep( zotx2, zoty2, srcv(jprcv_otx2)%clgrid, 'en->j', ztmpy2 ) ! 2nd component on the 2nd grid 513 zoty2(:,:) = ztmpy2(:,:) ! overwrite 2nd component on the 2nd grid 443 514 ELSE 444 call rot_rep( zotx1, zoty1, srcv(jprcv_otx1)%cgrid, 'en->j', ztmpy1 ) ! 2nd component on the 1st grid445 zoty1(:,:) = ztmpy1(:,:) ! overwrite 2nd component on the 1st grid515 CALL rot_rep( zotx1, zoty1, srcv(jprcv_otx1)%clgrid, 'en->j', ztmpy1 ) ! 2nd component on the 1st grid 516 zoty1(:,:) = ztmpy1(:,:) ! overwrite 2nd component on the 1st grid 446 517 ENDIF 447 518 IF ( srcv(jprcv_itx1)%laction ) THEN ! Ice component 448 call rot_rep( zitx1, zity1, srcv(jprcv_itx1)%cgrid, 'en->i', ztmpx1 ) ! 1st component on the 1st grid449 zitx1(:,:) = ztmpx1(:,:) ! overwrite 1st component on the 1st grid450 IF ( srcv(jprcv_itx2)%laction ) THEN451 call rot_rep( zitx2, zity2, srcv(jprcv_itx2)%cgrid, 'en->j', ztmpy2 ) ! 2nd component on the 2nd grid452 zity2(:,:) = ztmpy2(:,:) ! overwrite 2nd component on the 2nd grid453 ELSE454 call rot_rep( zitx1, zity1, srcv(jprcv_itx1)%cgrid, 'en->j', ztmpy1 ) ! 2nd component on the 1st grid455 zity1(:,:) = ztmpy1(:,:) ! overwrite 2nd component on the 1st grid456 ENDIF519 CALL rot_rep( zitx1, zity1, srcv(jprcv_itx1)%clgrid, 'en->i', ztmpx1 ) ! 1st component on the 1st grid 520 zitx1(:,:) = ztmpx1(:,:) ! overwrite 1st component on the 1st grid 521 IF ( srcv(jprcv_itx2)%laction ) THEN 522 CALL rot_rep( zitx2, zity2, srcv(jprcv_itx2)%clgrid, 'en->j', ztmpy2 ) ! 2nd component on the 2nd grid 523 zity2(:,:) = ztmpy2(:,:) ! overwrite 2nd component on the 2nd grid 524 ELSE 525 CALL rot_rep( zitx1, zity1, srcv(jprcv_itx1)%clgrid, 'en->j', ztmpy1 ) ! 2nd component on the 1st grid 526 zity1(:,:) = ztmpy1(:,:) ! overwrite 2nd component on the 1st grid 527 ENDIF 457 528 ENDIF 458 459 460 461 IF ( srcv(jprcv_otx1)%cgrid == 'T' ) THEN529 ENDIF 530 531 ! oce stress must be on U,V grids 532 IF ( srcv(jprcv_otx1)%clgrid == 'T' ) THEN 462 533 DO jj = 2, jpjm1 463 464 465 466 534 DO ji = fs_2, fs_jpim1 ! vector opt. 535 utau(ji,jj) = 0.5 * ( zotx1(ji,jj) + zotx1(ji+1,jj ) ) ! T -> U grid 536 vtau(ji,jj) = 0.5 * ( zoty1(ji,jj) + zoty1(ji ,jj+1) ) ! T -> V grid 537 END DO 467 538 END DO 468 539 CALL lbc_lnk( utau, 'U', -1. ) ; CALL lbc_lnk( vtau, 'V', -1. ) 469 540 ELSE 470 541 utau(:,:) = zotx1(:,:) 471 542 vtau(:,:) = zoty2(:,:) 472 473 474 475 543 ENDIF 544 545 ! make sure we have stress over ice 546 IF ( TRIM(cn_rcv_stress(1)) /= 'oce and ice' ) THEN 476 547 zitx1(:,:) = zotx1(:,:) ! 1st component on the 1st grid 477 548 IF ( srcv(jprcv_otx2)%laction ) THEN ; zity2(:,:) = zoty2(:,:) ! 2nd component on the 2nd grid 478 549 ELSE ; zity1(:,:) = zoty1(:,:) ! 2nd component on the 1st grid 479 550 ENDIF 480 srcv(jprcv_itx1)%c grid = srcv(jprcv_otx1)%cgrid ! update grid of the ice component481 482 483 484 SELECT CASE ( srcv(jprcv_itx1)%cgrid )485 551 srcv(jprcv_itx1)%clgrid = srcv(jprcv_otx1)%clgrid ! update grid of the ice component 552 ENDIF 553 554 ! ice stress must be on I grid 555 SELECT CASE ( srcv(jprcv_itx1)%clgrid ) 556 CASE( 'U' ) 486 557 DO jj = 2, jpjm1 487 488 489 490 558 DO ji = fs_2, fs_jpim1 ! vector opt. 559 utaui_ice(ji,jj) = 0.5 * ( zitx1(ji-1,jj ) + zitx1(ji-1,jj-1) ) ! U -> I grid 560 vtaui_ice(ji,jj) = 0.5 * ( zity2(ji ,jj-1) + zity2(ji-1,jj-1) ) ! V -> I grid 561 END DO 491 562 END DO 492 563 CALL lbc_lnk( utaui_ice, 'I', -1. ) ; CALL lbc_lnk( vtaui_ice, 'I', -1. ) 493 564 CASE( 'F' ) 494 565 DO jj = 2, jpjm1 495 496 497 498 566 DO ji = fs_2, fs_jpim1 ! vector opt. 567 utaui_ice(ji,jj) = zitx1(ji-1,jj-1) ! F -> I grid 568 vtaui_ice(ji,jj) = zity1(ji-1,jj-1) ! F -> I grid 569 END DO 499 570 END DO 500 571 CALL lbc_lnk( utaui_ice, 'I', -1. ) ; CALL lbc_lnk( vtaui_ice, 'I', -1. ) 501 572 CASE( 'T' ) 502 573 DO jj = 2, jpjm1 503 504 505 506 574 DO ji = fs_2, fs_jpim1 ! vector opt. 575 utaui_ice(ji,jj) = 0.25 * ( zitx1(ji,jj) + zitx1(ji-1,jj) + zitx1(ji,jj-1) + zitx1(ji-1,jj-1) ) ! T -> I grid 576 vtaui_ice(ji,jj) = 0.25 * ( zity1(ji,jj) + zity1(ji-1,jj) + zity1(ji,jj-1) + zity1(ji-1,jj-1) ) ! T -> I grid 577 END DO 507 578 END DO 508 579 CALL lbc_lnk( utaui_ice, 'I', -1. ) ; CALL lbc_lnk( vtaui_ice, 'I', -1. ) 509 580 CASE( 'I' ) 510 581 utaui_ice(:,:) = zitx1(:,:) 511 582 vtaui_ice(:,:) = zity1(:,:) 512 END SELECT 513 514 !------------------------------------- 515 ! 10 m wind speed 516 ! +++ ---> blinder dans tke si TRIM(cn_rcv_w10m) == 'none' 517 !!$ +++ IF ( srcv(jprcv_w10m )%laction ) CALL cpl_prism_rcv( jprcv_dqnsdt, isec, wind10, info ) 518 519 !------------------------------------- 520 ! d(Qns)/d(T) 521 IF ( srcv(jprcv_dqnsdt)%laction ) CALL cpl_prism_rcv( jprcv_dqnsdt, isec, dqns_ice, info ) 522 523 !------------------------------------- 524 ! Runoff 525 IF ( srcv(jprcv_rnf )%laction ) CALL cpl_prism_rcv( jprcv_rnf , isec, rnfcpl, info ) 526 527 !------------------------------------- 528 ! Calving 529 IF ( srcv(jprcv_cal )%laction ) CALL cpl_prism_rcv( jprcv_cal , isec, ocalving, info ) 530 531 ! fraction of net shortwave radiation which is not absorbed in the 532 ! thin surface layer and penetrates inside the ice cover 533 ! ( Maykut and Untersteiner, 1971 ; Elbert anbd Curry, 1993 ) 534 !------------------------------------------------------------------ 535 ! Since cloud cover catm not transmitted from atmosphere 536 ! ===> defined as constant value -> definition done in sbc_cpl_init 537 583 END SELECT 584 585 586 !------------------------------------- 587 ! 10 m wind speed 588 ! +++ ---> blinder dans tke si TRIM(cn_rcv_w10m) == 'none' 589 IF ( srcv(jprcv_w10m )%laction ) CALL cpl_prism_rcv( jprcv_w10m, isec, wind10_tmp, info ) 590 !!! wind10m(:,:) = wind10_tmp(:,:) 591 592 !------------------------------------- 593 ! d(Qns)/d(T) 594 IF ( srcv(jprcv_dqnsdt)%laction ) CALL cpl_prism_rcv( jprcv_dqnsdt, isec, dqns_ice_tmp, info ) 595 dqns_ice(:,:) = dqns_ice_tmp(:,:) 596 597 !------------------------------------- 598 ! Runoff 599 IF ( srcv(jprcv_rnf )%laction ) CALL cpl_prism_rcv( jprcv_rnf , isec, rnfcpl_tmp, info ) 600 rnfcpl(:,:) = rnfcpl_tmp(:,:) 601 602 !------------------------------------- 603 ! Calving 604 IF ( srcv(jprcv_cal )%laction ) CALL cpl_prism_rcv( jprcv_cal , isec, ocalving_tmp, info ) 605 ocalving(:,:) = ocalving_tmp(:,:) 606 607 ! fraction of net shortwave radiation which is not absorbed in the 608 ! thin surface layer and penetrates inside the ice cover 609 ! ( Maykut and Untersteiner, 1971 ; Elbert anbd Curry, 1993 ) 610 !------------------------------------------------------------------ 611 ! Since cloud cover catm not transmitted from atmosphere 612 ! ===> defined as constant value -> definition done in sbc_cpl_init 613 538 614 END SUBROUTINE sbc_cpl_rcv 539 615 540 616 SUBROUTINE sbc_cpl_snd( kt ) 541 542 isec = ( kt - nit000 ) * NINT(rdttra(1)) ! date of exxhanges 543 544 !------------------------------------- 545 ! Ice fraction 546 IF ( ssnd(jpsnd_fice)%laction ) CALL cpl_prism_snd( jpsnd_fice, isec, freeze, info ) 547 548 !------------------------------------- 549 ! T surf 550 ztmp(:,:) = tn(:,:,1) + rt0 551 SELECT CASE (TRIM(cn_snd_temperature)) 552 CASE( 'oce only' ) ! nothing to do 553 CASE( 'weighted oce and ice' ) ; ztmp = ztmp(:,:) * (1. - freeze(:,:)) 554 CASE( 'mixed oce-ice' ) ; ztmp = ztmp(:,:) * (1. - freeze(:,:)) + tn_ice(:,:)*freeze(:,:) 555 END SELECT 556 IF ( ssnd(jpsnd_toce)%laction ) CALL cpl_prism_snd( jpsnd_toce, isec, ztmp, info ) 557 IF ( ssnd(jpsnd_tice)%laction ) CALL cpl_prism_snd( jpsnd_tice, isec, tn_ice(:,:) * freeze(:,:), info ) 558 IF ( ssnd(jpsnd_tmix)%laction ) CALL cpl_prism_snd( jpsnd_tmix, isec, ztmp, info ) 559 560 !------------------------------------- 561 ! Albedo 562 IF ( ssnd(jpsnd_albice)%laction ) CALL cpl_prism_snd( jpsnd_albice, isec, alb_ice(:,:) * freeze(:,:), info ) 563 IF ( ssnd(jpsnd_albmix)%laction ) THEN 617 618 USE oce, ONLY : tn 619 USE phycst, ONLY : rt0 620 621 INTEGER :: kt, isec, info 622 REAL(wp), DIMENSION(jpi,jpj) :: ztmp 623 624 isec = ( kt - nit000 ) * NINT(rdttra(1)) ! date of exchanges 625 626 !------------------------------------- 627 ! Ice fraction 628 IF ( ssnd(jpsnd_fice)%laction ) CALL cpl_prism_snd( jpsnd_fice, isec, freeze, info ) 629 630 !------------------------------------- 631 ! T surf 632 ztmp(:,:) = tn(:,:,1) + rt0 633 SELECT CASE (TRIM(cn_snd_temperature)) 634 CASE( 'oce only' ) ! nothing to do 635 CASE( 'weighted oce and ice' ) ; ztmp = ztmp(:,:) * (1. - freeze(:,:)) 636 CASE( 'mixed oce-ice' ) ; ztmp = ztmp(:,:) * (1. - freeze(:,:)) + tn_ice(:,:)*freeze(:,:) 637 END SELECT 638 IF ( ssnd(jpsnd_toce)%laction ) CALL cpl_prism_snd( jpsnd_toce, isec, ztmp, info ) 639 IF ( ssnd(jpsnd_tice)%laction ) CALL cpl_prism_snd( jpsnd_tice, isec, tn_ice(:,:) * freeze(:,:), info ) 640 IF ( ssnd(jpsnd_tmix)%laction ) CALL cpl_prism_snd( jpsnd_tmix, isec, ztmp, info ) 641 642 !------------------------------------- 643 ! Albedo 644 IF ( ssnd(jpsnd_albice)%laction ) CALL cpl_prism_snd( jpsnd_albice, isec, alb_ice(:,:) * freeze(:,:), info ) 645 IF ( ssnd(jpsnd_albmix)%laction ) THEN 564 646 !!!!! +++ ERIC ztmp(:,:) = albedo de l'ocean a definir... 565 647 CALL cpl_prism_snd( jpsnd_albmix, isec, ztmp(:,:) * (1. - freeze(:,:)) + alb_ice(:,:) * freeze(:,:), info ) 566 648 ENDIF 567 649 568 !------------------------------------- 569 ! Thickness 570 IF ( ssnd(jpsnd_tckice)%laction ) CALL cpl_prism_snd( jpsnd_tckice, isec, tckice(:,:) * freeze(:,:), info ) 571 IF ( ssnd(jpsnd_tcksnw)%laction ) CALL cpl_prism_snd( jpsnd_tcksnw, isec, tcksnw(:,:) * freeze(:,:), info ) 572 573 650 !------------------------------------- 651 ! Thickness 652 IF ( ssnd(jpsnd_tckice)%laction ) CALL cpl_prism_snd( jpsnd_tckice, isec, tckice(:,:) * freeze(:,:), info ) 653 IF ( ssnd(jpsnd_tcksnw)%laction ) CALL cpl_prism_snd( jpsnd_tcksnw, isec, tcksnw(:,:) * freeze(:,:), info ) 574 654 575 !------------------------------------- 576 ! Surface current 577 578 +++ seb ecriture des restarts... 579 655 !------------------------------------- 656 ! Surface current 657 658 !!! +++ seb ecriture des restarts... 580 659 581 660 END SUBROUTINE sbc_cpl_snd 582 661 583 584 585 586 587 662 #else 588 663 !!---------------------------------------------------------------------- … … 596 671 597 672 !!====================================================================== 598 673 END MODULE sbccpl -
branches/dev_003_CPL/NEMO/OPA_SRC/SBC/sbcice_lim_2.F90
r991 r1165 128 128 129 129 ! ... ice albedo 130 !!! >> Arnaud 131 #ifndef key_coupled 130 132 131 133 IF ( nsbc /= 5 ) THEN 132 +++ INTERFACE 2D/3D suprimer les tableaux intermediaires133 +++ les mettre sous cle cpp134 +++ il faudrait utiliser les variables de transfert pour tn_ice, ice/snow thickness, albedo...134 !!!+++ INTERFACE 2D/3D suprimer les tableaux intermediaires 135 !!!+++ les mettre sous cle cpp 136 !!!+++ il faudrait utiliser les variables de transfert pour tn_ice, ice/snow thickness, albedo... 135 137 136 138 zsist (:,:,1) = sist (:,:) … … 169 171 qla_ice(:,:) = zqla_ice(:,:,1) ; dqla_ice(:,:) = zdqla_ice(:,:,1) 170 172 171 ENDIF 173 ENDIF 174 175 #endif 176 !!! << Arnaud 172 177 IF(ln_ctl) THEN ! print mean trends (used for debugging) 173 178 CALL prt_ctl_info( 'Ice Forcings ' ) -
branches/dev_003_CPL/NEMO/OPA_SRC/SBC/sbcmod.F90
r991 r1165 145 145 IF( MOD( rday, nn_fsbc*rdt ) /= 0 ) CALL ctl_warn( 'nn_fsbc is NOT a multiple of the number of time steps in a day' ) 146 146 147 148 & CALL ctl_stop( 'sbc_init: sea-ice model requires a bulk formulation' )147 !! Arnaud IF( nn_ice == 2 .AND. .NOT.( ln_blk_clio .OR. ln_blk_core ) ) & 148 !! & CALL ctl_stop( 'sbc_init: sea-ice model requires a bulk formulation' ) 149 149 150 150 ! Choice of the Surface Boudary Condition (set nsbc) … … 217 217 CASE( 3 ) ; CALL sbc_blk_clio( kt ) ! bulk formulation : CLIO for the ocean 218 218 CASE( 4 ) ; CALL sbc_blk_core( kt ) ! bulk formulation : CORE for the ocean 219 CASE( 5 ) ; CALL sbc_cpl 219 CASE( 5 ) ; CALL sbc_cpl_rcv ( kt ) ! coupled formulation 220 220 CASE( -1 ) 221 221 ; CALL sbc_ana ( kt ) ! ESOPA, test ALL the formulations … … 224 224 ; CALL sbc_blk_clio( kt ) 225 225 ; CALL sbc_blk_core( kt ) 226 ; CALL sbc_cpl 226 ; CALL sbc_cpl_rcv ( kt ) 227 227 END SELECT 228 228 -
branches/dev_003_CPL/NEMO/OPA_SRC/ocfzpt.F90
r991 r1165 18 18 !! * Shared module variables 19 19 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: & !: 20 fzptb, fzptn !: before and now freezing point 20 fzptb, fzptn , & !: before and now freezing point 21 !!! >> Arnaud 22 freezn !: now ice mask (0 or 1) 23 !!! << Arnaud 21 24 !!---------------------------------------------------------------------- 22 25 !! OPA 9.0 , LOCEAN-IPSL (2005) -
branches/dev_003_CPL/NEMO/OPA_SRC/step.F90
r991 r1165 117 117 USE domvvl ! variable volume (dom_vvl routine) 118 118 119 !!! >> Arnaud 120 USE sbccpl ! surface boundary condition: coupled florulation 121 !!! << Arnaud 119 122 #if defined key_agrif 120 123 USE agrif_opa_sponge ! Momemtum and tracers sponges … … 365 368 366 369 IF( lk_cpl ) CALL sbc_cpl_snd( kstp ) ! coupled mode : field exchanges 367 #endif370 !!!!! Arnaud #endif 368 371 ! 369 372 END SUBROUTINE stp
Note: See TracChangeset
for help on using the changeset viewer.