- Timestamp:
- 2014-11-14T21:43:49+01:00 (10 years ago)
- Location:
- branches/2014/dev_4728_CNRS04_coupled_interface/NEMOGCM/NEMO/OPA_SRC
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2014/dev_4728_CNRS04_coupled_interface/NEMOGCM/NEMO/OPA_SRC/SBC/cpl_oasis3.F90
r4857 r4859 45 45 INTEGER :: ncomp_id ! id returned by oasis_init_comp 46 46 INTEGER :: nerror ! return error code 47 #if defined key_oasis3 48 LOGICAL, PUBLIC, PARAMETER :: lk_cpl = .TRUE. !: coupled flag 49 #else 50 LOGICAL, PUBLIC, PARAMETER :: lk_cpl = .FALSE. !: coupled flag 47 #if ! defined key_oasis3 51 48 ! OASIS Variables not used. defined only for compilation purpose 52 49 INTEGER :: OASIS_Out = -1 -
branches/2014/dev_4728_CNRS04_coupled_interface/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_ice.F90
r4856 r4859 14 14 !!---------------------------------------------------------------------- 15 15 USE par_oce ! ocean parameters 16 USE sbc_oce ! surface boundary condition: ocean 16 17 # if defined key_lim3 17 18 USE par_ice ! LIM-3 parameters … … 56 57 57 58 #if defined key_lim3 || defined key_lim2 58 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: qns_ice 59 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: qsr_ice 60 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: qsr_ice_mean !: daily mean solar heat flux over ice[W/m2]61 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: qla_ice 62 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: dqla_ice 63 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: dqns_ice 64 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tn_ice 65 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: alb_ice 66 67 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: utau_ice 68 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: vtau_ice 69 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fr1_i0 70 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fr2_i0 71 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: emp_ice 72 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qemp_ice 59 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: qns_ice !: non solar heat flux over ice [W/m2] 60 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: qsr_ice !: solar heat flux over ice [W/m2] 61 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: qsr_ice_mean !: daily mean solar heat flux over ice [W/m2] 62 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: qla_ice !: latent flux over ice [W/m2] 63 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: dqla_ice !: latent sensibility over ice [W/m2/K] 64 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: dqns_ice !: non solar heat flux over ice (LW+SEN+LA) [W/m2/K] 65 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tn_ice !: ice surface temperature [K] 66 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: alb_ice !: ice albedo [-] 67 68 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: utau_ice !: atmos-ice u-stress. VP: I-pt ; EVP: U,V-pts [N/m2] 69 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: vtau_ice !: atmos-ice v-stress. VP: I-pt ; EVP: U,V-pts [N/m2] 70 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fr1_i0 !: Solar surface transmission parameter, thick ice [-] 71 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fr2_i0 !: Solar surface transmission parameter, thin ice [-] 72 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: emp_ice !: sublimation - precip over sea ice [kg/m2] 73 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qemp_ice !: heat associated with emp over sea ice [W/m2] 73 74 74 75 # if defined key_lim3 75 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: tatm_ice 76 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: tatm_ice !: air temperature [K] 76 77 # endif 77 78 … … 99 100 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: topmelt !: category topmelt 100 101 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: botmelt !: category botmelt 101 #endif 102 REAL(wp), PUBLIC, SAVE :: cldf_ice = 0.81 !: cloud fraction over sea ice, summer CLIO value [-] 102 103 ! variables used in the coupled interface 104 INTEGER , PUBLIC, PARAMETER :: jpl = ncat 105 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: u_ice, v_ice,fr1_i0,fr2_i0 ! jpi, jpj 106 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tn_ice, alb_ice, qns_ice, dqns_ice ! (jpi,jpj,jpl) 107 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: emp_ice 108 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: qsr_ice 109 #endif 110 111 #if defined key_lim2 112 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: a_i 113 #endif 114 115 #if ! defined key_lim3 116 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ht_i, ht_s 117 #endif 118 119 #if ! defined key_cice 120 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: topmelt, botmelt 121 #endif 122 123 REAL(wp), PUBLIC, SAVE :: cldf_ice = 0.81 !: cloud fraction over sea ice, summer CLIO value [-] 103 124 104 125 !!---------------------------------------------------------------------- … … 113 134 !! *** FUNCTION sbc_ice_alloc *** 114 135 !!---------------------------------------------------------------------- 115 INTEGER :: ierr( 2)136 INTEGER :: ierr(5) 116 137 !!---------------------------------------------------------------------- 117 138 ierr(:) = 0 … … 125 146 & fr1_i0 (jpi,jpj) , fr2_i0 (jpi,jpj) , & 126 147 #if defined key_lim3 127 & tatm_ice(jpi,jpj) 148 & tatm_ice(jpi,jpj) , & 128 149 #endif 129 150 & emp_ice(jpi,jpj) , qemp_ice(jpi,jpj) , STAT= ierr(1) ) … … 133 154 wndj_ice(jpi,jpj) , nfrzmlt(jpi,jpj) , ss_iou(jpi,jpj) , & 134 155 ss_iov(jpi,jpj) , fr_iu(jpi,jpj) , fr_iv(jpi,jpj) , & 135 a_i(jpi,jpj,ncat) , topmelt(jpi,jpj,ncat) , botmelt(jpi,jpj,ncat), STAT= ierr(1) ) 156 a_i(jpi,jpj,ncat) , topmelt(jpi,jpj,ncat) , botmelt(jpi,jpj,ncat) , & 157 STAT= ierr(1) ) 158 IF( lk_cpl ) ALLOCATE( u_ice(jpi,jpj) , fr1_i0(jpi,jpj) , tn_ice (jpi,jpj,1) , & 159 & v_ice(jpi,jpj) , fr2_i0(jpi,jpj) , alb_ice(jpi,jpj,1) , & 160 & emp_ice(jpi,jpj) , qns_ice(jpi,jpj,1) , dqns_ice(jpi,jpj,1) , & 161 & STAT= ierr(2) ) 162 136 163 #endif 137 164 ! 138 165 #if defined key_lim2 139 IF( ltrcdm2dc_ice )THEN 140 ALLOCATE( qsr_ice_mean (jpi,jpj,jpl), STAT=ierr(2) ) 141 ENDIF 166 IF( ltrcdm2dc_ice ) ALLOCATE( qsr_ice_mean (jpi,jpj,jpl), STAT=ierr(3) ) 142 167 #endif 143 168 ! 169 #if defined key_lim2 170 ALLOCATE( a_i(jpi,jpj,1) , STAT=ierr(4) ) 171 #endif 172 173 #if defined key_cice || defined key_lim2 174 IF( lk_cpl ) ALLOCATE( ht_i(jpi,jpj,jpl) , ht_s(jpi,jpj,jpl) , STAT=ierr(5) ) 175 #endif 176 144 177 sbc_ice_alloc = MAXVAL( ierr ) 145 178 IF( lk_mpp ) CALL mpp_sum ( sbc_ice_alloc ) … … 151 184 !! Default option NO LIM 2.0 or 3.0 or CICE sea-ice model 152 185 !!---------------------------------------------------------------------- 186 USE in_out_manager ! I/O manager 153 187 LOGICAL , PUBLIC, PARAMETER :: lk_lim2 = .FALSE. !: no LIM-2 ice model 154 188 LOGICAL , PUBLIC, PARAMETER :: lk_lim3 = .FALSE. !: no LIM-3 ice model 155 189 LOGICAL , PUBLIC, PARAMETER :: lk_cice = .FALSE. !: no CICE ice model 156 190 CHARACTER(len=1), PUBLIC, PARAMETER :: cp_ice_msh = '-' !: no grid ice-velocity 157 REAL , PUBLIC :: cldf_ice = 0.81 !: cloud fraction over sea ice, summer CLIO value [-] 191 REAL , PUBLIC, PARAMETER :: cldf_ice = 0.81 !: cloud fraction over sea ice, summer CLIO value [-] 192 INTEGER , PUBLIC, PARAMETER :: jpl = 1 193 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: u_ice, v_ice,fr1_i0,fr2_i0 ! jpi, jpj 194 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tn_ice, alb_ice, qns_ice, dqns_ice ! (jpi,jpj,jpl) 195 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: a_i 196 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: emp_ice 197 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: qsr_ice 198 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ht_i, ht_s 199 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: topmelt, botmelt 158 200 #endif 159 201 -
branches/2014/dev_4728_CNRS04_coupled_interface/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_oce.F90
r4733 r4859 35 35 LOGICAL , PUBLIC :: ln_blk_core !: CORE bulk formulation 36 36 LOGICAL , PUBLIC :: ln_blk_mfs !: MFS bulk formulation 37 #if defined key_oasis3 38 LOGICAL , PUBLIC :: lk_cpl = .TRUE. !: coupled formulation 39 #else 40 LOGICAL , PUBLIC :: lk_cpl = .FALSE. !: coupled formulation 41 #endif 37 42 LOGICAL , PUBLIC :: ln_dm2dc !: Daily mean to Diurnal Cycle short wave (qsr) 38 43 LOGICAL , PUBLIC :: ln_rnf !: runoffs / runoff mouths -
branches/2014/dev_4728_CNRS04_coupled_interface/NEMOGCM/NEMO/OPA_SRC/SBC/sbcblk_core.F90
r4856 r4859 39 39 USE prtctl ! Print control 40 40 USE sbcwave,ONLY : cdn_wave !wave module 41 USE sbc_ice ,ONLY : cldf_ice! Surface boundary condition: ice fields41 USE sbc_ice ! Surface boundary condition: ice fields 42 42 USE lib_fortran ! to use key_nosignedzero 43 43 -
branches/2014/dev_4728_CNRS04_coupled_interface/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90
r4857 r4859 133 133 INTEGER , ALLOCATABLE, SAVE, DIMENSION( :) :: nrcvinfo ! OASIS info argument 134 134 135 #if ! defined key_lim2 && ! defined key_lim3136 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: u_ice, v_ice,fr1_i0,fr2_i0 ! jpi, jpj137 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tn_ice, alb_ice, qns_ice, dqns_ice ! (jpi,jpj,jpl)138 #endif139 140 #if defined key_cice141 INTEGER, PARAMETER :: jpl = ncat142 #elif ! defined key_lim2 && ! defined key_lim3143 INTEGER, PARAMETER :: jpl = 1144 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: emp_ice145 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: qsr_ice146 #endif147 148 #if ! defined key_lim3 && ! defined key_cice149 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: a_i150 #endif151 152 #if ! defined key_lim3153 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ht_i, ht_s154 #endif155 156 #if ! defined key_cice157 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: topmelt, botmelt158 #endif159 160 135 !! Substitution 161 136 # include "vectopt_loop_substitute.h90" … … 172 147 !! *** FUNCTION sbc_cpl_alloc *** 173 148 !!---------------------------------------------------------------------- 174 INTEGER :: ierr( 4),jn149 INTEGER :: ierr(2),jn 175 150 !!---------------------------------------------------------------------- 176 151 ierr(:) = 0 177 152 ! 178 153 ALLOCATE( albedo_oce_mix(jpi,jpj), nrcvinfo(jprcv), STAT=ierr(1) ) 179 ! 180 #if ! defined key_lim2 && ! defined key_lim3 181 ! quick patch to be able to run the coupled model without sea-ice... 182 ALLOCATE( u_ice(jpi,jpj) , fr1_i0(jpi,jpj) , tn_ice (jpi,jpj,1) , & 183 v_ice(jpi,jpj) , fr2_i0(jpi,jpj) , alb_ice(jpi,jpj,1), & 184 emp_ice(jpi,jpj) , qns_ice(jpi,jpj,1) , dqns_ice(jpi,jpj,1) , STAT=ierr(2) ) 154 155 #if ! defined key_lim3 && ! defined key_lim2 && ! defined key_cice 156 ALLOCATE( a_i(jpi,jpj,1) , STAT=ierr(2) ) 185 157 #endif 186 187 #if ! defined key_lim3 && ! defined key_cice 188 ALLOCATE( a_i(jpi,jpj,jpl) , STAT=ierr(3) ) 189 #endif 190 191 #if defined key_cice || defined key_lim2 192 ALLOCATE( ht_i(jpi,jpj,jpl) , ht_s(jpi,jpj,jpl) , STAT=ierr(4) ) 193 #endif 158 ! 194 159 sbc_cpl_alloc = MAXVAL( ierr ) 195 160 IF( lk_mpp ) CALL mpp_sum ( sbc_cpl_alloc ) … … 904 869 CALL wrk_alloc( jpi,jpj, ztx, zty ) 905 870 906 !AC Pour eviter un stress nul sur la glace dans le cas mixed oce-ice 907 IF( srcv(jpr_itx1)%laction .AND. TRIM( sn_rcv_tau%cldes ) == 'oce and ice') THEN ; itx = jpr_itx1 871 IF( srcv(jpr_itx1)%laction ) THEN ; itx = jpr_itx1 908 872 ELSE ; itx = jpr_otx1 909 873 ENDIF … … 912 876 IF( nrcvinfo(itx) == OASIS_Rcv ) THEN 913 877 914 ! ! ======================= ! 915 !AC Pour eviter un stress nul sur la glace dans le cas mixes oce-ice 916 IF( srcv(jpr_itx1)%laction .AND. TRIM( sn_rcv_tau%cldes ) == 'oce and ice') THEN ! ice stress received ! 917 ! ! ======================= ! 878 ! ! ======================= ! 879 IF( srcv(jpr_itx1)%laction ) THEN ! ice stress received ! 880 ! ! ======================= ! 918 881 ! 919 882 IF( TRIM( sn_rcv_tau%clvref ) == 'cartesian' ) THEN ! 2 components on the sphere … … 1286 1249 ENDIF 1287 1250 1288 SELECT CASE( TRIM( sn_rcv_dqnsdt%cldes ) ) 1251 ! ! ========================= ! 1252 SELECT CASE( TRIM( sn_rcv_dqnsdt%cldes ) ) ! d(qns)/dt ! 1253 ! ! ========================= ! 1289 1254 CASE ('coupled') 1290 1255 IF ( TRIM(sn_rcv_dqnsdt%clcat) == 'yes' ) THEN … … 1298 1263 END SELECT 1299 1264 1300 SELECT CASE( TRIM( sn_rcv_iceflx%cldes ) ) 1265 ! ! ========================= ! 1266 SELECT CASE( TRIM( sn_rcv_iceflx%cldes ) ) ! topmelt and botmelt ! 1267 ! ! ========================= ! 1301 1268 CASE ('coupled') 1302 1269 topmelt(:,:,:)=frcv(jpr_topm)%z3(:,:,:) … … 1343 1310 1344 1311 zfr_l(:,:) = 1.- fr_i(:,:) 1345 1346 1312 ! ! ------------------------- ! 1347 1313 ! ! Surface temperature ! in Kelvin … … 1372 1338 IF( ssnd(jps_tmix)%laction ) CALL cpl_snd( jps_tmix, isec, RESHAPE ( ztmp1, (/jpi,jpj,1/) ), info ) 1373 1339 ENDIF 1374 !1375 1340 ! ! ------------------------- ! 1376 1341 ! ! Albedo ! -
branches/2014/dev_4728_CNRS04_coupled_interface/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_if.F90
r4624 r4859 16 16 USE eosbn2 ! equation of state 17 17 USE sbc_oce ! surface boundary condition: ocean fields 18 USE sbccpl 18 #if defined key_lim3 19 USE ice , ONLY : a_i 20 #else 21 USE sbc_ice, ONLY : a_i 22 #endif 19 23 USE fldread ! read input field 20 24 USE iom ! I/O manager library … … 101 105 fr_i(:,:) = tfreez( sss_m ) * tmask(:,:,1) ! sea surface freezing temperature [Celcius] 102 106 103 ! OM : probleme. a_i pas defini dans les cas lim3 et cice 104 #if defined key_coupled && defined key_lim2 105 a_i(:,:,1) = fr_i(:,:) 106 #endif 107 IF( lk_cpl ) a_i(:,:,1) = fr_i(:,:) 107 108 108 109 ! Flux and ice fraction computation -
branches/2014/dev_4728_CNRS04_coupled_interface/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim_2.F90
r4621 r4859 206 206 IF( ln_limdmp ) CALL lim_dmp_2 ( kt ) ! Ice damping 207 207 END IF 208 #if defined key_coupled209 208 ! ! Ice surface fluxes in coupled mode 210 209 IF( ksbc == 5 ) THEN … … 215 214 sprecip(:,:) = - emp_ice(:,:) ! Ugly patch, WARNING, in coupled mode, sublimation included in snow (parsub = 0.) 216 215 ENDIF 217 #endif218 216 CALL lim_thd_2 ( kt ) ! Ice thermodynamics 219 217 CALL lim_sbc_flx_2 ( kt ) ! update surface ocean mass, heat & salt fluxes -
branches/2014/dev_4728_CNRS04_coupled_interface/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90
r4857 r4859 37 37 USE sbcice_cice ! surface boundary condition: CICE sea-ice model 38 38 USE sbccpl ! surface boundary condition: coupled florulation 39 USE cpl_oasis3, ONLY:lk_cpl ! are we in coupled mode?40 39 USE sbcssr ! surface boundary condition: sea surface restoring 41 40 USE sbcrnf ! surface boundary condition: runoffs … … 123 122 WRITE(numout,*) ' CORE bulk formulation ln_blk_core = ', ln_blk_core 124 123 WRITE(numout,*) ' MFS bulk formulation ln_blk_mfs = ', ln_blk_mfs 124 WRITE(numout,*) ' coupled formulation (T if key_oasis3) lk_cpl = ', lk_cpl 125 125 WRITE(numout,*) ' Multicategory heat flux formulation (LIM3) nn_limflx = ', nn_limflx 126 126 WRITE(numout,*) ' Misc. options of sbc : ' -
branches/2014/dev_4728_CNRS04_coupled_interface/NEMOGCM/NEMO/OPA_SRC/nemogcm.F90
r4857 r4859 42 42 !!---------------------------------------------------------------------- 43 43 USE step_oce ! module used in the ocean time stepping module 44 USE sbc_oce ! surface boundary condition: ocean45 44 USE cla ! cross land advection (tra_cla routine) 46 45 USE domcfg ! domain configuration (dom_cfg routine) -
branches/2014/dev_4728_CNRS04_coupled_interface/NEMOGCM/NEMO/OPA_SRC/step_oce.F90
r4328 r4859 25 25 USE sbcrnf ! surface boundary condition: runoff variables 26 26 USE sbccpl ! surface boundary condition: coupled formulation (call send at end of step) 27 USE cpl_oasis3, ONLY : lk_cpl27 USE sbc_oce ! surface boundary condition: ocean 28 28 USE sbctide ! Tide initialisation 29 29
Note: See TracChangeset
for help on using the changeset viewer.