Changeset 10181
- Timestamp:
- 2018-10-09T11:29:47+02:00 (6 years ago)
- Location:
- branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM/CONFIG/SHARED/namelist_ref
r9987 r10181 1228 1228 ln_sla = .false. ! Logical switch for SLA observations 1229 1229 ln_sst = .false. ! Logical switch for SST observations 1230 ln_sic = .false. ! Logical switch for Sea Ice observations 1230 ln_sic = .false. ! Logical switch for Sea Ice concentration observations 1231 ln_sit = .false. ! Logical switch for Sea Ice thickness observations 1231 1232 ln_vel3d = .false. ! Logical switch for velocity observations 1232 1233 ln_sss = .false. ! Logical swithc for SSS observations … … 1267 1268 ln_sss_fp_indegs = .true. 1268 1269 ln_sic_fp_indegs = .true. 1270 ln_sit_fp_indegs = .true. 1269 1271 ! All of the *files* variables below are arrays. Use namelist_cfg to add more files 1270 1272 cn_profbfiles = 'profiles_01.nc' ! Profile feedback input observation file names … … 1272 1274 cn_sstfbfiles = 'sst_01.nc' ! SST feedback input observation file names 1273 1275 cn_sicfbfiles = 'sic_01.nc' ! SIC feedback input observation file names 1276 cn_sitfbfiles = 'sit_01.nc' ! SIT feedback input observation file names 1274 1277 cn_velfbfiles = 'vel_01.nc' ! Velocity feedback input observation file names 1275 1278 cn_sssfbfiles = 'sss_01.nc' ! SSS feedback input observation file names … … 1311 1314 rn_sic_avglamscl = 0. ! E/W diameter of SIC observation footprint (metres/degrees) 1312 1315 rn_sic_avgphiscl = 0. ! N/S diameter of SIC observation footprint (metres/degrees) 1316 rn_sit_avglamscl = 0. ! E/W diameter of SIT observation footprint (metres/degrees) 1317 rn_sit_avgphiscl = 0. ! N/S diameter of SIT observation footprint (metres/degrees) 1313 1318 nn_1dint = 0 ! Type of vertical interpolation method 1314 1319 nn_2dint_default = 0 ! Default horizontal interpolation method … … 1317 1322 nn_2dint_sss = -1 ! Horizontal interpolation method for SSS 1318 1323 nn_2dint_sic = -1 ! Horizontal interpolation method for SIC 1324 nn_2dint_sit = -1 ! Horizontal interpolation method for SIT 1319 1325 nn_msshc = 0 ! MSSH correction scheme 1320 1326 rn_mdtcorr = 1.61 ! MDT correction … … 1332 1338 ln_asmdin = .false. ! Logical switch for Direct Initialization (DI) 1333 1339 ln_asmiau = .false. ! Logical switch for Incremental Analysis Updating (IAU) 1334 ln_seaiceinc = .false. ! Logical switch for applying sea ice increments 1340 ln_seaiceinc = .false. ! Logical switch for applying sea ice concentration increments *UPDATE TO SIC* 1341 ln_sitinc = .false. ! Logical switch for applying sea ice thickness increments 1335 1342 ln_temnofreeze = .false. ! Logical to not add increments if temperature would fall below freezing 1336 1343 nitbkg = 0 ! Timestep of background in [0,nitend-nit000-1] -
branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM/NEMO/OPA_SRC/ASM/asminc.F90
r9987 r10181 21 21 !! dyn_asm_inc : Apply the dynamic (u and v) increments 22 22 !! ssh_asm_inc : Apply the SSH increment 23 !! seaice_asm_inc : Apply the seaice increment 23 !! seaice_asm_inc : Apply the seaice concentration increment 24 !! sit_asm_inc : Apply the sea ice thickness increment 24 25 !!---------------------------------------------------------------------- 25 26 USE wrk_nemo ! Memory Allocation … … 41 42 #if defined key_cice && defined key_asminc 42 43 USE sbc_ice, ONLY : & ! CICE Ice model variables 43 & ndaice_da, n fresh_da, nfsalt_da44 & ndaice_da, ndsit_da, nfresh_da, nfsalt_da 44 45 #endif 45 46 USE sbc_oce ! Surface boundary condition variables. … … 53 54 PUBLIC dyn_asm_inc !: Apply the dynamic (u and v) increments 54 55 PUBLIC ssh_asm_inc !: Apply the SSH increment 55 PUBLIC seaice_asm_inc !: Apply the seaice increment 56 PUBLIC seaice_asm_inc !: Apply the seaice concentration increment 57 PUBLIC sit_asm_inc !: Apply the seaice thickness increment 56 58 57 59 #if defined key_asminc … … 66 68 LOGICAL, PUBLIC :: ln_dyninc = .FALSE. !: No dynamics (u and v) assimilation increments 67 69 LOGICAL, PUBLIC :: ln_sshinc = .FALSE. !: No sea surface height assimilation increment 68 LOGICAL, PUBLIC :: ln_seaiceinc !: No sea ice concentration increment 70 LOGICAL, PUBLIC :: ln_seaiceinc = .FALSE. !: No sea ice concentration increment 71 LOGICAL, PUBLIC :: ln_sitinc = .FALSE. !: No sea ice thickness increment 69 72 LOGICAL, PUBLIC :: ln_salfix = .FALSE. !: Apply minimum salinity check 70 73 LOGICAL, PUBLIC :: ln_temnofreeze = .FALSE. !: Don't allow the temperature to drop below freezing … … 89 92 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: ssh_bkg, ssh_bkginc ! Background sea surface height and its increment 90 93 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: seaice_bkginc ! Increment to the background sea ice conc 94 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: sit_bkginc ! Increment to the background sea ice thickness 91 95 92 96 !! * Substitutions … … 136 140 & nitbkg, nitdin, nitiaustr, nitiaufin, niaufn, & 137 141 & ln_salfix, salfixmin, nn_divdmp, & 138 & ln_seaiceinc, ln_ temnofreeze142 & ln_seaiceinc, ln_sitinc, ln_temnofreeze 139 143 !!---------------------------------------------------------------------- 140 144 … … 142 146 ! Read Namelist nam_asminc : assimilation increment interface 143 147 !----------------------------------------------------------------------- 148 ln_sitinc = .FALSE. 144 149 ln_seaiceinc = .FALSE. 145 150 ln_temnofreeze = .FALSE. … … 165 170 WRITE(numout,*) ' Logical switch for applying SSH increments ln_sshinc = ', ln_sshinc 166 171 WRITE(numout,*) ' Logical switch for Direct Initialization (DI) ln_asmdin = ', ln_asmdin 167 WRITE(numout,*) ' Logical switch for applying sea ice increments ln_seaiceinc = ', ln_seaiceinc 172 WRITE(numout,*) ' Logical switch for applying SIC increments ln_seaiceinc = ', ln_seaiceinc 173 WRITE(numout,*) ' Logical switch for applying SIT increments ln_sitinc = ', ln_sitinc 168 174 WRITE(numout,*) ' Logical switch for Incremental Analysis Updating (IAU) ln_asmiau = ', ln_asmiau 169 175 WRITE(numout,*) ' Timestep of background in [0,nitend-nit000-1] nitbkg = ', nitbkg … … 221 227 222 228 IF ( ( ( .NOT. ln_asmdin ).AND.( .NOT. ln_asmiau ) ) & 223 .AND.( ( ln_trainc ).OR.( ln_dyninc ).OR.( ln_sshinc ) .OR. ( ln_seaiceinc) )) & 224 & CALL ctl_stop( ' One or more of ln_trainc, ln_dyninc, ln_sshinc and ln_seaiceinc is set to .true.', & 229 & .AND.( ( ln_trainc ).OR.( ln_dyninc ).OR.( ln_sshinc ) & 230 & .OR.( ln_sitinc ).OR.( ln_seaiceinc ) )) & 231 & CALL ctl_stop( ' One or more of ln_trainc, ln_dyninc, ln_sshinc,', & 232 & ' ln_sitinc and ln_seaiceinc is set to .true.', & 225 233 & ' but ln_asmdin and ln_asmiau are both set to .false. :', & 226 234 & ' Inconsistent options') … … 230 238 & ' Type IAU weighting function is invalid') 231 239 232 IF ( ( .NOT. ln_trainc ).AND.( .NOT. ln_dyninc ).AND.( .NOT. ln_sshinc ).AND.( .NOT. ln_seaiceinc ) & 240 IF ( ( .NOT. ln_trainc ).AND.( .NOT. ln_dyninc ).AND.( .NOT. ln_sshinc ) & 241 & .AND.( .NOT. ln_sitinc ).AND.( .NOT. ln_seaiceinc ) & 233 242 & ) & 234 & CALL ctl_warn( ' ln_trainc, ln_dyninc, ln_sshinc and ln_seaiceinc are set to .false. :', & 243 & CALL ctl_warn( ' ln_trainc, ln_dyninc, ln_sshinc, ln_sitinc', & 244 & ' and ln_seaiceinc are set to .false. :', & 235 245 & ' The assimilation increments are not applied') 236 246 … … 336 346 ALLOCATE( ssh_bkginc(jpi,jpj) ) 337 347 ALLOCATE( seaice_bkginc(jpi,jpj)) 348 ALLOCATE( sit_bkginc(jpi,jpj) ) 338 349 #if defined key_asminc 339 350 ALLOCATE( ssh_iau(jpi,jpj) ) … … 345 356 ssh_bkginc(:,:) = 0.0 346 357 seaice_bkginc(:,:) = 0.0 358 sit_bkginc(:,:) = 0.0 347 359 #if defined key_asminc 348 360 ssh_iau(:,:) = 0.0 349 361 #endif 350 IF ( ( ln_trainc ).OR.( ln_dyninc ).OR.( ln_sshinc ).OR.( ln_s eaiceinc ) ) THEN362 IF ( ( ln_trainc ).OR.( ln_dyninc ).OR.( ln_sshinc ).OR.( ln_sitinc ).OR.( ln_seaiceinc ) ) THEN 351 363 352 364 !-------------------------------------------------------------------- … … 411 423 ! to allow for differences in masks 412 424 WHERE( ABS( ssh_bkginc(:,:) ) > 1.0e+10 ) ssh_bkginc(:,:) = 0.0 425 ENDIF 426 427 IF ( ln_sitinc ) THEN 428 CALL iom_get( inum, jpdom_autoglo, 'bckinsit', sit_bkginc, 1 ) 429 ! Apply the masks 430 sit_bkginc(:,:) = sit_bkginc(:,:) * tmask(:,:,1) 431 ! Set missing increments to 0.0 rather than 1e+20 432 ! to allow for differences in masks 433 WHERE( ABS( sit_bkginc(:,:) ) > 1.0e+10 ) sit_bkginc(:,:) = 0.0 413 434 ENDIF 414 435 … … 769 790 ! 770 791 ENDIF 771 ! Perhaps the following call should be in step 772 IF ( ln_seaiceinc ) CALL seaice_asm_inc ( kt ) ! apply sea ice concentration increment 792 ! Perhaps the following call should be in step 793 IF ( ln_seaiceinc ) CALL seaice_asm_inc ( kt ) ! apply sea ice concentration increment 794 IF ( ln_sitinc ) CALL sit_asm_inc ( kt ) ! apply sea ice thickness increment 773 795 ! 774 796 END SUBROUTINE tra_asm_inc … … 932 954 END SUBROUTINE ssh_asm_inc 933 955 934 956 SUBROUTINE sit_asm_inc( kt, kindic ) 957 !!---------------------------------------------------------------------- 958 !! *** ROUTINE sit_asm_inc *** 959 !! 960 !! ** Purpose : Apply the sea ice thickness assimilation increment. 961 !! 962 !! ** Method : Direct initialization or Incremental Analysis Updating. 963 !! 964 !! ** Action : 965 !! 966 !!---------------------------------------------------------------------- 967 IMPLICIT NONE 968 ! 969 INTEGER, INTENT(in) :: kt ! Current time step 970 INTEGER, INTENT(in), OPTIONAL :: kindic ! flag for disabling the deallocation 971 ! 972 INTEGER :: it 973 REAL(wp) :: zincwgt ! IAU weight for current time step 974 ! #if defined key_lim2 975 ! REAL(wp), DIMENSION(jpi,jpj) :: zofrld, zohicif, zseaicendg, zhicifinc ! LIM 976 ! REAL(wp) :: zhicifmin = 0.5_wp ! ice minimum depth in metres 977 ! !!THICKNESS INCS NOT SET UP FOR LIM 978 ! #endif 979 !!---------------------------------------------------------------------- 980 981 IF ( ln_asmiau ) THEN 982 983 !-------------------------------------------------------------------- 984 ! Incremental Analysis Updating 985 !-------------------------------------------------------------------- 986 987 IF ( ( kt >= nitiaustr_r ).AND.( kt <= nitiaufin_r ) ) THEN 988 989 it = kt - nit000 + 1 990 zincwgt = wgtiau(it) ! IAU weight for the current time step 991 ! note this is not a tendency so should not be divided by rdt (as with the tracer and other increments) 992 993 IF(lwp) THEN 994 WRITE(numout,*) 995 WRITE(numout,*) 'sit_asm_inc : sea ice thick IAU at time step = ', & 996 & kt,' with IAU weight = ', wgtiau(it) 997 WRITE(numout,*) '~~~~~~~~~~~~' 998 ENDIF 999 1000 ! Sea-ice : LIM-3 case (to add) 1001 1002 ! #if defined key_lim2 1003 ! ! Sea-ice : LIM-2 case (to add if needed) 1004 ! zofrld (:,:) = frld(:,:) 1005 ! zohicif(:,:) = hicif(:,:) 1006 ! ! 1007 ! frld = MIN( MAX( frld (:,:) - seaice_bkginc(:,:) * zincwgt, 0.0_wp), 1.0_wp) 1008 ! pfrld = MIN( MAX( pfrld(:,:) - seaice_bkginc(:,:) * zincwgt, 0.0_wp), 1.0_wp) 1009 ! fr_i(:,:) = 1.0_wp - frld(:,:) ! adjust ice fraction 1010 ! ! 1011 ! zseaicendg(:,:) = zofrld(:,:) - frld(:,:) ! find out actual sea ice nudge applied 1012 ! ! 1013 ! ! Nudge sea ice depth to bring it up to a required minimum depth 1014 ! WHERE( zseaicendg(:,:) > 0.0_wp .AND. hicif(:,:) < zhicifmin ) 1015 ! zhicifinc(:,:) = (zhicifmin - hicif(:,:)) * zincwgt 1016 ! ELSEWHERE 1017 ! zhicifinc(:,:) = 0.0_wp 1018 ! END WHERE 1019 ! ! 1020 ! ! nudge ice depth 1021 ! hicif (:,:) = hicif (:,:) + zhicifinc(:,:) 1022 ! phicif(:,:) = phicif(:,:) + zhicifinc(:,:) 1023 ! ! 1024 ! ! seaice salinity balancing (to add) 1025 ! #endif 1026 1027 #if defined key_cice && defined key_asminc 1028 ! Sea-ice thickness : CICE case. Pass ice thickness increment tendency into CICE 1029 ndsit_da(:,:) = sit_bkginc(:,:) * zincwgt / rdt 1030 #endif 1031 1032 IF ( kt == nitiaufin_r ) THEN 1033 DEALLOCATE( sit_bkginc ) 1034 ENDIF 1035 1036 ELSE 1037 1038 #if defined key_cice && defined key_asminc 1039 ! Sea-ice thickness : CICE case. Zero ice increment tendency into CICE 1040 ndsit_da(:,:) = 0.0_wp 1041 #endif 1042 1043 ENDIF 1044 1045 ELSEIF ( ln_asmdin ) THEN 1046 1047 !-------------------------------------------------------------------- 1048 ! Direct Initialization 1049 !-------------------------------------------------------------------- 1050 1051 IF ( kt == nitdin_r ) THEN 1052 1053 neuler = 0 ! Force Euler forward step 1054 1055 ! Sea-ice : LIM-3 case (to add) 1056 1057 ! #if defined key_lim2 1058 ! ! Sea-ice : LIM-2 case (add if needed) 1059 ! zofrld(:,:)=frld(:,:) 1060 ! zohicif(:,:)=hicif(:,:) 1061 ! ! 1062 ! ! Initialize the now fields the background + increment 1063 ! frld (:,:) = MIN( MAX( frld(:,:) - seaice_bkginc(:,:), 0.0_wp), 1.0_wp) 1064 ! pfrld(:,:) = frld(:,:) 1065 ! fr_i (:,:) = 1.0_wp - frld(:,:) ! adjust ice fraction 1066 ! zseaicendg(:,:) = zofrld(:,:) - frld(:,:) ! find out actual sea ice nudge applied 1067 ! ! 1068 ! ! Nudge sea ice depth to bring it up to a required minimum depth 1069 ! WHERE( zseaicendg(:,:) > 0.0_wp .AND. hicif(:,:) < zhicifmin ) 1070 ! zhicifinc(:,:) = (zhicifmin - hicif(:,:)) * zincwgt 1071 ! ELSEWHERE 1072 ! zhicifinc(:,:) = 0.0_wp 1073 ! END WHERE 1074 ! ! 1075 ! ! nudge ice depth 1076 ! hicif (:,:) = hicif (:,:) + zhicifinc(:,:) 1077 ! phicif(:,:) = phicif(:,:) 1078 ! ! 1079 ! ! seaice salinity balancing (to add) 1080 ! #endif 1081 1082 #if defined key_cice && defined key_asminc 1083 ! Sea-ice thickness : CICE case. Pass ice thickness increment tendency into CICE 1084 ndsit_da(:,:) = sit_bkginc(:,:) / rdt 1085 #endif 1086 IF ( .NOT. PRESENT(kindic) ) THEN 1087 DEALLOCATE( sit_bkginc ) 1088 END IF 1089 1090 ELSE 1091 1092 #if defined key_cice && defined key_asminc 1093 ! Sea-ice thicnkness : CICE case. Zero ice thickness increment tendency into CICE 1094 ndsit_da(:,:) = 0.0_wp 1095 #endif 1096 1097 ENDIF 1098 1099 !#if defined defined key_lim2 || defined key_cice 1100 ! 1101 ! IF (ln_seaicebal ) THEN 1102 ! !! balancing salinity increments 1103 ! !! simple case from limflx.F90 (doesn't include a mass flux) 1104 ! !! assumption is that as ice concentration is reduced or increased 1105 ! !! the snow and ice depths remain constant 1106 ! !! note that snow is being created where ice concentration is being increased 1107 ! !! - could be more sophisticated and 1108 ! !! not do this (but would need to alter h_snow) 1109 ! 1110 ! usave(:,:,:)=sb(:,:,:) ! use array as a temporary store 1111 ! 1112 ! DO jj = 1, jpj 1113 ! DO ji = 1, jpi 1114 ! ! calculate change in ice and snow mass per unit area 1115 ! ! positive values imply adding salt to the ocean (results from ice formation) 1116 ! ! fwf : ice formation and melting 1117 ! 1118 ! zfons = ( -nfresh_da(ji,jj)*soce + nfsalt_da(ji,jj) )*rdt 1119 ! 1120 ! ! change salinity down to mixed layer depth 1121 ! mld=hmld_kara(ji,jj) 1122 ! 1123 ! ! prevent small mld 1124 ! ! less than 10m can cause salinity instability 1125 ! IF (mld < 10) mld=10 1126 ! 1127 ! ! set to bottom of a level 1128 ! DO jk = jpk-1, 2, -1 1129 ! IF ((mld > gdepw(ji,jj,jk)) .and. (mld < gdepw(ji,jj,jk+1))) THEN 1130 ! mld=gdepw(ji,jj,jk+1) 1131 ! jkmax=jk 1132 ! ENDIF 1133 ! ENDDO 1134 ! 1135 ! ! avoid applying salinity balancing in shallow water or on land 1136 ! ! 1137 ! 1138 ! ! dsal_ocn (psu kg m^-2) / (kg m^-3 * m) 1139 ! 1140 ! dsal_ocn=0.0_wp 1141 ! sal_thresh=5.0_wp ! minimum salinity threshold for salinity balancing 1142 ! 1143 ! if (tmask(ji,jj,1) > 0 .AND. tmask(ji,jj,jkmax) > 0 ) & 1144 ! dsal_ocn = zfons / (rhop(ji,jj,1) * mld) 1145 ! 1146 ! ! put increments in for levels in the mixed layer 1147 ! ! but prevent salinity below a threshold value 1148 ! 1149 ! DO jk = 1, jkmax 1150 ! 1151 ! IF (dsal_ocn > 0.0_wp .or. sb(ji,jj,jk)+dsal_ocn > sal_thresh) THEN 1152 ! sb(ji,jj,jk) = sb(ji,jj,jk) + dsal_ocn 1153 ! sn(ji,jj,jk) = sn(ji,jj,jk) + dsal_ocn 1154 ! ENDIF 1155 ! 1156 ! ENDDO 1157 ! 1158 ! ! ! salt exchanges at the ice/ocean interface 1159 ! ! zpmess = zfons / rdt_ice ! rdt_ice is ice timestep 1160 ! ! 1161 ! !! Adjust fsalt. A +ve fsalt means adding salt to ocean 1162 ! !! fsalt(ji,jj) = fsalt(ji,jj) + zpmess ! adjust fsalt 1163 ! !! 1164 ! !! emps(ji,jj) = emps(ji,jj) + zpmess ! or adjust emps (see icestp1d) 1165 ! !! ! E-P (kg m-2 s-2) 1166 ! ! emp(ji,jj) = emp(ji,jj) + zpmess ! E-P (kg m-2 s-2) 1167 ! ENDDO !ji 1168 ! ENDDO !jj! 1169 ! 1170 ! ENDIF !ln_seaicebal 1171 ! 1172 !#endif 1173 1174 ENDIF 1175 1176 END SUBROUTINE sit_asm_inc 1177 935 1178 SUBROUTINE seaice_asm_inc( kt, kindic ) 936 1179 !!---------------------------------------------------------------------- 937 1180 !! *** ROUTINE seaice_asm_inc *** 938 1181 !! 939 !! ** Purpose : Apply the sea ice assimilation increment.1182 !! ** Purpose : Apply the sea ice concentration assimilation increment. 940 1183 !! 941 1184 !! ** Method : Direct initialization or Incremental Analysis Updating. -
branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM/NEMO/OPA_SRC/OBS/diaobs.F90
r9306 r10181 52 52 LOGICAL :: ln_sst_fp_indegs !: T=> SST obs footprint size specified in degrees, F=> in metres 53 53 LOGICAL :: ln_sss_fp_indegs !: T=> SSS obs footprint size specified in degrees, F=> in metres 54 LOGICAL :: ln_sic_fp_indegs !: T=> sea-ice obs footprint size specified in degrees, F=> in metres 54 LOGICAL :: ln_sic_fp_indegs !: T=> SIC obs footprint size specified in degrees, F=> in metres 55 LOGICAL :: ln_sit_fp_indegs !: T=> SIT obs footprint size specified in degrees, F=> in metres 55 56 56 57 REAL(wp) :: rn_default_avglamscl !: Default E/W diameter of observation footprint … … 62 63 REAL(wp) :: rn_sss_avglamscl !: E/W diameter of SSS observation footprint 63 64 REAL(wp) :: rn_sss_avgphiscl !: N/S diameter of SSS observation footprint 64 REAL(wp) :: rn_sic_avglamscl !: E/W diameter of sea-ice observation footprint 65 REAL(wp) :: rn_sic_avgphiscl !: N/S diameter of sea-ice observation footprint 66 65 REAL(wp) :: rn_sic_avglamscl !: E/W diameter of SIC observation footprint 66 REAL(wp) :: rn_sic_avgphiscl !: N/S diameter of SIC observation footprint 67 REAL(wp) :: rn_sit_avglamscl !: E/W diameter of SIT observation footprint 68 REAL(wp) :: rn_sit_avgphiscl !: N/S diameter of SIT observation footprint 69 67 70 INTEGER :: nn_1dint !: Vertical interpolation method 68 71 INTEGER :: nn_2dint_default !: Default horizontal interpolation method … … 70 73 INTEGER :: nn_2dint_sst !: SST horizontal interpolation method (-1 = default) 71 74 INTEGER :: nn_2dint_sss !: SSS horizontal interpolation method (-1 = default) 72 INTEGER :: nn_2dint_sic !: Seaice horizontal interpolation method (-1 = default) 75 INTEGER :: nn_2dint_sic !: SIC horizontal interpolation method (-1 = default) 76 INTEGER :: nn_2dint_sit !: SIT horizontal interpolation method (-1 = default) 73 77 74 78 INTEGER, DIMENSION(imaxavtypes) :: & … … 151 155 & cn_slafbfiles, & ! Sea level anomaly input filenames 152 156 & cn_sicfbfiles, & ! Seaice concentration input filenames 157 & cn_sitfbfiles, & ! Seaice thickness input filenames 153 158 & cn_velfbfiles, & ! Velocity profile input filenames 154 159 & cn_sssfbfiles, & ! Sea surface salinity input filenames … … 187 192 LOGICAL :: ln_sst ! Logical switch for sea surface temperature 188 193 LOGICAL :: ln_sic ! Logical switch for sea ice concentration 194 LOGICAL :: ln_sit ! Logical switch for sea ice thickness 189 195 LOGICAL :: ln_sss ! Logical switch for sea surface salinity obs 190 196 LOGICAL :: ln_vel3d ! Logical switch for velocity (u,v) obs … … 242 248 243 249 NAMELIST/namobs/ln_diaobs, ln_t3d, ln_s3d, ln_sla, & 244 & ln_sst, ln_sic, ln_s ss, ln_vel3d,&250 & ln_sst, ln_sic, ln_sit, ln_sss, ln_vel3d, & 245 251 & ln_slchltot, ln_slchldia, ln_slchlnon, & 246 252 & ln_slchldin, ln_slchlmic, ln_slchlnan, & … … 257 263 & ln_sla_fp_indegs, ln_sst_fp_indegs, & 258 264 & ln_sss_fp_indegs, ln_sic_fp_indegs, & 265 & ln_sit_fp_indegs, & 259 266 & cn_profbfiles, cn_slafbfiles, & 260 267 & cn_sstfbfiles, cn_sicfbfiles, & 268 & cn_sitfbfiles, & 261 269 & cn_velfbfiles, cn_sssfbfiles, & 262 270 & cn_slchltotfbfiles, cn_slchldiafbfiles, & … … 279 287 & rn_sss_avglamscl, rn_sss_avgphiscl, & 280 288 & rn_sic_avglamscl, rn_sic_avgphiscl, & 289 & rn_sit_avglamscl, rn_sit_avgphiscl, & 281 290 & nn_1dint, nn_2dint_default, & 282 291 & nn_2dint_sla, nn_2dint_sst, & 283 292 & nn_2dint_sss, nn_2dint_sic, & 293 & nn_2dint_sit, & 284 294 & nn_msshc, rn_mdtcorr, rn_mdtcutoff, & 285 295 & nn_profdavtypes … … 294 304 cn_sstfbfiles(:) = '' 295 305 cn_sicfbfiles(:) = '' 306 cn_sitfbfiles(:) = '' 296 307 cn_velfbfiles(:) = '' 297 308 cn_sssfbfiles(:) = '' … … 355 366 WRITE(numout,*) ' Logical switch for SLA observations ln_sla = ', ln_sla 356 367 WRITE(numout,*) ' Logical switch for SST observations ln_sst = ', ln_sst 357 WRITE(numout,*) ' Logical switch for Sea Ice observations ln_sic = ', ln_sic 368 WRITE(numout,*) ' Logical switch for Sea Ice Concentration observations ln_sic = ', ln_sic 369 WRITE(numout,*) ' Logical switch for Sea Ice Thickness observations ln_sit = ', ln_sit 358 370 WRITE(numout,*) ' Logical switch for velocity observations ln_vel3d = ', ln_vel3d 359 371 WRITE(numout,*) ' Logical switch for SSS observations ln_sss = ', ln_sss … … 393 405 WRITE(numout,*) ' Type of horizontal interpolation method for SSS nn_2dint_sss = ', nn_2dint_sss 394 406 WRITE(numout,*) ' Type of horizontal interpolation method for SIC nn_2dint_sic = ', nn_2dint_sic 407 WRITE(numout,*) ' Type of horizontal interpolation method for SIT nn_2dint_sit = ', nn_2dint_sit 395 408 WRITE(numout,*) ' Default E/W diameter of obs footprint rn_default_avglamscl = ', rn_default_avglamscl 396 409 WRITE(numout,*) ' Default N/S diameter of obs footprint rn_default_avgphiscl = ', rn_default_avgphiscl … … 405 418 WRITE(numout,*) ' SIC N/S diameter of obs footprint rn_sic_avgphiscl = ', rn_sic_avgphiscl 406 419 WRITE(numout,*) ' SIC obs footprint in deg [T] or m [F] ln_sic_fp_indegs = ', ln_sic_fp_indegs 420 WRITE(numout,*) ' SIT E/W diameter of obs footprint rn_sit_avglamscl = ', rn_sit_avglamscl 421 WRITE(numout,*) ' SIT N/S diameter of obs footprint rn_sit_avgphiscl = ', rn_sit_avgphiscl 422 WRITE(numout,*) ' SIT obs footprint in deg [T] or m [F] ln_sit_fp_indegs = ', ln_sit_fp_indegs 407 423 WRITE(numout,*) ' Rejection of observations near land switch ln_nea = ', ln_nea 408 424 WRITE(numout,*) ' Rejection of obs near open bdys ln_bound_reject = ', ln_bound_reject … … 424 440 & ln_pchltot, ln_pno3, ln_psi4, ln_ppo4, & 425 441 & ln_pdic, ln_palk, ln_pph, ln_po2 /) ) 426 nsurftypes = COUNT( (/ln_sla, ln_sst, ln_sic, ln_s ss,&442 nsurftypes = COUNT( (/ln_sla, ln_sst, ln_sic, ln_sit, ln_sss, & 427 443 & ln_slchltot, ln_slchldia, ln_slchlnon, ln_slchldin, & 428 444 & ln_slchlmic, ln_slchlnan, ln_slchlpic, ln_schltot, & … … 535 551 clsurffiles(jtype,:) = cn_sicfbfiles 536 552 ENDIF 553 IF (ln_sit) THEN 554 jtype = jtype + 1 555 cobstypessurf(jtype) = 'sit' 556 clsurffiles(jtype,:) = cn_sitfbfiles 557 ENDIF 537 558 IF (ln_sss) THEN 538 559 jtype = jtype + 1 … … 645 666 ltype_fp_indegs = ln_sic_fp_indegs 646 667 ltype_night = .FALSE. 668 ELSE IF ( TRIM(cobstypessurf(jtype)) == 'sit' ) THEN 669 IF ( nn_2dint_sit == -1 ) THEN 670 n2dint_type = nn_2dint_default 671 ELSE 672 n2dint_type = nn_2dint_sit 673 ENDIF 674 ztype_avglamscl = rn_sit_avglamscl 675 ztype_avgphiscl = rn_sit_avgphiscl 676 ltype_fp_indegs = ln_sit_fp_indegs 677 ltype_night = .FALSE. 647 678 ELSE IF ( TRIM(cobstypessurf(jtype)) == 'sss' ) THEN 648 679 IF ( nn_2dint_sss == -1 ) THEN … … 877 908 #endif 878 909 #if defined key_cice 879 USE sbc_oce, ONLY : fr_i ! ice fraction 910 USE sbc_oce, ONLY : & ! CICE variables 911 & fr_i, & ! ice fraction 912 & thick_i ! ice thickness 880 913 #endif 881 914 #if defined key_hadocc … … 1190 1223 & 'time-step but some obs are valid then.' ) 1191 1224 WRITE(numout,*)surfdataqc(jtype)%nsstpmpp(1), & 1192 & ' sea-ice obs will be missed'1225 & ' sea-ice concentration obs will be missed' 1193 1226 ENDIF 1194 1227 surfdataqc(jtype)%nsurfup = surfdataqc(jtype)%nsurfup + & … … 1201 1234 zsurfvar(:,:) = 1._wp - frld(:,:) 1202 1235 #else 1203 CALL ctl_stop( ' Trying to run sea-ice observation operator', & 1236 CALL ctl_stop( ' Trying to run sea-ice concentration observation operator', & 1237 & ' but no sea-ice model appears to have been defined' ) 1238 #endif 1239 ENDIF 1240 CASE('sit') 1241 IF ( kstp == 0 ) THEN ! **Copied from SIC, check applies to SIT!** 1242 IF ( lwp .AND. surfdataqc(jtype)%nsstpmpp(1) > 0 ) THEN 1243 CALL ctl_warn( 'Sea-ice not initialised on zeroth '// & 1244 & 'time-step but some obs are valid then.' ) 1245 WRITE(numout,*)surfdataqc(jtype)%nsstpmpp(1), & 1246 & ' sea-ice thickness obs will be missed' 1247 ENDIF 1248 surfdataqc(jtype)%nsurfup = surfdataqc(jtype)%nsurfup + & 1249 & surfdataqc(jtype)%nsstp(1) 1250 CYCLE 1251 ELSE 1252 #if defined key_cice 1253 ! Will need to convert freeboard to thickness here 1254 zsurfvar(:,:) = thick_i(:,:) 1255 #elif defined key_lim2 || defined key_lim3 1256 CALL ctl_stop( ' No sea-ice thickness observation operator defined for LIM model' ) 1257 #else 1258 CALL ctl_stop( ' Trying to run sea-ice thickness observation operator', & 1204 1259 & ' but no sea-ice model appears to have been defined' ) 1205 1260 #endif -
branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM/NEMO/OPA_SRC/OBS/obs_write.F90
r9308 r10181 493 493 clgrid = 'T' 494 494 495 CASE('SIT') 496 497 clfiletype = 'sitfb' 498 cllongname = 'Sea ice thickness' 499 clunits = 'm' 500 clgrid = 'T' 501 495 502 CASE('SSS') 496 503 -
branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_ice.F90
r9987 r10181 105 105 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tsfc_ice !: sea-ice surface skin temperature (on categories) 106 106 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: kn_ice !: sea-ice surface layer thermal conductivity (on cats) 107 107 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: thick_iu !: ice thickness at NEMO U point 108 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: thick_iv !: ice thickness at NEMO V point 108 109 ! variables used in the coupled interface 109 110 INTEGER , PUBLIC, PARAMETER :: jpl = ncat … … 116 117 #if defined key_asminc 117 118 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ndaice_da !: NEMO fresh water flux to ocean due to data assim 119 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ndsit_da !: NEMO ice thickness change from data assim (/second? These descriptions are jumbled?) 118 120 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: nfresh_da !: NEMO salt flux to ocean due to data assim 119 121 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: nfsalt_da !: NEMO ice concentration change/second from data assim … … 171 173 wndj_ice(jpi,jpj) , nfrzmlt(jpi,jpj) , ss_iou(jpi,jpj) , & 172 174 ss_iov(jpi,jpj) , fr_iu(jpi,jpj) , fr_iv(jpi,jpj) , & 175 thick_iu(jpi,jpj) , thick_iv(jpi,jpj) , & 176 ht_i(jpi,jpj,ncat) , ht_s(jpi,jpj,ncat) , & 173 177 a_i(jpi,jpj,ncat) , topmelt(jpi,jpj,ncat) , botmelt(jpi,jpj,ncat) , & 174 178 #if defined key_asminc 175 179 ndaice_da(jpi,jpj) , nfresh_da(jpi,jpj) , nfsalt_da(jpi,jpj) , & 180 ndsit_da(jpi,jpj) , & 176 181 #endif 177 182 sstfrz(jpi,jpj) , STAT= ierr(1) ) -
branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_oce.F90
r9987 r10181 121 121 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: sprecip !: solid precipitation [Kg/m2/s] 122 122 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fr_i !: ice fraction = 1 - lead fraction (between 0 to 1) 123 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: thick_i !: ice thickness [m] 124 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: vol_i !: ice volume [m3] 123 125 #if defined key_cpl_carbon_cycle 124 126 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: atm_co2 !: atmospheric pCO2 [ppm] … … 196 198 ! 197 199 ALLOCATE( tprecip(jpi,jpj) , sprecip(jpi,jpj) , fr_i(jpi,jpj) , & 200 & thick_i(jpi,jpj) , vol_i(jpi,jpj) , & 198 201 #if defined key_cpl_carbon_cycle 199 202 & atm_co2(jpi,jpj) , & -
branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_cice.F90
r9987 r10181 57 57 flatn_f,fsurfn_f,fcondtopn_f, & 58 58 #ifdef key_asminc 59 daice_da, fresh_da,fsalt_da,&59 daice_da,dsit_da,fresh_da,fsalt_da, & 60 60 #endif 61 61 uatm,vatm,wind,fsw,flw,Tair,potT,Qa,rhoa,zlvl, & … … 250 250 CALL lbc_lnk ( fr_iu , 'U', 1. ) 251 251 CALL lbc_lnk ( fr_iv , 'V', 1. ) 252 253 !!*****JUST ADDED BUT NEEDS CONFIRMING!!**** 254 ! Snow and ice thickness 255 CALL cice2nemo(vice,thick_i,'T', 1. ) !!Do this for snow depth too? set thick_s. Duplicated below for embedded ice? 256 257 ! vice is volume per unit area of grid cell = thickness 258 259 IF ( (ksbc == jp_flx) .OR. (ksbc == jp_purecpl) ) THEN ! Confirm what this if loop is for 260 DO jl = 1,ncat 261 CALL cice2nemo(vsnon(:,:,jl,:),ht_s(:,:,jl),'T', 1. ) 262 CALL cice2nemo(vicen(:,:,jl,:),ht_i(:,:,jl),'T', 1. ) 263 ENDDO 264 ENDIF 265 266 ! T point to U point 267 ! T point to V point 268 thick_iu(:,:)=0.0 269 thick_iv(:,:)=0.0 270 DO jj=1,jpjm1 271 DO ji=1,jpim1 272 thick_iu(ji,jj)=0.5*(thick_i(ji,jj)+thick_i(ji+1,jj))*umask(ji,jj,1) 273 thick_iv(ji,jj)=0.5*(thick_i(ji,jj)+thick_i(ji,jj+1))*vmask(ji,jj,1) 274 ENDDO 275 ENDDO 276 277 CALL lbc_lnk ( thick_iu , 'U', 1. ) 278 CALL lbc_lnk ( thick_iv , 'V', 1. ) 279 280 !!********************************************************** 281 252 282 253 283 ! ! embedded sea ice … … 310 340 nfresh_da(:,:) = 0.0 311 341 nfsalt_da(:,:) = 0.0 312 ndaice_da(:,:) = 0.0 342 ndaice_da(:,:) = 0.0 343 ndsit_da(:,:) = 0.0 313 344 #endif 314 345 ! … … 469 500 ztmp(:,:)=ndaice_da(:,:)*tmask(:,:,1) 470 501 Call nemo2cice(ztmp,daice_da,'T', 1. ) 502 !Ice thickness change (from assimilation) 503 ztmp(:,:)=ndsit_da(:,:)*tmask(:,:,1) 504 Call nemo2cice(ztmp,dsit_da,'T', 1. ) 471 505 #endif 472 506
Note: See TracChangeset
for help on using the changeset viewer.