c_ --------------------------------------------------------------------- c_ RCS lines preceded by "c_ " c_ --------------------------------------------------------------------- c_ c_ $Source: /home/orr/WWW/Abiotic/distrib/RCS/write_nc_Abiotic_puls_year_2D.f,v $ c_ $Revision: 1.3 $ c_ $Date: 1999/10/19 10:36:44 $ ; $State: Exp $ c_ $Author: jomce $ ; $Locker: $ c_ c_ --------------------------------------------------------------------- c_ $Log: write_nc_Abiotic_puls_year_2D.f,v $ c_ Revision 1.3 1999/10/19 10:36:44 jomce c_ Split RCS file and revision indicator across two lines (< 72 chars) c_ c_ Revision 1.2 1999/10/19 09:47:29 jomce c_ Added string to identify RCS filename and revision c_ c_ Revision 1.1 1999/10/04 12:38:48 orr c_ Initial revision c_ c_ --------------------------------------------------------------------- c_ C*********************************************************************** C C NAME: WRITE_NC_Abiotic_puls_year_2D C C INPUT: C group= group code (ex: IPSL) C production= production (model and version ex: OPA 8.1) C imt= dimension C jmt= dimension C year= year of simulation [years] C nb_seconds_per_year= following your model year [s] C nb_timesteps_per_year= following your model timestep C C pCO2surf= Surface ocean pCO2 [uatm] C dpCO2= Delta pCO2 [uatm] C F= Mean Gas Flux of DIC [mol/(m^2*s)] C Fv= Mean Virtual Gas Flux of DIC [mol/(m^2*s)] C DICs= Surface DIC [mol/m^3] C DICi= Vertical Integral of DIC [mol/m^2] C CF= Cumulative Gas Flux of DIC since 1765 [mol/m^2] C CFv= Cumulative Virtual Gas Flux of DIC since 1765 [mol/m^2] C C OUTPUT FILE: C A netcdf file (clobbed if exists) with C the filename group_Abiotic_puls_year_2D.nc C C*********************************************************************** SUBROUTINE WRITE_NC_Abiotic_puls_year_2D( & group,production, & imt,jmt, & year,nb_seconds_per_year,nb_timesteps_per_year, & pCO2surf,dpCO2,F,Fv, & DICs,DICi, & CF,CFv) C No implicit declarations IMPLICIT NONE C Arguments CHARACTER*(*) group CHARACTER*(*) production INTEGER*4 imt,jmt INTEGER*4 year INTEGER*4 nb_seconds_per_year INTEGER*4 nb_timesteps_per_year REAL*4 time REAL*4 pCO2surf(imt,jmt) REAL*4 dpCO2(imt,jmt) REAL*4 F(imt,jmt) REAL*4 Fv(imt,jmt) REAL*4 DICs(imt,jmt) REAL*4 DICi(imt,jmt) REAL*4 CF(imt,jmt) REAL*4 CFv(imt,jmt) C Constants REAL*4 missing_value PARAMETER (missing_value=-1.E+34) C Local variables CHARACTER*256 string256,filename CHARACTER*4 string4 C Function INTEGER*4 LEN_TRIM C NetCDF variables INCLUDE 'netcdf.inc' INTEGER*4 NC_ID INTEGER*4 STATUS INTEGER*4 LON_DIM INTEGER*4 LAT_DIM INTEGER*4 TIME_DIM,TIME_ID INTEGER*4 pCO2surf_ID,dpCO2_ID INTEGER*4 F_ID,Fv_ID INTEGER*4 DICs_ID,DICi_ID INTEGER*4 CF_ID,CFv_ID INTEGER*4 DIMS_3D(3) C~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C Build the NetCDF filename C~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ WRITE(string4,'(I4.4)') year filename=group//'_Abiotic_puls_'//string4//'_2D.nc' C~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C Open the NetCDF file C~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ STATUS=NF_CREATE(filename,NF_CLOBBER,NC_ID) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C Define dimensions C~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ STATUS=NF_DEF_DIM(NC_ID,'x',imt,LON_DIM) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) STATUS=NF_DEF_DIM(NC_ID,'y',jmt,LAT_DIM) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) STATUS=NF_DEF_DIM(NC_ID,'time',1,TIME_DIM) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C Define variables C~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ STATUS=NF_DEF_VAR(NC_ID,'time',NF_FLOAT, & 1,TIME_DIM,TIME_ID) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C--------------------------------------------------------- DIMS_3D(1)=LON_DIM DIMS_3D(2)=LAT_DIM DIMS_3D(3)=TIME_DIM STATUS=NF_DEF_VAR(NC_ID,'pCO2surf',NF_FLOAT, & 3,DIMS_3D,pCO2surf_ID) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C--------------------------------------------------------- STATUS=NF_DEF_VAR(NC_ID,'dpCO2',NF_FLOAT, & 3,DIMS_3D,dpCO2_ID) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C--------------------------------------------------------- STATUS=NF_DEF_VAR(NC_ID,'F',NF_FLOAT, & 3,DIMS_3D,F_ID) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C--------------------------------------------------------- STATUS=NF_DEF_VAR(NC_ID,'Fv',NF_FLOAT, & 3,DIMS_3D,Fv_ID) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C--------------------------------------------------------- STATUS=NF_DEF_VAR(NC_ID,'DICs',NF_FLOAT, & 3,DIMS_3D,DICs_ID) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C--------------------------------------------------------- STATUS=NF_DEF_VAR(NC_ID,'DICi',NF_FLOAT, & 3,DIMS_3D,DICi_ID) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C--------------------------------------------------------- STATUS=NF_DEF_VAR(NC_ID,'CF',NF_FLOAT, & 3,DIMS_3D,CF_ID) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C--------------------------------------------------------- STATUS=NF_DEF_VAR(NC_ID,'CFv',NF_FLOAT, & 3,DIMS_3D,CFv_ID) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C Define global attributes C~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ string256='$RCSfile: write_nc_Abiotic_puls_year_2D.f,v $' & //'$Revision: 1.3 $' STATUS=NF_PUT_ATT_TEXT(NC_ID,NF_GLOBAL, & 'output_routine',LEN_TRIM(string256),string256) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C--------------------------------------------------------- string256='GDT 1.2' STATUS=NF_PUT_ATT_TEXT(NC_ID,NF_GLOBAL,'Conventions', & LEN_TRIM(string256),string256) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C--------------------------------------------------------- string256=filename STATUS=NF_PUT_ATT_TEXT(NC_ID,NF_GLOBAL,'file_name', & LEN_TRIM(string256),string256) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C--------------------------------------------------------- string256=group//'_grid.nc' STATUS=NF_PUT_ATT_TEXT(NC_ID,NF_GLOBAL,'associate_file', & LEN_TRIM(string256),string256) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C--------------------------------------------------------- string256='OCMIP' STATUS=NF_PUT_ATT_TEXT(NC_ID,NF_GLOBAL,'project', & LEN_TRIM(string256),string256) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C--------------------------------------------------------- string256=group STATUS=NF_PUT_ATT_TEXT(NC_ID,NF_GLOBAL,'institution', & LEN_TRIM(string256),string256) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C--------------------------------------------------------- string256=production STATUS=NF_PUT_ATT_TEXT(NC_ID,NF_GLOBAL,'production', & LEN_TRIM(string256),string256) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C Define variable attributes C~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ string256='year' STATUS=NF_PUT_ATT_TEXT(NC_ID,TIME_ID,'long_name', & LEN_TRIM(string256),string256) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) string256='calendar_year as %Y' STATUS=NF_PUT_ATT_TEXT(NC_ID,TIME_ID,'units', & LEN_TRIM(string256),string256) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) STATUS=NF_PUT_ATT_INT(NC_ID,TIME_ID,'nb_seconds_per_year', & NF_INT,1,nb_seconds_per_year) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) STATUS=NF_PUT_ATT_INT(NC_ID,TIME_ID,'nb_timesteps_per_year', & NF_INT,1,nb_timesteps_per_year) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C--------------------------------------------------------- string256='Surface ocean pCO2' STATUS=NF_PUT_ATT_TEXT(NC_ID,pCO2surf_ID,'long_name', & LEN_TRIM(string256),string256) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) string256='uatm' STATUS=NF_PUT_ATT_TEXT(NC_ID,pCO2surf_ID,'units', & LEN_TRIM(string256),string256) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) STATUS=NF_PUT_ATT_REAL(NC_ID,pCO2surf_ID,'missing_value', & NF_FLOAT,1,missing_value) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C--------------------------------------------------------- string256='Delta pCO2' STATUS=NF_PUT_ATT_TEXT(NC_ID,dpCO2_ID,'long_name', & LEN_TRIM(string256),string256) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) string256='uatm' STATUS=NF_PUT_ATT_TEXT(NC_ID,dpCO2_ID,'units', & LEN_TRIM(string256),string256) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) STATUS=NF_PUT_ATT_REAL(NC_ID,dpCO2_ID,'missing_value', & NF_FLOAT,1,missing_value) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C--------------------------------------------------------- string256='Mean Gas Flux of DIC' STATUS=NF_PUT_ATT_TEXT(NC_ID,F_ID,'long_name', & LEN_TRIM(string256),string256) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) string256='mol/(m^2*s)' STATUS=NF_PUT_ATT_TEXT(NC_ID,F_ID,'units', & LEN_TRIM(string256),string256) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) STATUS=NF_PUT_ATT_REAL(NC_ID,F_ID,'missing_value', & NF_FLOAT,1,missing_value) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C--------------------------------------------------------- string256='Mean Virtual Gas Flux of DIC' STATUS=NF_PUT_ATT_TEXT(NC_ID,Fv_ID,'long_name', & LEN_TRIM(string256),string256) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) string256='mol/(m^2*s)' STATUS=NF_PUT_ATT_TEXT(NC_ID,Fv_ID,'units', & LEN_TRIM(string256),string256) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) STATUS=NF_PUT_ATT_REAL(NC_ID,Fv_ID,'missing_value', & NF_FLOAT,1,missing_value) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C--------------------------------------------------------- string256='Surface DIC' STATUS=NF_PUT_ATT_TEXT(NC_ID,DICs_ID,'long_name', & LEN_TRIM(string256),string256) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) string256='mol/m^3' STATUS=NF_PUT_ATT_TEXT(NC_ID,DICs_ID,'units', & LEN_TRIM(string256),string256) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) STATUS=NF_PUT_ATT_REAL(NC_ID,DICs_ID,'missing_value', & NF_FLOAT,1,missing_value) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C--------------------------------------------------------- string256='Vertical Integral of DIC' STATUS=NF_PUT_ATT_TEXT(NC_ID,DICi_ID,'long_name', & LEN_TRIM(string256),string256) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) string256='mol/m^2' STATUS=NF_PUT_ATT_TEXT(NC_ID,DICi_ID,'units', & LEN_TRIM(string256),string256) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) STATUS=NF_PUT_ATT_REAL(NC_ID,DICi_ID,'missing_value', & NF_FLOAT,1,missing_value) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C--------------------------------------------------------- string256='Cumulative Gas Flux of DIC' & //' since 1765' STATUS=NF_PUT_ATT_TEXT(NC_ID,CF_ID,'long_name', & LEN_TRIM(string256),string256) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) string256='mol/m^2' STATUS=NF_PUT_ATT_TEXT(NC_ID,CF_ID,'units', & LEN_TRIM(string256),string256) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) STATUS=NF_PUT_ATT_REAL(NC_ID,CF_ID,'missing_value', & NF_FLOAT,1,missing_value) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C--------------------------------------------------------- string256='Cumulative Virtual Gas Flux of DIC' & //' since 1765' STATUS=NF_PUT_ATT_TEXT(NC_ID,CFv_ID,'long_name', & LEN_TRIM(string256),string256) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) string256='mol/m^2' STATUS=NF_PUT_ATT_TEXT(NC_ID,CFv_ID,'units', & LEN_TRIM(string256),string256) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) STATUS=NF_PUT_ATT_REAL(NC_ID,CFv_ID,'missing_value', & NF_FLOAT,1,missing_value) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C End of define mode C~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ STATUS=NF_ENDDEF(NC_ID) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C Write data to file C~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ time=REAL(year) STATUS=NF_PUT_VAR_REAL(NC_ID,TIME_ID,time) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C--------------------------------------------------------- STATUS=NF_PUT_VAR_REAL(NC_ID,pCO2surf_ID,pCO2surf) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C--------------------------------------------------------- STATUS=NF_PUT_VAR_REAL(NC_ID,dpCO2_ID,dpCO2) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C--------------------------------------------------------- STATUS=NF_PUT_VAR_REAL(NC_ID,F_ID,F) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C--------------------------------------------------------- STATUS=NF_PUT_VAR_REAL(NC_ID,Fv_ID,Fv) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C--------------------------------------------------------- STATUS=NF_PUT_VAR_REAL(NC_ID,DICs_ID,DICs) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C--------------------------------------------------------- STATUS=NF_PUT_VAR_REAL(NC_ID,DICi_ID,DICi) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C--------------------------------------------------------- STATUS=NF_PUT_VAR_REAL(NC_ID,CF_ID,CF) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C--------------------------------------------------------- STATUS=NF_PUT_VAR_REAL(NC_ID,CFv_ID,CFv) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) C~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C Close the NetCDF file C~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ STATUS=NF_CLOSE(NC_ID) IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) END