SUBROUTINE ice_output(nlay_i,nlay_s) !=============================================================================! ! ice_output : Creates and write in the ice output file ! (c) Martin Vancoppenolle, Xavier Fettweis, UCL-ASTR, June 2007 !=============================================================================! INCLUDE 'type.com' INCLUDE 'para.com' INCLUDE 'const.com' INCLUDE 'ice.com' INCLUDE 'thermo.com' INCLUDE 'bio.com' INCLUDE 'forcing.com' INCLUDE 'tank.com' CHARACTER(len=10) :: & filenc='ice.out.nc' CHARACTER(len=1) :: & c1 CHARACTER(len=4) :: & c4 REAL, DIMENSION(nend) :: dimval REAL, DIMENSION(nlay_i) :: dimval2 REAL, DIMENSION(nlay_bio) :: dimval3 REAL, DIMENSION(nlay_s) :: dimval4 REAL, DIMENSION(nlay_i) :: dummy_vector !=============================================================================! WRITE(numout,*) ' ice_output : ' WRITE(numout,*) ' ~~~~~~~~~~ : ' WRITE(numout,*) , c_bio_model ! !-----------------------------------------------------------------------------! ! 1) File definition !-----------------------------------------------------------------------------! ! IF ( numit .EQ. nstart ) THEN WRITE(numout,*) ' Initialization of the NetCdf file : ' !--------------------- ! File initialization !--------------------- CALL CF_INI_FILE(filenc,"Output NETCDF for LIM1D") !--------------------- ! Dimensions creation !--------------------- ! time !------ DO i = nstart , nend dimval(i) = REAL(i) ENDDO ! WRITE(numout,*) ' dimval : ', ( dimval(i), i = nstart, nend ) IF ( ddtb .EQ. 60 ) & CALL CF_CREATE_DIM("time" ,"min" ,nitrun, & dimval(nstart:nend)) IF ( ddtb .EQ. 600) & CALL CF_CREATE_DIM("time" ,"10min" ,nitrun, & dimval(nstart:nend)) IF ( ddtb .EQ. 3600 ) & CALL CF_CREATE_DIM("time" ,"hours" ,nitrun, & dimval(nstart:nend)) IF ( ddtb .EQ. 86400 ) & CALL CF_CREATE_DIM("time" ,"days" ,nitrun, & dimval(nstart:nend)) IF ( ddtb .EQ. 21600 ) & CALL CF_CREATE_DIM("time" ,"6h" ,nitrun, & dimval(nstart:nend)) WRITE(numout,*) ' time dimension created ' ! snow vertical coordinate (moving) !----------------------------------- DO i = 1, nlay_s dimval4(i) = REAL(i) ENDDO CALL CF_CREATE_DIM("z_s_p" ,"m" ,nlay_s, & dimval4(1:nlay_s)) WRITE(numout,*) ' z_s_p dimension created ' ! physical vertical coordinate (moving) !--------------------------------------- DO i = 1, nlay_i dimval2(i) = REAL(i) ENDDO CALL CF_CREATE_DIM("z_i_p" ,"m" ,nlay_i, & dimval2(1:nlay_i)) WRITE(numout,*) ' z_i_p dimension created ' ! ! biological vertical coordinate (moving) ! !----------------------------------------- DO i = 1, nlay_bio dimval3(i) = REAL(i) ENDDO CALL CF_CREATE_DIM("z_i_b" ,"m" ,nlay_bio, & dimval3(1:nlay_bio)) WRITE(numout,*) ' z_i_b dimension created ' !-------------------- ! Variables creation !-------------------- ! Times !------- CALL CF_CREATE_VAR("numt","Time step", . "nts","time","-","-","-" ) CALL CF_CREATE_VAR("doy","Day Of Year", . "nts","time","-","-","-" ) CALL CF_CREATE_VAR("ts_m","Time step in months", . "mon","time","-","-","-" ) CALL CF_CREATE_VAR("ts_d","Time step in days", . "y","time","-","-","-" ) ! Grids !------- CALL CF_CREATE_VAR("z_ip","Vertical cote, physics", . "m","time","z_i_p","-","-" ) CALL CF_CREATE_VAR("z_ib","Vertical cote, biology", . "m","time","z_i_b","-","-" ) IF ( ( c_grid .EQ. 'SL' ) .OR. ( c_grid .EQ. 'BA' ) ) & CALL CF_CREATE_VAR("hbio","Biologically active layer", & "m","time","-","-","-" ) ! Ice / snow thickness and variations !------------------------------------- CALL CF_CREATE_VAR("h_i","Ice thickness", . "m","time","-","-","-" ) WRITE(numout,*) ' h_i dimension created ' CALL CF_CREATE_VAR("dhib","Bottom accretion", . "cm/day","time","-","-","-" ) CALL CF_CREATE_VAR("dhisu","Surface ice melt", . "cm/day","time","-","-","-" ) CALL CF_CREATE_VAR("dhisi","Snow ice formation", . "cm/day","time","-","-","-" ) CALL CF_CREATE_VAR("dhs","Snow variations", . "cm/day","time","-","-","-" ) CALL CF_CREATE_VAR("h_s","Snow depth ", . "m","time","-","-","-" ) WRITE(numout,*) ' h_s dimension created ' CALL CF_CREATE_VAR("uml","Surface ocean layer", . "m","time","-","-","-" ) WRITE(numout,*) ' uml dimension created ' ! Inner ice variables !--------------------- CALL CF_CREATE_VAR("t_i","Ice Temperature", . "C","time","z_i_p","-","-" ) WRITE(numout,*) ' t_i dimension created ' CALL CF_CREATE_VAR("s_i","Ice Salinity", . "g/kg","time","z_i_p","-","-" ) WRITE(numout,*) ' s_i dimension created ' CALL CF_CREATE_VAR("e_i","Brine volume", . "%","time","z_i_p","-","-" ) WRITE(numout,*) ' e_i dimension created ' CALL CF_CREATE_VAR("e_i_bio","Brine volume bio", . "%","time","z_i_p","-","-" ) WRITE(numout,*) ' e_i_bio dimension created ' CALL CF_CREATE_VAR("t_i_bio","Temperature bio", . "C","time","z_i_p","-","-" ) WRITE(numout,*) ' t_i_bio dimension created ' CALL CF_CREATE_VAR("s_i_bio","Salinity bio", . "g/kg","time","z_i_p","-","-" ) WRITE(numout,*) ' s_i_bio dimension created ' CALL CF_CREATE_VAR("sbr_bio","Sbr bio", . "g/kg","time","z_i_p","-","-" ) WRITE(numout,*) ' sbr_bio dimension created ' CALL CF_CREATE_VAR("ra","Rayleigh number", . "-","time","z_i_p","-","-" ) WRITE(numout,*) ' Ra dimension created ' CALL CF_CREATE_VAR("diff","Salt diffusivity", . "m2/s","time","z_i_p","-","-" ) WRITE(numout,*) ' Diff dimension created ' CALL CF_CREATE_VAR("perm_eff","Effective permeability", . "m2","time","z_i_p","-","-" ) WRITE(numout,*) ' perm_eff dimension created ' CALL CF_CREATE_VAR("w_adv_br","Upwelling Darcy velocity", . "m/s","time","z_i_p","-","-" ) WRITE(numout,*) ' w_adv_br dimension created ' ! fsupw2 upwelling salt flux into layer k ! fsupw1 upwelling salt flux from layer k into layer k-1 ! fsdwn downwelling salt flux from layer k (brine channels) ! dzdsdt = rate of change in salt content CALL CF_CREATE_VAR("fsupw2","Salt flux from lower layer", . "g/kg.m/s","time","z_i_p","-","-" ) WRITE(numout,*) ' fsupw2 dimension created ' CALL CF_CREATE_VAR("fsupw1","Salt flux to upper layer", . "g/kg.m/s","time","z_i_p","-","-" ) WRITE(numout,*) ' fsupw1 dimension created ' CALL CF_CREATE_VAR("fsdwn","Salt flux into channels", . "g/kg.m/s","time","z_i_p","-","-" ) WRITE(numout,*) ' fsdwn dimension created ' CALL CF_CREATE_VAR("dzdsdt","Change in salt content", . "g/kg.m/s","time","z_i_p","-","-" ) WRITE(numout,*) ' dzdsdt dimension created ' CALL CF_CREATE_VAR("t_s","Snow Temperature", . "C","time","z_s_p","-","-" ) WRITE(numout,*) ' t_s dimension created ' CALL CF_CREATE_VAR("t_su","Surface Temperature", . "C","time","-","-","-" ) WRITE(numout,*) ' t_su dimension created ' CALL CF_CREATE_VAR("fsb","Ice-ocean bd salt flux", . "kgNaCl/m2/s","time","-","-","-" ) WRITE(numout,*) ' fsb dimension created ' CALL CF_CREATE_VAR("fsbp","Ice-ocean se salt flux", . "kgNaCl/m2/s","time","-","-","-" ) WRITE(numout,*) ' fsbp dimension created ' CALL CF_CREATE_VAR("s_w","Water Salinity", . "g/kg","time","-","-","-" ) WRITE(numout,*) ' s_w dimension created ' CALL CF_CREATE_VAR("v_w","Water Volume", . "m3","time","-","-","-" ) WRITE(numout,*) ' v_w dimension created ' ! Forcing !--------- CALL CF_CREATE_VAR("albe","Surface albedo", . "/","time","-","-","-" ) CALL CF_CREATE_VAR("F_sw","Incoming solar", . "W.m-2","time","-","-","-" ) CALL CF_CREATE_VAR("Fswn","Net solar", . "W.m-2","time","-","-","-" ) CALL CF_CREATE_VAR("Flwd","Incoming longwave", . "W.m-2","time","-","-","-" ) CALL CF_CREATE_VAR("Flwu","Emitted longwave", . "W.m-2","time","-","-","-" ) CALL CF_CREATE_VAR("F_sh","Sensible heat flux", . "W.m-2","time","-","-","-" ) CALL CF_CREATE_VAR("F_lh","Latent heat flux", . "W.m-2","time","-","-","-" ) CALL CF_CREATE_VAR("Tair","Air temperature ", . "C","time","-","-","-" ) CALL CF_CREATE_VAR("qair","Air humidity ", . "kg/kg","time","-","-","-" ) CALL CF_CREATE_VAR("wspd","Wind speed", . "m/s","time","-","-","-" ) CALL CF_CREATE_VAR("qsfc","Surface humidity", . "kg/kg","time","-","-","-" ) CALL CF_CREATE_VAR("tdew","Relative air humidity", . "%","time","-","-","-" ) CALL CF_CREATE_VAR("cldf","Cloud fraction", . "0-1","time","-","-","-" ) CALL CF_CREATE_VAR("sfal","Snowfall rate", . "m/s","time","-","-","-" ) CALL CF_CREATE_VAR("pres","Atmospheric pressure", . "Pa","time","-","-","-" ) ! Radiative transfer !-------------------- CALL CF_CREATE_VAR("T_is","Transmitted rad flx through ice", . "W.m-2","time","-","-","-" ) CALL CF_CREATE_VAR("T_oc","Transmitted rad flux to ocean", . "W.m-2","time","-","-","-" ) CALL CF_CREATE_VAR("A_s","Absorbed rad flux by snow", . "W.m-2","time","z_s_p","-","-" ) CALL CF_CREATE_VAR("A_ib","Absorbed rad in ice by algae", . "W.m-2","time","z_i_p","-","-" ) CALL CF_CREATE_VAR("A_ip","Absorbed rad in ice physically", . "W.m-2","time","z_i_p","-","-" ) IF ( c_bio_model .EQ. 'KRILL' ) THEN ! Biological variables !---------------------- DO jn = 1, ntra_bio IF ( flag_diff(jn) .AND. flag_active(jn) ) THEN WRITE(numout,*) ' Tracer number : ', jn CALL CF_CREATE_VAR(TRIM(biotr_i_nam(jn))//"d", & "Brine cc., "//TRIM(biotr_i_nam(jn)), & TRIM(biotr_i_uni(jn)),"time","z_i_b","-","-" ) WRITE(numout,*) ' Brine tracer conc created ', & TRIM(biotr_i_nam(jn))//"d" ENDIF IF ( flag_active(jn) ) THEN WRITE(numout,*) ' Tracer number : ', jn CALL CF_CREATE_VAR(TRIM(biotr_i_nam(jn))//"b", & "Bulk cc., "//TRIM(biotr_i_nam(jn)), & TRIM(biotr_i_uni(jn)),"time","z_i_b","-","-" ) WRITE(numout,*) ' Brine tracer conc created ', & TRIM(biotr_i_nam(jn))//"b" ENDIF IF ( flag_active(jn) ) THEN WRITE(numout,*) ' Tracer number : ', jn CALL CF_CREATE_VAR(TRIM(biotr_i_nam(jn))//"t", & "Total content, "//TRIM(biotr_i_nam(jn)), & TRIM(biotr_i_uni(jn))//".m","time","-","-","-" ) WRITE(numout,*) ' Total tracer content created ', & TRIM(biotr_i_nam(jn))//"t" ENDIF IF ( flag_active(jn) ) THEN WRITE(numout,*) ' Tracer number : ', jn CALL CF_CREATE_VAR(TRIM(biotr_i_nam(jn))//"w", & "UML cc., "//TRIM(biotr_i_nam(jn)), & TRIM(biotr_i_uni(jn))//"m","time","-","-","-" ) WRITE(numout,*) ' UML tracer cc. created ', & TRIM(biotr_i_nam(jn))//"w" ENDIF IF ( flag_active(jn) ) THEN WRITE(numout,*) ' Tracer number : ', jn CALL CF_CREATE_VAR("F"//TRIM(biotr_i_nam(jn)), & "Ice-ocean "//TRIM(biotr_i_nam(jn))//" diffusive flux", & TRIM(biotr_i_uni(jn))//".m/s","time","-","-","-") WRITE(numout,*) ' Tracer flux dimension created ', & TRIM(biotr_i_nam(jn))//"t" ENDIF IF ( flag_active(jn) ) THEN WRITE(numout,*) ' Tracer number : ', jn CALL CF_CREATE_VAR("F"//TRIM(biotr_i_nam(jn))//"b", & "Ice-ocean "//TRIM(biotr_i_nam(jn))//" basal flux", & TRIM(biotr_i_uni(jn))//".m/s","time","-","-","-") WRITE(numout,*) ' Tracer flux dimension created ', & TRIM(biotr_i_nam(jn))//"t" ENDIF IF ( flag_active(jn) ) THEN WRITE(numout,*) ' Tracer number : ', jn CALL CF_CREATE_VAR("F"//TRIM(biotr_i_nam(jn))//"si", & "Ice-ocean "//TRIM(biotr_i_nam(jn))//" snow ice flux", & TRIM(biotr_i_uni(jn))//".m/s","time","-","-","-") WRITE(numout,*) ' Tracer flux dimension created ', & TRIM(biotr_i_nam(jn))//"t" ENDIF IF ( flag_active(jn) ) THEN WRITE(numout,*) ' Tracer number : ', jn CALL CF_CREATE_VAR("F"//TRIM(biotr_i_nam(jn))//"bmax", & "Ice-ocean "//TRIM(biotr_i_nam(jn))//" maximal flux", & TRIM(biotr_i_uni(jn))//".m/s","time","-","-","-") WRITE(numout,*) ' Tracer flux dimension created ', & TRIM(biotr_i_nam(jn))//"t" ENDIF ! Gas flux IF ( flag_active(jn) .AND. ( biotr_i_typ(jn) .EQ. 'gas' ) ) & THEN WRITE(numout,*) ' Tracer number : ', jn CALL CF_CREATE_VAR(TRIM(biotr_i_nam(jn))//"bub", & "Bubble cc., "//biotr_i_nam(jn), & TRIM(biotr_i_uni(jn)),"time","z_i_b","-","-" ) WRITE(numout,*) ' Bubble concentration dimension created ', & TRIM(biotr_i_nam(jn))//"bu_bub" WRITE(numout,*) ' Tracer number : ', jn CALL CF_CREATE_VAR("F"//TRIM(biotr_i_nam(jn))//"_atm", & "Ice-atmos "//TRIM(biotr_i_nam(jn))//" diffusive flux", & biotr_i_uni(jn)//"/m2/s","time","-","-","-") WRITE(numout,*) ' Tracer gas flux dimension created ', & TRIM(biotr_i_nam(jn))//"flux" WRITE(numout,*) ' Tracer number : ', jn CALL CF_CREATE_VAR("F"//TRIM(biotr_i_nam(jn))//"_bub", & "Ice-atmos, "//TRIM(biotr_i_nam(jn))//" bubble flux", & TRIM(biotr_i_uni(jn))//"/m2/s","time","-","-","-") WRITE(numout,*) 'Surface bubble flux dimension created ', & TRIM(biotr_i_nam(jn))//"bub_flux" WRITE(numout,*) ' Tracer number : ', jn CALL CF_CREATE_VAR(TRIM(biotr_i_nam(jn))//"_trvel", & "Ice-atmos "//TRIM(biotr_i_nam(jn))//" transfer velocity", & TRIM(biotr_i_uni(jn))//"m/s","time","-","-","-") WRITE(numout,*) ' At-ice gas transfer vel. dimension created ', & TRIM(biotr_i_nam(jn))//"_trvel" WRITE(numout,*) ' Tracer number : ', jn CALL CF_CREATE_VAR(TRIM(biotr_i_nam(jn))//"pc_sat", & "%sat, "//TRIM(biotr_i_nam(jn)), & TRIM(biotr_i_uni(jn)),"time","z_i_b","-","-" ) WRITE(numout,*) ' %sat dimension created ', & TRIM(biotr_i_nam(jn))//"pc_sat" ENDIF ! gases END DO ! jn !------------------ ! Carbonate system !------------------ IF ( ln_carbon ) THEN CALL CF_CREATE_VAR("CO2aq", "Bulk aqueous CO2 concentration", . "mmol m-3","time","z_i_b","-","-" ) WRITE(numout,*) ' CO2aq created ' CALL CF_CREATE_VAR("CO32m", "Bulk CO32- concentration", . "mmol m-3","time","z_i_b","-","-" ) WRITE(numout,*) ' CO32m created ' CALL CF_CREATE_VAR("HCO3m", "Bulk HCO3m concentration", . "mmol m-3","time","z_i_b","-","-" ) WRITE(numout,*) ' HCO3m created ' CALL CF_CREATE_VAR("pH", "Brine pH", . "-","time","z_i_b","-","-" ) WRITE(numout,*) ' brine pH created' CALL CF_CREATE_VAR("pCO2", "Brine pCO2", . "-","time","z_i_b","-","-" ) WRITE(numout,*) ' brine pCO2 created' ENDIF ! Chlorophyll a CALL CF_CREATE_VAR("Chla_bio", "Chlorophyll a on bio grid", & "mmol.m-3","time","z_i_b","-","-") WRITE(numout,*) ' Chla bio created ' ! Chlorophyll a CALL CF_CREATE_VAR("ChlC_bio", "Chl/C", & "mmol.m-3","time","z_i_b","-","-") WRITE(numout,*) ' ChlC_bio created ' CALL CF_CREATE_VAR("Chla_phy", "Chlorophyll a on phy grid", & "mmol.m-3","time","z_i_p","-","-" ) WRITE(numout,*) ' Chla phy created ' ! PAR CALL CF_CREATE_VAR("PAR","PAR on phy grid - top of layers", & "µE.m-2.s-1","time","z_i_p","-","-" ) WRITE(numout,*) ' PAR created ' ! PAR CALL CF_CREATE_VAR("PAR_bio","PAR on bio grid - top of layers", & "µE.m-2.s-1","time","z_i_b","-","-" ) WRITE(numout,*) ' PAR_BIO created ' ENDIF ! c_bio_model IF ( c_bio_model .EQ. 'KRILL' ) THEN IF ( ln_ikaite ) THEN CALL CF_CREATE_VAR("ika_rate","CaCO3 precip/dissol rate", . "mmol CaCO3 m-3 s-1","time","z_i_b","-","-" ) WRITE(numout,*) ' CaCO3 precip/dissol rate created ' CALL CF_CREATE_VAR("ika_omega","CaCO3 saturation state", . "-","time","z_i_b","-","-" ) WRITE(numout,*) ' CaCO3 saturation state created ' ENDIF IF ( flag_active(4) ) THEN ! Sources and sinks CALL CF_CREATE_VAR("syn","Algal synthesis", . "mmol C m-3 s-1","time","z_i_b","-","-" ) WRITE(numout,*) ' Algal growth created ' CALL CF_CREATE_VAR("rsp","Algal respiration", . "mmol C m-3 s-1","time","z_i_b","-","-" ) WRITE(numout,*) ' Algal respiration created ' CALL CF_CREATE_VAR("lys","Algal lysis", . "mmol C m-3 s-1","time","z_i_b","-","-" ) WRITE(numout,*) ' Algal lysis created ' CALL CF_CREATE_VAR("rem","Remineralization", . "mmol C m-3 s-1","time","z_i_b","-","-" ) WRITE(numout,*) ' Remineralization created ' CALL CF_CREATE_VAR("lim_lig","Light limitation", . "-","time","z_i_b","-","-" ) WRITE(numout,*) ' Light limitation created ' CALL CF_CREATE_VAR("lim_dsi","DSi limitation", . "-","time","z_i_b","-","-" ) WRITE(numout,*) ' DSi limitation created ' CALL CF_CREATE_VAR("lim_no3","NO3 limitation", . "-","time","z_i_b","-","-" ) WRITE(numout,*) ' NO3 limitation created ' CALL CF_CREATE_VAR("lim_po4","PO4 limitation", . "-","time","z_i_b","-","-" ) WRITE(numout,*) ' NO3 limitation created ' CALL CF_CREATE_VAR("lim_tem","Temp limitation", . "-","time","z_i_b","-","-" ) WRITE(numout,*) ' Temp limitation created ' CALL CF_CREATE_VAR("lim_sal","Sal limitation", . "-","time","z_i_b","-","-" ) WRITE(numout,*) ' Sal limitation created ' CALL CF_CREATE_VAR("divf_si","Flux divergence silicate", . "mmol Si m-3 s-1","time","z_i_b","-","-" ) WRITE(numout,*) ' Flux divergence silicate created ' CALL CF_CREATE_VAR("divf_n","Flux divergence nitrate", . "mmol N m-3 s-1","time","z_i_b","-","-" ) WRITE(numout,*) ' Flux divergence nitrate created ' ENDIF ! flag_active ENDIF ! c_bio_model !--------------- ! File creation !--------------- CALL CF_CREATE_FILE(filenc) ENDIF ! !-----------------------------------------------------------------------------! ! 2) Write in the netcdf !-----------------------------------------------------------------------------! ! WRITE(numout,*) ' Write into the NetCdf file ' ji = 1 !----------- ! Open file !----------- CALL CF_OPEN (filenc,id) !------------------- ! Write in the file !------------------- ! Time !------ CALL CF_WRITE (filenc, 'numt', numit-nstart+1, & 1, 1, 1, REAL(numit)) CALL CF_WRITE (filenc, 'doy', numit-nstart+1, & 1, 1, 1, REAL(doy)) CALL CF_WRITE (filenc, 'ts_m', numit-nstart+1, & 1, 1, 1, REAL(numit)/86400.0*REAL(ddtb)/30.0) CALL CF_WRITE (filenc, 'ts_d', numit-nstart+1, & 1, 1, 1, REAL(numit)/86400.*REAL(ddtb) ) ! Grids !------- ! vertical cotes, physical DO layer = 1, nlay_i dummy_vector(layer) = REAL( ht_i_b(ji) ) / REAL( nlay_i ) * & ( REAL( layer ) - 1./2. ) END DO CALL CF_WRITE (filenc, 'z_ip', numit-nstart+1, nlay_i, 1, 1, & dummy_vector ) ! vertical cotes, biological DO layer = 1, nlay_bio dummy_vector(layer) = REAL( z_i_bio(layer) ) END DO CALL CF_WRITE (filenc, 'z_ib', numit-nstart+1, nlay_bio, 1, 1, & dummy_vector ) IF ( ( c_grid .EQ. 'SL' ) .OR. ( c_grid .EQ. 'BA' ) ) & CALL CF_WRITE (filenc, 'hbio ', numit-nstart+1, & 1, 1, 1, REAL(h_bio)) ! Ice / snow thickness and variations !------------------------------------- CALL CF_WRITE (filenc, 'h_i ', numit-nstart+1, & 1, 1, 1, REAL(ht_i_b(ji))) CALL CF_WRITE (filenc, 'dhib', numit-nstart+1, & 1, 1, 1, & REAL(dh_i_bott(ji) / ddtb * 86400.0 * 100.0) ) CALL CF_WRITE (filenc, 'dhisu', numit-nstart+1, & 1, 1, 1, & REAL(dh_i_surf(ji) / ddtb * 86400.0 * 100.0) ) WRITE(numout,*) ' ice output, dh_snowice1: ', dh_snowice(ji) CALL CF_WRITE (filenc, 'dhisi', numit-nstart+1, & 1, 1, 1, & REAL(dh_snowice(ji) / ddtb * 86400.0 * 100.0) ) WRITE(numout,*) ' ice output, dh_snowice2: ', & REAL(dh_snowice(ji) / ddtb * 86400.0 * 100.0) CALL CF_WRITE (filenc, 'h_s ', numit-nstart+1, & 1, 1, 1, REAL(ht_s_b(ji))) CALL CF_WRITE (filenc, 'dhs', numit-nstart+1, & 1, 1, 1, & REAL(dh_s_tot(ji) / ddtb * 86400.0 * 100.0) ) CALL CF_WRITE (filenc, 'uml ', numit-nstart+1, & 1, 1, 1, REAL(ht_w_b(ji))) CALL CF_WRITE (filenc, 't_su', numit-nstart+1, & 1, 1, 1, REAL(t_su_b(ji) - & 273.16) ) CALL CF_WRITE (filenc, 'fsb', numit-nstart+1, & 1, 1, 1, REAL(fsb) ) CALL CF_WRITE (filenc, 'fsbp', numit-nstart+1, & 1, 1, 1, REAL(fsbp) ) CALL CF_WRITE (filenc, 's_w', numit-nstart+1, & 1, 1, 1, REAL(s_w) ) CALL CF_WRITE (filenc, 'v_w', numit-nstart+1, & 1, 1, 1, REAL(v_w) ) ! Forcing !--------- CALL CF_WRITE (filenc, 'Flwd', numit-nstart+1, 1, 1, 1, & REAL( ratbqb(ji) ) ) CALL CF_WRITE (filenc, 'Flwu', numit-nstart+1, 1, 1, 1, & - REAL(fratsb(ji) - ratbqb(ji)) ) CALL CF_WRITE (filenc, 'F_sw', numit-nstart+1, 1, 1, 1, & REAL(fsolgb(ji) / ( 1.0 - albgb(ji) ) ) ) CALL CF_WRITE (filenc, 'Fswn', numit-nstart+1, 1, 1, 1, & REAL(fsolgb(ji) ) ) CALL CF_WRITE (filenc, 'F_sh', numit-nstart+1, 1, 1, 1, & REAL(fcsb(ji)) ) CALL CF_WRITE (filenc, 'F_lh', numit-nstart+1, 1, 1, 1, & REAL(fleb(ji)) ) CALL CF_WRITE (filenc, 'albe', numit-nstart+1, 1, 1, 1, & REAL(albgb(ji)) ) CALL CF_WRITE (filenc, 'Tair', numit-nstart+1, 1, 1, 1, & REAL(tabqb(ji) - 273.15 )) CALL CF_WRITE (filenc, 'qair', numit-nstart+1, 1, 1, 1, & REAL(qabqb(ji)) ) CALL CF_WRITE (filenc, 'wspd', numit-nstart+1, 1, 1, 1, & REAL(vabqb(ji)) ) CALL CF_WRITE (filenc, 'qsfc', numit-nstart+1, 1, 1, 1, & REAL(qsfcb(ji)) ) CALL CF_WRITE (filenc, 'tdew', numit-nstart+1, 1, 1, 1, & REAL(tdewb(ji))*100.0 ) CALL CF_WRITE (filenc, 'cldf', numit-nstart+1, 1, 1, 1, & REAL(cldqb(ji)) ) CALL CF_WRITE (filenc, 'sfal', numit-nstart+1, 1, 1, 1, & REAL(hnpbqb(ji)/ddtb) ) CALL CF_WRITE (filenc, 'pres', numit-nstart+1, 1, 1, 1, & REAL(psbqb(ji)) ) ! Inner ice variables !--------------------- ! temperatures DO layer = 1, nlay_i dummy_vector(layer) = REAL(t_i_b(ji,layer) - 273.16 ) END DO CALL CF_WRITE (filenc, 't_i ', numit-nstart+1, nlay_i, 1, 1, & dummy_vector ) ! salinity DO layer = 1, nlay_i dummy_vector(layer) = REAL( s_i_b(ji,layer) ) END DO CALL CF_WRITE (filenc, 's_i ', numit-nstart+1, nlay_i, 1, 1, & dummy_vector ) ! brine volume DO layer = 1, nlay_i dummy_vector(layer) = REAL ( - tmut * s_i_b(ji,layer) / & ( t_i_b(ji,layer) - 273.16) ) * 100.0 END DO CALL CF_WRITE (filenc, 'e_i ', numit-nstart+1, nlay_i, 1, 1, & dummy_vector ) ! brine volume bio DO layer = 1, nlay_bio dummy_vector(layer) = REAL ( - tmut * s_i_bio(layer) / & ( t_i_bio(layer) - 273.16) ) * 100.0 END DO CALL CF_WRITE (filenc, 'e_i_bio ', numit-nstart+1, nlay_bio, 1, 1, & dummy_vector ) ! temperature bio DO layer = 1, nlay_bio dummy_vector(layer) = t_i_bio(layer) - 273.16 END DO CALL CF_WRITE (filenc, 't_i_bio ', numit-nstart+1, nlay_bio, 1, 1, & dummy_vector ) ! brine volume bio DO layer = 1, nlay_bio dummy_vector(layer) = s_i_bio(layer) END DO CALL CF_WRITE (filenc, 's_i_bio ', numit-nstart+1, nlay_bio, 1, 1, & dummy_vector ) ! brine salinity bio DO layer = 1, nlay_bio ! dummy_vector(layer) = - ( t_i_bio(layer) - 273.16 ) / tmut ztc = ( t_i_bio(layer) - 273.15 ) zt2 = ztc * ztc ; zt3 = zt2 * ztc dummy_vector(layer) = -21.4*ztc -0.886*zt2 - 0.0170*zt3 END DO CALL CF_WRITE (filenc, 'sbr_bio ', numit-nstart+1, nlay_bio, 1, 1, & dummy_vector ) ! Rayleigh number DO layer = 1, nlay_i dummy_vector(layer) = rayleigh(layer) END DO CALL CF_WRITE (filenc, 'ra', numit-nstart+1, nlay_i, 1, 1, & dummy_vector ) ! Salt diffusivity in brine DO layer = 1, nlay_i dummy_vector(layer) = diff_br(layer) END DO CALL CF_WRITE (filenc, 'diff', numit-nstart+1, nlay_i, 1, 1, & dummy_vector ) ! Effective permeability DO layer = 1, nlay_i dummy_vector(layer) = perm_eff(layer) END DO CALL CF_WRITE (filenc, 'perm_eff', numit-nstart+1, nlay_i, 1, 1, & dummy_vector ) ! Advection velocity DO layer = 1, nlay_i dummy_vector(layer) = w_adv_br(layer) END DO CALL CF_WRITE (filenc, 'w_adv_br', numit-nstart+1, nlay_i, 1, 1, & dummy_vector ) ! Upwelling salt flux from lower layer DO layer = 1, nlay_i dummy_vector(layer) = fsupw2(layer) END DO CALL CF_WRITE (filenc, 'fsupw2', numit-nstart+1, nlay_i, 1, 1, & dummy_vector ) ! Upwelling salt flux to upper layer DO layer = 1, nlay_i dummy_vector(layer) = fsupw1(layer) END DO CALL CF_WRITE (filenc, 'fsupw1', numit-nstart+1, nlay_i, 1, 1, & dummy_vector ) ! Downwelling salt flux into brine channels DO layer = 1, nlay_i dummy_vector(layer) = fsdwn(layer) END DO CALL CF_WRITE (filenc, 'fsdwn', numit-nstart+1, nlay_i, 1, 1, & dummy_vector ) ! Change in salt content DO layer = 1, nlay_i dummy_vector(layer) = dzdsdt(layer) END DO CALL CF_WRITE (filenc, 'dzdsdt', numit-nstart+1, nlay_i, 1, 1, & dummy_vector ) ! snow temperature DO layer = 1, nlay_s dummy_vector(layer) = REAL(t_s_b(ji,layer) - 273.16 ) END DO CALL CF_WRITE (filenc, 't_s ', numit-nstart+1, nlay_s, 1, 1, & dummy_vector ) ! Radiative transfer !-------------------- ! Transmitted radiation in the ice CALL CF_WRITE (filenc, 'T_is', numit-nstart+1, & 1, 1, 1, REAL(ftrice) ) CALL CF_WRITE (filenc, 'T_oc', numit-nstart+1, & 1, 1, 1, REAL(ftroce) ) ! Absorbed radiation in snow, physically DO layer = 1, nlay_s dummy_vector(layer) = REAL(radab_s(layer)) END DO CALL CF_WRITE (filenc, 'A_s', numit-nstart+1, nlay_s, 1, 1, & dummy_vector ) ! Absorbed radiation in ice, physically DO layer = 1, nlay_i dummy_vector(layer) = REAL(radab_phy_i(layer)) END DO CALL CF_WRITE (filenc, 'A_ip', numit-nstart+1, nlay_i, 1, 1, & dummy_vector ) ! Absorbed radiation in ice, biologically DO layer = 1, nlay_i dummy_vector(layer) = REAL(radab_alg_i(layer)) END DO CALL CF_WRITE (filenc, 'A_ib', numit-nstart+1, nlay_i, 1, 1, & dummy_vector ) IF ( c_bio_model .EQ. 'KRILL' ) THEN ! Biological variables !---------------------- ! tracer brine concentration DO jn = 1, ntra_bio ! tracer brine concentration IF ( flag_diff(jn) .AND. flag_active(jn) ) THEN DO layer = 1, nlay_bio dummy_vector(layer) = REAL( c_i_bio(jn,layer) ) END DO WRITE(numout,*) ' Tracer number : ', jn WRITE(numout,*) ' dummy_vector : ', & ( dummy_vector(layer), layer = 1, nlay_bio ) CALL CF_WRITE (filenc, TRIM(biotr_i_nam(jn))//"d", & numit-nstart+1, nlay_bio, 1, 1, & dummy_vector ) ENDIF ! tracer bulk ice concentration IF ( flag_active(jn) ) THEN DO layer = 1, nlay_bio dummy_vector(layer) = REAL( cbu_i_bio(jn,layer) ) END DO WRITE(numout,*) ' Tracer number : ', jn WRITE(numout,*) ' dummy_vector : ', & ( dummy_vector(layer), layer = 1, nlay_bio ) CALL CF_WRITE (filenc, TRIM(biotr_i_nam(jn))//"b", & numit-nstart+1, nlay_bio, 1, 1, & dummy_vector ) WRITE(numout,*) ' Tracer number : ', jn WRITE(numout,*) ' dummy_vector : ', & REAL( ct_i_bio(jn) ) CALL CF_WRITE (filenc, TRIM(biotr_i_nam(jn))//"t", & numit-nstart+1, 1, 1, 1, & REAL( ct_i_bio(jn) ) ) WRITE(numout,*) ' Tracer number : ', jn WRITE(numout,*) ' dummy_vector : ', & REAL( c_w_bio(jn) ) CALL CF_WRITE (filenc, TRIM(biotr_i_nam(jn))//"w", & numit-nstart+1, 1, 1, 1, & REAL( c_w_bio(jn) ) ) WRITE(numout,*) ' Tracer number : ', jn WRITE(numout,*) ' dummy_vector : ', & REAL( fcb(jn) ) CALL CF_WRITE (filenc, "F"//TRIM(biotr_i_nam(jn)), & numit-nstart+1, 1, 1, 1, & REAL( fcb(jn) ) ) WRITE(numout,*) ' Tracer number : ', jn WRITE(numout,*) ' dummy_vector : ', & REAL( fcbp(jn) ) CALL CF_WRITE (filenc, "F"//TRIM(biotr_i_nam(jn))//"b", & numit-nstart+1, 1, 1, 1, & REAL( fcbp(jn) ) ) WRITE(numout,*) ' Tracer number : ', jn WRITE(numout,*) ' dummy_vector : ', & REAL( fcsi(jn) ) CALL CF_WRITE (filenc, "F"//TRIM(biotr_i_nam(jn))//"si", & numit-nstart+1, 1, 1, 1, & REAL( fcsi(jn) ) ) WRITE(numout,*) ' Tracer number : ', jn WRITE(numout,*) ' dummy_vector : ', & REAL( fcb_max(jn) ) CALL CF_WRITE (filenc, "F"//TRIM(biotr_i_nam(jn))//"bmax", & numit-nstart+1, 1, 1, 1, & REAL( fcb_max(jn) ) ) IF ( biotr_i_typ(jn) .EQ. 'gas' ) THEN WRITE(numout,*) ' GAS ' WRITE(numout,*) ' Tracer number : ', jn WRITE(numout,*) ' dummy_vector : ', & REAL( fgas(jn) ) CALL CF_WRITE (filenc, "F"//TRIM(biotr_i_nam(jn))//"_atm", & numit-nstart+1, 1, 1, 1, & REAL( fgas(jn) ) ) DO layer = 1, nlay_bio dummy_vector(layer) = REAL( cbub_i_bio(jn,layer) ) END DO WRITE(numout,*) ' Tracer number : ', jn WRITE(numout,*) ' dummy_vector : ', & ( dummy_vector(layer), layer = 1, nlay_bio ) CALL CF_WRITE (filenc, TRIM(biotr_i_nam(jn))//"bub", & numit-nstart+1, nlay_bio, 1, 1, & dummy_vector ) DO layer = 1, nlay_bio dummy_vector(layer) = REAL( pc_sat(jn,layer) ) END DO WRITE(numout,*) ' Tracer number : ', jn WRITE(numout,*) ' dummy_vector : ', & ( dummy_vector(layer), layer = 1, nlay_bio ) CALL CF_WRITE (filenc, TRIM(biotr_i_nam(jn))//"pc_sat", & numit-nstart+1, nlay_bio, 1, 1, & dummy_vector ) WRITE(numout,*) ' GAS ' WRITE(numout,*) ' Tracer number : ', jn WRITE(numout,*) ' dummy_vector : ', & REAL( f_bub(jn) ) CALL CF_WRITE (filenc, "F"//TRIM(biotr_i_nam(jn))//"_bub", & numit-nstart+1, 1, 1, 1, & REAL( f_bub(jn) ) ) WRITE(numout,*) ' GAS ' WRITE(numout,*) ' Tracer number : ', jn WRITE(numout,*) ' dummy_vector : ', & REAL( gas_trvel(jn) ) CALL CF_WRITE (filenc, TRIM(biotr_i_nam(jn))//"_trvel", & numit-nstart+1, 1, 1, 1, & REAL( gas_trvel(jn) ) ) ENDIF ! biotr_i_typ ENDIF ! flag_active END DO ! jn !------------------ ! Carbonate system !------------------ IF ( ln_carbon ) THEN DO layer = 1, nlay_bio dummy_vector(layer) = REAL(CO2aq(layer)) END DO CALL CF_WRITE (filenc, 'CO2aq', numit-nstart+1, nlay_i, 1, 1, & dummy_vector ) DO layer = 1, nlay_bio dummy_vector(layer) = REAL(CO32m(layer)) END DO CALL CF_WRITE (filenc, 'CO32m', numit-nstart+1, nlay_i, 1, 1, & dummy_vector ) DO layer = 1, nlay_bio dummy_vector(layer) = REAL(HCO3m(layer)) END DO CALL CF_WRITE (filenc, 'HCO3m', numit-nstart+1, nlay_i, 1, 1, & dummy_vector ) DO layer = 1, nlay_bio dummy_vector(layer) = REAL(pH(layer)) END DO CALL CF_WRITE (filenc, 'pH', numit-nstart+1, nlay_i, 1, 1, & dummy_vector ) DO layer = 1, nlay_bio dummy_vector(layer) = REAL(pCO2(layer)) END DO CALL CF_WRITE (filenc, 'pCO2', numit-nstart+1, nlay_i, 1, 1, & dummy_vector ) ENDIF ! Chla, physical grid DO layer = 1, nlay_i dummy_vector(layer) = REAL(chla_i(layer)) END DO CALL CF_WRITE (filenc, 'Chla_phy', numit-nstart+1, nlay_i, 1, 1, & dummy_vector ) ! ChlC_bio DO layer = 1, nlay_bio dummy_vector(layer) = REAL(ChlC_bio(layer)) END DO CALL CF_WRITE (filenc, 'ChlC_bio', numit-nstart+1, nlay_i, 1, 1, & dummy_vector ) ! Chla, biological grid DO layer = 1, nlay_bio dummy_vector(layer) = REAL(chla_i_bio(layer)) END DO CALL CF_WRITE (filenc, 'Chla_bio', numit-nstart+1, nlay_bio, 1, 1, & dummy_vector ) ! PAR DO layer = 1, nlay_i dummy_vector(layer) = REAL(par(layer)) END DO CALL CF_WRITE (filenc, 'PAR', numit-nstart+1, nlay_i, 1, 1, & dummy_vector ) ! PAR_bio DO layer = 1, nlay_bio dummy_vector(layer) = REAL(par_bio(layer)) END DO CALL CF_WRITE (filenc, 'PAR_bio', numit-nstart+1, nlay_bio, 1, 1, & dummy_vector ) ENDIF IF ( c_bio_model .EQ. 'KRILL' ) THEN !------------------- ! Sources and sinks !------------------- IF ( ln_ikaite ) THEN ! CaCO3 precipitation / dissolution rate DO layer = 1, nlay_bio dummy_vector(layer) = REAL(ika_rate(layer)) END DO CALL CF_WRITE (filenc, 'ika_rate', numit-nstart+1, nlay_bio, 1,1, & dummy_vector ) ! CaCO3 saturation state DO layer = 1, nlay_bio dummy_vector(layer) = REAL(ika_omega(layer)) END DO CALL CF_WRITE (filenc, 'ika_omega', numit-nstart+1, nlay_bio, 1,1, & dummy_vector ) ENDIF ! ln_ikaite IF ( flag_active(4) ) THEN ! synthesis DO layer = 1, nlay_bio dummy_vector(layer) = REAL(syn_bio(layer)) END DO CALL CF_WRITE (filenc, 'syn', numit-nstart+1, nlay_bio, 1, 1, & dummy_vector ) ! respiration DO layer = 1, nlay_bio dummy_vector(layer) = REAL(rsp_bio(layer)) END DO CALL CF_WRITE (filenc, 'rsp', numit-nstart+1, nlay_bio, 1, 1, & dummy_vector ) ! lysis DO layer = 1, nlay_bio dummy_vector(layer) = REAL(lys_bio(layer)) END DO CALL CF_WRITE (filenc, 'lys', numit-nstart+1, nlay_bio, 1, 1, & dummy_vector ) ! remineralization DO layer = 1, nlay_bio dummy_vector(layer) = REAL(rem_bio(layer)) END DO CALL CF_WRITE (filenc, 'rem', numit-nstart+1, nlay_bio, 1, 1, & dummy_vector ) ! Light limitation DO layer = 1, nlay_bio dummy_vector(layer) = REAL(lim_lig(layer)) END DO CALL CF_WRITE (filenc, 'lim_lig', numit-nstart+1, nlay_bio, 1, 1, & dummy_vector ) ! DSi limitation DO layer = 1, nlay_bio dummy_vector(layer) = REAL(lim_dsi(layer)) END DO CALL CF_WRITE (filenc, 'lim_dsi', numit-nstart+1, nlay_bio, 1, 1, & dummy_vector ) ! NO3 limitation DO layer = 1, nlay_bio dummy_vector(layer) = REAL(lim_no3(layer)) END DO CALL CF_WRITE (filenc, 'lim_no3', numit-nstart+1, nlay_bio, 1, 1, & dummy_vector ) ! PO4 limitation DO layer = 1, nlay_bio dummy_vector(layer) = REAL(lim_po4(layer)) END DO CALL CF_WRITE (filenc, 'lim_po4', numit-nstart+1, nlay_bio, 1, 1, & dummy_vector ) ! Temperature limitation DO layer = 1, nlay_bio dummy_vector(layer) = REAL(lim_tem(layer)) END DO CALL CF_WRITE (filenc, 'lim_tem', numit-nstart+1, nlay_bio, 1, 1, & dummy_vector ) ! Salinity limitation DO layer = 1, nlay_bio dummy_vector(layer) = REAL(lim_sal(layer)) END DO CALL CF_WRITE (filenc, 'lim_sal', numit-nstart+1, nlay_bio, 1, 1, & dummy_vector ) ! Flux divergence, silicate DO layer = 1, nlay_bio dummy_vector(layer) = REAL(diag_divf_bio(1,layer)) END DO CALL CF_WRITE (filenc, 'divf_si', numit-nstart+1, nlay_bio, 1, 1, & dummy_vector ) ! Flux divergence, nitrate DO layer = 1, nlay_bio dummy_vector(layer) = REAL(diag_divf_bio(7,layer)) END DO CALL CF_WRITE (filenc, 'divf_n', numit-nstart+1, nlay_bio, 1, 1, & dummy_vector ) ENDIF ! flag_active ENDIF ! c_bio_model !------------ ! Close file !------------ CALL CF_CLOSE (filenc) ! !-----------------------------------------------------------------------------! ! WRITE(numout,*) END SUBROUTINE