Changeset 13981
- Timestamp:
- 2020-12-02T11:50:03+01:00 (4 years ago)
- Location:
- NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/cfgs/SHARED/field_def_nemo-ice.xml
r13663 r13981 71 71 <field id="utau_ai" long_name="X-component of atmospheric stress on sea ice" standard_name="surface_downward_x_stress" unit="N/m2" /> 72 72 <field id="vtau_ai" long_name="Y-component of atmospheric stress on sea ice" standard_name="surface_downward_y_stress" unit="N/m2" /> 73 <field id="taum_ai" long_name="Module of atmospheric stress on sea ice (T-points)" standard_name="mod_surface_downward_stress" unit="N/m2" />74 73 <field id="utau_oi" long_name="X-component of ocean stress on sea ice" standard_name="sea_ice_base_upward_x_stress" unit="N/m2" /> 75 74 <field id="vtau_oi" long_name="Y-component of ocean stress on sea ice" standard_name="sea_ice_base_upward_y_stress" unit="N/m2" /> 76 75 <field id="utau_bi" long_name="X-component of ocean bottom stress on sea ice -landfast" standard_name="ocean_bottom_upward_x_stress" unit="N/m2" /> 77 76 <field id="vtau_bi" long_name="Y-component of ocean bottom stress on sea ice -landfast" standard_name="ocean_bottom_upward_y_stress" unit="N/m2" /> 77 <field id="taum_ice" long_name="Module of atmospheric stress on sea ice (T-points)" standard_name="mod_surface_downward_stress" unit="N/m2" /> 78 <field id="utau_ice" long_name="X-component of ocean stress on sea ice (T-points)" standard_name="sea_ice_base_upward_x_stress_Tpoints" unit="N/m2" /> 79 <field id="vtau_ice" long_name="Y-component of ocean stress on sea ice (T-points)" standard_name="sea_ice_base_upward_y_stress_Tpoints" unit="N/m2" /> 78 80 <field id="sig1_pnorm" long_name="P-normalized 1st principal stress component" unit="" /> 79 81 <field id="sig2_pnorm" long_name="P-normalized 2nd principal stress component" unit="" /> -
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/cfgs/SHARED/field_def_nemo-oce.xml
r13663 r13981 376 376 <field id="qemp_oce" long_name="Downward Heat Flux from E-P over open ocean" unit="W/m2" /> 377 377 <field id="taum_oce" long_name="wind stress module over open ocean" standard_name="magnitude_of_surface_downward_stress" unit="N/m2" /> 378 <field id="utau_oce" long_name="Wind Stress along i-axis over open ocean (T-points)" standard_name="surf_down_x_stress_open_oce_Tpoints" unit="N/m2" /> 379 <field id="vtau_oce" long_name="Wind Stress along j-axis over open ocean (T-points)" standard_name="surf_down_y_stress_open_oce_Tpoints" unit="N/m2" /> 378 380 379 381 <!-- variables computed by the bulk parameterization algorithms (ln_blk) --> -
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/src/OCE/DYN/dynatf.F90
r13893 r13981 332 332 CALL iom_put( "utau", zutau(:,:) ) 333 333 DEALLOCATE(zutau) 334 !ELSE 335 ! #laurent: it is done in blk_oce_1() of sbcblk.F90 ! 336 ! CALL iom_put( "utau", utau(:,:) ) 334 ELSE 335 CALL iom_put( "utau", utau(:,:) ) 337 336 ENDIF 338 337 ENDIF … … 347 346 CALL iom_put( "vtau", zvtau(:,:) ) 348 347 DEALLOCATE(zvtau) 349 !ELSE 350 ! #laurent: it is done in blk_oce_1() of sbcblk.F90 ! 351 ! CALL iom_put( "vtau", vtau(:,:) ) 348 ELSE 349 CALL iom_put( "vtau", vtau(:,:) ) 352 350 ENDIF 353 351 ENDIF -
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/src/OCE/SBC/sbcblk.F90
r13893 r13981 64 64 65 65 USE sbc_phy ! Catalog of functions for physical/meteorological parameters in the marine boundary layer 66 USE zdfdrg , ONLY : ln_drgice_imp ! to know if we should iom_put wind stress vector (utau,vtau) #laurent67 66 68 67 IMPLICIT NONE … … 856 855 ENDIF 857 856 858 CALL iom_put( "taum_oce", taum*tmask(:,:,1) ) ! output wind stress module 859 IF ( .NOT. (ln_drgice_imp.OR.ln_isfcav) ) THEN 860 ! #Laurent: because otherwize utau and vtau are saved into dyn_atf() of dynatf.F90 861 CALL iom_put( "utau", utau(:,:) ) 862 CALL iom_put( "vtau", vtau(:,:) ) 863 END IF 857 ! Saving open-ocean wind-stress (module and components) on T-points: 858 CALL iom_put( "taum_oce", taum(:,:)*tmask(:,:,1) ) ! output wind stress module 859 !#LB: These 2 lines below mostly here for 'STATION_ASF' test-case, otherwize "utau" (U-grid) and vtau" (V-grid) does the job in: [DYN/dynatf.F90]) 860 CALL iom_put( "utau_oce", ztau_i(:,:)*tmask(:,:,1) ) ! utau at T-points! 861 CALL iom_put( "vtau_oce", ztau_j(:,:)*tmask(:,:,1) ) ! vtau at T-points! 864 862 865 863 IF(sn_cfctl%l_prtctl) THEN … … 1053 1051 !! 1054 1052 END SELECT 1055 1056 IF( iom_use('Cd_ice').OR.iom_use('Ce_ice').OR.iom_use('Ch_ice').OR.iom_use('taum_ ai') ) &1053 1054 IF( iom_use('Cd_ice').OR.iom_use('Ce_ice').OR.iom_use('Ch_ice').OR.iom_use('taum_ice').OR.iom_use('utau_ice').OR.iom_use('vtau_ice') ) & 1057 1055 & ztmp(:,:) = ( 1._wp - MAX(0._wp, SIGN( 1._wp, 1.E-6_wp - fr_i )) )*tmask(:,:,1) ! mask for presence of ice ! 1058 1056 … … 1068 1066 ! supress moving ice in wind stress computation as we don't know how to do it properly... 1069 1067 DO_2D( 0, 1, 0, 1 ) ! at T point 1070 zztmp1 = rhoa(ji,jj) * Cd_ice(ji,jj) * wndm_ice(ji,jj)1071 putaui(ji,jj) = zztmp1 * pwndi(ji,jj)1072 pvtaui(ji,jj) = zztmp1 * pwndj(ji,jj)1068 zztmp1 = rhoa(ji,jj) * Cd_ice(ji,jj) * wndm_ice(ji,jj) 1069 putaui(ji,jj) = zztmp1 * pwndi(ji,jj) 1070 pvtaui(ji,jj) = zztmp1 * pwndj(ji,jj) 1073 1071 END_2D 1074 !#LB: saving the module of the ai wind-stress: NOT weighted by the ice concentration !!! 1075 IF(iom_use('taum_ai')) CALL iom_put( 'taum_ai', SQRT( putaui*putaui + pvtaui*pvtaui )*ztmp ) 1072 1073 !#LB: saving the module, and x-y components, of the ai wind-stress at T-points: NOT weighted by the ice concentration !!! 1074 IF(iom_use('taum_ice')) CALL iom_put('taum_ice', SQRT( putaui*putaui + pvtaui*pvtaui )*ztmp ) 1075 !#LB: These 2 lines below mostly here for 'STATION_ASF' test-case, otherwize "utau_oi" (U-grid) and vtau_oi" (V-grid) does the job in: [ICE/icedyn_rhg_evp.F90]) 1076 IF(iom_use('utau_ice')) CALL iom_put("utau_ice", putaui*ztmp) ! utau at T-points! 1077 IF(iom_use('vtau_ice')) CALL iom_put("vtau_ice", pvtaui*ztmp) ! vtau at T-points! 1078 1076 1079 ! 1077 1080 DO_2D( 0, 0, 0, 0 ) ! U & V-points (same as ocean). 1078 !#LB: QUESTION?? so SI3 expects wind stress vector to be provided at U & V points? Not at T-points ?1079 ! take care of the land-sea mask to avoid "pollution" of coastal stress. p[uv]taui used in frazil and rheology1080 zztmp1 = 0.5_wp * ( 2. - umask(ji,jj,1) ) * MAX( tmask(ji,jj,1),tmask(ji+1,jj ,1) )1081 zztmp2 = 0.5_wp * ( 2. - vmask(ji,jj,1) ) * MAX( tmask(ji,jj,1),tmask(ji ,jj+1,1) )1082 putaui(ji,jj) = zztmp1 * ( putaui(ji,jj) + putaui(ji+1,jj ) )1083 pvtaui(ji,jj) = zztmp2 * ( pvtaui(ji,jj) + pvtaui(ji ,jj+1) )1081 !#LB: QUESTION?? so SI3 expects wind stress vector to be provided at U & V points? Not at T-points ? 1082 ! take care of the land-sea mask to avoid "pollution" of coastal stress. p[uv]taui used in frazil and rheology 1083 zztmp1 = 0.5_wp * ( 2. - umask(ji,jj,1) ) * MAX( tmask(ji,jj,1),tmask(ji+1,jj ,1) ) 1084 zztmp2 = 0.5_wp * ( 2. - vmask(ji,jj,1) ) * MAX( tmask(ji,jj,1),tmask(ji ,jj+1,1) ) 1085 putaui(ji,jj) = zztmp1 * ( putaui(ji,jj) + putaui(ji+1,jj ) ) 1086 pvtaui(ji,jj) = zztmp2 * ( pvtaui(ji,jj) + pvtaui(ji ,jj+1) ) 1084 1087 END_2D 1085 1088 CALL lbc_lnk_multi( 'sbcblk', putaui, 'U', -1._wp, pvtaui, 'V', -1._wp ) -
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/tests/STATION_ASF/EXPREF/file_def_nemo-ice.xml
r13675 r13981 20 20 <field field_ref="vtau_ai" name="vtau_ai" /> 21 21 --> 22 <field field_ref="taum_ai" name="taum_ai" /> 22 <field field_ref="taum_ice" name="taum_ice" /> 23 <field field_ref="utau_ice" name="utau_ice" /> 24 <field field_ref="vtau_ice" name="vtau_ice" /> 23 25 24 26 <!-- heat fluxes --> -
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/tests/STATION_ASF/EXPREF/file_def_nemo-oce.xml
r13676 r13981 28 28 <!-- <field field_ref="empmr" name="empmr" /> --> 29 29 <!-- --> 30 <field field_ref="taum" name="taum" /> 30 <field field_ref="taum_oce" name="taum" /> 31 <field field_ref="utau_oce" name="utau" /> 32 <field field_ref="vtau_oce" name="vtau" /> 31 33 <field field_ref="wspd" name="windsp" /> 32 34 <!-- --> … … 41 43 <field field_ref="ssq" name="ssq" /> 42 44 <field field_ref="wspd_blk" name="wspd_blk" /> 43 </file>44 45 <file id="file2" name_suffix="_gridU" description="ocean U grid variables" compression_level="3" >46 <field field_ref="utau" name="tauuo" />47 </file>48 49 <file id="file3" name_suffix="_gridV" description="ocean V grid variables" compression_level="3" >50 <field field_ref="vtau" name="tauvo" />51 45 </file> 52 46 -
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/tests/STATION_ASF/EXPREF/launch_sasf.sh
r13893 r13981 18 18 # => i_sea_ice: whether to compute fluxes over sea-ice as well 19 19 # => SFORC: string sufficient to copy relevant files as in "*${SFORC}*.nc" 20 #FORCING="PAPA" ; i_sea_ice=0 ; SFORC="Station_PAPA_50N-145W"21 FORCING="ERA5_NorthGreenland" ; i_sea_ice=1 ; SFORC="ERA5_NorthGreenland_surface_84N_-36E_1h" ; # WITH ice/air flux computation20 FORCING="PAPA" ; i_sea_ice=0 ; SFORC="Station_PAPA_50N-145W" 21 #FORCING="ERA5_NorthGreenland" ; i_sea_ice=1 ; SFORC="ERA5_NorthGreenland_surface_84N_-36E_1h" ; # WITH ice/air flux computation 22 22 #FORCING="ERA5_NorthGreenland" ; i_sea_ice=0 ; SFORC="ERA5_NorthGreenland_surface_84N_-36E_1h" ; # "ERA5_arctic" WITHOUT ice/air flux computation 23 23 -
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/tests/STATION_ASF/EXPREF/plot_station_asf_ICE.py
r13893 r13981 39 39 ############################################ 40 40 crealm = 'sea-ice' 41 L_VNEM = [ 'Cd_ice', 'Ch_ice', 'qla_ice' , 'qsb_ice' , 'qt_ice' , 'qlw_ice' , 'qsr_ice' , 'taum_ ai']41 L_VNEM = [ 'Cd_ice', 'Ch_ice', 'qla_ice' , 'qsb_ice' , 'qt_ice' , 'qlw_ice' , 'qsr_ice' , 'taum_ice' ] 42 42 L_VARO = [ 'Cd' , 'Ch' , 'Qlat' , 'Qsen' , 'Qnet' , 'Qlw' , 'Qsw' , 'Tau' ] 43 43 L_VARL = [ r'$C_{D}$', r'$C_{H}$', r'$Q_{lat}$', r'$Q_{sens}$' , r'$Q_{net}$' , r'$Q_{lw}$' , r'$Q_{sw}$' , r'$|\tau|$' ] … … 144 144 sys.exit(0) 145 145 146 # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 147 # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>146 147 #----------------------------------------------------------------- 148 148 149 149 … … 201 201 id_toolarge, = nmp.where( xF[:,ja] > L_MAXT[jv] ) # 202 202 xF[id_toolarge,ja] = L_MAXT[jv] 203 id_toosmall, = nmp.where( xF[:,ja] < L_MINT[jv] ) ; print("id_toosmall =", id_toosmall)203 id_toosmall, = nmp.where( xF[:,ja] < L_MINT[jv] ) ; #print("id_toosmall =", id_toosmall) 204 204 xF[id_toosmall,ja] = L_MINT[jv] 205 205 … … 264 264 265 265 for ja in range(nb_exp): 266 fplot = nmp.ma.masked_where( xF [:,ja]==0., xF[:,ja] )266 fplot = nmp.ma.masked_where( xFa[:,ja]==0., xFa[:,ja] ) 267 267 plt.plot(vtime, fplot, '-', color=l_color[ja], \ 268 268 linewidth=l_width[ja], label=list_exp[ja], alpha=0.6) #, zorder=10+ja) -
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/tests/STATION_ASF/EXPREF/plot_station_asf_OCE.py
r13893 r13981 130 130 131 131 132 133 132 #----------------------------------------------------------------- 134 133 … … 235 234 id_toolarge, = nmp.where( xF[:,ja] > L_MAXT[jv] ) # 236 235 xF[id_toolarge,ja] = L_MAXT[jv] 237 id_toosmall, = nmp.where( xF[:,ja] < L_MINT[jv] ) ; print("id_toosmall =", id_toosmall)236 id_toosmall, = nmp.where( xF[:,ja] < L_MINT[jv] ) ; #print("id_toosmall =", id_toosmall) 238 237 xF[id_toosmall,ja] = L_MINT[jv] 239 238 … … 298 297 299 298 for ja in range(nb_exp): 300 fplot = nmp.ma.masked_where( xF [:,ja]==0., xF[:,ja] )299 fplot = nmp.ma.masked_where( xFa[:,ja]==0., xFa[:,ja] ) 301 300 plt.plot(vtime, fplot, '-', color=l_color[ja], \ 302 301 linewidth=l_width[ja], label=list_exp[ja], alpha=0.6) #, zorder=10+ja) -
NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/tests/STATION_ASF/README.md
r13893 r13981 215 215 $ ./launch_sasf.sh 216 216 217 If everything goes according to plan, ``launch_sasf.sh`` should have generated the 4 following sets ofoutput files into `${PROD_DIR}/output` (example for PAPA forcing, 4 algos tested):217 If everything goes according to plan, ``launch_sasf.sh`` should have generated the 4 following output files into `${PROD_DIR}/output` (example for PAPA forcing, 4 algos tested): 218 218 219 219 STATION_ASF-ANDREAS_PAPA_1h_20180101_20181231_gridT.nc 220 STATION_ASF-ANDREAS_PAPA_1h_20180101_20181231_gridU.nc221 STATION_ASF-ANDREAS_PAPA_1h_20180101_20181231_gridV.nc222 220 STATION_ASF-COARE3p6_PAPA_1h_20180101_20181231_gridT.nc 223 STATION_ASF-COARE3p6_PAPA_1h_20180101_20181231_gridU.nc224 STATION_ASF-COARE3p6_PAPA_1h_20180101_20181231_gridV.nc225 221 STATION_ASF-ECMWF_PAPA_1h_20180101_20181231_gridT.nc 226 STATION_ASF-ECMWF_PAPA_1h_20180101_20181231_gridU.nc227 STATION_ASF-ECMWF_PAPA_1h_20180101_20181231_gridV.nc228 222 STATION_ASF-NCAR_PAPA_1h_20180101_20181231_gridT.nc 229 STATION_ASF-NCAR_PAPA_1h_20180101_20181231_gridU.nc230 STATION_ASF-NCAR_PAPA_1h_20180101_20181231_gridV.nc231 223 232 224
Note: See TracChangeset
for help on using the changeset viewer.